mediapipe-nightly 0.10.21.post20250114__cp312-cp312-macosx_11_0_universal2.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (594) 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/arm64.cpython-312-darwin.so +0 -0
  240. mediapipe/python/_framework_bindings.cpython-312-darwin.so +0 -0
  241. mediapipe/python/calculator_graph_test.py +251 -0
  242. mediapipe/python/image_frame_test.py +194 -0
  243. mediapipe/python/image_test.py +218 -0
  244. mediapipe/python/packet_creator.py +275 -0
  245. mediapipe/python/packet_getter.py +120 -0
  246. mediapipe/python/packet_test.py +533 -0
  247. mediapipe/python/solution_base.py +604 -0
  248. mediapipe/python/solution_base_test.py +396 -0
  249. mediapipe/python/solutions/__init__.py +27 -0
  250. mediapipe/python/solutions/download_utils.py +37 -0
  251. mediapipe/python/solutions/drawing_styles.py +249 -0
  252. mediapipe/python/solutions/drawing_utils.py +320 -0
  253. mediapipe/python/solutions/drawing_utils_test.py +258 -0
  254. mediapipe/python/solutions/face_detection.py +105 -0
  255. mediapipe/python/solutions/face_detection_test.py +92 -0
  256. mediapipe/python/solutions/face_mesh.py +125 -0
  257. mediapipe/python/solutions/face_mesh_connections.py +500 -0
  258. mediapipe/python/solutions/face_mesh_test.py +170 -0
  259. mediapipe/python/solutions/hands.py +153 -0
  260. mediapipe/python/solutions/hands_connections.py +32 -0
  261. mediapipe/python/solutions/hands_test.py +219 -0
  262. mediapipe/python/solutions/holistic.py +167 -0
  263. mediapipe/python/solutions/holistic_test.py +142 -0
  264. mediapipe/python/solutions/objectron.py +288 -0
  265. mediapipe/python/solutions/objectron_test.py +81 -0
  266. mediapipe/python/solutions/pose.py +192 -0
  267. mediapipe/python/solutions/pose_connections.py +22 -0
  268. mediapipe/python/solutions/pose_test.py +262 -0
  269. mediapipe/python/solutions/selfie_segmentation.py +76 -0
  270. mediapipe/python/solutions/selfie_segmentation_test.py +68 -0
  271. mediapipe/python/timestamp_test.py +78 -0
  272. mediapipe/tasks/__init__.py +14 -0
  273. mediapipe/tasks/cc/__init__.py +0 -0
  274. mediapipe/tasks/cc/audio/__init__.py +0 -0
  275. mediapipe/tasks/cc/audio/audio_classifier/__init__.py +0 -0
  276. mediapipe/tasks/cc/audio/audio_classifier/proto/__init__.py +0 -0
  277. mediapipe/tasks/cc/audio/audio_classifier/proto/audio_classifier_graph_options_pb2.py +35 -0
  278. mediapipe/tasks/cc/audio/audio_embedder/__init__.py +0 -0
  279. mediapipe/tasks/cc/audio/audio_embedder/proto/__init__.py +0 -0
  280. mediapipe/tasks/cc/audio/audio_embedder/proto/audio_embedder_graph_options_pb2.py +35 -0
  281. mediapipe/tasks/cc/audio/core/__init__.py +0 -0
  282. mediapipe/tasks/cc/audio/utils/__init__.py +0 -0
  283. mediapipe/tasks/cc/components/__init__.py +0 -0
  284. mediapipe/tasks/cc/components/calculators/__init__.py +0 -0
  285. mediapipe/tasks/cc/components/calculators/classification_aggregation_calculator_pb2.py +31 -0
  286. mediapipe/tasks/cc/components/calculators/score_calibration_calculator_pb2.py +35 -0
  287. mediapipe/tasks/cc/components/calculators/tensors_to_embeddings_calculator_pb2.py +32 -0
  288. mediapipe/tasks/cc/components/containers/__init__.py +0 -0
  289. mediapipe/tasks/cc/components/containers/proto/__init__.py +0 -0
  290. mediapipe/tasks/cc/components/containers/proto/classifications_pb2.py +30 -0
  291. mediapipe/tasks/cc/components/containers/proto/embeddings_pb2.py +35 -0
  292. mediapipe/tasks/cc/components/containers/proto/landmarks_detection_result_pb2.py +32 -0
  293. mediapipe/tasks/cc/components/processors/__init__.py +0 -0
  294. mediapipe/tasks/cc/components/processors/proto/__init__.py +0 -0
  295. mediapipe/tasks/cc/components/processors/proto/classification_postprocessing_graph_options_pb2.py +38 -0
  296. mediapipe/tasks/cc/components/processors/proto/classifier_options_pb2.py +27 -0
  297. mediapipe/tasks/cc/components/processors/proto/detection_postprocessing_graph_options_pb2.py +36 -0
  298. mediapipe/tasks/cc/components/processors/proto/detector_options_pb2.py +27 -0
  299. mediapipe/tasks/cc/components/processors/proto/embedder_options_pb2.py +27 -0
  300. mediapipe/tasks/cc/components/processors/proto/embedding_postprocessing_graph_options_pb2.py +32 -0
  301. mediapipe/tasks/cc/components/processors/proto/image_preprocessing_graph_options_pb2.py +34 -0
  302. mediapipe/tasks/cc/components/processors/proto/text_model_type_pb2.py +28 -0
  303. mediapipe/tasks/cc/components/processors/proto/text_preprocessing_graph_options_pb2.py +32 -0
  304. mediapipe/tasks/cc/components/utils/__init__.py +0 -0
  305. mediapipe/tasks/cc/core/__init__.py +0 -0
  306. mediapipe/tasks/cc/core/proto/__init__.py +0 -0
  307. mediapipe/tasks/cc/core/proto/acceleration_pb2.py +28 -0
  308. mediapipe/tasks/cc/core/proto/base_options_pb2.py +30 -0
  309. mediapipe/tasks/cc/core/proto/external_file_pb2.py +31 -0
  310. mediapipe/tasks/cc/core/proto/inference_subgraph_pb2.py +32 -0
  311. mediapipe/tasks/cc/core/proto/model_resources_calculator_pb2.py +32 -0
  312. mediapipe/tasks/cc/genai/__init__.py +0 -0
  313. mediapipe/tasks/cc/genai/inference/__init__.py +0 -0
  314. mediapipe/tasks/cc/genai/inference/c/__init__.py +0 -0
  315. mediapipe/tasks/cc/genai/inference/calculators/__init__.py +0 -0
  316. mediapipe/tasks/cc/genai/inference/calculators/detokenizer_calculator_pb2.py +27 -0
  317. mediapipe/tasks/cc/genai/inference/calculators/llm_gpu_calculator_pb2.py +32 -0
  318. mediapipe/tasks/cc/genai/inference/calculators/model_data_calculator_pb2.py +27 -0
  319. mediapipe/tasks/cc/genai/inference/calculators/tokenizer_calculator_pb2.py +29 -0
  320. mediapipe/tasks/cc/genai/inference/common/__init__.py +0 -0
  321. mediapipe/tasks/cc/genai/inference/proto/__init__.py +0 -0
  322. mediapipe/tasks/cc/genai/inference/proto/llm_file_metadata_pb2.py +32 -0
  323. mediapipe/tasks/cc/genai/inference/proto/llm_params_pb2.py +33 -0
  324. mediapipe/tasks/cc/genai/inference/proto/prompt_template_pb2.py +27 -0
  325. mediapipe/tasks/cc/genai/inference/proto/sampler_params_pb2.py +29 -0
  326. mediapipe/tasks/cc/genai/inference/proto/transformer_params_pb2.py +45 -0
  327. mediapipe/tasks/cc/genai/inference/utils/__init__.py +0 -0
  328. mediapipe/tasks/cc/genai/inference/utils/llm_utils/__init__.py +0 -0
  329. mediapipe/tasks/cc/genai/inference/utils/xnn_utils/__init__.py +0 -0
  330. mediapipe/tasks/cc/metadata/__init__.py +0 -0
  331. mediapipe/tasks/cc/metadata/python/__init__.py +0 -0
  332. mediapipe/tasks/cc/metadata/python/_pywrap_metadata_version/arm64.cpython-312-darwin.so +0 -0
  333. mediapipe/tasks/cc/metadata/python/_pywrap_metadata_version.cpython-312-darwin.so +0 -0
  334. mediapipe/tasks/cc/metadata/tests/__init__.py +0 -0
  335. mediapipe/tasks/cc/metadata/utils/__init__.py +0 -0
  336. mediapipe/tasks/cc/text/__init__.py +0 -0
  337. mediapipe/tasks/cc/text/custom_ops/__init__.py +0 -0
  338. mediapipe/tasks/cc/text/custom_ops/ragged/__init__.py +0 -0
  339. mediapipe/tasks/cc/text/custom_ops/sentencepiece/__init__.py +0 -0
  340. mediapipe/tasks/cc/text/custom_ops/sentencepiece/testdata/__init__.py +0 -0
  341. mediapipe/tasks/cc/text/language_detector/__init__.py +0 -0
  342. mediapipe/tasks/cc/text/language_detector/custom_ops/__init__.py +0 -0
  343. mediapipe/tasks/cc/text/language_detector/custom_ops/utils/__init__.py +0 -0
  344. mediapipe/tasks/cc/text/language_detector/custom_ops/utils/hash/__init__.py +0 -0
  345. mediapipe/tasks/cc/text/language_detector/custom_ops/utils/utf/__init__.py +0 -0
  346. mediapipe/tasks/cc/text/text_classifier/__init__.py +0 -0
  347. mediapipe/tasks/cc/text/text_classifier/proto/__init__.py +0 -0
  348. mediapipe/tasks/cc/text/text_classifier/proto/text_classifier_graph_options_pb2.py +35 -0
  349. mediapipe/tasks/cc/text/text_embedder/__init__.py +0 -0
  350. mediapipe/tasks/cc/text/text_embedder/proto/__init__.py +0 -0
  351. mediapipe/tasks/cc/text/text_embedder/proto/text_embedder_graph_options_pb2.py +35 -0
  352. mediapipe/tasks/cc/text/tokenizers/__init__.py +0 -0
  353. mediapipe/tasks/cc/text/utils/__init__.py +0 -0
  354. mediapipe/tasks/cc/vision/__init__.py +0 -0
  355. mediapipe/tasks/cc/vision/core/__init__.py +0 -0
  356. mediapipe/tasks/cc/vision/custom_ops/__init__.py +0 -0
  357. mediapipe/tasks/cc/vision/face_detector/__init__.py +0 -0
  358. mediapipe/tasks/cc/vision/face_detector/proto/__init__.py +0 -0
  359. mediapipe/tasks/cc/vision/face_detector/proto/face_detector_graph_options_pb2.py +34 -0
  360. mediapipe/tasks/cc/vision/face_geometry/__init__.py +0 -0
  361. mediapipe/tasks/cc/vision/face_geometry/calculators/__init__.py +0 -0
  362. mediapipe/tasks/cc/vision/face_geometry/calculators/env_generator_calculator_pb2.py +28 -0
  363. mediapipe/tasks/cc/vision/face_geometry/calculators/geometry_pipeline_calculator_pb2.py +29 -0
  364. mediapipe/tasks/cc/vision/face_geometry/data/__init__.py +0 -0
  365. mediapipe/tasks/cc/vision/face_geometry/libs/__init__.py +0 -0
  366. mediapipe/tasks/cc/vision/face_geometry/proto/__init__.py +0 -0
  367. mediapipe/tasks/cc/vision/face_geometry/proto/environment_pb2.py +31 -0
  368. mediapipe/tasks/cc/vision/face_geometry/proto/face_geometry_graph_options_pb2.py +29 -0
  369. mediapipe/tasks/cc/vision/face_geometry/proto/face_geometry_pb2.py +29 -0
  370. mediapipe/tasks/cc/vision/face_geometry/proto/geometry_pipeline_metadata_pb2.py +32 -0
  371. mediapipe/tasks/cc/vision/face_geometry/proto/mesh_3d_pb2.py +31 -0
  372. mediapipe/tasks/cc/vision/face_landmarker/__init__.py +0 -0
  373. mediapipe/tasks/cc/vision/face_landmarker/proto/__init__.py +0 -0
  374. mediapipe/tasks/cc/vision/face_landmarker/proto/face_blendshapes_graph_options_pb2.py +34 -0
  375. mediapipe/tasks/cc/vision/face_landmarker/proto/face_landmarker_graph_options_pb2.py +37 -0
  376. mediapipe/tasks/cc/vision/face_landmarker/proto/face_landmarks_detector_graph_options_pb2.py +35 -0
  377. mediapipe/tasks/cc/vision/face_landmarker/proto/tensors_to_face_landmarks_graph_options_pb2.py +32 -0
  378. mediapipe/tasks/cc/vision/face_stylizer/__init__.py +0 -0
  379. mediapipe/tasks/cc/vision/face_stylizer/calculators/__init__.py +0 -0
  380. mediapipe/tasks/cc/vision/face_stylizer/calculators/tensors_to_image_calculator_pb2.py +36 -0
  381. mediapipe/tasks/cc/vision/face_stylizer/proto/__init__.py +0 -0
  382. mediapipe/tasks/cc/vision/face_stylizer/proto/face_stylizer_graph_options_pb2.py +35 -0
  383. mediapipe/tasks/cc/vision/gesture_recognizer/__init__.py +0 -0
  384. mediapipe/tasks/cc/vision/gesture_recognizer/calculators/__init__.py +0 -0
  385. mediapipe/tasks/cc/vision/gesture_recognizer/calculators/combined_prediction_calculator_pb2.py +33 -0
  386. mediapipe/tasks/cc/vision/gesture_recognizer/calculators/landmarks_to_matrix_calculator_pb2.py +31 -0
  387. mediapipe/tasks/cc/vision/gesture_recognizer/proto/__init__.py +0 -0
  388. mediapipe/tasks/cc/vision/gesture_recognizer/proto/gesture_classifier_graph_options_pb2.py +35 -0
  389. mediapipe/tasks/cc/vision/gesture_recognizer/proto/gesture_embedder_graph_options_pb2.py +34 -0
  390. mediapipe/tasks/cc/vision/gesture_recognizer/proto/gesture_recognizer_graph_options_pb2.py +36 -0
  391. mediapipe/tasks/cc/vision/gesture_recognizer/proto/hand_gesture_recognizer_graph_options_pb2.py +36 -0
  392. mediapipe/tasks/cc/vision/hand_detector/__init__.py +0 -0
  393. mediapipe/tasks/cc/vision/hand_detector/proto/__init__.py +0 -0
  394. mediapipe/tasks/cc/vision/hand_detector/proto/hand_detector_graph_options_pb2.py +34 -0
  395. mediapipe/tasks/cc/vision/hand_detector/proto/hand_detector_result_pb2.py +30 -0
  396. mediapipe/tasks/cc/vision/hand_landmarker/__init__.py +0 -0
  397. mediapipe/tasks/cc/vision/hand_landmarker/calculators/__init__.py +0 -0
  398. mediapipe/tasks/cc/vision/hand_landmarker/calculators/hand_association_calculator_pb2.py +31 -0
  399. mediapipe/tasks/cc/vision/hand_landmarker/proto/__init__.py +0 -0
  400. mediapipe/tasks/cc/vision/hand_landmarker/proto/hand_landmarker_graph_options_pb2.py +36 -0
  401. mediapipe/tasks/cc/vision/hand_landmarker/proto/hand_landmarks_detector_graph_options_pb2.py +34 -0
  402. mediapipe/tasks/cc/vision/hand_landmarker/proto/hand_roi_refinement_graph_options_pb2.py +28 -0
  403. mediapipe/tasks/cc/vision/holistic_landmarker/__init__.py +0 -0
  404. mediapipe/tasks/cc/vision/holistic_landmarker/proto/__init__.py +0 -0
  405. mediapipe/tasks/cc/vision/holistic_landmarker/proto/holistic_landmarker_graph_options_pb2.py +34 -0
  406. mediapipe/tasks/cc/vision/holistic_landmarker/proto/holistic_result_pb2.py +29 -0
  407. mediapipe/tasks/cc/vision/image_classifier/__init__.py +0 -0
  408. mediapipe/tasks/cc/vision/image_classifier/proto/__init__.py +0 -0
  409. mediapipe/tasks/cc/vision/image_classifier/proto/image_classifier_graph_options_pb2.py +35 -0
  410. mediapipe/tasks/cc/vision/image_embedder/__init__.py +0 -0
  411. mediapipe/tasks/cc/vision/image_embedder/proto/__init__.py +0 -0
  412. mediapipe/tasks/cc/vision/image_embedder/proto/image_embedder_graph_options_pb2.py +35 -0
  413. mediapipe/tasks/cc/vision/image_generator/__init__.py +0 -0
  414. mediapipe/tasks/cc/vision/image_generator/diffuser/__init__.py +0 -0
  415. mediapipe/tasks/cc/vision/image_generator/diffuser/stable_diffusion_iterate_calculator_pb2.py +40 -0
  416. mediapipe/tasks/cc/vision/image_generator/proto/__init__.py +0 -0
  417. mediapipe/tasks/cc/vision/image_generator/proto/conditioned_image_graph_options_pb2.py +40 -0
  418. mediapipe/tasks/cc/vision/image_generator/proto/control_plugin_graph_options_pb2.py +34 -0
  419. mediapipe/tasks/cc/vision/image_generator/proto/image_generator_graph_options_pb2.py +30 -0
  420. mediapipe/tasks/cc/vision/image_segmenter/__init__.py +0 -0
  421. mediapipe/tasks/cc/vision/image_segmenter/calculators/__init__.py +0 -0
  422. mediapipe/tasks/cc/vision/image_segmenter/calculators/tensors_to_segmentation_calculator_pb2.py +34 -0
  423. mediapipe/tasks/cc/vision/image_segmenter/proto/__init__.py +0 -0
  424. mediapipe/tasks/cc/vision/image_segmenter/proto/image_segmenter_graph_options_pb2.py +35 -0
  425. mediapipe/tasks/cc/vision/image_segmenter/proto/segmenter_options_pb2.py +33 -0
  426. mediapipe/tasks/cc/vision/interactive_segmenter/__init__.py +0 -0
  427. mediapipe/tasks/cc/vision/object_detector/__init__.py +0 -0
  428. mediapipe/tasks/cc/vision/object_detector/proto/__init__.py +0 -0
  429. mediapipe/tasks/cc/vision/object_detector/proto/object_detector_options_pb2.py +34 -0
  430. mediapipe/tasks/cc/vision/pose_detector/__init__.py +0 -0
  431. mediapipe/tasks/cc/vision/pose_detector/proto/__init__.py +0 -0
  432. mediapipe/tasks/cc/vision/pose_detector/proto/pose_detector_graph_options_pb2.py +34 -0
  433. mediapipe/tasks/cc/vision/pose_landmarker/__init__.py +0 -0
  434. mediapipe/tasks/cc/vision/pose_landmarker/proto/__init__.py +0 -0
  435. mediapipe/tasks/cc/vision/pose_landmarker/proto/pose_landmarker_graph_options_pb2.py +36 -0
  436. mediapipe/tasks/cc/vision/pose_landmarker/proto/pose_landmarks_detector_graph_options_pb2.py +34 -0
  437. mediapipe/tasks/cc/vision/utils/__init__.py +0 -0
  438. mediapipe/tasks/cc/vision/utils/ghum/__init__.py +0 -0
  439. mediapipe/tasks/metadata/image_segmenter_metadata_schema.fbs +59 -0
  440. mediapipe/tasks/metadata/image_segmenter_metadata_schema_py_generated.py +108 -0
  441. mediapipe/tasks/metadata/metadata_schema.fbs +732 -0
  442. mediapipe/tasks/metadata/metadata_schema_py_generated.py +3251 -0
  443. mediapipe/tasks/metadata/object_detector_metadata_schema.fbs +98 -0
  444. mediapipe/tasks/metadata/object_detector_metadata_schema_py_generated.py +674 -0
  445. mediapipe/tasks/metadata/schema_py_generated.py +18438 -0
  446. mediapipe/tasks/python/__init__.py +27 -0
  447. mediapipe/tasks/python/audio/__init__.py +33 -0
  448. mediapipe/tasks/python/audio/audio_classifier.py +324 -0
  449. mediapipe/tasks/python/audio/audio_embedder.py +285 -0
  450. mediapipe/tasks/python/audio/core/__init__.py +16 -0
  451. mediapipe/tasks/python/audio/core/audio_record.py +125 -0
  452. mediapipe/tasks/python/audio/core/audio_task_running_mode.py +29 -0
  453. mediapipe/tasks/python/audio/core/base_audio_task_api.py +181 -0
  454. mediapipe/tasks/python/benchmark/__init__.py +13 -0
  455. mediapipe/tasks/python/benchmark/benchmark_utils.py +70 -0
  456. mediapipe/tasks/python/benchmark/vision/__init__.py +13 -0
  457. mediapipe/tasks/python/benchmark/vision/benchmark.py +99 -0
  458. mediapipe/tasks/python/benchmark/vision/core/__init__.py +14 -0
  459. mediapipe/tasks/python/benchmark/vision/core/base_vision_benchmark_api.py +40 -0
  460. mediapipe/tasks/python/components/__init__.py +13 -0
  461. mediapipe/tasks/python/components/containers/__init__.py +53 -0
  462. mediapipe/tasks/python/components/containers/audio_data.py +137 -0
  463. mediapipe/tasks/python/components/containers/bounding_box.py +73 -0
  464. mediapipe/tasks/python/components/containers/category.py +78 -0
  465. mediapipe/tasks/python/components/containers/classification_result.py +111 -0
  466. mediapipe/tasks/python/components/containers/detections.py +181 -0
  467. mediapipe/tasks/python/components/containers/embedding_result.py +89 -0
  468. mediapipe/tasks/python/components/containers/keypoint.py +77 -0
  469. mediapipe/tasks/python/components/containers/landmark.py +122 -0
  470. mediapipe/tasks/python/components/containers/landmark_detection_result.py +106 -0
  471. mediapipe/tasks/python/components/containers/rect.py +109 -0
  472. mediapipe/tasks/python/components/processors/__init__.py +23 -0
  473. mediapipe/tasks/python/components/processors/classifier_options.py +86 -0
  474. mediapipe/tasks/python/components/utils/__init__.py +13 -0
  475. mediapipe/tasks/python/components/utils/cosine_similarity.py +68 -0
  476. mediapipe/tasks/python/core/__init__.py +13 -0
  477. mediapipe/tasks/python/core/base_options.py +121 -0
  478. mediapipe/tasks/python/core/optional_dependencies.py +25 -0
  479. mediapipe/tasks/python/core/task_info.py +139 -0
  480. mediapipe/tasks/python/genai/__init__.py +14 -0
  481. mediapipe/tasks/python/genai/bundler/__init__.py +23 -0
  482. mediapipe/tasks/python/genai/bundler/llm_bundler.py +130 -0
  483. mediapipe/tasks/python/genai/bundler/llm_bundler_test.py +168 -0
  484. mediapipe/tasks/python/genai/converter/__init__.py +24 -0
  485. mediapipe/tasks/python/genai/converter/converter_base.py +179 -0
  486. mediapipe/tasks/python/genai/converter/converter_factory.py +79 -0
  487. mediapipe/tasks/python/genai/converter/llm_converter.py +374 -0
  488. mediapipe/tasks/python/genai/converter/llm_converter_test.py +63 -0
  489. mediapipe/tasks/python/genai/converter/pytorch_converter.py +318 -0
  490. mediapipe/tasks/python/genai/converter/pytorch_converter_test.py +86 -0
  491. mediapipe/tasks/python/genai/converter/quantization_util.py +516 -0
  492. mediapipe/tasks/python/genai/converter/quantization_util_test.py +259 -0
  493. mediapipe/tasks/python/genai/converter/safetensors_converter.py +580 -0
  494. mediapipe/tasks/python/genai/converter/safetensors_converter_test.py +83 -0
  495. mediapipe/tasks/python/genai/converter/weight_bins_writer.py +120 -0
  496. mediapipe/tasks/python/genai/converter/weight_bins_writer_test.py +95 -0
  497. mediapipe/tasks/python/metadata/__init__.py +13 -0
  498. mediapipe/tasks/python/metadata/flatbuffers_lib/_pywrap_flatbuffers/arm64.cpython-312-darwin.so +0 -0
  499. mediapipe/tasks/python/metadata/flatbuffers_lib/_pywrap_flatbuffers.cpython-312-darwin.so +0 -0
  500. mediapipe/tasks/python/metadata/metadata.py +928 -0
  501. mediapipe/tasks/python/metadata/metadata_displayer_cli.py +34 -0
  502. mediapipe/tasks/python/metadata/metadata_writers/__init__.py +13 -0
  503. mediapipe/tasks/python/metadata/metadata_writers/face_stylizer.py +138 -0
  504. mediapipe/tasks/python/metadata/metadata_writers/image_classifier.py +71 -0
  505. mediapipe/tasks/python/metadata/metadata_writers/image_segmenter.py +170 -0
  506. mediapipe/tasks/python/metadata/metadata_writers/metadata_info.py +1166 -0
  507. mediapipe/tasks/python/metadata/metadata_writers/metadata_writer.py +845 -0
  508. mediapipe/tasks/python/metadata/metadata_writers/model_asset_bundle_utils.py +71 -0
  509. mediapipe/tasks/python/metadata/metadata_writers/object_detector.py +331 -0
  510. mediapipe/tasks/python/metadata/metadata_writers/text_classifier.py +119 -0
  511. mediapipe/tasks/python/metadata/metadata_writers/writer_utils.py +91 -0
  512. mediapipe/tasks/python/test/__init__.py +13 -0
  513. mediapipe/tasks/python/test/audio/__init__.py +13 -0
  514. mediapipe/tasks/python/test/audio/audio_classifier_test.py +387 -0
  515. mediapipe/tasks/python/test/audio/audio_embedder_test.py +297 -0
  516. mediapipe/tasks/python/test/test_utils.py +196 -0
  517. mediapipe/tasks/python/test/text/__init__.py +13 -0
  518. mediapipe/tasks/python/test/text/language_detector_test.py +228 -0
  519. mediapipe/tasks/python/test/text/text_classifier_test.py +235 -0
  520. mediapipe/tasks/python/test/text/text_embedder_test.py +326 -0
  521. mediapipe/tasks/python/test/vision/__init__.py +13 -0
  522. mediapipe/tasks/python/test/vision/face_aligner_test.py +190 -0
  523. mediapipe/tasks/python/test/vision/face_detector_test.py +523 -0
  524. mediapipe/tasks/python/test/vision/face_landmarker_test.py +565 -0
  525. mediapipe/tasks/python/test/vision/face_stylizer_test.py +191 -0
  526. mediapipe/tasks/python/test/vision/hand_landmarker_test.py +437 -0
  527. mediapipe/tasks/python/test/vision/holistic_landmarker_test.py +544 -0
  528. mediapipe/tasks/python/test/vision/image_classifier_test.py +657 -0
  529. mediapipe/tasks/python/test/vision/image_embedder_test.py +423 -0
  530. mediapipe/tasks/python/test/vision/image_segmenter_test.py +512 -0
  531. mediapipe/tasks/python/test/vision/interactive_segmenter_test.py +341 -0
  532. mediapipe/tasks/python/test/vision/object_detector_test.py +493 -0
  533. mediapipe/tasks/python/test/vision/pose_landmarker_test.py +518 -0
  534. mediapipe/tasks/python/text/__init__.py +35 -0
  535. mediapipe/tasks/python/text/core/__init__.py +16 -0
  536. mediapipe/tasks/python/text/core/base_text_task_api.py +54 -0
  537. mediapipe/tasks/python/text/language_detector.py +220 -0
  538. mediapipe/tasks/python/text/text_classifier.py +187 -0
  539. mediapipe/tasks/python/text/text_embedder.py +188 -0
  540. mediapipe/tasks/python/vision/__init__.py +90 -0
  541. mediapipe/tasks/python/vision/core/__init__.py +14 -0
  542. mediapipe/tasks/python/vision/core/base_vision_task_api.py +226 -0
  543. mediapipe/tasks/python/vision/core/image_processing_options.py +39 -0
  544. mediapipe/tasks/python/vision/core/vision_task_running_mode.py +31 -0
  545. mediapipe/tasks/python/vision/face_aligner.py +158 -0
  546. mediapipe/tasks/python/vision/face_detector.py +332 -0
  547. mediapipe/tasks/python/vision/face_landmarker.py +3244 -0
  548. mediapipe/tasks/python/vision/face_stylizer.py +158 -0
  549. mediapipe/tasks/python/vision/gesture_recognizer.py +480 -0
  550. mediapipe/tasks/python/vision/hand_landmarker.py +504 -0
  551. mediapipe/tasks/python/vision/holistic_landmarker.py +576 -0
  552. mediapipe/tasks/python/vision/image_classifier.py +358 -0
  553. mediapipe/tasks/python/vision/image_embedder.py +362 -0
  554. mediapipe/tasks/python/vision/image_segmenter.py +433 -0
  555. mediapipe/tasks/python/vision/interactive_segmenter.py +285 -0
  556. mediapipe/tasks/python/vision/object_detector.py +389 -0
  557. mediapipe/tasks/python/vision/pose_landmarker.py +455 -0
  558. mediapipe/util/__init__.py +0 -0
  559. mediapipe/util/analytics/__init__.py +0 -0
  560. mediapipe/util/analytics/mediapipe_log_extension_pb2.py +44 -0
  561. mediapipe/util/analytics/mediapipe_logging_enums_pb2.py +37 -0
  562. mediapipe/util/audio_decoder_pb2.py +33 -0
  563. mediapipe/util/color_pb2.py +33 -0
  564. mediapipe/util/label_map_pb2.py +27 -0
  565. mediapipe/util/render_data_pb2.py +58 -0
  566. mediapipe/util/sequence/__init__.py +14 -0
  567. mediapipe/util/sequence/media_sequence.py +716 -0
  568. mediapipe/util/sequence/media_sequence_test.py +290 -0
  569. mediapipe/util/sequence/media_sequence_util.py +800 -0
  570. mediapipe/util/sequence/media_sequence_util_test.py +389 -0
  571. mediapipe/util/tracking/__init__.py +0 -0
  572. mediapipe/util/tracking/box_detector_pb2.py +39 -0
  573. mediapipe/util/tracking/box_tracker_pb2.py +32 -0
  574. mediapipe/util/tracking/camera_motion_pb2.py +31 -0
  575. mediapipe/util/tracking/flow_packager_pb2.py +60 -0
  576. mediapipe/util/tracking/frame_selection_pb2.py +35 -0
  577. mediapipe/util/tracking/frame_selection_solution_evaluator_pb2.py +28 -0
  578. mediapipe/util/tracking/motion_analysis_pb2.py +35 -0
  579. mediapipe/util/tracking/motion_estimation_pb2.py +66 -0
  580. mediapipe/util/tracking/motion_models_pb2.py +42 -0
  581. mediapipe/util/tracking/motion_saliency_pb2.py +26 -0
  582. mediapipe/util/tracking/push_pull_filtering_pb2.py +26 -0
  583. mediapipe/util/tracking/region_flow_computation_pb2.py +59 -0
  584. mediapipe/util/tracking/region_flow_pb2.py +49 -0
  585. mediapipe/util/tracking/tone_estimation_pb2.py +45 -0
  586. mediapipe/util/tracking/tone_models_pb2.py +32 -0
  587. mediapipe/util/tracking/tracked_detection_manager_config_pb2.py +26 -0
  588. mediapipe/util/tracking/tracking_pb2.py +73 -0
  589. mediapipe/version.txt +1 -0
  590. mediapipe_nightly-0.10.21.post20250114.dist-info/LICENSE +218 -0
  591. mediapipe_nightly-0.10.21.post20250114.dist-info/METADATA +209 -0
  592. mediapipe_nightly-0.10.21.post20250114.dist-info/RECORD +593 -0
  593. mediapipe_nightly-0.10.21.post20250114.dist-info/WHEEL +5 -0
  594. mediapipe_nightly-0.10.21.post20250114.dist-info/top_level.txt +4 -0
@@ -0,0 +1,249 @@
1
+ # Copyright 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 requi_RED 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 solution drawing styles."""
15
+
16
+ from typing import Mapping, Tuple
17
+
18
+ from mediapipe.python.solutions import face_mesh_connections
19
+ from mediapipe.python.solutions import hands_connections
20
+ from mediapipe.python.solutions.drawing_utils import DrawingSpec
21
+ from mediapipe.python.solutions.hands import HandLandmark
22
+ from mediapipe.python.solutions.pose import PoseLandmark
23
+
24
+ _RADIUS = 5
25
+ _RED = (48, 48, 255)
26
+ _GREEN = (48, 255, 48)
27
+ _BLUE = (192, 101, 21)
28
+ _YELLOW = (0, 204, 255)
29
+ _GRAY = (128, 128, 128)
30
+ _PURPLE = (128, 64, 128)
31
+ _PEACH = (180, 229, 255)
32
+ _WHITE = (224, 224, 224)
33
+ _CYAN = (192, 255, 48)
34
+ _MAGENTA = (192, 48, 255)
35
+
36
+ # Hands
37
+ _THICKNESS_WRIST_MCP = 3
38
+ _THICKNESS_FINGER = 2
39
+ _THICKNESS_DOT = -1
40
+
41
+ # Hand landmarks
42
+ _PALM_LANDMARKS = (HandLandmark.WRIST, HandLandmark.THUMB_CMC,
43
+ HandLandmark.INDEX_FINGER_MCP,
44
+ HandLandmark.MIDDLE_FINGER_MCP, HandLandmark.RING_FINGER_MCP,
45
+ HandLandmark.PINKY_MCP)
46
+ _THUMP_LANDMARKS = (HandLandmark.THUMB_MCP, HandLandmark.THUMB_IP,
47
+ HandLandmark.THUMB_TIP)
48
+ _INDEX_FINGER_LANDMARKS = (HandLandmark.INDEX_FINGER_PIP,
49
+ HandLandmark.INDEX_FINGER_DIP,
50
+ HandLandmark.INDEX_FINGER_TIP)
51
+ _MIDDLE_FINGER_LANDMARKS = (HandLandmark.MIDDLE_FINGER_PIP,
52
+ HandLandmark.MIDDLE_FINGER_DIP,
53
+ HandLandmark.MIDDLE_FINGER_TIP)
54
+ _RING_FINGER_LANDMARKS = (HandLandmark.RING_FINGER_PIP,
55
+ HandLandmark.RING_FINGER_DIP,
56
+ HandLandmark.RING_FINGER_TIP)
57
+ _PINKY_FINGER_LANDMARKS = (HandLandmark.PINKY_PIP, HandLandmark.PINKY_DIP,
58
+ HandLandmark.PINKY_TIP)
59
+ _HAND_LANDMARK_STYLE = {
60
+ _PALM_LANDMARKS:
61
+ DrawingSpec(
62
+ color=_RED, thickness=_THICKNESS_DOT, circle_radius=_RADIUS),
63
+ _THUMP_LANDMARKS:
64
+ DrawingSpec(
65
+ color=_PEACH, thickness=_THICKNESS_DOT, circle_radius=_RADIUS),
66
+ _INDEX_FINGER_LANDMARKS:
67
+ DrawingSpec(
68
+ color=_PURPLE, thickness=_THICKNESS_DOT, circle_radius=_RADIUS),
69
+ _MIDDLE_FINGER_LANDMARKS:
70
+ DrawingSpec(
71
+ color=_YELLOW, thickness=_THICKNESS_DOT, circle_radius=_RADIUS),
72
+ _RING_FINGER_LANDMARKS:
73
+ DrawingSpec(
74
+ color=_GREEN, thickness=_THICKNESS_DOT, circle_radius=_RADIUS),
75
+ _PINKY_FINGER_LANDMARKS:
76
+ DrawingSpec(
77
+ color=_BLUE, thickness=_THICKNESS_DOT, circle_radius=_RADIUS),
78
+ }
79
+
80
+ # Hands connections
81
+ _HAND_CONNECTION_STYLE = {
82
+ hands_connections.HAND_PALM_CONNECTIONS:
83
+ DrawingSpec(color=_GRAY, thickness=_THICKNESS_WRIST_MCP),
84
+ hands_connections.HAND_THUMB_CONNECTIONS:
85
+ DrawingSpec(color=_PEACH, thickness=_THICKNESS_FINGER),
86
+ hands_connections.HAND_INDEX_FINGER_CONNECTIONS:
87
+ DrawingSpec(color=_PURPLE, thickness=_THICKNESS_FINGER),
88
+ hands_connections.HAND_MIDDLE_FINGER_CONNECTIONS:
89
+ DrawingSpec(color=_YELLOW, thickness=_THICKNESS_FINGER),
90
+ hands_connections.HAND_RING_FINGER_CONNECTIONS:
91
+ DrawingSpec(color=_GREEN, thickness=_THICKNESS_FINGER),
92
+ hands_connections.HAND_PINKY_FINGER_CONNECTIONS:
93
+ DrawingSpec(color=_BLUE, thickness=_THICKNESS_FINGER)
94
+ }
95
+
96
+ # FaceMesh connections
97
+ _THICKNESS_TESSELATION = 1
98
+ _THICKNESS_CONTOURS = 2
99
+ _FACEMESH_CONTOURS_CONNECTION_STYLE = {
100
+ face_mesh_connections.FACEMESH_LIPS:
101
+ DrawingSpec(color=_WHITE, thickness=_THICKNESS_CONTOURS),
102
+ face_mesh_connections.FACEMESH_LEFT_EYE:
103
+ DrawingSpec(color=_GREEN, thickness=_THICKNESS_CONTOURS),
104
+ face_mesh_connections.FACEMESH_LEFT_EYEBROW:
105
+ DrawingSpec(color=_GREEN, thickness=_THICKNESS_CONTOURS),
106
+ face_mesh_connections.FACEMESH_RIGHT_EYE:
107
+ DrawingSpec(color=_RED, thickness=_THICKNESS_CONTOURS),
108
+ face_mesh_connections.FACEMESH_RIGHT_EYEBROW:
109
+ DrawingSpec(color=_RED, thickness=_THICKNESS_CONTOURS),
110
+ face_mesh_connections.FACEMESH_FACE_OVAL:
111
+ DrawingSpec(color=_WHITE, thickness=_THICKNESS_CONTOURS)
112
+ }
113
+
114
+ _FACEMESH_CONTOURS_CONNECTION_STYLE_1 = {
115
+ face_mesh_connections.FACEMESH_LIPS:
116
+ DrawingSpec(color=_BLUE, thickness=_THICKNESS_CONTOURS),
117
+ face_mesh_connections.FACEMESH_LEFT_EYE:
118
+ DrawingSpec(color=_CYAN, thickness=_THICKNESS_CONTOURS),
119
+ face_mesh_connections.FACEMESH_LEFT_EYEBROW:
120
+ DrawingSpec(color=_GREEN, thickness=_THICKNESS_CONTOURS),
121
+ face_mesh_connections.FACEMESH_RIGHT_EYE:
122
+ DrawingSpec(color=_MAGENTA, thickness=_THICKNESS_CONTOURS),
123
+ face_mesh_connections.FACEMESH_RIGHT_EYEBROW:
124
+ DrawingSpec(color=_RED, thickness=_THICKNESS_CONTOURS),
125
+ face_mesh_connections.FACEMESH_FACE_OVAL:
126
+ DrawingSpec(color=_WHITE, thickness=_THICKNESS_CONTOURS),
127
+ face_mesh_connections.FACEMESH_NOSE:
128
+ DrawingSpec(color=_YELLOW, thickness=_THICKNESS_CONTOURS)
129
+ }
130
+
131
+ # Pose
132
+ _THICKNESS_POSE_LANDMARKS = 2
133
+ _POSE_LANDMARKS_LEFT = frozenset([
134
+ PoseLandmark.LEFT_EYE_INNER, PoseLandmark.LEFT_EYE,
135
+ PoseLandmark.LEFT_EYE_OUTER, PoseLandmark.LEFT_EAR, PoseLandmark.MOUTH_LEFT,
136
+ PoseLandmark.LEFT_SHOULDER, PoseLandmark.LEFT_ELBOW,
137
+ PoseLandmark.LEFT_WRIST, PoseLandmark.LEFT_PINKY, PoseLandmark.LEFT_INDEX,
138
+ PoseLandmark.LEFT_THUMB, PoseLandmark.LEFT_HIP, PoseLandmark.LEFT_KNEE,
139
+ PoseLandmark.LEFT_ANKLE, PoseLandmark.LEFT_HEEL,
140
+ PoseLandmark.LEFT_FOOT_INDEX
141
+ ])
142
+
143
+ _POSE_LANDMARKS_RIGHT = frozenset([
144
+ PoseLandmark.RIGHT_EYE_INNER, PoseLandmark.RIGHT_EYE,
145
+ PoseLandmark.RIGHT_EYE_OUTER, PoseLandmark.RIGHT_EAR,
146
+ PoseLandmark.MOUTH_RIGHT, PoseLandmark.RIGHT_SHOULDER,
147
+ PoseLandmark.RIGHT_ELBOW, PoseLandmark.RIGHT_WRIST,
148
+ PoseLandmark.RIGHT_PINKY, PoseLandmark.RIGHT_INDEX,
149
+ PoseLandmark.RIGHT_THUMB, PoseLandmark.RIGHT_HIP, PoseLandmark.RIGHT_KNEE,
150
+ PoseLandmark.RIGHT_ANKLE, PoseLandmark.RIGHT_HEEL,
151
+ PoseLandmark.RIGHT_FOOT_INDEX
152
+ ])
153
+
154
+
155
+ def get_default_hand_landmarks_style() -> Mapping[int, DrawingSpec]:
156
+ """Returns the default hand landmarks drawing style.
157
+
158
+ Returns:
159
+ A mapping from each hand landmark to its default drawing spec.
160
+ """
161
+ hand_landmark_style = {}
162
+ for k, v in _HAND_LANDMARK_STYLE.items():
163
+ for landmark in k:
164
+ hand_landmark_style[landmark] = v
165
+ return hand_landmark_style
166
+
167
+
168
+ def get_default_hand_connections_style(
169
+ ) -> Mapping[Tuple[int, int], DrawingSpec]:
170
+ """Returns the default hand connections drawing style.
171
+
172
+ Returns:
173
+ A mapping from each hand connection to its default drawing spec.
174
+ """
175
+ hand_connection_style = {}
176
+ for k, v in _HAND_CONNECTION_STYLE.items():
177
+ for connection in k:
178
+ hand_connection_style[connection] = v
179
+ return hand_connection_style
180
+
181
+
182
+ def get_default_face_mesh_contours_style(
183
+ i: int = 0,
184
+ ) -> Mapping[Tuple[int, int], DrawingSpec]:
185
+ """Returns the default face mesh contours drawing style.
186
+
187
+ Args:
188
+ i: The id for default style. Currently there are two default styles.
189
+
190
+ Returns:
191
+ A mapping from each face mesh contours connection to its default drawing
192
+ spec.
193
+ """
194
+ default_style = (
195
+ _FACEMESH_CONTOURS_CONNECTION_STYLE_1
196
+ if i == 1
197
+ else _FACEMESH_CONTOURS_CONNECTION_STYLE
198
+ )
199
+ face_mesh_contours_connection_style = {}
200
+ for k, v in default_style.items():
201
+ for connection in k:
202
+ face_mesh_contours_connection_style[connection] = v
203
+ return face_mesh_contours_connection_style
204
+
205
+
206
+ def get_default_face_mesh_tesselation_style() -> DrawingSpec:
207
+ """Returns the default face mesh tesselation drawing style.
208
+
209
+ Returns:
210
+ A DrawingSpec.
211
+ """
212
+ return DrawingSpec(color=_GRAY, thickness=_THICKNESS_TESSELATION)
213
+
214
+
215
+ def get_default_face_mesh_iris_connections_style(
216
+ ) -> Mapping[Tuple[int, int], DrawingSpec]:
217
+ """Returns the default face mesh iris connections drawing style.
218
+
219
+ Returns:
220
+ A mapping from each iris connection to its default drawing spec.
221
+ """
222
+ face_mesh_iris_connections_style = {}
223
+ left_spec = DrawingSpec(color=_GREEN, thickness=_THICKNESS_CONTOURS)
224
+ for connection in face_mesh_connections.FACEMESH_LEFT_IRIS:
225
+ face_mesh_iris_connections_style[connection] = left_spec
226
+ right_spec = DrawingSpec(color=_RED, thickness=_THICKNESS_CONTOURS)
227
+ for connection in face_mesh_connections.FACEMESH_RIGHT_IRIS:
228
+ face_mesh_iris_connections_style[connection] = right_spec
229
+ return face_mesh_iris_connections_style
230
+
231
+
232
+ def get_default_pose_landmarks_style() -> Mapping[int, DrawingSpec]:
233
+ """Returns the default pose landmarks drawing style.
234
+
235
+ Returns:
236
+ A mapping from each pose landmark to its default drawing spec.
237
+ """
238
+ pose_landmark_style = {}
239
+ left_spec = DrawingSpec(
240
+ color=(0, 138, 255), thickness=_THICKNESS_POSE_LANDMARKS)
241
+ right_spec = DrawingSpec(
242
+ color=(231, 217, 0), thickness=_THICKNESS_POSE_LANDMARKS)
243
+ for landmark in _POSE_LANDMARKS_LEFT:
244
+ pose_landmark_style[landmark] = left_spec
245
+ for landmark in _POSE_LANDMARKS_RIGHT:
246
+ pose_landmark_style[landmark] = right_spec
247
+ pose_landmark_style[PoseLandmark.NOSE] = DrawingSpec(
248
+ color=_WHITE, thickness=_THICKNESS_POSE_LANDMARKS)
249
+ return pose_landmark_style
@@ -0,0 +1,320 @@
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
+ """MediaPipe solution drawing utils."""
15
+
16
+ import dataclasses
17
+ import math
18
+ from typing import List, Mapping, Optional, Tuple, Union
19
+
20
+ import cv2
21
+ import matplotlib.pyplot as plt
22
+ import numpy as np
23
+
24
+ from mediapipe.framework.formats import detection_pb2
25
+ from mediapipe.framework.formats import landmark_pb2
26
+ from mediapipe.framework.formats import location_data_pb2
27
+
28
+ _PRESENCE_THRESHOLD = 0.5
29
+ _VISIBILITY_THRESHOLD = 0.5
30
+ _BGR_CHANNELS = 3
31
+
32
+ WHITE_COLOR = (224, 224, 224)
33
+ BLACK_COLOR = (0, 0, 0)
34
+ RED_COLOR = (0, 0, 255)
35
+ GREEN_COLOR = (0, 128, 0)
36
+ BLUE_COLOR = (255, 0, 0)
37
+
38
+
39
+ @dataclasses.dataclass
40
+ class DrawingSpec:
41
+ # Color for drawing the annotation. Default to the white color.
42
+ color: Tuple[int, int, int] = WHITE_COLOR
43
+ # Thickness for drawing the annotation. Default to 2 pixels.
44
+ thickness: int = 2
45
+ # Circle radius. Default to 2 pixels.
46
+ circle_radius: int = 2
47
+
48
+
49
+ def _normalized_to_pixel_coordinates(
50
+ normalized_x: float, normalized_y: float, image_width: int,
51
+ image_height: int) -> Union[None, Tuple[int, int]]:
52
+ """Converts normalized value pair to pixel coordinates."""
53
+
54
+ # Checks if the float value is between 0 and 1.
55
+ def is_valid_normalized_value(value: float) -> bool:
56
+ return (value > 0 or math.isclose(0, value)) and (value < 1 or
57
+ math.isclose(1, value))
58
+
59
+ if not (is_valid_normalized_value(normalized_x) and
60
+ is_valid_normalized_value(normalized_y)):
61
+ # TODO: Draw coordinates even if it's outside of the image bounds.
62
+ return None
63
+ x_px = min(math.floor(normalized_x * image_width), image_width - 1)
64
+ y_px = min(math.floor(normalized_y * image_height), image_height - 1)
65
+ return x_px, y_px
66
+
67
+
68
+ def draw_detection(
69
+ image: np.ndarray,
70
+ detection: detection_pb2.Detection,
71
+ keypoint_drawing_spec: DrawingSpec = DrawingSpec(color=RED_COLOR),
72
+ bbox_drawing_spec: DrawingSpec = DrawingSpec()):
73
+ """Draws the detction bounding box and keypoints on the image.
74
+
75
+ Args:
76
+ image: A three channel BGR image represented as numpy ndarray.
77
+ detection: A detection proto message to be annotated on the image.
78
+ keypoint_drawing_spec: A DrawingSpec object that specifies the keypoints'
79
+ drawing settings such as color, line thickness, and circle radius.
80
+ bbox_drawing_spec: A DrawingSpec object that specifies the bounding box's
81
+ drawing settings such as color and line thickness.
82
+
83
+ Raises:
84
+ ValueError: If one of the followings:
85
+ a) If the input image is not three channel BGR.
86
+ b) If the location data is not relative data.
87
+ """
88
+ if not detection.location_data:
89
+ return
90
+ if image.shape[2] != _BGR_CHANNELS:
91
+ raise ValueError('Input image must contain three channel bgr data.')
92
+ image_rows, image_cols, _ = image.shape
93
+
94
+ location = detection.location_data
95
+ if location.format != location_data_pb2.LocationData.RELATIVE_BOUNDING_BOX:
96
+ raise ValueError(
97
+ 'LocationData must be relative for this drawing funtion to work.')
98
+ # Draws keypoints.
99
+ for keypoint in location.relative_keypoints:
100
+ keypoint_px = _normalized_to_pixel_coordinates(keypoint.x, keypoint.y,
101
+ image_cols, image_rows)
102
+ cv2.circle(image, keypoint_px, keypoint_drawing_spec.circle_radius,
103
+ keypoint_drawing_spec.color, keypoint_drawing_spec.thickness)
104
+ # Draws bounding box if exists.
105
+ if not location.HasField('relative_bounding_box'):
106
+ return
107
+ relative_bounding_box = location.relative_bounding_box
108
+ rect_start_point = _normalized_to_pixel_coordinates(
109
+ relative_bounding_box.xmin, relative_bounding_box.ymin, image_cols,
110
+ image_rows)
111
+ rect_end_point = _normalized_to_pixel_coordinates(
112
+ relative_bounding_box.xmin + relative_bounding_box.width,
113
+ relative_bounding_box.ymin + relative_bounding_box.height, image_cols,
114
+ image_rows)
115
+ cv2.rectangle(image, rect_start_point, rect_end_point,
116
+ bbox_drawing_spec.color, bbox_drawing_spec.thickness)
117
+
118
+
119
+ def draw_landmarks(
120
+ image: np.ndarray,
121
+ landmark_list: landmark_pb2.NormalizedLandmarkList,
122
+ connections: Optional[List[Tuple[int, int]]] = None,
123
+ landmark_drawing_spec: Optional[
124
+ Union[DrawingSpec, Mapping[int, DrawingSpec]]
125
+ ] = DrawingSpec(color=RED_COLOR),
126
+ connection_drawing_spec: Union[
127
+ DrawingSpec, Mapping[Tuple[int, int], DrawingSpec]
128
+ ] = DrawingSpec(),
129
+ is_drawing_landmarks: bool = True,
130
+ ):
131
+ """Draws the landmarks and the connections on the image.
132
+
133
+ Args:
134
+ image: A three channel BGR image represented as numpy ndarray.
135
+ landmark_list: A normalized landmark list proto message to be annotated on
136
+ the image.
137
+ connections: A list of landmark index tuples that specifies how landmarks to
138
+ be connected in the drawing.
139
+ landmark_drawing_spec: Either a DrawingSpec object or a mapping from hand
140
+ landmarks to the DrawingSpecs that specifies the landmarks' drawing
141
+ settings such as color, line thickness, and circle radius. If this
142
+ argument is explicitly set to None, no landmarks will be drawn.
143
+ connection_drawing_spec: Either a DrawingSpec object or a mapping from hand
144
+ connections to the DrawingSpecs that specifies the connections' drawing
145
+ settings such as color and line thickness. If this argument is explicitly
146
+ set to None, no landmark connections will be drawn.
147
+ is_drawing_landmarks: Whether to draw landmarks. If set false, skip drawing
148
+ landmarks, only contours will be drawed.
149
+
150
+ Raises:
151
+ ValueError: If one of the followings:
152
+ a) If the input image is not three channel BGR.
153
+ b) If any connetions contain invalid landmark index.
154
+ """
155
+ if not landmark_list:
156
+ return
157
+ if image.shape[2] != _BGR_CHANNELS:
158
+ raise ValueError('Input image must contain three channel bgr data.')
159
+ image_rows, image_cols, _ = image.shape
160
+ idx_to_coordinates = {}
161
+ for idx, landmark in enumerate(landmark_list.landmark):
162
+ if ((landmark.HasField('visibility') and
163
+ landmark.visibility < _VISIBILITY_THRESHOLD) or
164
+ (landmark.HasField('presence') and
165
+ landmark.presence < _PRESENCE_THRESHOLD)):
166
+ continue
167
+ landmark_px = _normalized_to_pixel_coordinates(landmark.x, landmark.y,
168
+ image_cols, image_rows)
169
+ if landmark_px:
170
+ idx_to_coordinates[idx] = landmark_px
171
+ if connections:
172
+ num_landmarks = len(landmark_list.landmark)
173
+ # Draws the connections if the start and end landmarks are both visible.
174
+ for connection in connections:
175
+ start_idx = connection[0]
176
+ end_idx = connection[1]
177
+ if not (0 <= start_idx < num_landmarks and 0 <= end_idx < num_landmarks):
178
+ raise ValueError(f'Landmark index is out of range. Invalid connection '
179
+ f'from landmark #{start_idx} to landmark #{end_idx}.')
180
+ if start_idx in idx_to_coordinates and end_idx in idx_to_coordinates:
181
+ drawing_spec = connection_drawing_spec[connection] if isinstance(
182
+ connection_drawing_spec, Mapping) else connection_drawing_spec
183
+ cv2.line(image, idx_to_coordinates[start_idx],
184
+ idx_to_coordinates[end_idx], drawing_spec.color,
185
+ drawing_spec.thickness)
186
+ # Draws landmark points after finishing the connection lines, which is
187
+ # aesthetically better.
188
+ if is_drawing_landmarks and landmark_drawing_spec:
189
+ for idx, landmark_px in idx_to_coordinates.items():
190
+ drawing_spec = landmark_drawing_spec[idx] if isinstance(
191
+ landmark_drawing_spec, Mapping) else landmark_drawing_spec
192
+ # White circle border
193
+ circle_border_radius = max(drawing_spec.circle_radius + 1,
194
+ int(drawing_spec.circle_radius * 1.2))
195
+ cv2.circle(image, landmark_px, circle_border_radius, WHITE_COLOR,
196
+ drawing_spec.thickness)
197
+ # Fill color into the circle
198
+ cv2.circle(image, landmark_px, drawing_spec.circle_radius,
199
+ drawing_spec.color, drawing_spec.thickness)
200
+
201
+
202
+ def draw_axis(image: np.ndarray,
203
+ rotation: np.ndarray,
204
+ translation: np.ndarray,
205
+ focal_length: Tuple[float, float] = (1.0, 1.0),
206
+ principal_point: Tuple[float, float] = (0.0, 0.0),
207
+ axis_length: float = 0.1,
208
+ axis_drawing_spec: DrawingSpec = DrawingSpec()):
209
+ """Draws the 3D axis on the image.
210
+
211
+ Args:
212
+ image: A three channel BGR image represented as numpy ndarray.
213
+ rotation: Rotation matrix from object to camera coordinate frame.
214
+ translation: Translation vector from object to camera coordinate frame.
215
+ focal_length: camera focal length along x and y directions.
216
+ principal_point: camera principal point in x and y.
217
+ axis_length: length of the axis in the drawing.
218
+ axis_drawing_spec: A DrawingSpec object that specifies the xyz axis drawing
219
+ settings such as line thickness.
220
+
221
+ Raises:
222
+ ValueError: If one of the followings:
223
+ a) If the input image is not three channel BGR.
224
+ """
225
+ if image.shape[2] != _BGR_CHANNELS:
226
+ raise ValueError('Input image must contain three channel bgr data.')
227
+ image_rows, image_cols, _ = image.shape
228
+ # Create axis points in camera coordinate frame.
229
+ axis_world = np.float32([[0, 0, 0], [1, 0, 0], [0, 1, 0], [0, 0, 1]])
230
+ axis_cam = np.matmul(rotation, axis_length * axis_world.T).T + translation
231
+ x = axis_cam[..., 0]
232
+ y = axis_cam[..., 1]
233
+ z = axis_cam[..., 2]
234
+ # Project 3D points to NDC space.
235
+ fx, fy = focal_length
236
+ px, py = principal_point
237
+ x_ndc = np.clip(-fx * x / (z + 1e-5) + px, -1., 1.)
238
+ y_ndc = np.clip(-fy * y / (z + 1e-5) + py, -1., 1.)
239
+ # Convert from NDC space to image space.
240
+ x_im = np.int32((1 + x_ndc) * 0.5 * image_cols)
241
+ y_im = np.int32((1 - y_ndc) * 0.5 * image_rows)
242
+ # Draw xyz axis on the image.
243
+ origin = (x_im[0], y_im[0])
244
+ x_axis = (x_im[1], y_im[1])
245
+ y_axis = (x_im[2], y_im[2])
246
+ z_axis = (x_im[3], y_im[3])
247
+ cv2.arrowedLine(image, origin, x_axis, RED_COLOR, axis_drawing_spec.thickness)
248
+ cv2.arrowedLine(image, origin, y_axis, GREEN_COLOR,
249
+ axis_drawing_spec.thickness)
250
+ cv2.arrowedLine(image, origin, z_axis, BLUE_COLOR,
251
+ axis_drawing_spec.thickness)
252
+
253
+
254
+ def _normalize_color(color):
255
+ return tuple(v / 255. for v in color)
256
+
257
+
258
+ def plot_landmarks(landmark_list: landmark_pb2.NormalizedLandmarkList,
259
+ connections: Optional[List[Tuple[int, int]]] = None,
260
+ landmark_drawing_spec: DrawingSpec = DrawingSpec(
261
+ color=RED_COLOR, thickness=5),
262
+ connection_drawing_spec: DrawingSpec = DrawingSpec(
263
+ color=BLACK_COLOR, thickness=5),
264
+ elevation: int = 10,
265
+ azimuth: int = 10):
266
+ """Plot the landmarks and the connections in matplotlib 3d.
267
+
268
+ Args:
269
+ landmark_list: A normalized landmark list proto message to be plotted.
270
+ connections: A list of landmark index tuples that specifies how landmarks to
271
+ be connected.
272
+ landmark_drawing_spec: A DrawingSpec object that specifies the landmarks'
273
+ drawing settings such as color and line thickness.
274
+ connection_drawing_spec: A DrawingSpec object that specifies the
275
+ connections' drawing settings such as color and line thickness.
276
+ elevation: The elevation from which to view the plot.
277
+ azimuth: the azimuth angle to rotate the plot.
278
+
279
+ Raises:
280
+ ValueError: If any connection contains an invalid landmark index.
281
+ """
282
+ if not landmark_list:
283
+ return
284
+ plt.figure(figsize=(10, 10))
285
+ ax = plt.axes(projection='3d')
286
+ ax.view_init(elev=elevation, azim=azimuth)
287
+ plotted_landmarks = {}
288
+ for idx, landmark in enumerate(landmark_list.landmark):
289
+ if ((landmark.HasField('visibility') and
290
+ landmark.visibility < _VISIBILITY_THRESHOLD) or
291
+ (landmark.HasField('presence') and
292
+ landmark.presence < _PRESENCE_THRESHOLD)):
293
+ continue
294
+ ax.scatter3D(
295
+ xs=[-landmark.z],
296
+ ys=[landmark.x],
297
+ zs=[-landmark.y],
298
+ color=_normalize_color(landmark_drawing_spec.color[::-1]),
299
+ linewidth=landmark_drawing_spec.thickness)
300
+ plotted_landmarks[idx] = (-landmark.z, landmark.x, -landmark.y)
301
+ if connections:
302
+ num_landmarks = len(landmark_list.landmark)
303
+ # Draws the connections if the start and end landmarks are both visible.
304
+ for connection in connections:
305
+ start_idx = connection[0]
306
+ end_idx = connection[1]
307
+ if not (0 <= start_idx < num_landmarks and 0 <= end_idx < num_landmarks):
308
+ raise ValueError(f'Landmark index is out of range. Invalid connection '
309
+ f'from landmark #{start_idx} to landmark #{end_idx}.')
310
+ if start_idx in plotted_landmarks and end_idx in plotted_landmarks:
311
+ landmark_pair = [
312
+ plotted_landmarks[start_idx], plotted_landmarks[end_idx]
313
+ ]
314
+ ax.plot3D(
315
+ xs=[landmark_pair[0][0], landmark_pair[1][0]],
316
+ ys=[landmark_pair[0][1], landmark_pair[1][1]],
317
+ zs=[landmark_pair[0][2], landmark_pair[1][2]],
318
+ color=_normalize_color(connection_drawing_spec.color[::-1]),
319
+ linewidth=connection_drawing_spec.thickness)
320
+ plt.show()