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,845 @@
1
+ # Copyright 2022 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
+ """Generic metadata writer."""
16
+
17
+ import collections
18
+ import csv
19
+ import dataclasses
20
+ import os
21
+ import tempfile
22
+ from typing import List, Optional, Tuple, Union
23
+
24
+ import flatbuffers
25
+
26
+ from mediapipe.tasks.metadata import metadata_schema_py_generated as metadata_fb
27
+ from mediapipe.tasks.python.metadata import metadata
28
+ from mediapipe.tasks.python.metadata.metadata_writers import metadata_info
29
+ from mediapipe.tasks.python.metadata.metadata_writers import writer_utils
30
+
31
+ _INPUT_IMAGE_NAME = 'image'
32
+ _INPUT_IMAGE_DESCRIPTION = 'Input image to be processed.'
33
+ _INPUT_REGEX_TEXT_NAME = 'input_text'
34
+ _INPUT_REGEX_TEXT_DESCRIPTION = ('Embedding vectors representing the input '
35
+ 'text to be processed.')
36
+ _OUTPUT_CLASSIFICATION_NAME = 'score'
37
+ _OUTPUT_CLASSIFICATION_DESCRIPTION = 'Score of the labels respectively.'
38
+ _OUTPUT_SEGMENTATION_MASKS_NAME = 'segmentation_masks'
39
+ _OUTPUT_SEGMENTATION_MASKS_DESCRIPTION = (
40
+ 'Masks over the target objects with high accuracy.'
41
+ )
42
+ # Detection tensor result to be grouped together.
43
+ _DETECTION_GROUP_NAME = 'detection_result'
44
+ # File name to export score calibration parameters.
45
+ _SCORE_CALIBATION_FILENAME = 'score_calibration.txt'
46
+
47
+
48
+ @dataclasses.dataclass
49
+ class CalibrationParameter:
50
+ """Parameters for score calibration [1].
51
+
52
+ Score calibration is performed on an output tensor through sigmoid functions.
53
+ One of the main purposes of score calibration is to make scores across classes
54
+ comparable, so that a common threshold can be used for all output classes.
55
+
56
+ For each index in the output tensor, this applies:
57
+ * `f(x) = scale / (1 + e^-(slope * g(x) + offset))` if `x > min_score` or if
58
+ no `min_score` has been specified.
59
+ * `f(x) = default_score` otherwise or if no scale, slope and offset have
60
+ been specified.
61
+
62
+ [1]:
63
+ https://github.com/google/mediapipe/blob/f8af41b1eb49ff4bdad756ff19d1d36f486be614/mediapipe/tasks/metadata/metadata_schema.fbs#L434
64
+ """
65
+ scale: float
66
+ slope: float
67
+ offset: float
68
+ min_score: Optional[float] = None
69
+
70
+
71
+ @dataclasses.dataclass
72
+ class LabelItem:
73
+ """Label item for labels per locale.
74
+
75
+ Attributes:
76
+ filename: The file name to save the labels.
77
+ names: A list of label names.
78
+ locale: The specified locale for labels.
79
+ """
80
+ filename: str
81
+ names: List[str]
82
+ locale: Optional[str] = None
83
+
84
+
85
+ @dataclasses.dataclass
86
+ class ScoreThresholding:
87
+ """Parameters to performs thresholding on output tensor values [1].
88
+
89
+ Attributes:
90
+ global_score_threshold: The recommended global threshold below which results
91
+ are considered low-confidence and should be filtered out. [1]:
92
+ https://github.com/google/mediapipe/blob/f8af41b1eb49ff4bdad756ff19d1d36f486be614/mediapipe/tasks/metadata/metadata_schema.fbs#L468
93
+ """
94
+ global_score_threshold: float
95
+
96
+
97
+ @dataclasses.dataclass
98
+ class RegexTokenizer:
99
+ """Parameters of the Regex tokenizer [1] metadata information.
100
+
101
+ [1]:
102
+ https://github.com/google/mediapipe/blob/f8af41b1eb49ff4bdad756ff19d1d36f486be614/mediapipe/tasks/metadata/metadata_schema.fbs#L500
103
+
104
+ Attributes:
105
+ delim_regex_pattern: the regular expression to segment strings and create
106
+ tokens.
107
+ vocab_file_path: path to the vocabulary file.
108
+ """
109
+ delim_regex_pattern: str
110
+ vocab_file_path: str
111
+
112
+
113
+ @dataclasses.dataclass
114
+ class BertTokenizer:
115
+ """Parameters of the Bert tokenizer [1] metadata information.
116
+
117
+ [1]:
118
+ https://github.com/google/mediapipe/blob/f8af41b1eb49ff4bdad756ff19d1d36f486be614/mediapipe/tasks/metadata/metadata_schema.fbs#L477
119
+
120
+ Attributes:
121
+ vocab_file_path: path to the vocabulary file.
122
+ """
123
+ vocab_file_path: str
124
+
125
+
126
+ @dataclasses.dataclass
127
+ class SentencePieceTokenizer:
128
+ """Parameters of the sentence piece tokenizer tokenizer [1] metadata information.
129
+
130
+ [1]:
131
+ https://github.com/google/mediapipe/blob/f8af41b1eb49ff4bdad756ff19d1d36f486be614/mediapipe/tasks/metadata/metadata_schema.fbs#L485
132
+
133
+ Attributes:
134
+ sentence_piece_model_path: path to the sentence piece model file.
135
+ vocab_file_path: path to the vocabulary file.
136
+ """
137
+ sentence_piece_model_path: str
138
+ vocab_file_path: Optional[str] = None
139
+
140
+
141
+ class Labels(object):
142
+ """Simple container holding classification labels of a particular tensor.
143
+
144
+ Example usage:
145
+ # The first added label list can be used as category names as needed.
146
+ labels = Labels()
147
+ .add(['/m/011l78', '/m/031d23'])
148
+ .add(['cat', 'dog], 'en')
149
+ .add(['chat', 'chien], 'fr')
150
+ """
151
+
152
+ def __init__(self) -> None:
153
+ self._labels = [] # [LabelItem]
154
+
155
+ @property
156
+ def labels(self) -> List[LabelItem]:
157
+ return self._labels
158
+
159
+ def add(self,
160
+ labels: List[str],
161
+ locale: Optional[str] = None,
162
+ exported_filename: Optional[str] = None) -> 'Labels':
163
+ """Adds labels in the container.
164
+
165
+ Args:
166
+ labels: A list of label names, e.g. ['apple', 'pear', 'banana'].
167
+ locale: The specified locale for labels.
168
+ exported_filename: The file name to export the labels. If not set,
169
+ filename defaults to 'labels.txt'.
170
+
171
+ Returns:
172
+ The Labels instance, can be used for chained operation.
173
+ """
174
+ if not labels:
175
+ raise ValueError('The list of labels is empty.')
176
+
177
+ # Prepare the new item to be inserted
178
+ if not exported_filename:
179
+ exported_filename = 'labels'
180
+ if locale:
181
+ exported_filename += f'_{locale}'
182
+ exported_filename += '.txt'
183
+ item = LabelItem(filename=exported_filename, names=labels, locale=locale)
184
+
185
+ # Insert the new element at the end of the list
186
+ self._labels.append(item)
187
+ return self
188
+
189
+ def add_from_file(self,
190
+ label_filepath: str,
191
+ locale: Optional[str] = None,
192
+ exported_filename: Optional[str] = None) -> 'Labels':
193
+ """Adds a label file in the container.
194
+
195
+ Args:
196
+ label_filepath: File path to read labels. Each line is a label name in the
197
+ file.
198
+ locale: The specified locale for labels.
199
+ exported_filename: The file name to export the labels. If not set,
200
+ filename defaults to 'labels.txt'.
201
+
202
+ Returns:
203
+ The Labels instance, can be used for chained operation.
204
+ """
205
+
206
+ with open(label_filepath, 'r') as f:
207
+ labels = f.read().split('\n')
208
+ return self.add(labels, locale, exported_filename)
209
+
210
+
211
+ class ScoreCalibration:
212
+ """Simple container holding score calibration related parameters."""
213
+
214
+ # A shortcut to avoid client side code importing metadata_fb
215
+ transformation_types = metadata_fb.ScoreTransformationType
216
+
217
+ def __init__(self,
218
+ transformation_type: metadata_fb.ScoreTransformationType,
219
+ parameters: List[Optional[CalibrationParameter]],
220
+ default_score: int = 0):
221
+ self.transformation_type = transformation_type
222
+ self.parameters = parameters
223
+ self.default_score = default_score
224
+
225
+ @classmethod
226
+ def create_from_file(cls,
227
+ transformation_type: metadata_fb.ScoreTransformationType,
228
+ file_path: str,
229
+ default_score: int = 0) -> 'ScoreCalibration':
230
+ """Creates ScoreCalibration from the file.
231
+
232
+ Args:
233
+ transformation_type: type of the function used for transforming the
234
+ uncalibrated score before applying score calibration.
235
+ file_path: file_path of the score calibration file [1]. Contains
236
+ sigmoid-based score calibration parameters, formatted as CSV. Lines
237
+ contain for each index of an output tensor the scale, slope, offset and
238
+ (optional) min_score parameters to be used for sigmoid fitting (in this
239
+ order and in `strtof`-compatible [2] format). Scale should be a
240
+ non-negative value. A line may be left empty to default calibrated
241
+ scores for this index to default_score. In summary, each line should
242
+ thus contain 0, 3 or 4 comma-separated values.
243
+ default_score: the default calibrated score to apply if the uncalibrated
244
+ score is below min_score or if no parameters were specified for a given
245
+ index.
246
+ [1]:
247
+ https://github.com/google/mediapipe/blob/f8af41b1eb49ff4bdad756ff19d1d36f486be614/mediapipe/tasks/metadata/metadata_schema.fbs#L133
248
+ [2]:
249
+ https://en.cppreference.com/w/c/string/byte/strtof
250
+
251
+ Returns:
252
+ A ScoreCalibration object.
253
+ Raises:
254
+ ValueError: if the score_calibration file is malformed.
255
+ """
256
+ with open(file_path, 'r') as calibration_file:
257
+ csv_reader = csv.reader(calibration_file, delimiter=',')
258
+ parameters = []
259
+ for row in csv_reader:
260
+ if not row:
261
+ parameters.append(None)
262
+ continue
263
+
264
+ if len(row) != 3 and len(row) != 4:
265
+ raise ValueError(
266
+ f'Expected empty lines or 3 or 4 parameters per line in score'
267
+ f' calibration file, but got {len(row)}.')
268
+
269
+ if float(row[0]) < 0:
270
+ raise ValueError(
271
+ f'Expected scale to be a non-negative value, but got '
272
+ f'{float(row[0])}.')
273
+
274
+ parameters.append(
275
+ CalibrationParameter(
276
+ scale=float(row[0]),
277
+ slope=float(row[1]),
278
+ offset=float(row[2]),
279
+ min_score=None if len(row) == 3 else float(row[3])))
280
+
281
+ return cls(transformation_type, parameters, default_score)
282
+
283
+
284
+ def _fill_default_tensor_names(
285
+ tensor_metadata_list: List[metadata_fb.TensorMetadataT],
286
+ tensor_names_from_model: List[str]):
287
+ """Fills the default tensor names."""
288
+ # If tensor name in metadata is empty, default to the tensor name saved in
289
+ # the model.
290
+ for tensor_metadata, name in zip(tensor_metadata_list,
291
+ tensor_names_from_model):
292
+ tensor_metadata.name = tensor_metadata.name or name
293
+
294
+
295
+ def _pair_tensor_metadata(
296
+ tensor_md: List[metadata_info.TensorMd],
297
+ tensor_names_from_model: List[str]) -> List[metadata_info.TensorMd]:
298
+ """Pairs tensor_md according to the tensor names from the model."""
299
+ tensor_names_from_arg = [
300
+ md.tensor_name for md in tensor_md or [] if md.tensor_name is not None
301
+ ]
302
+ if not tensor_names_from_arg:
303
+ return tensor_md
304
+
305
+ if collections.Counter(tensor_names_from_arg) != collections.Counter(
306
+ tensor_names_from_model):
307
+ raise ValueError(
308
+ 'The tensor names from arguments ({}) do not match the tensor names'
309
+ ' read from the model ({}).'.format(tensor_names_from_arg,
310
+ tensor_names_from_model))
311
+ pairs_tensor_md = []
312
+ name_md_dict = dict(zip(tensor_names_from_arg, tensor_md))
313
+ for name in tensor_names_from_model:
314
+ pairs_tensor_md.append(name_md_dict[name])
315
+ return pairs_tensor_md
316
+
317
+
318
+ def _create_metadata_buffer(
319
+ model_buffer: bytearray,
320
+ general_md: Optional[metadata_info.GeneralMd] = None,
321
+ input_md: Optional[List[metadata_info.TensorMd]] = None,
322
+ output_md: Optional[List[metadata_info.TensorMd]] = None,
323
+ input_process_units: Optional[List[metadata_fb.ProcessUnitT]] = None,
324
+ output_group_md: Optional[List[metadata_info.TensorGroupMd]] = None,
325
+ custom_metadata_md: Optional[List[metadata_info.CustomMetadataMd]] = None,
326
+ ) -> bytearray:
327
+ """Creates a buffer of the metadata.
328
+
329
+ Args:
330
+ model_buffer: valid buffer of the model file.
331
+ general_md: general information about the model.
332
+ input_md: metadata information of the input tensors.
333
+ output_md: metadata information of the output tensors.
334
+ input_process_units: a lists of metadata of the input process units [1].
335
+ output_group_md: a list of metadata of output tensor groups [2];
336
+ custom_metadata_md: a lists of custom metadata.
337
+ [1]:
338
+ https://github.com/google/mediapipe/blob/f8af41b1eb49ff4bdad756ff19d1d36f486be614/mediapipe/tasks/metadata/metadata_schema.fbs#L655
339
+ [2]:
340
+ https://github.com/google/mediapipe/blob/f8af41b1eb49ff4bdad756ff19d1d36f486be614/mediapipe/tasks/metadata/metadata_schema.fbs#L677
341
+
342
+ Returns:
343
+ A buffer of the metadata.
344
+
345
+ Raises:
346
+ ValueError: if the tensor names from `input_md` and `output_md` do not
347
+ match the tensor names read from the model.
348
+ """
349
+ # Create input metadata from `input_md`.
350
+ if input_md:
351
+ input_md = _pair_tensor_metadata(
352
+ input_md, writer_utils.get_input_tensor_names(model_buffer))
353
+ input_metadata = [m.create_metadata() for m in input_md]
354
+ else:
355
+ num_input_tensors = writer_utils.get_subgraph(model_buffer).InputsLength()
356
+ input_metadata = [metadata_fb.TensorMetadataT()] * num_input_tensors
357
+
358
+ _fill_default_tensor_names(input_metadata,
359
+ writer_utils.get_input_tensor_names(model_buffer))
360
+
361
+ # Create output metadata from `output_md`.
362
+ if output_md:
363
+ output_md = _pair_tensor_metadata(
364
+ output_md, writer_utils.get_output_tensor_names(model_buffer))
365
+ output_metadata = [m.create_metadata() for m in output_md]
366
+ else:
367
+ num_output_tensors = writer_utils.get_subgraph(model_buffer).OutputsLength()
368
+ output_metadata = [metadata_fb.TensorMetadataT()] * num_output_tensors
369
+ _fill_default_tensor_names(output_metadata,
370
+ writer_utils.get_output_tensor_names(model_buffer))
371
+
372
+ # Create the subgraph metadata.
373
+ subgraph_metadata = metadata_fb.SubGraphMetadataT()
374
+ subgraph_metadata.inputTensorMetadata = input_metadata
375
+ subgraph_metadata.outputTensorMetadata = output_metadata
376
+ if input_process_units:
377
+ subgraph_metadata.inputProcessUnits = input_process_units
378
+ if custom_metadata_md:
379
+ subgraph_metadata.customMetadata = [
380
+ m.create_metadata() for m in custom_metadata_md
381
+ ]
382
+ if output_group_md:
383
+ subgraph_metadata.outputTensorGroups = [
384
+ m.create_metadata() for m in output_group_md
385
+ ]
386
+
387
+ # Create the whole model metadata.
388
+ if general_md is None:
389
+ general_md = metadata_info.GeneralMd()
390
+ model_metadata = general_md.create_metadata()
391
+ model_metadata.subgraphMetadata = [subgraph_metadata]
392
+
393
+ # Get the metadata flatbuffer.
394
+ b = flatbuffers.Builder(0)
395
+ b.Finish(
396
+ model_metadata.Pack(b),
397
+ metadata.MetadataPopulator.METADATA_FILE_IDENTIFIER)
398
+ return b.Output()
399
+
400
+
401
+ class MetadataWriter(object):
402
+ """Generic Metadata writer.
403
+
404
+ Example usage:
405
+
406
+ For an example model which requires two inputs: image and general feature
407
+ inputs, and generates one output: classification.
408
+
409
+ with open(model_path, 'rb') as f:
410
+ writer = MetadataWriter.create(f.read())
411
+ model_content, metadata_json_content = writer
412
+ .add_genernal_info('model_name', 'model description')
413
+ .add_image_input()
414
+ .add_feature_input()
415
+ .add_classification_output(Labels().add(['A', 'B']))
416
+ .populate()
417
+ """
418
+
419
+ @classmethod
420
+ def create(cls, model_buffer: bytearray) -> 'MetadataWriter':
421
+ return cls(model_buffer)
422
+
423
+ def __init__(self, model_buffer: bytearray) -> None:
424
+ self._model_buffer = model_buffer
425
+ self._general_md = None
426
+ self._input_mds = []
427
+ self._input_process_units = []
428
+ self._output_mds = []
429
+ self._output_group_mds = []
430
+ self._associated_files = []
431
+ self._custom_metadata_mds = []
432
+ self._temp_folder = tempfile.TemporaryDirectory()
433
+
434
+ def __del__(self):
435
+ if os.path.exists(self._temp_folder.name):
436
+ self._temp_folder.cleanup()
437
+
438
+ def add_general_info(
439
+ self,
440
+ model_name: str,
441
+ model_description: Optional[str] = None) -> 'MetadataWriter':
442
+ """Adds a general info metadata for the general metadata informantion."""
443
+ # Will overwrite the previous `self._general_md` if exists.
444
+ self._general_md = metadata_info.GeneralMd(
445
+ name=model_name, description=model_description)
446
+ return self
447
+
448
+ color_space_types = metadata_fb.ColorSpaceType
449
+
450
+ def add_feature_input(self,
451
+ name: Optional[str] = None,
452
+ description: Optional[str] = None) -> 'MetadataWriter':
453
+ """Adds an input tensor metadata for the general basic feature input."""
454
+ input_md = metadata_info.TensorMd(name=name, description=description)
455
+ self._input_mds.append(input_md)
456
+ return self
457
+
458
+ def add_image_input(
459
+ self,
460
+ norm_mean: List[float],
461
+ norm_std: List[float],
462
+ color_space_type: Optional[int] = metadata_fb.ColorSpaceType.RGB,
463
+ name: str = _INPUT_IMAGE_NAME,
464
+ description: str = _INPUT_IMAGE_DESCRIPTION) -> 'MetadataWriter':
465
+ """Adds an input image metadata for the image input.
466
+
467
+ Args:
468
+ norm_mean: The mean value used to normalize each input channel. If there
469
+ is only one element in the list, its value will be broadcasted to all
470
+ channels. Also note that norm_mean and norm_std should have the same
471
+ number of elements. [1]
472
+ norm_std: The std value used to normalize each input channel. If there is
473
+ only one element in the list, its value will be broadcasted to all
474
+ channels. [1]
475
+ color_space_type: The color space type of the input image. [2]
476
+ name: Name of the input tensor.
477
+ description: Description of the input tensor.
478
+
479
+ Returns:
480
+ The MetadataWriter instance, can be used for chained operation.
481
+
482
+ [1]:
483
+ https://github.com/google/mediapipe/blob/f8af41b1eb49ff4bdad756ff19d1d36f486be614/mediapipe/tasks/metadata/metadata_schema.fbs#L389
484
+ [2]:
485
+ https://github.com/google/mediapipe/blob/f8af41b1eb49ff4bdad756ff19d1d36f486be614/mediapipe/tasks/metadata/metadata_schema.fbs#L198
486
+ """
487
+ input_md = metadata_info.InputImageTensorMd(
488
+ name=name,
489
+ description=description,
490
+ norm_mean=norm_mean,
491
+ norm_std=norm_std,
492
+ color_space_type=color_space_type,
493
+ tensor_type=self._input_tensor_type(len(self._input_mds)))
494
+
495
+ self._input_mds.append(input_md)
496
+ return self
497
+
498
+ def add_regex_text_input(
499
+ self,
500
+ regex_tokenizer: RegexTokenizer,
501
+ name: str = _INPUT_REGEX_TEXT_NAME,
502
+ description: str = _INPUT_REGEX_TEXT_DESCRIPTION) -> 'MetadataWriter':
503
+ """Adds an input text metadata for the text input with regex tokenizer.
504
+
505
+ Args:
506
+ regex_tokenizer: information of the regex tokenizer [1] used to process
507
+ the input string.
508
+ name: Name of the input tensor.
509
+ description: Description of the input tensor.
510
+
511
+ Returns:
512
+ The MetadataWriter instance, can be used for chained operation.
513
+
514
+ [1]:
515
+ https://github.com/google/mediapipe/blob/f8af41b1eb49ff4bdad756ff19d1d36f486be614/mediapipe/tasks/metadata/metadata_schema.fbs#L500
516
+ """
517
+ tokenizer_md = metadata_info.RegexTokenizerMd(
518
+ delim_regex_pattern=regex_tokenizer.delim_regex_pattern,
519
+ vocab_file_path=regex_tokenizer.vocab_file_path)
520
+ input_md = metadata_info.InputTextTensorMd(
521
+ name=name, description=description, tokenizer_md=tokenizer_md)
522
+ self._input_mds.append(input_md)
523
+ self._associated_files.append(regex_tokenizer.vocab_file_path)
524
+ return self
525
+
526
+ def add_bert_text_input(self, tokenizer: Union[BertTokenizer,
527
+ SentencePieceTokenizer],
528
+ ids_name: str, mask_name: str,
529
+ segment_name: str) -> 'MetadataWriter':
530
+ """Adds an metadata for the text input with bert / sentencepiece tokenizer.
531
+
532
+ `ids_name`, `mask_name`, and `segment_name` correspond to the `Tensor.name`
533
+ in the TFLite schema, which help to determine the tensor order when
534
+ populating metadata.
535
+
536
+ Args:
537
+ tokenizer: information of the tokenizer used to process the input string,
538
+ if any. Supported tokenziers are: `BertTokenizer` [1] and
539
+ `SentencePieceTokenizer` [2].
540
+ ids_name: name of the ids tensor, which represents the tokenized ids of
541
+ the input text.
542
+ mask_name: name of the mask tensor, which represents the mask with `1` for
543
+ real tokens and `0` for padding tokens.
544
+ segment_name: name of the segment ids tensor, where `0` stands for the
545
+ first sequence, and `1` stands for the second sequence if exists.
546
+
547
+ Returns:
548
+ The MetadataWriter instance, can be used for chained operation.
549
+
550
+ Raises:
551
+ ValueError: if the type tokenizer is not BertTokenizer or
552
+ SentencePieceTokenizer.
553
+
554
+ [1]:
555
+ https://github.com/google/mediapipe/blob/f8af41b1eb49ff4bdad756ff19d1d36f486be614/mediapipe/tasks/metadata/metadata_schema.fbs#L477
556
+ [2]:
557
+ https://github.com/google/mediapipe/blob/f8af41b1eb49ff4bdad756ff19d1d36f486be614/mediapipe/tasks/metadata/metadata_schema.fbs#L485
558
+ """
559
+ if isinstance(tokenizer, BertTokenizer):
560
+ tokenizer_md = metadata_info.BertTokenizerMd(
561
+ vocab_file_path=tokenizer.vocab_file_path)
562
+ elif isinstance(tokenizer, SentencePieceTokenizer):
563
+ tokenizer_md = metadata_info.SentencePieceTokenizerMd(
564
+ sentence_piece_model_path=tokenizer.sentence_piece_model_path,
565
+ vocab_file_path=tokenizer.vocab_file_path)
566
+ else:
567
+ raise ValueError(
568
+ f'The type of tokenizer, {type(tokenizer)}, is unsupported')
569
+ bert_input_md = metadata_info.BertInputTensorsMd(
570
+ self._model_buffer,
571
+ ids_name,
572
+ mask_name,
573
+ segment_name,
574
+ tokenizer_md=tokenizer_md)
575
+
576
+ self._input_mds.extend(bert_input_md.input_md)
577
+ self._associated_files.extend(
578
+ bert_input_md.get_tokenizer_associated_files())
579
+ self._input_process_units.extend(
580
+ bert_input_md.create_input_process_unit_metadata())
581
+ return self
582
+
583
+ def add_classification_output(
584
+ self,
585
+ labels: Optional[Labels] = None,
586
+ score_calibration: Optional[ScoreCalibration] = None,
587
+ score_thresholding: Optional[ScoreThresholding] = None,
588
+ name: str = _OUTPUT_CLASSIFICATION_NAME,
589
+ description: str = _OUTPUT_CLASSIFICATION_DESCRIPTION
590
+ ) -> 'MetadataWriter':
591
+ """Add a classification head metadata for classification output tensor.
592
+
593
+ Example usage:
594
+ writer.add_classification_output(
595
+ Labels()
596
+ .add(['/m/011l78', '/m/031d23'])
597
+ .add(['cat', 'dog], 'en')
598
+ .add(['chat', 'chien], 'fr')
599
+ )
600
+
601
+ Args:
602
+ labels: an instance of Labels helper class.
603
+ score_calibration: an instance of ScoreCalibration helper class.
604
+ score_thresholding: an instance of ScoreThresholding.
605
+ name: Metadata name of the tensor. Note that this is different from tensor
606
+ name in the flatbuffer.
607
+ description: human readable description of what the output is.
608
+
609
+ Returns:
610
+ The current Writer instance to allow chained operation.
611
+ """
612
+ calibration_md = self._create_score_calibration_md(score_calibration)
613
+ score_thresholding_md = None
614
+ if score_thresholding:
615
+ score_thresholding_md = metadata_info.ScoreThresholdingMd(
616
+ score_thresholding.global_score_threshold)
617
+
618
+ label_files = self._create_label_file_md(labels)
619
+ output_md = metadata_info.ClassificationTensorMd(
620
+ name=name,
621
+ description=description,
622
+ label_files=label_files,
623
+ tensor_type=self._output_tensor_type(len(self._output_mds)),
624
+ score_calibration_md=calibration_md,
625
+ score_thresholding_md=score_thresholding_md,
626
+ )
627
+ self._output_mds.append(output_md)
628
+ return self
629
+
630
+ def add_detection_output(
631
+ self,
632
+ labels: Optional[Labels] = None,
633
+ score_calibration: Optional[ScoreCalibration] = None,
634
+ group_name: str = _DETECTION_GROUP_NAME,
635
+ ) -> 'MetadataWriter':
636
+ """Adds a detection head metadata for detection output tensor of models with postprocessing.
637
+
638
+ Args:
639
+ labels: an instance of Labels helper class.
640
+ score_calibration: an instance of ScoreCalibration helper class.
641
+ group_name: name of output tensor group.
642
+
643
+ Returns:
644
+ The current Writer instance to allow chained operation.
645
+ """
646
+ calibration_md = self._create_score_calibration_md(score_calibration)
647
+ label_files = self._create_label_file_md(labels)
648
+ detection_output_mds = metadata_info.DetectionOutputTensorsMd(
649
+ self._model_buffer,
650
+ label_files=label_files,
651
+ score_calibration_md=calibration_md,
652
+ ).output_mds
653
+ self._output_mds.extend(detection_output_mds)
654
+ # Outputs are location, category, score, number of detections.
655
+ if len(detection_output_mds) != 4:
656
+ raise ValueError('The size of detections output should be 4.')
657
+ # The first 3 tensors (location, category, score) are grouped.
658
+ group_md = metadata_info.TensorGroupMd(
659
+ name=group_name,
660
+ tensor_names=[output_md.name for output_md in detection_output_mds[:3]],
661
+ )
662
+ self._output_group_mds.append(group_md)
663
+ return self
664
+
665
+ def add_raw_detection_output(
666
+ self,
667
+ labels: Optional[Labels] = None,
668
+ output_tensors_order: metadata_info.RawDetectionOutputTensorsOrder = metadata_info.RawDetectionOutputTensorsOrder.UNSPECIFIED,
669
+ ) -> 'MetadataWriter':
670
+ """Adds a detection head metadata for detection output tensor of models without postprocessing.
671
+
672
+ Args:
673
+ labels: an instance of Labels helper class.
674
+ output_tensors_order: the order of the output tensors. For models of
675
+ out-of-graph non-maximum-suppression only.
676
+
677
+ Returns:
678
+ The current Writer instance to allow chained operation.
679
+ """
680
+ label_files = self._create_label_file_md(labels)
681
+ detection_output_mds = metadata_info.RawDetectionOutputTensorsMd(
682
+ self._model_buffer,
683
+ label_files=label_files,
684
+ output_tensors_order=output_tensors_order,
685
+ ).output_mds
686
+ self._output_mds.extend(detection_output_mds)
687
+ # Outputs are location, score.
688
+ if len(detection_output_mds) != 2:
689
+ raise ValueError('The size of detections output should be 2.')
690
+ return self
691
+
692
+ def add_segmentation_output(
693
+ self,
694
+ labels: Optional[Labels] = None,
695
+ name: str = _OUTPUT_SEGMENTATION_MASKS_NAME,
696
+ description: str = _OUTPUT_SEGMENTATION_MASKS_DESCRIPTION,
697
+ ) -> 'MetadataWriter':
698
+ """Adds a segmentation head metadata for segmentation output tensor.
699
+
700
+ Args:
701
+ labels: an instance of Labels helper class.
702
+ name: Metadata name of the tensor. Note that this is different from tensor
703
+ name in the flatbuffer.
704
+ description: human readable description of what the output is.
705
+
706
+ Returns:
707
+ The current Writer instance to allow chained operation.
708
+ """
709
+ label_files = self._create_label_file_md(labels)
710
+ output_md = metadata_info.SegmentationMaskMd(
711
+ name=name,
712
+ description=description,
713
+ label_files=label_files,
714
+ )
715
+ self._output_mds.append(output_md)
716
+ return self
717
+
718
+ def add_feature_output(self,
719
+ name: Optional[str] = None,
720
+ description: Optional[str] = None) -> 'MetadataWriter':
721
+ """Adds an output tensor metadata for the general basic feature output."""
722
+ output_md = metadata_info.TensorMd(name=name, description=description)
723
+ self._output_mds.append(output_md)
724
+ return self
725
+
726
+ def add_custom_metadata(
727
+ self, custom_metadata_md: metadata_info.CustomMetadataMd
728
+ ) -> 'MetadataWriter':
729
+ self._custom_metadata_mds.append(custom_metadata_md)
730
+ return self
731
+
732
+ def populate(self) -> Tuple[bytearray, str]:
733
+ """Populates metadata into the TFLite file.
734
+
735
+ Note that only the output tflite is used for deployment. The output JSON
736
+ content is used to interpret the metadata content.
737
+
738
+ Returns:
739
+ A tuple of (model_with_metadata_in_bytes, metadata_json_content)
740
+ """
741
+ # Populates metadata and associated files into TFLite model buffer.
742
+ populator = metadata.MetadataPopulator.with_model_buffer(self._model_buffer)
743
+ metadata_buffer = _create_metadata_buffer(
744
+ model_buffer=self._model_buffer,
745
+ general_md=self._general_md,
746
+ input_md=self._input_mds,
747
+ output_md=self._output_mds,
748
+ input_process_units=self._input_process_units,
749
+ custom_metadata_md=self._custom_metadata_mds,
750
+ output_group_md=self._output_group_mds,
751
+ )
752
+ populator.load_metadata_buffer(metadata_buffer)
753
+ if self._associated_files:
754
+ populator.load_associated_files(self._associated_files)
755
+ populator.populate()
756
+ tflite_content = populator.get_model_buffer()
757
+
758
+ displayer = metadata.MetadataDisplayer.with_model_buffer(tflite_content)
759
+ metadata_json_content = displayer.get_metadata_json()
760
+
761
+ return tflite_content, metadata_json_content
762
+
763
+ def _input_tensor_type(self, idx):
764
+ return writer_utils.get_input_tensor_types(self._model_buffer)[idx]
765
+
766
+ def _output_tensor_type(self, idx):
767
+ return writer_utils.get_output_tensor_types(self._model_buffer)[idx]
768
+
769
+ def _export_labels(self, filename: str, index_to_label: List[str]) -> str:
770
+ filepath = os.path.join(self._temp_folder.name, filename)
771
+ with open(filepath, 'w') as f:
772
+ f.write('\n'.join(index_to_label))
773
+ self._associated_files.append(filepath)
774
+ return filepath
775
+
776
+ def _export_calibration_file(self, filename: str,
777
+ calibrations: List[CalibrationParameter]) -> str:
778
+ """Stores calibration parameters in a csv file."""
779
+ filepath = os.path.join(self._temp_folder.name, filename)
780
+ with open(filepath, 'w') as f:
781
+ for item in calibrations:
782
+ if item:
783
+ if item.scale is None or item.slope is None or item.offset is None:
784
+ raise ValueError('scale, slope and offset values can not be set to '
785
+ 'None.')
786
+ elif item.min_score is not None:
787
+ f.write(f'{item.scale},{item.slope},{item.offset},{item.min_score}')
788
+ else:
789
+ f.write(f'{item.scale},{item.slope},{item.offset}')
790
+ f.write('\n')
791
+
792
+ self._associated_files.append(filepath)
793
+ return filepath
794
+
795
+ def _create_score_calibration_md(
796
+ self, score_calibration: ScoreCalibration
797
+ ) -> Optional[metadata_info.ScoreCalibrationMd]:
798
+ """Creates the ScoreCalibrationMd object."""
799
+ if score_calibration is None:
800
+ return None
801
+ return metadata_info.ScoreCalibrationMd(
802
+ score_transformation_type=score_calibration.transformation_type,
803
+ default_score=score_calibration.default_score,
804
+ file_path=self._export_calibration_file(
805
+ _SCORE_CALIBATION_FILENAME, score_calibration.parameters
806
+ ),
807
+ )
808
+
809
+ def _create_label_file_md(
810
+ self, labels: Optional[Labels] = None
811
+ ) -> Optional[List[metadata_info.LabelFileMd]]:
812
+ """Creates a list of LabelFileMd objects."""
813
+ label_files = None
814
+ if labels:
815
+ label_files = []
816
+ for item in labels.labels:
817
+ label_files.append(
818
+ metadata_info.LabelFileMd(
819
+ self._export_labels(item.filename, item.names),
820
+ locale=item.locale,
821
+ )
822
+ )
823
+ return label_files
824
+
825
+
826
+ class MetadataWriterBase:
827
+ """Base MetadataWriter class which contains the apis exposed to users.
828
+
829
+ MetadataWriter for Tasks e.g. image classifier / object detector will inherit
830
+ this class for their own usage.
831
+ """
832
+
833
+ def __init__(self, writer: MetadataWriter) -> None:
834
+ self.writer = writer
835
+
836
+ def populate(self) -> Tuple[bytearray, str]:
837
+ """Populates metadata into the TFLite file.
838
+
839
+ Note that only the output tflite is used for deployment. The output JSON
840
+ content is used to interpret the metadata content.
841
+
842
+ Returns:
843
+ A tuple of (model_with_metadata_in_bytes, metadata_json_content)
844
+ """
845
+ return self.writer.populate()