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,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()