mediapipe-nightly 0.10.21.post20241223__cp312-cp312-manylinux_2_28_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (593) hide show
  1. mediapipe/__init__.py +26 -0
  2. mediapipe/calculators/__init__.py +0 -0
  3. mediapipe/calculators/audio/__init__.py +0 -0
  4. mediapipe/calculators/audio/mfcc_mel_calculators_pb2.py +33 -0
  5. mediapipe/calculators/audio/rational_factor_resample_calculator_pb2.py +33 -0
  6. mediapipe/calculators/audio/spectrogram_calculator_pb2.py +37 -0
  7. mediapipe/calculators/audio/stabilized_log_calculator_pb2.py +31 -0
  8. mediapipe/calculators/audio/time_series_framer_calculator_pb2.py +33 -0
  9. mediapipe/calculators/core/__init__.py +0 -0
  10. mediapipe/calculators/core/bypass_calculator_pb2.py +31 -0
  11. mediapipe/calculators/core/clip_vector_size_calculator_pb2.py +31 -0
  12. mediapipe/calculators/core/concatenate_vector_calculator_pb2.py +31 -0
  13. mediapipe/calculators/core/constant_side_packet_calculator_pb2.py +39 -0
  14. mediapipe/calculators/core/dequantize_byte_array_calculator_pb2.py +31 -0
  15. mediapipe/calculators/core/flow_limiter_calculator_pb2.py +32 -0
  16. mediapipe/calculators/core/gate_calculator_pb2.py +33 -0
  17. mediapipe/calculators/core/get_vector_item_calculator_pb2.py +31 -0
  18. mediapipe/calculators/core/graph_profile_calculator_pb2.py +31 -0
  19. mediapipe/calculators/core/packet_cloner_calculator_pb2.py +31 -0
  20. mediapipe/calculators/core/packet_resampler_calculator_pb2.py +33 -0
  21. mediapipe/calculators/core/packet_thinner_calculator_pb2.py +33 -0
  22. mediapipe/calculators/core/quantize_float_vector_calculator_pb2.py +31 -0
  23. mediapipe/calculators/core/sequence_shift_calculator_pb2.py +31 -0
  24. mediapipe/calculators/core/split_vector_calculator_pb2.py +33 -0
  25. mediapipe/calculators/image/__init__.py +0 -0
  26. mediapipe/calculators/image/bilateral_filter_calculator_pb2.py +31 -0
  27. mediapipe/calculators/image/feature_detector_calculator_pb2.py +31 -0
  28. mediapipe/calculators/image/image_clone_calculator_pb2.py +31 -0
  29. mediapipe/calculators/image/image_cropping_calculator_pb2.py +33 -0
  30. mediapipe/calculators/image/image_transformation_calculator_pb2.py +38 -0
  31. mediapipe/calculators/image/mask_overlay_calculator_pb2.py +33 -0
  32. mediapipe/calculators/image/opencv_encoded_image_to_image_frame_calculator_pb2.py +31 -0
  33. mediapipe/calculators/image/opencv_image_encoder_calculator_pb2.py +35 -0
  34. mediapipe/calculators/image/recolor_calculator_pb2.py +34 -0
  35. mediapipe/calculators/image/rotation_mode_pb2.py +29 -0
  36. mediapipe/calculators/image/scale_image_calculator_pb2.py +34 -0
  37. mediapipe/calculators/image/segmentation_smoothing_calculator_pb2.py +31 -0
  38. mediapipe/calculators/image/set_alpha_calculator_pb2.py +31 -0
  39. mediapipe/calculators/image/warp_affine_calculator_pb2.py +36 -0
  40. mediapipe/calculators/internal/__init__.py +0 -0
  41. mediapipe/calculators/internal/callback_packet_calculator_pb2.py +33 -0
  42. mediapipe/calculators/tensor/__init__.py +0 -0
  43. mediapipe/calculators/tensor/audio_to_tensor_calculator_pb2.py +35 -0
  44. mediapipe/calculators/tensor/bert_preprocessor_calculator_pb2.py +31 -0
  45. mediapipe/calculators/tensor/feedback_tensors_calculator_pb2.py +37 -0
  46. mediapipe/calculators/tensor/image_to_tensor_calculator_pb2.py +40 -0
  47. mediapipe/calculators/tensor/inference_calculator_pb2.py +63 -0
  48. mediapipe/calculators/tensor/landmarks_to_tensor_calculator_pb2.py +33 -0
  49. mediapipe/calculators/tensor/regex_preprocessor_calculator_pb2.py +31 -0
  50. mediapipe/calculators/tensor/tensor_converter_calculator_pb2.py +34 -0
  51. mediapipe/calculators/tensor/tensor_to_joints_calculator_pb2.py +31 -0
  52. mediapipe/calculators/tensor/tensors_readback_calculator_pb2.py +35 -0
  53. mediapipe/calculators/tensor/tensors_to_audio_calculator_pb2.py +33 -0
  54. mediapipe/calculators/tensor/tensors_to_classification_calculator_pb2.py +44 -0
  55. mediapipe/calculators/tensor/tensors_to_detections_calculator_pb2.py +39 -0
  56. mediapipe/calculators/tensor/tensors_to_floats_calculator_pb2.py +33 -0
  57. mediapipe/calculators/tensor/tensors_to_landmarks_calculator_pb2.py +33 -0
  58. mediapipe/calculators/tensor/tensors_to_segmentation_calculator_pb2.py +34 -0
  59. mediapipe/calculators/tensor/vector_to_tensor_calculator_pb2.py +27 -0
  60. mediapipe/calculators/tflite/__init__.py +0 -0
  61. mediapipe/calculators/tflite/ssd_anchors_calculator_pb2.py +32 -0
  62. mediapipe/calculators/tflite/tflite_converter_calculator_pb2.py +33 -0
  63. mediapipe/calculators/tflite/tflite_custom_op_resolver_calculator_pb2.py +31 -0
  64. mediapipe/calculators/tflite/tflite_inference_calculator_pb2.py +49 -0
  65. mediapipe/calculators/tflite/tflite_tensors_to_classification_calculator_pb2.py +31 -0
  66. mediapipe/calculators/tflite/tflite_tensors_to_detections_calculator_pb2.py +31 -0
  67. mediapipe/calculators/tflite/tflite_tensors_to_landmarks_calculator_pb2.py +33 -0
  68. mediapipe/calculators/tflite/tflite_tensors_to_segmentation_calculator_pb2.py +31 -0
  69. mediapipe/calculators/util/__init__.py +0 -0
  70. mediapipe/calculators/util/align_hand_to_pose_in_world_calculator_pb2.py +31 -0
  71. mediapipe/calculators/util/annotation_overlay_calculator_pb2.py +32 -0
  72. mediapipe/calculators/util/association_calculator_pb2.py +31 -0
  73. mediapipe/calculators/util/collection_has_min_size_calculator_pb2.py +31 -0
  74. mediapipe/calculators/util/combine_joints_calculator_pb2.py +36 -0
  75. mediapipe/calculators/util/detection_label_id_to_text_calculator_pb2.py +36 -0
  76. mediapipe/calculators/util/detections_to_rects_calculator_pb2.py +33 -0
  77. mediapipe/calculators/util/detections_to_render_data_calculator_pb2.py +33 -0
  78. mediapipe/calculators/util/face_to_rect_calculator_pb2.py +26 -0
  79. mediapipe/calculators/util/filter_detections_calculator_pb2.py +31 -0
  80. mediapipe/calculators/util/flat_color_image_calculator_pb2.py +32 -0
  81. mediapipe/calculators/util/labels_to_render_data_calculator_pb2.py +34 -0
  82. mediapipe/calculators/util/landmark_projection_calculator_pb2.py +31 -0
  83. mediapipe/calculators/util/landmarks_refinement_calculator_pb2.py +41 -0
  84. mediapipe/calculators/util/landmarks_smoothing_calculator_pb2.py +33 -0
  85. mediapipe/calculators/util/landmarks_to_detection_calculator_pb2.py +31 -0
  86. mediapipe/calculators/util/landmarks_to_floats_calculator_pb2.py +31 -0
  87. mediapipe/calculators/util/landmarks_to_render_data_calculator_pb2.py +32 -0
  88. mediapipe/calculators/util/landmarks_transformation_calculator_pb2.py +37 -0
  89. mediapipe/calculators/util/latency_pb2.py +26 -0
  90. mediapipe/calculators/util/local_file_contents_calculator_pb2.py +31 -0
  91. mediapipe/calculators/util/logic_calculator_pb2.py +34 -0
  92. mediapipe/calculators/util/non_max_suppression_calculator_pb2.py +35 -0
  93. mediapipe/calculators/util/packet_frequency_calculator_pb2.py +31 -0
  94. mediapipe/calculators/util/packet_frequency_pb2.py +26 -0
  95. mediapipe/calculators/util/packet_latency_calculator_pb2.py +31 -0
  96. mediapipe/calculators/util/rect_to_render_data_calculator_pb2.py +32 -0
  97. mediapipe/calculators/util/rect_to_render_scale_calculator_pb2.py +31 -0
  98. mediapipe/calculators/util/rect_transformation_calculator_pb2.py +31 -0
  99. mediapipe/calculators/util/refine_landmarks_from_heatmap_calculator_pb2.py +31 -0
  100. mediapipe/calculators/util/resource_provider_calculator_pb2.py +28 -0
  101. mediapipe/calculators/util/set_joints_visibility_calculator_pb2.py +41 -0
  102. mediapipe/calculators/util/thresholding_calculator_pb2.py +31 -0
  103. mediapipe/calculators/util/timed_box_list_id_to_label_calculator_pb2.py +31 -0
  104. mediapipe/calculators/util/timed_box_list_to_render_data_calculator_pb2.py +32 -0
  105. mediapipe/calculators/util/top_k_scores_calculator_pb2.py +31 -0
  106. mediapipe/calculators/util/visibility_copy_calculator_pb2.py +27 -0
  107. mediapipe/calculators/util/visibility_smoothing_calculator_pb2.py +31 -0
  108. mediapipe/calculators/video/__init__.py +0 -0
  109. mediapipe/calculators/video/box_detector_calculator_pb2.py +32 -0
  110. mediapipe/calculators/video/box_tracker_calculator_pb2.py +32 -0
  111. mediapipe/calculators/video/flow_packager_calculator_pb2.py +32 -0
  112. mediapipe/calculators/video/flow_to_image_calculator_pb2.py +31 -0
  113. mediapipe/calculators/video/motion_analysis_calculator_pb2.py +42 -0
  114. mediapipe/calculators/video/opencv_video_encoder_calculator_pb2.py +31 -0
  115. mediapipe/calculators/video/tool/__init__.py +0 -0
  116. mediapipe/calculators/video/tool/flow_quantizer_model_pb2.py +26 -0
  117. mediapipe/calculators/video/tracked_detection_manager_calculator_pb2.py +32 -0
  118. mediapipe/calculators/video/video_pre_stream_calculator_pb2.py +35 -0
  119. mediapipe/examples/__init__.py +14 -0
  120. mediapipe/examples/desktop/__init__.py +14 -0
  121. mediapipe/framework/__init__.py +0 -0
  122. mediapipe/framework/calculator_options_pb2.py +29 -0
  123. mediapipe/framework/calculator_pb2.py +59 -0
  124. mediapipe/framework/calculator_profile_pb2.py +48 -0
  125. mediapipe/framework/deps/__init__.py +0 -0
  126. mediapipe/framework/deps/proto_descriptor_pb2.py +29 -0
  127. mediapipe/framework/formats/__init__.py +0 -0
  128. mediapipe/framework/formats/affine_transform_data_pb2.py +28 -0
  129. mediapipe/framework/formats/annotation/__init__.py +0 -0
  130. mediapipe/framework/formats/annotation/locus_pb2.py +32 -0
  131. mediapipe/framework/formats/annotation/rasterization_pb2.py +29 -0
  132. mediapipe/framework/formats/body_rig_pb2.py +28 -0
  133. mediapipe/framework/formats/classification_pb2.py +31 -0
  134. mediapipe/framework/formats/detection_pb2.py +36 -0
  135. mediapipe/framework/formats/image_file_properties_pb2.py +26 -0
  136. mediapipe/framework/formats/image_format_pb2.py +29 -0
  137. mediapipe/framework/formats/landmark_pb2.py +37 -0
  138. mediapipe/framework/formats/location_data_pb2.py +38 -0
  139. mediapipe/framework/formats/matrix_data_pb2.py +31 -0
  140. mediapipe/framework/formats/motion/__init__.py +0 -0
  141. mediapipe/framework/formats/motion/optical_flow_field_data_pb2.py +30 -0
  142. mediapipe/framework/formats/object_detection/__init__.py +0 -0
  143. mediapipe/framework/formats/object_detection/anchor_pb2.py +26 -0
  144. mediapipe/framework/formats/rect_pb2.py +29 -0
  145. mediapipe/framework/formats/time_series_header_pb2.py +28 -0
  146. mediapipe/framework/graph_runtime_info_pb2.py +31 -0
  147. mediapipe/framework/mediapipe_options_pb2.py +27 -0
  148. mediapipe/framework/packet_factory_pb2.py +31 -0
  149. mediapipe/framework/packet_generator_pb2.py +33 -0
  150. mediapipe/framework/status_handler_pb2.py +28 -0
  151. mediapipe/framework/stream_handler/__init__.py +0 -0
  152. mediapipe/framework/stream_handler/default_input_stream_handler_pb2.py +27 -0
  153. mediapipe/framework/stream_handler/fixed_size_input_stream_handler_pb2.py +27 -0
  154. mediapipe/framework/stream_handler/sync_set_input_stream_handler_pb2.py +29 -0
  155. mediapipe/framework/stream_handler/timestamp_align_input_stream_handler_pb2.py +27 -0
  156. mediapipe/framework/stream_handler_pb2.py +30 -0
  157. mediapipe/framework/test_calculators_pb2.py +31 -0
  158. mediapipe/framework/thread_pool_executor_pb2.py +29 -0
  159. mediapipe/framework/tool/__init__.py +0 -0
  160. mediapipe/framework/tool/calculator_graph_template_pb2.py +44 -0
  161. mediapipe/framework/tool/field_data_pb2.py +28 -0
  162. mediapipe/framework/tool/node_chain_subgraph_pb2.py +31 -0
  163. mediapipe/framework/tool/packet_generator_wrapper_calculator_pb2.py +28 -0
  164. mediapipe/framework/tool/source_pb2.py +33 -0
  165. mediapipe/framework/tool/switch_container_pb2.py +32 -0
  166. mediapipe/gpu/__init__.py +0 -0
  167. mediapipe/gpu/copy_calculator_pb2.py +33 -0
  168. mediapipe/gpu/gl_animation_overlay_calculator_pb2.py +31 -0
  169. mediapipe/gpu/gl_context_options_pb2.py +31 -0
  170. mediapipe/gpu/gl_scaler_calculator_pb2.py +32 -0
  171. mediapipe/gpu/gl_surface_sink_calculator_pb2.py +32 -0
  172. mediapipe/gpu/gpu_origin_pb2.py +29 -0
  173. mediapipe/gpu/scale_mode_pb2.py +28 -0
  174. mediapipe/model_maker/__init__.py +27 -0
  175. mediapipe/model_maker/setup.py +107 -0
  176. mediapipe/modules/__init__.py +0 -0
  177. mediapipe/modules/face_detection/__init__.py +0 -0
  178. mediapipe/modules/face_detection/face_detection_full_range_cpu.binarypb +0 -0
  179. mediapipe/modules/face_detection/face_detection_full_range_sparse.tflite +0 -0
  180. mediapipe/modules/face_detection/face_detection_pb2.py +30 -0
  181. mediapipe/modules/face_detection/face_detection_short_range.tflite +0 -0
  182. mediapipe/modules/face_detection/face_detection_short_range_cpu.binarypb +0 -0
  183. mediapipe/modules/face_geometry/__init__.py +0 -0
  184. mediapipe/modules/face_geometry/data/__init__.py +0 -0
  185. mediapipe/modules/face_geometry/effect_renderer_calculator_pb2.py +27 -0
  186. mediapipe/modules/face_geometry/env_generator_calculator_pb2.py +28 -0
  187. mediapipe/modules/face_geometry/geometry_pipeline_calculator_pb2.py +27 -0
  188. mediapipe/modules/face_geometry/libs/__init__.py +0 -0
  189. mediapipe/modules/face_geometry/protos/__init__.py +0 -0
  190. mediapipe/modules/face_geometry/protos/environment_pb2.py +31 -0
  191. mediapipe/modules/face_geometry/protos/face_geometry_pb2.py +29 -0
  192. mediapipe/modules/face_geometry/protos/geometry_pipeline_metadata_pb2.py +32 -0
  193. mediapipe/modules/face_geometry/protos/mesh_3d_pb2.py +31 -0
  194. mediapipe/modules/face_landmark/__init__.py +0 -0
  195. mediapipe/modules/face_landmark/face_landmark.tflite +0 -0
  196. mediapipe/modules/face_landmark/face_landmark_front_cpu.binarypb +0 -0
  197. mediapipe/modules/face_landmark/face_landmark_with_attention.tflite +0 -0
  198. mediapipe/modules/hand_landmark/__init__.py +0 -0
  199. mediapipe/modules/hand_landmark/calculators/__init__.py +0 -0
  200. mediapipe/modules/hand_landmark/hand_landmark_full.tflite +0 -0
  201. mediapipe/modules/hand_landmark/hand_landmark_lite.tflite +0 -0
  202. mediapipe/modules/hand_landmark/hand_landmark_tracking_cpu.binarypb +0 -0
  203. mediapipe/modules/hand_landmark/handedness.txt +2 -0
  204. mediapipe/modules/holistic_landmark/__init__.py +0 -0
  205. mediapipe/modules/holistic_landmark/calculators/__init__.py +0 -0
  206. mediapipe/modules/holistic_landmark/calculators/roi_tracking_calculator_pb2.py +37 -0
  207. mediapipe/modules/holistic_landmark/hand_recrop.tflite +0 -0
  208. mediapipe/modules/holistic_landmark/holistic_landmark_cpu.binarypb +0 -0
  209. mediapipe/modules/iris_landmark/__init__.py +0 -0
  210. mediapipe/modules/iris_landmark/iris_landmark.tflite +0 -0
  211. mediapipe/modules/objectron/__init__.py +0 -0
  212. mediapipe/modules/objectron/calculators/__init__.py +0 -0
  213. mediapipe/modules/objectron/calculators/a_r_capture_metadata_pb2.py +102 -0
  214. mediapipe/modules/objectron/calculators/annotation_data_pb2.py +38 -0
  215. mediapipe/modules/objectron/calculators/belief_decoder_config_pb2.py +28 -0
  216. mediapipe/modules/objectron/calculators/camera_parameters_pb2.py +30 -0
  217. mediapipe/modules/objectron/calculators/filter_detection_calculator_pb2.py +35 -0
  218. mediapipe/modules/objectron/calculators/frame_annotation_to_rect_calculator_pb2.py +31 -0
  219. mediapipe/modules/objectron/calculators/frame_annotation_tracker_calculator_pb2.py +31 -0
  220. mediapipe/modules/objectron/calculators/lift_2d_frame_annotation_to_3d_calculator_pb2.py +32 -0
  221. mediapipe/modules/objectron/calculators/object_pb2.py +38 -0
  222. mediapipe/modules/objectron/calculators/tensors_to_objects_calculator_pb2.py +32 -0
  223. mediapipe/modules/objectron/calculators/tflite_tensors_to_objects_calculator_pb2.py +32 -0
  224. mediapipe/modules/objectron/object_detection_oidv4_labelmap.txt +24 -0
  225. mediapipe/modules/objectron/objectron_cpu.binarypb +0 -0
  226. mediapipe/modules/palm_detection/__init__.py +0 -0
  227. mediapipe/modules/palm_detection/palm_detection_full.tflite +0 -0
  228. mediapipe/modules/palm_detection/palm_detection_lite.tflite +0 -0
  229. mediapipe/modules/pose_detection/__init__.py +0 -0
  230. mediapipe/modules/pose_detection/pose_detection.tflite +0 -0
  231. mediapipe/modules/pose_landmark/__init__.py +0 -0
  232. mediapipe/modules/pose_landmark/pose_landmark_cpu.binarypb +0 -0
  233. mediapipe/modules/pose_landmark/pose_landmark_full.tflite +0 -0
  234. mediapipe/modules/selfie_segmentation/__init__.py +0 -0
  235. mediapipe/modules/selfie_segmentation/selfie_segmentation.tflite +0 -0
  236. mediapipe/modules/selfie_segmentation/selfie_segmentation_cpu.binarypb +0 -0
  237. mediapipe/modules/selfie_segmentation/selfie_segmentation_landscape.tflite +0 -0
  238. mediapipe/python/__init__.py +29 -0
  239. mediapipe/python/_framework_bindings.cpython-312-x86_64-linux-gnu.so +0 -0
  240. mediapipe/python/calculator_graph_test.py +251 -0
  241. mediapipe/python/image_frame_test.py +194 -0
  242. mediapipe/python/image_test.py +218 -0
  243. mediapipe/python/packet_creator.py +275 -0
  244. mediapipe/python/packet_getter.py +120 -0
  245. mediapipe/python/packet_test.py +533 -0
  246. mediapipe/python/solution_base.py +604 -0
  247. mediapipe/python/solution_base_test.py +396 -0
  248. mediapipe/python/solutions/__init__.py +27 -0
  249. mediapipe/python/solutions/download_utils.py +37 -0
  250. mediapipe/python/solutions/drawing_styles.py +249 -0
  251. mediapipe/python/solutions/drawing_utils.py +320 -0
  252. mediapipe/python/solutions/drawing_utils_test.py +258 -0
  253. mediapipe/python/solutions/face_detection.py +105 -0
  254. mediapipe/python/solutions/face_detection_test.py +92 -0
  255. mediapipe/python/solutions/face_mesh.py +125 -0
  256. mediapipe/python/solutions/face_mesh_connections.py +500 -0
  257. mediapipe/python/solutions/face_mesh_test.py +170 -0
  258. mediapipe/python/solutions/hands.py +153 -0
  259. mediapipe/python/solutions/hands_connections.py +32 -0
  260. mediapipe/python/solutions/hands_test.py +219 -0
  261. mediapipe/python/solutions/holistic.py +167 -0
  262. mediapipe/python/solutions/holistic_test.py +142 -0
  263. mediapipe/python/solutions/objectron.py +288 -0
  264. mediapipe/python/solutions/objectron_test.py +81 -0
  265. mediapipe/python/solutions/pose.py +192 -0
  266. mediapipe/python/solutions/pose_connections.py +22 -0
  267. mediapipe/python/solutions/pose_test.py +262 -0
  268. mediapipe/python/solutions/selfie_segmentation.py +76 -0
  269. mediapipe/python/solutions/selfie_segmentation_test.py +68 -0
  270. mediapipe/python/timestamp_test.py +78 -0
  271. mediapipe/tasks/__init__.py +14 -0
  272. mediapipe/tasks/cc/__init__.py +0 -0
  273. mediapipe/tasks/cc/audio/__init__.py +0 -0
  274. mediapipe/tasks/cc/audio/audio_classifier/__init__.py +0 -0
  275. mediapipe/tasks/cc/audio/audio_classifier/proto/__init__.py +0 -0
  276. mediapipe/tasks/cc/audio/audio_classifier/proto/audio_classifier_graph_options_pb2.py +35 -0
  277. mediapipe/tasks/cc/audio/audio_embedder/__init__.py +0 -0
  278. mediapipe/tasks/cc/audio/audio_embedder/proto/__init__.py +0 -0
  279. mediapipe/tasks/cc/audio/audio_embedder/proto/audio_embedder_graph_options_pb2.py +35 -0
  280. mediapipe/tasks/cc/audio/core/__init__.py +0 -0
  281. mediapipe/tasks/cc/audio/utils/__init__.py +0 -0
  282. mediapipe/tasks/cc/components/__init__.py +0 -0
  283. mediapipe/tasks/cc/components/calculators/__init__.py +0 -0
  284. mediapipe/tasks/cc/components/calculators/classification_aggregation_calculator_pb2.py +31 -0
  285. mediapipe/tasks/cc/components/calculators/score_calibration_calculator_pb2.py +35 -0
  286. mediapipe/tasks/cc/components/calculators/tensors_to_embeddings_calculator_pb2.py +32 -0
  287. mediapipe/tasks/cc/components/containers/__init__.py +0 -0
  288. mediapipe/tasks/cc/components/containers/proto/__init__.py +0 -0
  289. mediapipe/tasks/cc/components/containers/proto/classifications_pb2.py +30 -0
  290. mediapipe/tasks/cc/components/containers/proto/embeddings_pb2.py +35 -0
  291. mediapipe/tasks/cc/components/containers/proto/landmarks_detection_result_pb2.py +32 -0
  292. mediapipe/tasks/cc/components/processors/__init__.py +0 -0
  293. mediapipe/tasks/cc/components/processors/proto/__init__.py +0 -0
  294. mediapipe/tasks/cc/components/processors/proto/classification_postprocessing_graph_options_pb2.py +38 -0
  295. mediapipe/tasks/cc/components/processors/proto/classifier_options_pb2.py +27 -0
  296. mediapipe/tasks/cc/components/processors/proto/detection_postprocessing_graph_options_pb2.py +36 -0
  297. mediapipe/tasks/cc/components/processors/proto/detector_options_pb2.py +27 -0
  298. mediapipe/tasks/cc/components/processors/proto/embedder_options_pb2.py +27 -0
  299. mediapipe/tasks/cc/components/processors/proto/embedding_postprocessing_graph_options_pb2.py +32 -0
  300. mediapipe/tasks/cc/components/processors/proto/image_preprocessing_graph_options_pb2.py +34 -0
  301. mediapipe/tasks/cc/components/processors/proto/text_model_type_pb2.py +28 -0
  302. mediapipe/tasks/cc/components/processors/proto/text_preprocessing_graph_options_pb2.py +32 -0
  303. mediapipe/tasks/cc/components/utils/__init__.py +0 -0
  304. mediapipe/tasks/cc/core/__init__.py +0 -0
  305. mediapipe/tasks/cc/core/proto/__init__.py +0 -0
  306. mediapipe/tasks/cc/core/proto/acceleration_pb2.py +28 -0
  307. mediapipe/tasks/cc/core/proto/base_options_pb2.py +30 -0
  308. mediapipe/tasks/cc/core/proto/external_file_pb2.py +31 -0
  309. mediapipe/tasks/cc/core/proto/inference_subgraph_pb2.py +32 -0
  310. mediapipe/tasks/cc/core/proto/model_resources_calculator_pb2.py +32 -0
  311. mediapipe/tasks/cc/genai/__init__.py +0 -0
  312. mediapipe/tasks/cc/genai/inference/__init__.py +0 -0
  313. mediapipe/tasks/cc/genai/inference/c/__init__.py +0 -0
  314. mediapipe/tasks/cc/genai/inference/calculators/__init__.py +0 -0
  315. mediapipe/tasks/cc/genai/inference/calculators/detokenizer_calculator_pb2.py +27 -0
  316. mediapipe/tasks/cc/genai/inference/calculators/llm_gpu_calculator_pb2.py +32 -0
  317. mediapipe/tasks/cc/genai/inference/calculators/model_data_calculator_pb2.py +27 -0
  318. mediapipe/tasks/cc/genai/inference/calculators/tokenizer_calculator_pb2.py +29 -0
  319. mediapipe/tasks/cc/genai/inference/common/__init__.py +0 -0
  320. mediapipe/tasks/cc/genai/inference/proto/__init__.py +0 -0
  321. mediapipe/tasks/cc/genai/inference/proto/llm_file_metadata_pb2.py +32 -0
  322. mediapipe/tasks/cc/genai/inference/proto/llm_params_pb2.py +33 -0
  323. mediapipe/tasks/cc/genai/inference/proto/prompt_template_pb2.py +27 -0
  324. mediapipe/tasks/cc/genai/inference/proto/sampler_params_pb2.py +29 -0
  325. mediapipe/tasks/cc/genai/inference/proto/transformer_params_pb2.py +45 -0
  326. mediapipe/tasks/cc/genai/inference/utils/__init__.py +0 -0
  327. mediapipe/tasks/cc/genai/inference/utils/llm_utils/__init__.py +0 -0
  328. mediapipe/tasks/cc/genai/inference/utils/xnn_utils/__init__.py +0 -0
  329. mediapipe/tasks/cc/metadata/__init__.py +0 -0
  330. mediapipe/tasks/cc/metadata/python/__init__.py +0 -0
  331. mediapipe/tasks/cc/metadata/python/_pywrap_metadata_version.cpython-312-x86_64-linux-gnu.so +0 -0
  332. mediapipe/tasks/cc/metadata/tests/__init__.py +0 -0
  333. mediapipe/tasks/cc/metadata/utils/__init__.py +0 -0
  334. mediapipe/tasks/cc/text/__init__.py +0 -0
  335. mediapipe/tasks/cc/text/custom_ops/__init__.py +0 -0
  336. mediapipe/tasks/cc/text/custom_ops/ragged/__init__.py +0 -0
  337. mediapipe/tasks/cc/text/custom_ops/sentencepiece/__init__.py +0 -0
  338. mediapipe/tasks/cc/text/custom_ops/sentencepiece/testdata/__init__.py +0 -0
  339. mediapipe/tasks/cc/text/language_detector/__init__.py +0 -0
  340. mediapipe/tasks/cc/text/language_detector/custom_ops/__init__.py +0 -0
  341. mediapipe/tasks/cc/text/language_detector/custom_ops/utils/__init__.py +0 -0
  342. mediapipe/tasks/cc/text/language_detector/custom_ops/utils/hash/__init__.py +0 -0
  343. mediapipe/tasks/cc/text/language_detector/custom_ops/utils/utf/__init__.py +0 -0
  344. mediapipe/tasks/cc/text/text_classifier/__init__.py +0 -0
  345. mediapipe/tasks/cc/text/text_classifier/proto/__init__.py +0 -0
  346. mediapipe/tasks/cc/text/text_classifier/proto/text_classifier_graph_options_pb2.py +35 -0
  347. mediapipe/tasks/cc/text/text_embedder/__init__.py +0 -0
  348. mediapipe/tasks/cc/text/text_embedder/proto/__init__.py +0 -0
  349. mediapipe/tasks/cc/text/text_embedder/proto/text_embedder_graph_options_pb2.py +35 -0
  350. mediapipe/tasks/cc/text/tokenizers/__init__.py +0 -0
  351. mediapipe/tasks/cc/text/utils/__init__.py +0 -0
  352. mediapipe/tasks/cc/vision/__init__.py +0 -0
  353. mediapipe/tasks/cc/vision/core/__init__.py +0 -0
  354. mediapipe/tasks/cc/vision/custom_ops/__init__.py +0 -0
  355. mediapipe/tasks/cc/vision/face_detector/__init__.py +0 -0
  356. mediapipe/tasks/cc/vision/face_detector/proto/__init__.py +0 -0
  357. mediapipe/tasks/cc/vision/face_detector/proto/face_detector_graph_options_pb2.py +34 -0
  358. mediapipe/tasks/cc/vision/face_geometry/__init__.py +0 -0
  359. mediapipe/tasks/cc/vision/face_geometry/calculators/__init__.py +0 -0
  360. mediapipe/tasks/cc/vision/face_geometry/calculators/env_generator_calculator_pb2.py +28 -0
  361. mediapipe/tasks/cc/vision/face_geometry/calculators/geometry_pipeline_calculator_pb2.py +29 -0
  362. mediapipe/tasks/cc/vision/face_geometry/data/__init__.py +0 -0
  363. mediapipe/tasks/cc/vision/face_geometry/libs/__init__.py +0 -0
  364. mediapipe/tasks/cc/vision/face_geometry/proto/__init__.py +0 -0
  365. mediapipe/tasks/cc/vision/face_geometry/proto/environment_pb2.py +31 -0
  366. mediapipe/tasks/cc/vision/face_geometry/proto/face_geometry_graph_options_pb2.py +29 -0
  367. mediapipe/tasks/cc/vision/face_geometry/proto/face_geometry_pb2.py +29 -0
  368. mediapipe/tasks/cc/vision/face_geometry/proto/geometry_pipeline_metadata_pb2.py +32 -0
  369. mediapipe/tasks/cc/vision/face_geometry/proto/mesh_3d_pb2.py +31 -0
  370. mediapipe/tasks/cc/vision/face_landmarker/__init__.py +0 -0
  371. mediapipe/tasks/cc/vision/face_landmarker/proto/__init__.py +0 -0
  372. mediapipe/tasks/cc/vision/face_landmarker/proto/face_blendshapes_graph_options_pb2.py +34 -0
  373. mediapipe/tasks/cc/vision/face_landmarker/proto/face_landmarker_graph_options_pb2.py +37 -0
  374. mediapipe/tasks/cc/vision/face_landmarker/proto/face_landmarks_detector_graph_options_pb2.py +35 -0
  375. mediapipe/tasks/cc/vision/face_landmarker/proto/tensors_to_face_landmarks_graph_options_pb2.py +32 -0
  376. mediapipe/tasks/cc/vision/face_stylizer/__init__.py +0 -0
  377. mediapipe/tasks/cc/vision/face_stylizer/calculators/__init__.py +0 -0
  378. mediapipe/tasks/cc/vision/face_stylizer/calculators/tensors_to_image_calculator_pb2.py +36 -0
  379. mediapipe/tasks/cc/vision/face_stylizer/proto/__init__.py +0 -0
  380. mediapipe/tasks/cc/vision/face_stylizer/proto/face_stylizer_graph_options_pb2.py +35 -0
  381. mediapipe/tasks/cc/vision/gesture_recognizer/__init__.py +0 -0
  382. mediapipe/tasks/cc/vision/gesture_recognizer/calculators/__init__.py +0 -0
  383. mediapipe/tasks/cc/vision/gesture_recognizer/calculators/combined_prediction_calculator_pb2.py +33 -0
  384. mediapipe/tasks/cc/vision/gesture_recognizer/calculators/landmarks_to_matrix_calculator_pb2.py +31 -0
  385. mediapipe/tasks/cc/vision/gesture_recognizer/proto/__init__.py +0 -0
  386. mediapipe/tasks/cc/vision/gesture_recognizer/proto/gesture_classifier_graph_options_pb2.py +35 -0
  387. mediapipe/tasks/cc/vision/gesture_recognizer/proto/gesture_embedder_graph_options_pb2.py +34 -0
  388. mediapipe/tasks/cc/vision/gesture_recognizer/proto/gesture_recognizer_graph_options_pb2.py +36 -0
  389. mediapipe/tasks/cc/vision/gesture_recognizer/proto/hand_gesture_recognizer_graph_options_pb2.py +36 -0
  390. mediapipe/tasks/cc/vision/hand_detector/__init__.py +0 -0
  391. mediapipe/tasks/cc/vision/hand_detector/proto/__init__.py +0 -0
  392. mediapipe/tasks/cc/vision/hand_detector/proto/hand_detector_graph_options_pb2.py +34 -0
  393. mediapipe/tasks/cc/vision/hand_detector/proto/hand_detector_result_pb2.py +30 -0
  394. mediapipe/tasks/cc/vision/hand_landmarker/__init__.py +0 -0
  395. mediapipe/tasks/cc/vision/hand_landmarker/calculators/__init__.py +0 -0
  396. mediapipe/tasks/cc/vision/hand_landmarker/calculators/hand_association_calculator_pb2.py +31 -0
  397. mediapipe/tasks/cc/vision/hand_landmarker/proto/__init__.py +0 -0
  398. mediapipe/tasks/cc/vision/hand_landmarker/proto/hand_landmarker_graph_options_pb2.py +36 -0
  399. mediapipe/tasks/cc/vision/hand_landmarker/proto/hand_landmarks_detector_graph_options_pb2.py +34 -0
  400. mediapipe/tasks/cc/vision/hand_landmarker/proto/hand_roi_refinement_graph_options_pb2.py +28 -0
  401. mediapipe/tasks/cc/vision/holistic_landmarker/__init__.py +0 -0
  402. mediapipe/tasks/cc/vision/holistic_landmarker/proto/__init__.py +0 -0
  403. mediapipe/tasks/cc/vision/holistic_landmarker/proto/holistic_landmarker_graph_options_pb2.py +34 -0
  404. mediapipe/tasks/cc/vision/holistic_landmarker/proto/holistic_result_pb2.py +29 -0
  405. mediapipe/tasks/cc/vision/image_classifier/__init__.py +0 -0
  406. mediapipe/tasks/cc/vision/image_classifier/proto/__init__.py +0 -0
  407. mediapipe/tasks/cc/vision/image_classifier/proto/image_classifier_graph_options_pb2.py +35 -0
  408. mediapipe/tasks/cc/vision/image_embedder/__init__.py +0 -0
  409. mediapipe/tasks/cc/vision/image_embedder/proto/__init__.py +0 -0
  410. mediapipe/tasks/cc/vision/image_embedder/proto/image_embedder_graph_options_pb2.py +35 -0
  411. mediapipe/tasks/cc/vision/image_generator/__init__.py +0 -0
  412. mediapipe/tasks/cc/vision/image_generator/diffuser/__init__.py +0 -0
  413. mediapipe/tasks/cc/vision/image_generator/diffuser/stable_diffusion_iterate_calculator_pb2.py +40 -0
  414. mediapipe/tasks/cc/vision/image_generator/proto/__init__.py +0 -0
  415. mediapipe/tasks/cc/vision/image_generator/proto/conditioned_image_graph_options_pb2.py +40 -0
  416. mediapipe/tasks/cc/vision/image_generator/proto/control_plugin_graph_options_pb2.py +34 -0
  417. mediapipe/tasks/cc/vision/image_generator/proto/image_generator_graph_options_pb2.py +30 -0
  418. mediapipe/tasks/cc/vision/image_segmenter/__init__.py +0 -0
  419. mediapipe/tasks/cc/vision/image_segmenter/calculators/__init__.py +0 -0
  420. mediapipe/tasks/cc/vision/image_segmenter/calculators/tensors_to_segmentation_calculator_pb2.py +34 -0
  421. mediapipe/tasks/cc/vision/image_segmenter/proto/__init__.py +0 -0
  422. mediapipe/tasks/cc/vision/image_segmenter/proto/image_segmenter_graph_options_pb2.py +35 -0
  423. mediapipe/tasks/cc/vision/image_segmenter/proto/segmenter_options_pb2.py +33 -0
  424. mediapipe/tasks/cc/vision/interactive_segmenter/__init__.py +0 -0
  425. mediapipe/tasks/cc/vision/object_detector/__init__.py +0 -0
  426. mediapipe/tasks/cc/vision/object_detector/proto/__init__.py +0 -0
  427. mediapipe/tasks/cc/vision/object_detector/proto/object_detector_options_pb2.py +34 -0
  428. mediapipe/tasks/cc/vision/pose_detector/__init__.py +0 -0
  429. mediapipe/tasks/cc/vision/pose_detector/proto/__init__.py +0 -0
  430. mediapipe/tasks/cc/vision/pose_detector/proto/pose_detector_graph_options_pb2.py +34 -0
  431. mediapipe/tasks/cc/vision/pose_landmarker/__init__.py +0 -0
  432. mediapipe/tasks/cc/vision/pose_landmarker/proto/__init__.py +0 -0
  433. mediapipe/tasks/cc/vision/pose_landmarker/proto/pose_landmarker_graph_options_pb2.py +36 -0
  434. mediapipe/tasks/cc/vision/pose_landmarker/proto/pose_landmarks_detector_graph_options_pb2.py +34 -0
  435. mediapipe/tasks/cc/vision/utils/__init__.py +0 -0
  436. mediapipe/tasks/cc/vision/utils/ghum/__init__.py +0 -0
  437. mediapipe/tasks/metadata/image_segmenter_metadata_schema.fbs +59 -0
  438. mediapipe/tasks/metadata/image_segmenter_metadata_schema_py_generated.py +108 -0
  439. mediapipe/tasks/metadata/metadata_schema.fbs +732 -0
  440. mediapipe/tasks/metadata/metadata_schema_py_generated.py +3251 -0
  441. mediapipe/tasks/metadata/object_detector_metadata_schema.fbs +98 -0
  442. mediapipe/tasks/metadata/object_detector_metadata_schema_py_generated.py +674 -0
  443. mediapipe/tasks/metadata/schema_py_generated.py +18438 -0
  444. mediapipe/tasks/python/__init__.py +27 -0
  445. mediapipe/tasks/python/audio/__init__.py +33 -0
  446. mediapipe/tasks/python/audio/audio_classifier.py +324 -0
  447. mediapipe/tasks/python/audio/audio_embedder.py +285 -0
  448. mediapipe/tasks/python/audio/core/__init__.py +16 -0
  449. mediapipe/tasks/python/audio/core/audio_record.py +125 -0
  450. mediapipe/tasks/python/audio/core/audio_task_running_mode.py +29 -0
  451. mediapipe/tasks/python/audio/core/base_audio_task_api.py +181 -0
  452. mediapipe/tasks/python/benchmark/__init__.py +13 -0
  453. mediapipe/tasks/python/benchmark/benchmark_utils.py +70 -0
  454. mediapipe/tasks/python/benchmark/vision/__init__.py +13 -0
  455. mediapipe/tasks/python/benchmark/vision/benchmark.py +99 -0
  456. mediapipe/tasks/python/benchmark/vision/core/__init__.py +14 -0
  457. mediapipe/tasks/python/benchmark/vision/core/base_vision_benchmark_api.py +40 -0
  458. mediapipe/tasks/python/components/__init__.py +13 -0
  459. mediapipe/tasks/python/components/containers/__init__.py +53 -0
  460. mediapipe/tasks/python/components/containers/audio_data.py +137 -0
  461. mediapipe/tasks/python/components/containers/bounding_box.py +73 -0
  462. mediapipe/tasks/python/components/containers/category.py +78 -0
  463. mediapipe/tasks/python/components/containers/classification_result.py +111 -0
  464. mediapipe/tasks/python/components/containers/detections.py +181 -0
  465. mediapipe/tasks/python/components/containers/embedding_result.py +89 -0
  466. mediapipe/tasks/python/components/containers/keypoint.py +77 -0
  467. mediapipe/tasks/python/components/containers/landmark.py +122 -0
  468. mediapipe/tasks/python/components/containers/landmark_detection_result.py +106 -0
  469. mediapipe/tasks/python/components/containers/rect.py +109 -0
  470. mediapipe/tasks/python/components/processors/__init__.py +23 -0
  471. mediapipe/tasks/python/components/processors/classifier_options.py +86 -0
  472. mediapipe/tasks/python/components/utils/__init__.py +13 -0
  473. mediapipe/tasks/python/components/utils/cosine_similarity.py +68 -0
  474. mediapipe/tasks/python/core/__init__.py +13 -0
  475. mediapipe/tasks/python/core/base_options.py +121 -0
  476. mediapipe/tasks/python/core/optional_dependencies.py +25 -0
  477. mediapipe/tasks/python/core/task_info.py +139 -0
  478. mediapipe/tasks/python/genai/__init__.py +14 -0
  479. mediapipe/tasks/python/genai/bundler/__init__.py +23 -0
  480. mediapipe/tasks/python/genai/bundler/llm_bundler.py +130 -0
  481. mediapipe/tasks/python/genai/bundler/llm_bundler_test.py +168 -0
  482. mediapipe/tasks/python/genai/converter/__init__.py +24 -0
  483. mediapipe/tasks/python/genai/converter/converter_base.py +179 -0
  484. mediapipe/tasks/python/genai/converter/converter_factory.py +79 -0
  485. mediapipe/tasks/python/genai/converter/llm_converter.py +374 -0
  486. mediapipe/tasks/python/genai/converter/llm_converter_test.py +63 -0
  487. mediapipe/tasks/python/genai/converter/pytorch_converter.py +318 -0
  488. mediapipe/tasks/python/genai/converter/pytorch_converter_test.py +86 -0
  489. mediapipe/tasks/python/genai/converter/quantization_util.py +516 -0
  490. mediapipe/tasks/python/genai/converter/quantization_util_test.py +259 -0
  491. mediapipe/tasks/python/genai/converter/safetensors_converter.py +580 -0
  492. mediapipe/tasks/python/genai/converter/safetensors_converter_test.py +83 -0
  493. mediapipe/tasks/python/genai/converter/weight_bins_writer.py +120 -0
  494. mediapipe/tasks/python/genai/converter/weight_bins_writer_test.py +95 -0
  495. mediapipe/tasks/python/metadata/__init__.py +13 -0
  496. mediapipe/tasks/python/metadata/flatbuffers_lib/_pywrap_flatbuffers.cpython-312-x86_64-linux-gnu.so +0 -0
  497. mediapipe/tasks/python/metadata/metadata.py +928 -0
  498. mediapipe/tasks/python/metadata/metadata_displayer_cli.py +34 -0
  499. mediapipe/tasks/python/metadata/metadata_writers/__init__.py +13 -0
  500. mediapipe/tasks/python/metadata/metadata_writers/face_stylizer.py +138 -0
  501. mediapipe/tasks/python/metadata/metadata_writers/image_classifier.py +71 -0
  502. mediapipe/tasks/python/metadata/metadata_writers/image_segmenter.py +170 -0
  503. mediapipe/tasks/python/metadata/metadata_writers/metadata_info.py +1166 -0
  504. mediapipe/tasks/python/metadata/metadata_writers/metadata_writer.py +845 -0
  505. mediapipe/tasks/python/metadata/metadata_writers/model_asset_bundle_utils.py +71 -0
  506. mediapipe/tasks/python/metadata/metadata_writers/object_detector.py +331 -0
  507. mediapipe/tasks/python/metadata/metadata_writers/text_classifier.py +119 -0
  508. mediapipe/tasks/python/metadata/metadata_writers/writer_utils.py +91 -0
  509. mediapipe/tasks/python/test/__init__.py +13 -0
  510. mediapipe/tasks/python/test/audio/__init__.py +13 -0
  511. mediapipe/tasks/python/test/audio/audio_classifier_test.py +387 -0
  512. mediapipe/tasks/python/test/audio/audio_embedder_test.py +297 -0
  513. mediapipe/tasks/python/test/test_utils.py +196 -0
  514. mediapipe/tasks/python/test/text/__init__.py +13 -0
  515. mediapipe/tasks/python/test/text/language_detector_test.py +228 -0
  516. mediapipe/tasks/python/test/text/text_classifier_test.py +235 -0
  517. mediapipe/tasks/python/test/text/text_embedder_test.py +326 -0
  518. mediapipe/tasks/python/test/vision/__init__.py +13 -0
  519. mediapipe/tasks/python/test/vision/face_aligner_test.py +190 -0
  520. mediapipe/tasks/python/test/vision/face_detector_test.py +523 -0
  521. mediapipe/tasks/python/test/vision/face_landmarker_test.py +565 -0
  522. mediapipe/tasks/python/test/vision/face_stylizer_test.py +191 -0
  523. mediapipe/tasks/python/test/vision/hand_landmarker_test.py +437 -0
  524. mediapipe/tasks/python/test/vision/holistic_landmarker_test.py +544 -0
  525. mediapipe/tasks/python/test/vision/image_classifier_test.py +657 -0
  526. mediapipe/tasks/python/test/vision/image_embedder_test.py +423 -0
  527. mediapipe/tasks/python/test/vision/image_segmenter_test.py +512 -0
  528. mediapipe/tasks/python/test/vision/interactive_segmenter_test.py +341 -0
  529. mediapipe/tasks/python/test/vision/object_detector_test.py +493 -0
  530. mediapipe/tasks/python/test/vision/pose_landmarker_test.py +518 -0
  531. mediapipe/tasks/python/text/__init__.py +35 -0
  532. mediapipe/tasks/python/text/core/__init__.py +16 -0
  533. mediapipe/tasks/python/text/core/base_text_task_api.py +54 -0
  534. mediapipe/tasks/python/text/language_detector.py +220 -0
  535. mediapipe/tasks/python/text/text_classifier.py +187 -0
  536. mediapipe/tasks/python/text/text_embedder.py +188 -0
  537. mediapipe/tasks/python/vision/__init__.py +90 -0
  538. mediapipe/tasks/python/vision/core/__init__.py +14 -0
  539. mediapipe/tasks/python/vision/core/base_vision_task_api.py +226 -0
  540. mediapipe/tasks/python/vision/core/image_processing_options.py +39 -0
  541. mediapipe/tasks/python/vision/core/vision_task_running_mode.py +31 -0
  542. mediapipe/tasks/python/vision/face_aligner.py +158 -0
  543. mediapipe/tasks/python/vision/face_detector.py +332 -0
  544. mediapipe/tasks/python/vision/face_landmarker.py +3244 -0
  545. mediapipe/tasks/python/vision/face_stylizer.py +158 -0
  546. mediapipe/tasks/python/vision/gesture_recognizer.py +480 -0
  547. mediapipe/tasks/python/vision/hand_landmarker.py +504 -0
  548. mediapipe/tasks/python/vision/holistic_landmarker.py +576 -0
  549. mediapipe/tasks/python/vision/image_classifier.py +358 -0
  550. mediapipe/tasks/python/vision/image_embedder.py +362 -0
  551. mediapipe/tasks/python/vision/image_segmenter.py +433 -0
  552. mediapipe/tasks/python/vision/interactive_segmenter.py +285 -0
  553. mediapipe/tasks/python/vision/object_detector.py +389 -0
  554. mediapipe/tasks/python/vision/pose_landmarker.py +455 -0
  555. mediapipe/util/__init__.py +0 -0
  556. mediapipe/util/analytics/__init__.py +0 -0
  557. mediapipe/util/analytics/mediapipe_log_extension_pb2.py +44 -0
  558. mediapipe/util/analytics/mediapipe_logging_enums_pb2.py +37 -0
  559. mediapipe/util/audio_decoder_pb2.py +33 -0
  560. mediapipe/util/color_pb2.py +33 -0
  561. mediapipe/util/label_map_pb2.py +27 -0
  562. mediapipe/util/render_data_pb2.py +58 -0
  563. mediapipe/util/sequence/__init__.py +14 -0
  564. mediapipe/util/sequence/media_sequence.py +716 -0
  565. mediapipe/util/sequence/media_sequence_test.py +290 -0
  566. mediapipe/util/sequence/media_sequence_util.py +800 -0
  567. mediapipe/util/sequence/media_sequence_util_test.py +389 -0
  568. mediapipe/util/tracking/__init__.py +0 -0
  569. mediapipe/util/tracking/box_detector_pb2.py +39 -0
  570. mediapipe/util/tracking/box_tracker_pb2.py +32 -0
  571. mediapipe/util/tracking/camera_motion_pb2.py +31 -0
  572. mediapipe/util/tracking/flow_packager_pb2.py +60 -0
  573. mediapipe/util/tracking/frame_selection_pb2.py +35 -0
  574. mediapipe/util/tracking/frame_selection_solution_evaluator_pb2.py +28 -0
  575. mediapipe/util/tracking/motion_analysis_pb2.py +35 -0
  576. mediapipe/util/tracking/motion_estimation_pb2.py +66 -0
  577. mediapipe/util/tracking/motion_models_pb2.py +42 -0
  578. mediapipe/util/tracking/motion_saliency_pb2.py +26 -0
  579. mediapipe/util/tracking/push_pull_filtering_pb2.py +26 -0
  580. mediapipe/util/tracking/region_flow_computation_pb2.py +59 -0
  581. mediapipe/util/tracking/region_flow_pb2.py +49 -0
  582. mediapipe/util/tracking/tone_estimation_pb2.py +45 -0
  583. mediapipe/util/tracking/tone_models_pb2.py +32 -0
  584. mediapipe/util/tracking/tracked_detection_manager_config_pb2.py +26 -0
  585. mediapipe/util/tracking/tracking_pb2.py +73 -0
  586. mediapipe_nightly-0.10.21.post20241223.dist-info/LICENSE +218 -0
  587. mediapipe_nightly-0.10.21.post20241223.dist-info/METADATA +199 -0
  588. mediapipe_nightly-0.10.21.post20241223.dist-info/RECORD +593 -0
  589. mediapipe_nightly-0.10.21.post20241223.dist-info/WHEEL +5 -0
  590. mediapipe_nightly-0.10.21.post20241223.dist-info/top_level.txt +4 -0
  591. mediapipe_nightly.libs/libEGL-48f73270.so.1.1.0 +0 -0
  592. mediapipe_nightly.libs/libGLESv2-ed5eda4f.so.2.1.0 +0 -0
  593. mediapipe_nightly.libs/libGLdispatch-64b28464.so.0.0.0 +0 -0
@@ -0,0 +1,167 @@
1
+ # Copyright 2020-2021 The MediaPipe Authors.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ """MediaPipe Holistic."""
15
+
16
+ from typing import NamedTuple
17
+
18
+ import numpy as np
19
+
20
+ # The following imports are needed because python pb2 silently discards
21
+ # unknown protobuf fields.
22
+ # pylint: disable=unused-import
23
+ from mediapipe.calculators.core import constant_side_packet_calculator_pb2
24
+ from mediapipe.calculators.core import gate_calculator_pb2
25
+ from mediapipe.calculators.core import split_vector_calculator_pb2
26
+ from mediapipe.calculators.tensor import image_to_tensor_calculator_pb2
27
+ from mediapipe.calculators.tensor import inference_calculator_pb2
28
+ from mediapipe.calculators.tensor import tensors_to_classification_calculator_pb2
29
+ from mediapipe.calculators.tensor import tensors_to_floats_calculator_pb2
30
+ from mediapipe.calculators.tensor import tensors_to_landmarks_calculator_pb2
31
+ from mediapipe.calculators.tflite import ssd_anchors_calculator_pb2
32
+ from mediapipe.calculators.util import detections_to_rects_calculator_pb2
33
+ from mediapipe.calculators.util import landmark_projection_calculator_pb2
34
+ from mediapipe.calculators.util import local_file_contents_calculator_pb2
35
+ from mediapipe.calculators.util import non_max_suppression_calculator_pb2
36
+ from mediapipe.calculators.util import rect_transformation_calculator_pb2
37
+ from mediapipe.framework.tool import switch_container_pb2
38
+ from mediapipe.modules.holistic_landmark.calculators import roi_tracking_calculator_pb2
39
+ # pylint: enable=unused-import
40
+
41
+ from mediapipe.python.solution_base import SolutionBase
42
+ from mediapipe.python.solutions import download_utils
43
+ # pylint: disable=unused-import
44
+ from mediapipe.python.solutions.face_mesh_connections import FACEMESH_CONTOURS
45
+ from mediapipe.python.solutions.face_mesh_connections import FACEMESH_TESSELATION
46
+ from mediapipe.python.solutions.hands import HandLandmark
47
+ from mediapipe.python.solutions.hands_connections import HAND_CONNECTIONS
48
+ from mediapipe.python.solutions.pose import PoseLandmark
49
+ from mediapipe.python.solutions.pose_connections import POSE_CONNECTIONS
50
+ # pylint: enable=unused-import
51
+
52
+ _BINARYPB_FILE_PATH = 'mediapipe/modules/holistic_landmark/holistic_landmark_cpu.binarypb'
53
+
54
+
55
+ def _download_oss_pose_landmark_model(model_complexity):
56
+ """Downloads the pose landmark lite/heavy model from the MediaPipe Github repo if it doesn't exist in the package."""
57
+
58
+ if model_complexity == 0:
59
+ download_utils.download_oss_model(
60
+ 'mediapipe/modules/pose_landmark/pose_landmark_lite.tflite')
61
+ elif model_complexity == 2:
62
+ download_utils.download_oss_model(
63
+ 'mediapipe/modules/pose_landmark/pose_landmark_heavy.tflite')
64
+
65
+
66
+ class Holistic(SolutionBase):
67
+ """MediaPipe Holistic.
68
+
69
+ MediaPipe Holistic processes an RGB image and returns pose landmarks, left and
70
+ right hand landmarks, and face mesh landmarks on the most prominent person
71
+ detected.
72
+
73
+ Please refer to https://solutions.mediapipe.dev/holistic#python-solution-api
74
+ for usage examples.
75
+ """
76
+
77
+ def __init__(self,
78
+ static_image_mode=False,
79
+ model_complexity=1,
80
+ smooth_landmarks=True,
81
+ enable_segmentation=False,
82
+ smooth_segmentation=True,
83
+ refine_face_landmarks=False,
84
+ min_detection_confidence=0.5,
85
+ min_tracking_confidence=0.5):
86
+ """Initializes a MediaPipe Holistic object.
87
+
88
+ Args:
89
+ static_image_mode: Whether to treat the input images as a batch of static
90
+ and possibly unrelated images, or a video stream. See details in
91
+ https://solutions.mediapipe.dev/holistic#static_image_mode.
92
+ model_complexity: Complexity of the pose landmark model: 0, 1 or 2. See
93
+ details in https://solutions.mediapipe.dev/holistic#model_complexity.
94
+ smooth_landmarks: Whether to filter landmarks across different input
95
+ images to reduce jitter. See details in
96
+ https://solutions.mediapipe.dev/holistic#smooth_landmarks.
97
+ enable_segmentation: Whether to predict segmentation mask. See details in
98
+ https://solutions.mediapipe.dev/holistic#enable_segmentation.
99
+ smooth_segmentation: Whether to filter segmentation across different input
100
+ images to reduce jitter. See details in
101
+ https://solutions.mediapipe.dev/holistic#smooth_segmentation.
102
+ refine_face_landmarks: Whether to further refine the landmark coordinates
103
+ around the eyes and lips, and output additional landmarks around the
104
+ irises. Default to False. See details in
105
+ https://solutions.mediapipe.dev/holistic#refine_face_landmarks.
106
+ min_detection_confidence: Minimum confidence value ([0.0, 1.0]) for person
107
+ detection to be considered successful. See details in
108
+ https://solutions.mediapipe.dev/holistic#min_detection_confidence.
109
+ min_tracking_confidence: Minimum confidence value ([0.0, 1.0]) for the
110
+ pose landmarks to be considered tracked successfully. See details in
111
+ https://solutions.mediapipe.dev/holistic#min_tracking_confidence.
112
+ """
113
+ _download_oss_pose_landmark_model(model_complexity)
114
+ super().__init__(
115
+ binary_graph_path=_BINARYPB_FILE_PATH,
116
+ side_inputs={
117
+ 'model_complexity': model_complexity,
118
+ 'smooth_landmarks': smooth_landmarks and not static_image_mode,
119
+ 'enable_segmentation': enable_segmentation,
120
+ 'smooth_segmentation':
121
+ smooth_segmentation and not static_image_mode,
122
+ 'refine_face_landmarks': refine_face_landmarks,
123
+ 'use_prev_landmarks': not static_image_mode,
124
+ },
125
+ calculator_params={
126
+ 'poselandmarkcpu__posedetectioncpu__TensorsToDetectionsCalculator.min_score_thresh':
127
+ min_detection_confidence,
128
+ 'poselandmarkcpu__poselandmarkbyroicpu__tensorstoposelandmarksandsegmentation__ThresholdingCalculator.threshold':
129
+ min_tracking_confidence,
130
+ },
131
+ outputs=[
132
+ 'pose_landmarks', 'pose_world_landmarks', 'left_hand_landmarks',
133
+ 'right_hand_landmarks', 'face_landmarks', 'segmentation_mask'
134
+ ])
135
+
136
+ def process(self, image: np.ndarray) -> NamedTuple:
137
+ """Processes an RGB image and returns the pose landmarks, left and right hand landmarks, and face landmarks on the most prominent person detected.
138
+
139
+ Args:
140
+ image: An RGB image represented as a numpy ndarray.
141
+
142
+ Raises:
143
+ RuntimeError: If the underlying graph throws any error.
144
+ ValueError: If the input image is not three channel RGB.
145
+
146
+ Returns:
147
+ A NamedTuple with fields describing the landmarks on the most prominate
148
+ person detected:
149
+ 1) "pose_landmarks" field that contains the pose landmarks.
150
+ 2) "pose_world_landmarks" field that contains the pose landmarks in
151
+ real-world 3D coordinates that are in meters with the origin at the
152
+ center between hips.
153
+ 3) "left_hand_landmarks" field that contains the left-hand landmarks.
154
+ 4) "right_hand_landmarks" field that contains the right-hand landmarks.
155
+ 5) "face_landmarks" field that contains the face landmarks.
156
+ 6) "segmentation_mask" field that contains the segmentation mask if
157
+ "enable_segmentation" is set to true.
158
+ """
159
+
160
+ results = super().process(input_data={'image': image})
161
+ if results.pose_landmarks: # pytype: disable=attribute-error
162
+ for landmark in results.pose_landmarks.landmark: # pytype: disable=attribute-error
163
+ landmark.ClearField('presence')
164
+ if results.pose_world_landmarks: # pytype: disable=attribute-error
165
+ for landmark in results.pose_world_landmarks.landmark: # pytype: disable=attribute-error
166
+ landmark.ClearField('presence')
167
+ return results
@@ -0,0 +1,142 @@
1
+ # Copyright 2020 The MediaPipe Authors.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ """Tests for mediapipe.python.solutions.pose."""
15
+
16
+ import os
17
+ import tempfile # pylint: disable=unused-import
18
+ from typing import NamedTuple
19
+
20
+ from absl.testing import absltest
21
+ from absl.testing import parameterized
22
+ import cv2
23
+ import numpy as np
24
+ import numpy.testing as npt
25
+
26
+ # resources dependency
27
+ # undeclared dependency
28
+ from mediapipe.python.solutions import drawing_styles
29
+ from mediapipe.python.solutions import drawing_utils as mp_drawing
30
+ from mediapipe.python.solutions import holistic as mp_holistic
31
+
32
+ TEST_IMAGE_PATH = 'mediapipe/python/solutions/testdata'
33
+ POSE_DIFF_THRESHOLD = 30 # pixels
34
+ HAND_DIFF_THRESHOLD = 30 # pixels
35
+ EXPECTED_POSE_LANDMARKS = np.array([[782, 243], [791, 232], [796, 233],
36
+ [801, 233], [773, 231], [766, 231],
37
+ [759, 232], [802, 242], [751, 239],
38
+ [791, 258], [766, 258], [830, 301],
39
+ [708, 298], [910, 248], [635, 234],
40
+ [954, 161], [593, 136], [961, 137],
41
+ [583, 110], [952, 132], [592, 106],
42
+ [950, 141], [596, 115], [793, 500],
43
+ [724, 502], [874, 626], [640, 629],
44
+ [965, 756], [542, 760], [962, 779],
45
+ [533, 781], [1025, 797], [487, 803]])
46
+ EXPECTED_LEFT_HAND_LANDMARKS = np.array([[958, 167], [950, 161], [945, 151],
47
+ [945, 141], [947, 134], [945, 136],
48
+ [939, 122], [935, 113], [931, 106],
49
+ [951, 134], [946, 118], [942, 108],
50
+ [938, 100], [957, 135], [954, 120],
51
+ [951, 111], [948, 103], [964, 138],
52
+ [964, 128], [965, 122], [965, 117]])
53
+ EXPECTED_RIGHT_HAND_LANDMARKS = np.array([[590, 135], [602, 125], [609, 114],
54
+ [613, 103], [617, 96], [596, 100],
55
+ [595, 84], [594, 74], [593, 68],
56
+ [588, 100], [586, 84], [585, 73],
57
+ [584, 65], [581, 103], [579, 89],
58
+ [579, 79], [579, 72], [575, 109],
59
+ [571, 99], [570, 93], [569, 87]])
60
+
61
+
62
+ class PoseTest(parameterized.TestCase):
63
+
64
+ def _landmarks_list_to_array(self, landmark_list, image_shape):
65
+ rows, cols, _ = image_shape
66
+ return np.asarray([(lmk.x * cols, lmk.y * rows)
67
+ for lmk in landmark_list.landmark])
68
+
69
+ def _assert_diff_less(self, array1, array2, threshold):
70
+ npt.assert_array_less(np.abs(array1 - array2), threshold)
71
+
72
+ def _annotate(self, frame: np.ndarray, results: NamedTuple, idx: int):
73
+ mp_drawing.draw_landmarks(
74
+ frame,
75
+ results.face_landmarks,
76
+ mp_holistic.FACEMESH_TESSELATION,
77
+ landmark_drawing_spec=None,
78
+ connection_drawing_spec=drawing_styles
79
+ .get_default_face_mesh_tesselation_style())
80
+ mp_drawing.draw_landmarks(
81
+ frame,
82
+ results.pose_landmarks,
83
+ mp_holistic.POSE_CONNECTIONS,
84
+ landmark_drawing_spec=drawing_styles.get_default_pose_landmarks_style())
85
+ path = os.path.join(tempfile.gettempdir(), self.id().split('.')[-1] +
86
+ '_frame_{}.png'.format(idx))
87
+ cv2.imwrite(path, frame)
88
+
89
+ def test_invalid_image_shape(self):
90
+ with mp_holistic.Holistic() as holistic:
91
+ with self.assertRaisesRegex(
92
+ ValueError, 'Input image must contain three channel rgb data.'):
93
+ holistic.process(np.arange(36, dtype=np.uint8).reshape(3, 3, 4))
94
+
95
+ def test_blank_image(self):
96
+ with mp_holistic.Holistic() as holistic:
97
+ image = np.zeros([100, 100, 3], dtype=np.uint8)
98
+ image.fill(255)
99
+ results = holistic.process(image)
100
+ self.assertIsNone(results.pose_landmarks)
101
+
102
+ @parameterized.named_parameters(('static_lite', True, 0, False, 3),
103
+ ('static_full', True, 1, False, 3),
104
+ ('static_heavy', True, 2, False, 3),
105
+ ('video_lite', False, 0, False, 3),
106
+ ('video_full', False, 1, False, 3),
107
+ ('video_heavy', False, 2, False, 3),
108
+ ('static_full_refine_face', True, 1, True, 3),
109
+ ('video_full_refine_face', False, 1, True, 3))
110
+ def test_on_image(self, static_image_mode, model_complexity,
111
+ refine_face_landmarks, num_frames):
112
+ image_path = os.path.join(os.path.dirname(__file__),
113
+ 'testdata/holistic.jpg')
114
+ image = cv2.imread(image_path)
115
+ with mp_holistic.Holistic(
116
+ static_image_mode=static_image_mode,
117
+ model_complexity=model_complexity,
118
+ refine_face_landmarks=refine_face_landmarks) as holistic:
119
+ for idx in range(num_frames):
120
+ results = holistic.process(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
121
+ self._annotate(image.copy(), results, idx)
122
+ self._assert_diff_less(
123
+ self._landmarks_list_to_array(results.pose_landmarks, image.shape),
124
+ EXPECTED_POSE_LANDMARKS,
125
+ POSE_DIFF_THRESHOLD)
126
+ self._assert_diff_less(
127
+ self._landmarks_list_to_array(results.left_hand_landmarks,
128
+ image.shape),
129
+ EXPECTED_LEFT_HAND_LANDMARKS,
130
+ HAND_DIFF_THRESHOLD)
131
+ self._assert_diff_less(
132
+ self._landmarks_list_to_array(results.right_hand_landmarks,
133
+ image.shape),
134
+ EXPECTED_RIGHT_HAND_LANDMARKS,
135
+ HAND_DIFF_THRESHOLD)
136
+ # TODO: Verify the correctness of the face landmarks.
137
+ self.assertLen(results.face_landmarks.landmark,
138
+ 478 if refine_face_landmarks else 468)
139
+
140
+
141
+ if __name__ == '__main__':
142
+ absltest.main()
@@ -0,0 +1,288 @@
1
+ # Copyright 2020-2021 The MediaPipe Authors.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ """MediaPipe Objectron."""
16
+
17
+ import enum
18
+ from typing import List, Tuple, NamedTuple, Optional
19
+
20
+ import attr
21
+ import numpy as np
22
+
23
+ # pylint: disable=unused-import
24
+ from mediapipe.calculators.core import constant_side_packet_calculator_pb2
25
+ from mediapipe.calculators.core import gate_calculator_pb2
26
+ from mediapipe.calculators.core import split_vector_calculator_pb2
27
+ from mediapipe.calculators.tensor import image_to_tensor_calculator_pb2
28
+ from mediapipe.calculators.tensor import inference_calculator_pb2
29
+ from mediapipe.calculators.tensor import tensors_to_detections_calculator_pb2
30
+ from mediapipe.calculators.tensor import tensors_to_floats_calculator_pb2
31
+ from mediapipe.calculators.tensor import tensors_to_landmarks_calculator_pb2
32
+ from mediapipe.calculators.tflite import ssd_anchors_calculator_pb2
33
+ from mediapipe.calculators.util import association_calculator_pb2
34
+ from mediapipe.calculators.util import collection_has_min_size_calculator_pb2
35
+ from mediapipe.calculators.util import detection_label_id_to_text_calculator_pb2
36
+ from mediapipe.calculators.util import detections_to_rects_calculator_pb2
37
+ from mediapipe.calculators.util import landmark_projection_calculator_pb2
38
+ from mediapipe.calculators.util import local_file_contents_calculator_pb2
39
+ from mediapipe.calculators.util import non_max_suppression_calculator_pb2
40
+ from mediapipe.calculators.util import rect_transformation_calculator_pb2
41
+ from mediapipe.calculators.util import thresholding_calculator_pb2
42
+ from mediapipe.framework.formats import landmark_pb2
43
+ from mediapipe.modules.objectron.calculators import annotation_data_pb2
44
+ from mediapipe.modules.objectron.calculators import frame_annotation_to_rect_calculator_pb2
45
+ from mediapipe.modules.objectron.calculators import lift_2d_frame_annotation_to_3d_calculator_pb2
46
+ # pylint: enable=unused-import
47
+ from mediapipe.python.solution_base import SolutionBase
48
+ from mediapipe.python.solutions import download_utils
49
+
50
+
51
+ class BoxLandmark(enum.IntEnum):
52
+ """The 9 3D box landmarks."""
53
+ #
54
+ # 3 + + + + + + + + 7
55
+ # +\ +\ UP
56
+ # + \ + \
57
+ # + \ + \ |
58
+ # + 4 + + + + + + + + 8 | y
59
+ # + + + + |
60
+ # + + + + |
61
+ # + + (0) + + .------- x
62
+ # + + + + \
63
+ # 1 + + + + + + + + 5 + \
64
+ # \ + \ + \ z
65
+ # \ + \ + \
66
+ # \+ \+
67
+ # 2 + + + + + + + + 6
68
+ CENTER = 0
69
+ BACK_BOTTOM_LEFT = 1
70
+ FRONT_BOTTOM_LEFT = 2
71
+ BACK_TOP_LEFT = 3
72
+ FRONT_TOP_LEFT = 4
73
+ BACK_BOTTOM_RIGHT = 5
74
+ FRONT_BOTTOM_RIGHT = 6
75
+ BACK_TOP_RIGHT = 7
76
+ FRONT_TOP_RIGHT = 8
77
+
78
+ _BINARYPB_FILE_PATH = 'mediapipe/modules/objectron/objectron_cpu.binarypb'
79
+ BOX_CONNECTIONS = frozenset([
80
+ (BoxLandmark.BACK_BOTTOM_LEFT, BoxLandmark.FRONT_BOTTOM_LEFT),
81
+ (BoxLandmark.BACK_BOTTOM_LEFT, BoxLandmark.BACK_TOP_LEFT),
82
+ (BoxLandmark.BACK_BOTTOM_LEFT, BoxLandmark.BACK_BOTTOM_RIGHT),
83
+ (BoxLandmark.FRONT_BOTTOM_LEFT, BoxLandmark.FRONT_TOP_LEFT),
84
+ (BoxLandmark.FRONT_BOTTOM_LEFT, BoxLandmark.FRONT_BOTTOM_RIGHT),
85
+ (BoxLandmark.BACK_TOP_LEFT, BoxLandmark.FRONT_TOP_LEFT),
86
+ (BoxLandmark.BACK_TOP_LEFT, BoxLandmark.BACK_TOP_RIGHT),
87
+ (BoxLandmark.FRONT_TOP_LEFT, BoxLandmark.FRONT_TOP_RIGHT),
88
+ (BoxLandmark.BACK_BOTTOM_RIGHT, BoxLandmark.FRONT_BOTTOM_RIGHT),
89
+ (BoxLandmark.BACK_BOTTOM_RIGHT, BoxLandmark.BACK_TOP_RIGHT),
90
+ (BoxLandmark.FRONT_BOTTOM_RIGHT, BoxLandmark.FRONT_TOP_RIGHT),
91
+ (BoxLandmark.BACK_TOP_RIGHT, BoxLandmark.FRONT_TOP_RIGHT),
92
+ ])
93
+
94
+
95
+ @attr.s(auto_attribs=True)
96
+ class ObjectronModel(object):
97
+ model_path: str
98
+ label_name: str
99
+
100
+
101
+ @attr.s(auto_attribs=True, frozen=True)
102
+ class ShoeModel(ObjectronModel):
103
+ model_path: str = ('mediapipe/modules/objectron/'
104
+ 'object_detection_3d_sneakers.tflite')
105
+ label_name: str = 'Footwear'
106
+
107
+
108
+ @attr.s(auto_attribs=True, frozen=True)
109
+ class ChairModel(ObjectronModel):
110
+ model_path: str = ('mediapipe/modules/objectron/'
111
+ 'object_detection_3d_chair.tflite')
112
+ label_name: str = 'Chair'
113
+
114
+
115
+ @attr.s(auto_attribs=True, frozen=True)
116
+ class CameraModel(ObjectronModel):
117
+ model_path: str = ('mediapipe/modules/objectron/'
118
+ 'object_detection_3d_camera.tflite')
119
+ label_name: str = 'Camera'
120
+
121
+
122
+ @attr.s(auto_attribs=True, frozen=True)
123
+ class CupModel(ObjectronModel):
124
+ model_path: str = ('mediapipe/modules/objectron/'
125
+ 'object_detection_3d_cup.tflite')
126
+ label_name: str = 'Coffee cup, Mug'
127
+
128
+ _MODEL_DICT = {
129
+ 'Shoe': ShoeModel(),
130
+ 'Chair': ChairModel(),
131
+ 'Cup': CupModel(),
132
+ 'Camera': CameraModel()
133
+ }
134
+
135
+
136
+ def _download_oss_objectron_models(objectron_model: str):
137
+ """Downloads the objectron models from the MediaPipe Github repo if they don't exist in the package."""
138
+
139
+ download_utils.download_oss_model(
140
+ 'mediapipe/modules/objectron/object_detection_ssd_mobilenetv2_oidv4_fp16.tflite'
141
+ )
142
+ download_utils.download_oss_model(objectron_model)
143
+
144
+
145
+ def get_model_by_name(name: str) -> ObjectronModel:
146
+ if name not in _MODEL_DICT:
147
+ raise ValueError(f'{name} is not a valid model name for Objectron.')
148
+ _download_oss_objectron_models(_MODEL_DICT[name].model_path)
149
+ return _MODEL_DICT[name]
150
+
151
+
152
+ @attr.s(auto_attribs=True)
153
+ class ObjectronOutputs(object):
154
+ landmarks_2d: landmark_pb2.NormalizedLandmarkList
155
+ landmarks_3d: landmark_pb2.LandmarkList
156
+ rotation: np.ndarray
157
+ translation: np.ndarray
158
+ scale: np.ndarray
159
+
160
+
161
+ class Objectron(SolutionBase):
162
+ """MediaPipe Objectron.
163
+
164
+ MediaPipe Objectron processes an RGB image and returns the 3D box landmarks
165
+ and 2D rectangular bounding box of each detected object.
166
+ """
167
+
168
+ def __init__(self,
169
+ static_image_mode: bool = False,
170
+ max_num_objects: int = 5,
171
+ min_detection_confidence: float = 0.5,
172
+ min_tracking_confidence: float = 0.99,
173
+ model_name: str = 'Shoe',
174
+ focal_length: Tuple[float, float] = (1.0, 1.0),
175
+ principal_point: Tuple[float, float] = (0.0, 0.0),
176
+ image_size: Optional[Tuple[int, int]] = None,
177
+ ):
178
+ """Initializes a MediaPipe Objectron class.
179
+
180
+ Args:
181
+ static_image_mode: Whether to treat the input images as a batch of static
182
+ and possibly unrelated images, or a video stream.
183
+ max_num_objects: Maximum number of objects to detect.
184
+ min_detection_confidence: Minimum confidence value ([0.0, 1.0]) for object
185
+ detection to be considered successful.
186
+ min_tracking_confidence: Minimum confidence value ([0.0, 1.0]) for the
187
+ box landmarks to be considered tracked successfully.
188
+ model_name: Name of model to use for predicting box landmarks, currently
189
+ support {'Shoe', 'Chair', 'Cup', 'Camera'}.
190
+ focal_length: Camera focal length `(fx, fy)`, by default is defined in NDC
191
+ space. To use focal length (fx_pixel, fy_pixel) in pixel space, users
192
+ should provide image_size = (image_width, image_height) to enable
193
+ conversions inside the API.
194
+ principal_point: Camera principal point (px, py), by default is defined in
195
+ NDC space. To use principal point (px_pixel, py_pixel) in pixel space,
196
+ users should provide image_size = (image_width, image_height) to enable
197
+ conversions inside the API.
198
+ image_size (Optional): size (image_width, image_height) of the input image
199
+ , ONLY needed when use focal_length and principal_point in pixel space.
200
+
201
+ Raises:
202
+ ConnectionError: If the objectron open source model can't be downloaded
203
+ from the MediaPipe Github repo.
204
+ """
205
+ # Get Camera parameters.
206
+ fx, fy = focal_length
207
+ px, py = principal_point
208
+ if image_size is not None:
209
+ half_width = image_size[0] / 2.0
210
+ half_height = image_size[1] / 2.0
211
+ fx = fx / half_width
212
+ fy = fy / half_height
213
+ px = - (px - half_width) / half_width
214
+ py = - (py - half_height) / half_height
215
+
216
+ # Create and init model.
217
+ model = get_model_by_name(model_name)
218
+ super().__init__(
219
+ binary_graph_path=_BINARYPB_FILE_PATH,
220
+ side_inputs={
221
+ 'box_landmark_model_path': model.model_path,
222
+ 'allowed_labels': model.label_name,
223
+ 'max_num_objects': max_num_objects,
224
+ 'use_prev_landmarks': not static_image_mode,
225
+ },
226
+ calculator_params={
227
+ ('objectdetectionoidv4subgraph'
228
+ '__TensorsToDetectionsCalculator.min_score_thresh'):
229
+ min_detection_confidence,
230
+ ('boxlandmarksubgraph__ThresholdingCalculator'
231
+ '.threshold'):
232
+ min_tracking_confidence,
233
+ ('Lift2DFrameAnnotationTo3DCalculator'
234
+ '.normalized_focal_x'): fx,
235
+ ('Lift2DFrameAnnotationTo3DCalculator'
236
+ '.normalized_focal_y'): fy,
237
+ ('Lift2DFrameAnnotationTo3DCalculator'
238
+ '.normalized_principal_point_x'): px,
239
+ ('Lift2DFrameAnnotationTo3DCalculator'
240
+ '.normalized_principal_point_y'): py,
241
+ },
242
+ outputs=['detected_objects'])
243
+
244
+ def process(self, image: np.ndarray) -> NamedTuple:
245
+ """Processes an RGB image and returns the box landmarks and rectangular bounding box of each detected object.
246
+
247
+ Args:
248
+ image: An RGB image represented as a numpy ndarray.
249
+
250
+ Raises:
251
+ RuntimeError: If the underlying graph throws any error.
252
+ ValueError: If the input image is not three channel RGB.
253
+
254
+ Returns:
255
+ A NamedTuple object with a "detected_objects" field that contains a list
256
+ of detected 3D bounding boxes. Each detected box is represented as an
257
+ "ObjectronOutputs" instance.
258
+ """
259
+
260
+ results = super().process(input_data={'image': image})
261
+ if results.detected_objects: # pytype: disable=attribute-error
262
+ results.detected_objects = self._convert_format(results.detected_objects) # type: ignore
263
+ else:
264
+ results.detected_objects = None # pytype: disable=not-writable
265
+ return results
266
+
267
+ def _convert_format(
268
+ self,
269
+ inputs: annotation_data_pb2.FrameAnnotation) -> List[ObjectronOutputs]:
270
+ new_outputs = list()
271
+ for annotation in inputs.annotations:
272
+ # Get 3d object pose.
273
+ rotation = np.reshape(np.array(annotation.rotation), (3, 3))
274
+ translation = np.array(annotation.translation)
275
+ scale = np.array(annotation.scale)
276
+ # Get 2d/3d landmakrs.
277
+ landmarks_2d = landmark_pb2.NormalizedLandmarkList()
278
+ landmarks_3d = landmark_pb2.LandmarkList()
279
+ for keypoint in annotation.keypoints:
280
+ point_2d = keypoint.point_2d
281
+ landmarks_2d.landmark.add(x=point_2d.x, y=point_2d.y)
282
+ point_3d = keypoint.point_3d
283
+ landmarks_3d.landmark.add(x=point_3d.x, y=point_3d.y, z=point_3d.z)
284
+
285
+ # Add to objectron outputs.
286
+ new_outputs.append(ObjectronOutputs(landmarks_2d, landmarks_3d,
287
+ rotation, translation, scale=scale))
288
+ return new_outputs
@@ -0,0 +1,81 @@
1
+ # Copyright 2020 The MediaPipe Authors.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ """Tests for mediapipe.python.solutions.objectron."""
16
+
17
+ import os
18
+
19
+ from absl.testing import absltest
20
+ from absl.testing import parameterized
21
+ import cv2
22
+ import numpy as np
23
+ import numpy.testing as npt
24
+
25
+ # resources dependency
26
+ from mediapipe.python.solutions import objectron as mp_objectron
27
+
28
+ TEST_IMAGE_PATH = 'mediapipe/python/solutions/testdata'
29
+ DIFF_THRESHOLD = 30 # pixels
30
+ EXPECTED_BOX_COORDINATES_PREDICTION = [[[236, 413], [408, 474], [135, 457],
31
+ [383, 505], [80, 478], [408, 345],
32
+ [130, 347], [384, 355], [72, 353]],
33
+ [[241, 206], [411, 279], [131, 280],
34
+ [392, 249], [78, 252], [412, 155],
35
+ [140, 178], [396, 105], [89, 137]]]
36
+
37
+
38
+ class ObjectronTest(parameterized.TestCase):
39
+
40
+ def test_invalid_image_shape(self):
41
+ with mp_objectron.Objectron() as objectron:
42
+ with self.assertRaisesRegex(
43
+ ValueError, 'Input image must contain three channel rgb data.'):
44
+ objectron.process(np.arange(36, dtype=np.uint8).reshape(3, 3, 4))
45
+
46
+ def test_blank_image(self):
47
+ with mp_objectron.Objectron() as objectron:
48
+ image = np.zeros([100, 100, 3], dtype=np.uint8)
49
+ image.fill(255)
50
+ results = objectron.process(image)
51
+ self.assertIsNone(results.detected_objects)
52
+
53
+ @parameterized.named_parameters(('static_image_mode', True, 1),
54
+ ('video_mode', False, 5))
55
+ def test_multi_objects(self, static_image_mode, num_frames):
56
+ image_path = os.path.join(os.path.dirname(__file__), 'testdata/shoes.jpg')
57
+ image = cv2.imread(image_path)
58
+
59
+ with mp_objectron.Objectron(
60
+ static_image_mode=static_image_mode,
61
+ max_num_objects=2,
62
+ min_detection_confidence=0.5) as objectron:
63
+ for _ in range(num_frames):
64
+ results = objectron.process(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
65
+ multi_box_coordinates = []
66
+ for detected_object in results.detected_objects:
67
+ landmarks = detected_object.landmarks_2d
68
+ self.assertLen(landmarks.landmark, 9)
69
+ x = [landmark.x for landmark in landmarks.landmark]
70
+ y = [landmark.y for landmark in landmarks.landmark]
71
+ box_coordinates = np.transpose(np.stack((y, x))) * image.shape[0:2]
72
+ multi_box_coordinates.append(box_coordinates)
73
+ self.assertLen(multi_box_coordinates, 2)
74
+ prediction_error = np.abs(
75
+ np.asarray(multi_box_coordinates) -
76
+ np.asarray(EXPECTED_BOX_COORDINATES_PREDICTION))
77
+ npt.assert_array_less(prediction_error, DIFF_THRESHOLD)
78
+
79
+
80
+ if __name__ == '__main__':
81
+ absltest.main()