mediapipe-nightly 0.10.21.post20241223__cp39-cp39-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-39-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-39-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-39-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,194 @@
1
+ # Copyright 2020 The MediaPipe Authors.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ """Tests for mediapipe.python._framework_bindings.image_frame."""
16
+
17
+ import gc
18
+ import random
19
+ import sys
20
+
21
+ from absl.testing import absltest
22
+ import cv2
23
+ import numpy as np
24
+ import PIL.Image
25
+
26
+ from mediapipe.python._framework_bindings import image_frame
27
+
28
+ ImageFormat = image_frame.ImageFormat
29
+ ImageFrame = image_frame.ImageFrame
30
+
31
+
32
+ # TODO: Add unit tests specifically for memory management.
33
+ class ImageFrameTest(absltest.TestCase):
34
+
35
+ def test_create_image_frame_from_gray_cv_mat(self):
36
+ w, h = random.randrange(3, 100), random.randrange(3, 100)
37
+ mat = cv2.cvtColor(
38
+ np.random.randint(2**8 - 1, size=(h, w, 3), dtype=np.uint8),
39
+ cv2.COLOR_RGB2GRAY)
40
+ mat[2, 2] = 42
41
+ gray8_image_frame = ImageFrame(image_format=ImageFormat.GRAY8, data=mat)
42
+ self.assertTrue(np.array_equal(mat, gray8_image_frame.numpy_view()))
43
+ with self.assertRaisesRegex(IndexError, 'index dimension mismatch'):
44
+ print(gray8_image_frame[w, h, 1])
45
+ with self.assertRaisesRegex(IndexError, 'out of bounds'):
46
+ print(gray8_image_frame[w, h])
47
+ self.assertEqual(42, gray8_image_frame[2, 2])
48
+
49
+ def test_create_image_frame_from_rgb_cv_mat(self):
50
+ w, h, channels = random.randrange(3, 100), random.randrange(3, 100), 3
51
+ mat = cv2.cvtColor(
52
+ np.random.randint(2**8 - 1, size=(h, w, channels), dtype=np.uint8),
53
+ cv2.COLOR_RGB2BGR)
54
+ mat[2, 2, 1] = 42
55
+ rgb_image_frame = ImageFrame(image_format=ImageFormat.SRGB, data=mat)
56
+ self.assertTrue(np.array_equal(mat, rgb_image_frame.numpy_view()))
57
+ with self.assertRaisesRegex(IndexError, 'out of bounds'):
58
+ print(rgb_image_frame[w, h, channels])
59
+ self.assertEqual(42, rgb_image_frame[2, 2, 1])
60
+
61
+ def test_create_image_frame_from_rgb48_cv_mat(self):
62
+ w, h, channels = random.randrange(3, 100), random.randrange(3, 100), 3
63
+ mat = cv2.cvtColor(
64
+ np.random.randint(2**16 - 1, size=(h, w, channels), dtype=np.uint16),
65
+ cv2.COLOR_RGB2BGR)
66
+ mat[2, 2, 1] = 42
67
+ rgb48_image_frame = ImageFrame(image_format=ImageFormat.SRGB48, data=mat)
68
+ self.assertTrue(np.array_equal(mat, rgb48_image_frame.numpy_view()))
69
+ with self.assertRaisesRegex(IndexError, 'out of bounds'):
70
+ print(rgb48_image_frame[w, h, channels])
71
+ self.assertEqual(42, rgb48_image_frame[2, 2, 1])
72
+
73
+ def test_create_image_frame_from_gray_pil_image(self):
74
+ w, h = random.randrange(3, 100), random.randrange(3, 100)
75
+ img = PIL.Image.fromarray(
76
+ np.random.randint(2**8 - 1, size=(h, w), dtype=np.uint8), 'L')
77
+ gray8_image_frame = ImageFrame(
78
+ image_format=ImageFormat.GRAY8, data=np.asarray(img))
79
+ self.assertTrue(
80
+ np.array_equal(np.asarray(img), gray8_image_frame.numpy_view()))
81
+ with self.assertRaisesRegex(IndexError, 'index dimension mismatch'):
82
+ print(gray8_image_frame[w, h, 1])
83
+ with self.assertRaisesRegex(IndexError, 'out of bounds'):
84
+ print(gray8_image_frame[w, h])
85
+
86
+ def test_create_image_frame_from_rgb_pil_image(self):
87
+ w, h, channels = random.randrange(3, 100), random.randrange(3, 100), 3
88
+ img = PIL.Image.fromarray(
89
+ np.random.randint(2**8 - 1, size=(h, w, channels), dtype=np.uint8),
90
+ 'RGB')
91
+ rgb_image_frame = ImageFrame(
92
+ image_format=ImageFormat.SRGB, data=np.asarray(img))
93
+ self.assertTrue(
94
+ np.array_equal(np.asarray(img), rgb_image_frame.numpy_view()))
95
+ with self.assertRaisesRegex(IndexError, 'out of bounds'):
96
+ print(rgb_image_frame[w, h, channels])
97
+
98
+ def test_create_image_frame_from_rgba64_pil_image(self):
99
+ w, h, channels = random.randrange(3, 100), random.randrange(3, 100), 4
100
+ img = PIL.Image.fromarray(
101
+ np.random.randint(2**16 - 1, size=(h, w, channels), dtype=np.uint16),
102
+ 'RGBA')
103
+ rgba_image_frame = ImageFrame(
104
+ image_format=ImageFormat.SRGBA64,
105
+ data=np.asarray(img).astype(np.uint16))
106
+ self.assertTrue(
107
+ np.array_equal(np.asarray(img), rgba_image_frame.numpy_view()))
108
+ with self.assertRaisesRegex(IndexError, 'out of bounds'):
109
+ print(rgba_image_frame[1000, 1000, 1000])
110
+
111
+ def test_image_frame_numby_view(self):
112
+ w, h, channels = random.randrange(3, 100), random.randrange(3, 100), 3
113
+ mat = cv2.cvtColor(
114
+ np.random.randint(2**8 - 1, size=(h, w, channels), dtype=np.uint8),
115
+ cv2.COLOR_RGB2BGR)
116
+ rgb_image_frame = ImageFrame(image_format=ImageFormat.SRGB, data=mat)
117
+ output_ndarray = rgb_image_frame.numpy_view()
118
+ self.assertTrue(np.array_equal(mat, rgb_image_frame.numpy_view()))
119
+ # The output of numpy_view() is a reference to the internal data and it's
120
+ # unwritable after creation.
121
+ with self.assertRaisesRegex(ValueError,
122
+ 'assignment destination is read-only'):
123
+ output_ndarray[0, 0, 0] = 0
124
+ copied_ndarray = np.copy(output_ndarray)
125
+ copied_ndarray[0, 0, 0] = 0
126
+
127
+ def test_cropped_gray8_image(self):
128
+ w, h = random.randrange(20, 100), random.randrange(20, 100)
129
+ channels, offset = 3, 10
130
+ mat = cv2.cvtColor(
131
+ np.random.randint(2**8 - 1, size=(h, w, channels), dtype=np.uint8),
132
+ cv2.COLOR_RGB2GRAY)
133
+ gray8_image_frame = ImageFrame(
134
+ image_format=ImageFormat.GRAY8,
135
+ data=np.ascontiguousarray(mat[offset:-offset, offset:-offset]))
136
+ self.assertTrue(
137
+ np.array_equal(mat[offset:-offset, offset:-offset],
138
+ gray8_image_frame.numpy_view()))
139
+
140
+ def test_cropped_rgb_image(self):
141
+ w, h = random.randrange(20, 100), random.randrange(20, 100)
142
+ channels, offset = 3, 10
143
+ mat = cv2.cvtColor(
144
+ np.random.randint(2**8 - 1, size=(h, w, channels), dtype=np.uint8),
145
+ cv2.COLOR_RGB2BGR)
146
+ rgb_image_frame = ImageFrame(
147
+ image_format=ImageFormat.SRGB,
148
+ data=np.ascontiguousarray(mat[offset:-offset, offset:-offset, :]))
149
+ self.assertTrue(
150
+ np.array_equal(mat[offset:-offset, offset:-offset, :],
151
+ rgb_image_frame.numpy_view()))
152
+
153
+ # For image frames that store contiguous data, the output of numpy_view()
154
+ # points to the pixel data of the original image frame object. The life cycle
155
+ # of the data array should tie to the image frame object.
156
+ def test_image_frame_numpy_view_with_contiguous_data(self):
157
+ w, h = 640, 480
158
+ mat = np.random.randint(2**8 - 1, size=(h, w, 3), dtype=np.uint8)
159
+ rgb_image_frame = ImageFrame(image_format=ImageFormat.SRGB, data=mat)
160
+ self.assertTrue(rgb_image_frame.is_contiguous())
161
+ initial_ref_count = sys.getrefcount(rgb_image_frame)
162
+ self.assertTrue(np.array_equal(mat, rgb_image_frame.numpy_view()))
163
+ # Get 2 data array objects and verify that the image frame's ref count is
164
+ # increased by 2.
165
+ np_view = rgb_image_frame.numpy_view()
166
+ self.assertEqual(sys.getrefcount(rgb_image_frame), initial_ref_count + 1)
167
+ np_view2 = rgb_image_frame.numpy_view()
168
+ self.assertEqual(sys.getrefcount(rgb_image_frame), initial_ref_count + 2)
169
+ del np_view
170
+ del np_view2
171
+ gc.collect()
172
+ # After the two data array objects getting destroyed, the current ref count
173
+ # should euqal to the initial ref count.
174
+ self.assertEqual(sys.getrefcount(rgb_image_frame), initial_ref_count)
175
+
176
+ # For image frames that store non contiguous data, the output of numpy_view()
177
+ # stores a copy of the pixel data of the image frame object. The life cycle of
178
+ # the data array doesn't tie to the image frame object.
179
+ def test_image_frame_numpy_view_with_non_contiguous_data(self):
180
+ w, h = 641, 481
181
+ mat = np.random.randint(2**8 - 1, size=(h, w, 3), dtype=np.uint8)
182
+ rgb_image_frame = ImageFrame(image_format=ImageFormat.SRGB, data=mat)
183
+ self.assertFalse(rgb_image_frame.is_contiguous())
184
+ initial_ref_count = sys.getrefcount(rgb_image_frame)
185
+ self.assertTrue(np.array_equal(mat, rgb_image_frame.numpy_view()))
186
+ np_view = rgb_image_frame.numpy_view()
187
+ self.assertEqual(sys.getrefcount(rgb_image_frame), initial_ref_count)
188
+ del np_view
189
+ gc.collect()
190
+ self.assertEqual(sys.getrefcount(rgb_image_frame), initial_ref_count)
191
+
192
+
193
+ if __name__ == '__main__':
194
+ absltest.main()
@@ -0,0 +1,218 @@
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 required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ """Tests for mediapipe.python._framework_bindings.image."""
16
+
17
+ import gc
18
+ import os
19
+ import random
20
+ import sys
21
+
22
+ from absl.testing import absltest
23
+ import cv2
24
+ import numpy as np
25
+ import PIL.Image
26
+
27
+ # resources dependency
28
+ from mediapipe.python._framework_bindings import image
29
+ from mediapipe.python._framework_bindings import image_frame
30
+
31
+ TEST_IMAGE_PATH = 'mediapipe/python/solutions/testdata'
32
+
33
+ Image = image.Image
34
+ ImageFormat = image_frame.ImageFormat
35
+
36
+
37
+ # TODO: Add unit tests specifically for memory management.
38
+ class ImageTest(absltest.TestCase):
39
+
40
+ def test_create_image_from_gray_cv_mat(self):
41
+ w, h = random.randrange(3, 100), random.randrange(3, 100)
42
+ mat = cv2.cvtColor(
43
+ np.random.randint(2**8 - 1, size=(h, w, 3), dtype=np.uint8),
44
+ cv2.COLOR_RGB2GRAY)
45
+ mat[2, 2] = 42
46
+ gray8_image = Image(image_format=ImageFormat.GRAY8, data=mat)
47
+ self.assertTrue(np.array_equal(mat, gray8_image.numpy_view()))
48
+ with self.assertRaisesRegex(IndexError, 'index dimension mismatch'):
49
+ print(gray8_image[w, h, 1])
50
+ with self.assertRaisesRegex(IndexError, 'out of bounds'):
51
+ print(gray8_image[w, h])
52
+ self.assertEqual(42, gray8_image[2, 2])
53
+
54
+ def test_create_image_from_rgb_cv_mat(self):
55
+ w, h, channels = random.randrange(3, 100), random.randrange(3, 100), 3
56
+ mat = cv2.cvtColor(
57
+ np.random.randint(2**8 - 1, size=(h, w, channels), dtype=np.uint8),
58
+ cv2.COLOR_RGB2BGR)
59
+ mat[2, 2, 1] = 42
60
+ rgb_image = Image(image_format=ImageFormat.SRGB, data=mat)
61
+ self.assertTrue(np.array_equal(mat, rgb_image.numpy_view()))
62
+ with self.assertRaisesRegex(IndexError, 'out of bounds'):
63
+ print(rgb_image[w, h, channels])
64
+ self.assertEqual(42, rgb_image[2, 2, 1])
65
+
66
+ def test_create_image_from_rgb48_cv_mat(self):
67
+ w, h, channels = random.randrange(3, 100), random.randrange(3, 100), 3
68
+ mat = cv2.cvtColor(
69
+ np.random.randint(2**16 - 1, size=(h, w, channels), dtype=np.uint16),
70
+ cv2.COLOR_RGB2BGR)
71
+ mat[2, 2, 1] = 42
72
+ rgb48_image = Image(image_format=ImageFormat.SRGB48, data=mat)
73
+ self.assertTrue(np.array_equal(mat, rgb48_image.numpy_view()))
74
+ with self.assertRaisesRegex(IndexError, 'out of bounds'):
75
+ print(rgb48_image[w, h, channels])
76
+ self.assertEqual(42, rgb48_image[2, 2, 1])
77
+
78
+ def test_create_image_from_gray_pil_image(self):
79
+ w, h = random.randrange(3, 100), random.randrange(3, 100)
80
+ img = PIL.Image.fromarray(
81
+ np.random.randint(2**8 - 1, size=(h, w), dtype=np.uint8), 'L')
82
+ gray8_image = Image(image_format=ImageFormat.GRAY8, data=np.asarray(img))
83
+ self.assertTrue(np.array_equal(np.asarray(img), gray8_image.numpy_view()))
84
+ with self.assertRaisesRegex(IndexError, 'index dimension mismatch'):
85
+ print(gray8_image[w, h, 1])
86
+ with self.assertRaisesRegex(IndexError, 'out of bounds'):
87
+ print(gray8_image[w, h])
88
+
89
+ def test_create_image_from_rgb_pil_image(self):
90
+ w, h, channels = random.randrange(3, 100), random.randrange(3, 100), 3
91
+ img = PIL.Image.fromarray(
92
+ np.random.randint(2**8 - 1, size=(h, w, channels), dtype=np.uint8),
93
+ 'RGB')
94
+ rgb_image = Image(image_format=ImageFormat.SRGB, data=np.asarray(img))
95
+ self.assertTrue(np.array_equal(np.asarray(img), rgb_image.numpy_view()))
96
+ with self.assertRaisesRegex(IndexError, 'out of bounds'):
97
+ print(rgb_image[w, h, channels])
98
+
99
+ def test_create_image_from_rgba64_pil_image(self):
100
+ w, h, channels = random.randrange(3, 100), random.randrange(3, 100), 4
101
+ img = PIL.Image.fromarray(
102
+ np.random.randint(2**16 - 1, size=(h, w, channels), dtype=np.uint16),
103
+ 'RGBA')
104
+ rgba_image = Image(
105
+ image_format=ImageFormat.SRGBA64,
106
+ data=np.asarray(img).astype(np.uint16))
107
+ self.assertTrue(np.array_equal(np.asarray(img), rgba_image.numpy_view()))
108
+ with self.assertRaisesRegex(IndexError, 'out of bounds'):
109
+ print(rgba_image[1000, 1000, 1000])
110
+
111
+ def test_image_numby_view(self):
112
+ w, h, channels = random.randrange(3, 100), random.randrange(3, 100), 3
113
+ mat = cv2.cvtColor(
114
+ np.random.randint(2**8 - 1, size=(h, w, channels), dtype=np.uint8),
115
+ cv2.COLOR_RGB2BGR)
116
+ rgb_image = Image(image_format=ImageFormat.SRGB, data=mat)
117
+ output_ndarray = rgb_image.numpy_view()
118
+ self.assertTrue(np.array_equal(mat, rgb_image.numpy_view()))
119
+ # The output of numpy_view() is a reference to the internal data and it's
120
+ # unwritable after creation.
121
+ with self.assertRaisesRegex(ValueError,
122
+ 'assignment destination is read-only'):
123
+ output_ndarray[0, 0, 0] = 0
124
+ copied_ndarray = np.copy(output_ndarray)
125
+ copied_ndarray[0, 0, 0] = 0
126
+
127
+ def test_cropped_gray8_image(self):
128
+ w, h = random.randrange(20, 100), random.randrange(20, 100)
129
+ channels, offset = 3, 10
130
+ mat = cv2.cvtColor(
131
+ np.random.randint(2**8 - 1, size=(h, w, channels), dtype=np.uint8),
132
+ cv2.COLOR_RGB2GRAY)
133
+ gray8_image = Image(
134
+ image_format=ImageFormat.GRAY8,
135
+ data=np.ascontiguousarray(mat[offset:-offset, offset:-offset]))
136
+ self.assertTrue(
137
+ np.array_equal(mat[offset:-offset, offset:-offset],
138
+ gray8_image.numpy_view()))
139
+
140
+ def test_cropped_rgb_image(self):
141
+ w, h = random.randrange(20, 100), random.randrange(20, 100)
142
+ channels, offset = 3, 10
143
+ mat = cv2.cvtColor(
144
+ np.random.randint(2**8 - 1, size=(h, w, channels), dtype=np.uint8),
145
+ cv2.COLOR_RGB2BGR)
146
+ rgb_image = Image(
147
+ image_format=ImageFormat.SRGB,
148
+ data=np.ascontiguousarray(mat[offset:-offset, offset:-offset, :]))
149
+ self.assertTrue(
150
+ np.array_equal(mat[offset:-offset, offset:-offset, :],
151
+ rgb_image.numpy_view()))
152
+
153
+ # For image frames that store contiguous data, the output of numpy_view()
154
+ # points to the pixel data of the original image frame object. The life cycle
155
+ # of the data array should tie to the image frame object.
156
+ def test_image_numpy_view_with_contiguous_data(self):
157
+ w, h = 640, 480
158
+ mat = np.random.randint(2**8 - 1, size=(h, w, 3), dtype=np.uint8)
159
+ rgb_image = Image(image_format=ImageFormat.SRGB, data=mat)
160
+ self.assertTrue(rgb_image.is_contiguous())
161
+ initial_ref_count = sys.getrefcount(rgb_image)
162
+ self.assertTrue(np.array_equal(mat, rgb_image.numpy_view()))
163
+ # Get 2 data array objects and verify that the image frame's ref count is
164
+ # increased by 2.
165
+ np_view = rgb_image.numpy_view()
166
+ self.assertEqual(sys.getrefcount(rgb_image), initial_ref_count + 1)
167
+ np_view2 = rgb_image.numpy_view()
168
+ self.assertEqual(sys.getrefcount(rgb_image), initial_ref_count + 2)
169
+ del np_view
170
+ del np_view2
171
+ gc.collect()
172
+ # After the two data array objects getting destroyed, the current ref count
173
+ # should euqal to the initial ref count.
174
+ self.assertEqual(sys.getrefcount(rgb_image), initial_ref_count)
175
+
176
+ # For image frames that store non contiguous data, the output of numpy_view()
177
+ # stores a copy of the pixel data of the image frame object. The life cycle of
178
+ # the data array doesn't tie to the image frame object.
179
+ def test_image_numpy_view_with_non_contiguous_data(self):
180
+ w, h = 641, 481
181
+ mat = np.random.randint(2**8 - 1, size=(h, w, 3), dtype=np.uint8)
182
+ rgb_image = Image(image_format=ImageFormat.SRGB, data=mat)
183
+ self.assertFalse(rgb_image.is_contiguous())
184
+ initial_ref_count = sys.getrefcount(rgb_image)
185
+ self.assertTrue(np.array_equal(mat, rgb_image.numpy_view()))
186
+ np_view = rgb_image.numpy_view()
187
+ self.assertEqual(sys.getrefcount(rgb_image), initial_ref_count)
188
+ del np_view
189
+ gc.collect()
190
+ self.assertEqual(sys.getrefcount(rgb_image), initial_ref_count)
191
+
192
+ def test_image_create_from_cvmat(self):
193
+ image_path = os.path.join(os.path.dirname(__file__),
194
+ 'solutions/testdata/hands.jpg')
195
+ mat = cv2.imread(image_path).astype(np.uint8)
196
+ mat = cv2.cvtColor(mat, cv2.COLOR_BGR2RGB)
197
+ rgb_image = Image(image_format=ImageFormat.SRGB, data=mat)
198
+ self.assertEqual(rgb_image.width, 720)
199
+ self.assertEqual(rgb_image.height, 382)
200
+ self.assertEqual(rgb_image.channels, 3)
201
+ self.assertEqual(rgb_image.image_format, ImageFormat.SRGB)
202
+ self.assertTrue(np.array_equal(mat, rgb_image.numpy_view()))
203
+
204
+ def test_image_create_from_file(self):
205
+ image_path = os.path.join(os.path.dirname(__file__),
206
+ 'solutions/testdata/hands.jpg')
207
+ loaded_image = Image.create_from_file(image_path)
208
+ self.assertEqual(loaded_image.width, 720)
209
+ self.assertEqual(loaded_image.height, 382)
210
+ # On Mac w/ GPU support, images use 4 channels (SRGBA). Otherwise, all
211
+ # images use 3 channels (SRGB).
212
+ self.assertIn(loaded_image.channels, [3, 4])
213
+ self.assertIn(
214
+ loaded_image.image_format, [ImageFormat.SRGB, ImageFormat.SRGBA]
215
+ )
216
+
217
+ if __name__ == '__main__':
218
+ absltest.main()
@@ -0,0 +1,275 @@
1
+ # Copyright 2020 The MediaPipe Authors.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ """The public facing packet creator APIs."""
16
+
17
+ from typing import List, Union
18
+ import warnings
19
+
20
+ import numpy as np
21
+
22
+ from google.protobuf import message
23
+ from mediapipe.python._framework_bindings import _packet_creator
24
+ from mediapipe.python._framework_bindings import image
25
+ from mediapipe.python._framework_bindings import image_frame
26
+ from mediapipe.python._framework_bindings import packet
27
+
28
+
29
+ create_string = _packet_creator.create_string
30
+ create_bool = _packet_creator.create_bool
31
+ create_int = _packet_creator.create_int
32
+ create_int8 = _packet_creator.create_int8
33
+ create_int16 = _packet_creator.create_int16
34
+ create_int32 = _packet_creator.create_int32
35
+ create_int64 = _packet_creator.create_int64
36
+ create_uint8 = _packet_creator.create_uint8
37
+ create_uint16 = _packet_creator.create_uint16
38
+ create_uint32 = _packet_creator.create_uint32
39
+ create_uint64 = _packet_creator.create_uint64
40
+ create_float = _packet_creator.create_float
41
+ create_double = _packet_creator.create_double
42
+ create_int_array = _packet_creator.create_int_array
43
+ create_float_array = _packet_creator.create_float_array
44
+ create_int_vector = _packet_creator.create_int_vector
45
+ create_bool_vector = _packet_creator.create_bool_vector
46
+ create_float_vector = _packet_creator.create_float_vector
47
+ create_string_vector = _packet_creator.create_string_vector
48
+ create_image_vector = _packet_creator.create_image_vector
49
+ create_packet_vector = _packet_creator.create_packet_vector
50
+ create_string_to_packet_map = _packet_creator.create_string_to_packet_map
51
+ create_matrix = _packet_creator.create_matrix
52
+
53
+
54
+ def create_image_frame(data: Union[image_frame.ImageFrame, np.ndarray], # pytype: disable=annotation-type-mismatch
55
+ *,
56
+ image_format: image_frame.ImageFormat = None,
57
+ copy: bool = None) -> packet.Packet:
58
+ """Create a MediaPipe ImageFrame packet.
59
+
60
+ A MediaPipe ImageFrame packet can be created from an existing MediaPipe
61
+ ImageFrame object and the data will be realigned and copied into a new
62
+ ImageFrame object inside of the packet.
63
+
64
+ A MediaPipe ImageFrame packet can also be created from the raw pixel data
65
+ represented as a numpy array with one of the uint8, uint16, and float data
66
+ types. There are three data ownership modes depending on how the 'copy' arg
67
+ is set.
68
+
69
+ i) Default mode
70
+ If copy is not set, mutable data is always copied while the immutable data
71
+ is by reference.
72
+
73
+ ii) Copy mode (safe)
74
+ If copy is set to True, the data will be realigned and copied into an
75
+ ImageFrame object inside of the packet regardless the immutablity of the
76
+ original data.
77
+
78
+ iii) Reference mode (dangerous)
79
+ If copy is set to False, the data will be forced to be shared. If the data is
80
+ mutable (data.flags.writeable is True), a warning will be raised.
81
+
82
+ Args:
83
+ data: A MediaPipe ImageFrame object or the raw pixel data that is
84
+ represnted as a numpy ndarray.
85
+ image_format: One of the image_frame.ImageFormat enum types.
86
+ copy: Indicate if the packet should copy the data from the numpy nparray.
87
+
88
+ Returns:
89
+ A MediaPipe ImageFrame Packet.
90
+
91
+ Raises:
92
+ ValueError:
93
+ i) When "data" is a numpy ndarray, "image_format" is not provided or
94
+ the "data" array is not c_contiguous in the reference mode.
95
+ ii) When "data" is an ImageFrame object, the "image_format" arg doesn't
96
+ match the image format of the "data" ImageFrame object or "copy" is
97
+ explicitly set to False.
98
+ TypeError: If "image format" doesn't match "data" array's data type.
99
+
100
+ Examples:
101
+ np_array = np.random.randint(255, size=(321, 123, 3), dtype=np.uint8)
102
+ # Copy mode by default if the data array is writable.
103
+ image_frame_packet = mp.packet_creator.create_image_frame(
104
+ image_format=mp.ImageFormat.SRGB, data=np_array)
105
+
106
+ # Make the array unwriteable to trigger the reference mode.
107
+ np_array.flags.writeable = False
108
+ image_frame_packet = mp.packet_creator.create_image_frame(
109
+ image_format=mp.ImageFormat.SRGB, data=np_array)
110
+
111
+ image_frame = mp.ImageFrame(image_format=mp.ImageFormat.SRGB, data=np_array)
112
+ image_frame_packet = mp.packet_creator.create_image_frame(image_frame)
113
+
114
+ """
115
+ if isinstance(data, image_frame.ImageFrame):
116
+ if image_format is not None and data.image_format != image_format:
117
+ raise ValueError(
118
+ 'The provided image_format doesn\'t match the one from the data arg.')
119
+ if copy is not None and not copy:
120
+ # Taking a reference will make the created packet be mutable since the
121
+ # ImageFrame object can still be manipulated in Python, which voids packet
122
+ # immutability.
123
+ raise ValueError(
124
+ 'Creating ImageFrame packet by taking a reference of another ImageFrame object is not supported yet.'
125
+ )
126
+ # pylint:disable=protected-access
127
+ return _packet_creator._create_image_frame_from_image_frame(data)
128
+ # pylint:enable=protected-access
129
+ else:
130
+ if image_format is None:
131
+ raise ValueError('Please provide \'image_format\' with \'data\'.')
132
+ # If copy arg is not set, copying the data if it's immutable. Otherwise,
133
+ # take a reference of the immutable data to avoid data copy.
134
+ if copy is None:
135
+ copy = True if data.flags.writeable else False
136
+ if not copy:
137
+ # TODO: Investigate why the first 2 bytes of the data has data
138
+ # corruption when "data" is not c_contiguous.
139
+ if not data.flags.c_contiguous:
140
+ raise ValueError(
141
+ 'Reference mode is unavailable if \'data\' is not c_contiguous.')
142
+ if data.flags.writeable:
143
+ warnings.warn(
144
+ '\'data\' is still writeable. Taking a reference of the data to create ImageFrame packet is dangerous.',
145
+ RuntimeWarning, 2)
146
+ # pylint:disable=protected-access
147
+ return _packet_creator._create_image_frame_from_pixel_data(
148
+ image_format, data, copy)
149
+ # pylint:enable=protected-access
150
+
151
+
152
+ def create_image(data: Union[image.Image, np.ndarray], # pytype: disable=annotation-type-mismatch
153
+ *,
154
+ image_format: image_frame.ImageFormat = None,
155
+ copy: bool = None) -> packet.Packet:
156
+ """Create a MediaPipe Image packet.
157
+
158
+ A MediaPipe Image packet can be created from an existing MediaPipe
159
+ Image object and the data will be realigned and copied into a new
160
+ Image object inside of the packet.
161
+
162
+ A MediaPipe Image packet can also be created from the raw pixel data
163
+ represented as a numpy array with one of the uint8, uint16, and float data
164
+ types. There are three data ownership modes depending on how the 'copy' arg
165
+ is set.
166
+
167
+ i) Default mode
168
+ If copy is not set, mutable data is always copied while the immutable data
169
+ is by reference.
170
+
171
+ ii) Copy mode (safe)
172
+ If copy is set to True, the data will be realigned and copied into an
173
+ Image object inside of the packet regardless the immutablity of the
174
+ original data.
175
+
176
+ iii) Reference mode (dangerous)
177
+ If copy is set to False, the data will be forced to be shared. If the data is
178
+ mutable (data.flags.writeable is True), a warning will be raised.
179
+
180
+ Args:
181
+ data: A MediaPipe Image object or the raw pixel data that is represnted as a
182
+ numpy ndarray.
183
+ image_format: One of the mp.ImageFormat enum types.
184
+ copy: Indicate if the packet should copy the data from the numpy nparray.
185
+
186
+ Returns:
187
+ A MediaPipe Image Packet.
188
+
189
+ Raises:
190
+ ValueError:
191
+ i) When "data" is a numpy ndarray, "image_format" is not provided or
192
+ the "data" array is not c_contiguous in the reference mode.
193
+ ii) When "data" is an Image object, the "image_format" arg doesn't
194
+ match the image format of the "data" Image object or "copy" is
195
+ explicitly set to False.
196
+ TypeError: If "image format" doesn't match "data" array's data type.
197
+
198
+ Examples:
199
+ np_array = np.random.randint(255, size=(321, 123, 3), dtype=np.uint8)
200
+ # Copy mode by default if the data array is writable.
201
+ image_packet = mp.packet_creator.create_image(
202
+ image_format=mp.ImageFormat.SRGB, data=np_array)
203
+
204
+ # Make the array unwriteable to trigger the reference mode.
205
+ np_array.flags.writeable = False
206
+ image_packet = mp.packet_creator.create_image(
207
+ image_format=mp.ImageFormat.SRGB, data=np_array)
208
+
209
+ image = mp.Image(image_format=mp.ImageFormat.SRGB, data=np_array)
210
+ image_packet = mp.packet_creator.create_image(image)
211
+
212
+ """
213
+ if isinstance(data, image.Image):
214
+ if image_format is not None and data.image_format != image_format:
215
+ raise ValueError(
216
+ 'The provided image_format doesn\'t match the one from the data arg.')
217
+ if copy is not None and not copy:
218
+ # Taking a reference will make the created packet be mutable since the
219
+ # Image object can still be manipulated in Python, which voids packet
220
+ # immutability.
221
+ raise ValueError(
222
+ 'Creating Image packet by taking a reference of another Image object is not supported yet.'
223
+ )
224
+ # pylint:disable=protected-access
225
+ return _packet_creator._create_image_from_image(data)
226
+ # pylint:enable=protected-access
227
+ else:
228
+ if image_format is None:
229
+ raise ValueError('Please provide \'image_format\' with \'data\'.')
230
+ # If copy arg is not set, copying the data if it's immutable. Otherwise,
231
+ # take a reference of the immutable data to avoid data copy.
232
+ if copy is None:
233
+ copy = True if data.flags.writeable else False
234
+ if not copy:
235
+ # TODO: Investigate why the first 2 bytes of the data has data
236
+ # corruption when "data" is not c_contiguous.
237
+ if not data.flags.c_contiguous:
238
+ raise ValueError(
239
+ 'Reference mode is unavailable if \'data\' is not c_contiguous.')
240
+ if data.flags.writeable:
241
+ warnings.warn(
242
+ '\'data\' is still writeable. Taking a reference of the data to create Image packet is dangerous.',
243
+ RuntimeWarning, 2)
244
+ # pylint:disable=protected-access
245
+ return _packet_creator._create_image_from_pixel_data(
246
+ image_format, data, copy)
247
+ # pylint:enable=protected-access
248
+
249
+
250
+ def create_proto(proto_message: message.Message) -> packet.Packet:
251
+ """Create a MediaPipe protobuf message packet.
252
+
253
+ Args:
254
+ proto_message: A Python protobuf message.
255
+
256
+ Returns:
257
+ A MediaPipe protobuf message Packet.
258
+
259
+ Raises:
260
+ RuntimeError: If the protobuf message type is not registered in MediaPipe.
261
+
262
+ Examples:
263
+ detection = detection_pb2.Detection()
264
+ text_format.Parse('score: 0.5', detection)
265
+ packet = mp.packet_creator.create_proto(detection)
266
+ output_detection = mp.packet_getter.get_proto(packet)
267
+ """
268
+ # pylint:disable=protected-access
269
+ return _packet_creator._create_proto(proto_message.DESCRIPTOR.full_name,
270
+ proto_message.SerializeToString())
271
+ # pylint:enable=protected-access
272
+
273
+
274
+ def create_proto_vector(message_list: List[message.Message]) -> packet.Packet:
275
+ raise NotImplementedError('create_proto_vector is not implemented.')