mediapipe-nightly 0.10.21.post20241223__cp310-cp310-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.
- mediapipe/__init__.py +26 -0
- mediapipe/calculators/__init__.py +0 -0
- mediapipe/calculators/audio/__init__.py +0 -0
- mediapipe/calculators/audio/mfcc_mel_calculators_pb2.py +33 -0
- mediapipe/calculators/audio/rational_factor_resample_calculator_pb2.py +33 -0
- mediapipe/calculators/audio/spectrogram_calculator_pb2.py +37 -0
- mediapipe/calculators/audio/stabilized_log_calculator_pb2.py +31 -0
- mediapipe/calculators/audio/time_series_framer_calculator_pb2.py +33 -0
- mediapipe/calculators/core/__init__.py +0 -0
- mediapipe/calculators/core/bypass_calculator_pb2.py +31 -0
- mediapipe/calculators/core/clip_vector_size_calculator_pb2.py +31 -0
- mediapipe/calculators/core/concatenate_vector_calculator_pb2.py +31 -0
- mediapipe/calculators/core/constant_side_packet_calculator_pb2.py +39 -0
- mediapipe/calculators/core/dequantize_byte_array_calculator_pb2.py +31 -0
- mediapipe/calculators/core/flow_limiter_calculator_pb2.py +32 -0
- mediapipe/calculators/core/gate_calculator_pb2.py +33 -0
- mediapipe/calculators/core/get_vector_item_calculator_pb2.py +31 -0
- mediapipe/calculators/core/graph_profile_calculator_pb2.py +31 -0
- mediapipe/calculators/core/packet_cloner_calculator_pb2.py +31 -0
- mediapipe/calculators/core/packet_resampler_calculator_pb2.py +33 -0
- mediapipe/calculators/core/packet_thinner_calculator_pb2.py +33 -0
- mediapipe/calculators/core/quantize_float_vector_calculator_pb2.py +31 -0
- mediapipe/calculators/core/sequence_shift_calculator_pb2.py +31 -0
- mediapipe/calculators/core/split_vector_calculator_pb2.py +33 -0
- mediapipe/calculators/image/__init__.py +0 -0
- mediapipe/calculators/image/bilateral_filter_calculator_pb2.py +31 -0
- mediapipe/calculators/image/feature_detector_calculator_pb2.py +31 -0
- mediapipe/calculators/image/image_clone_calculator_pb2.py +31 -0
- mediapipe/calculators/image/image_cropping_calculator_pb2.py +33 -0
- mediapipe/calculators/image/image_transformation_calculator_pb2.py +38 -0
- mediapipe/calculators/image/mask_overlay_calculator_pb2.py +33 -0
- mediapipe/calculators/image/opencv_encoded_image_to_image_frame_calculator_pb2.py +31 -0
- mediapipe/calculators/image/opencv_image_encoder_calculator_pb2.py +35 -0
- mediapipe/calculators/image/recolor_calculator_pb2.py +34 -0
- mediapipe/calculators/image/rotation_mode_pb2.py +29 -0
- mediapipe/calculators/image/scale_image_calculator_pb2.py +34 -0
- mediapipe/calculators/image/segmentation_smoothing_calculator_pb2.py +31 -0
- mediapipe/calculators/image/set_alpha_calculator_pb2.py +31 -0
- mediapipe/calculators/image/warp_affine_calculator_pb2.py +36 -0
- mediapipe/calculators/internal/__init__.py +0 -0
- mediapipe/calculators/internal/callback_packet_calculator_pb2.py +33 -0
- mediapipe/calculators/tensor/__init__.py +0 -0
- mediapipe/calculators/tensor/audio_to_tensor_calculator_pb2.py +35 -0
- mediapipe/calculators/tensor/bert_preprocessor_calculator_pb2.py +31 -0
- mediapipe/calculators/tensor/feedback_tensors_calculator_pb2.py +37 -0
- mediapipe/calculators/tensor/image_to_tensor_calculator_pb2.py +40 -0
- mediapipe/calculators/tensor/inference_calculator_pb2.py +63 -0
- mediapipe/calculators/tensor/landmarks_to_tensor_calculator_pb2.py +33 -0
- mediapipe/calculators/tensor/regex_preprocessor_calculator_pb2.py +31 -0
- mediapipe/calculators/tensor/tensor_converter_calculator_pb2.py +34 -0
- mediapipe/calculators/tensor/tensor_to_joints_calculator_pb2.py +31 -0
- mediapipe/calculators/tensor/tensors_readback_calculator_pb2.py +35 -0
- mediapipe/calculators/tensor/tensors_to_audio_calculator_pb2.py +33 -0
- mediapipe/calculators/tensor/tensors_to_classification_calculator_pb2.py +44 -0
- mediapipe/calculators/tensor/tensors_to_detections_calculator_pb2.py +39 -0
- mediapipe/calculators/tensor/tensors_to_floats_calculator_pb2.py +33 -0
- mediapipe/calculators/tensor/tensors_to_landmarks_calculator_pb2.py +33 -0
- mediapipe/calculators/tensor/tensors_to_segmentation_calculator_pb2.py +34 -0
- mediapipe/calculators/tensor/vector_to_tensor_calculator_pb2.py +27 -0
- mediapipe/calculators/tflite/__init__.py +0 -0
- mediapipe/calculators/tflite/ssd_anchors_calculator_pb2.py +32 -0
- mediapipe/calculators/tflite/tflite_converter_calculator_pb2.py +33 -0
- mediapipe/calculators/tflite/tflite_custom_op_resolver_calculator_pb2.py +31 -0
- mediapipe/calculators/tflite/tflite_inference_calculator_pb2.py +49 -0
- mediapipe/calculators/tflite/tflite_tensors_to_classification_calculator_pb2.py +31 -0
- mediapipe/calculators/tflite/tflite_tensors_to_detections_calculator_pb2.py +31 -0
- mediapipe/calculators/tflite/tflite_tensors_to_landmarks_calculator_pb2.py +33 -0
- mediapipe/calculators/tflite/tflite_tensors_to_segmentation_calculator_pb2.py +31 -0
- mediapipe/calculators/util/__init__.py +0 -0
- mediapipe/calculators/util/align_hand_to_pose_in_world_calculator_pb2.py +31 -0
- mediapipe/calculators/util/annotation_overlay_calculator_pb2.py +32 -0
- mediapipe/calculators/util/association_calculator_pb2.py +31 -0
- mediapipe/calculators/util/collection_has_min_size_calculator_pb2.py +31 -0
- mediapipe/calculators/util/combine_joints_calculator_pb2.py +36 -0
- mediapipe/calculators/util/detection_label_id_to_text_calculator_pb2.py +36 -0
- mediapipe/calculators/util/detections_to_rects_calculator_pb2.py +33 -0
- mediapipe/calculators/util/detections_to_render_data_calculator_pb2.py +33 -0
- mediapipe/calculators/util/face_to_rect_calculator_pb2.py +26 -0
- mediapipe/calculators/util/filter_detections_calculator_pb2.py +31 -0
- mediapipe/calculators/util/flat_color_image_calculator_pb2.py +32 -0
- mediapipe/calculators/util/labels_to_render_data_calculator_pb2.py +34 -0
- mediapipe/calculators/util/landmark_projection_calculator_pb2.py +31 -0
- mediapipe/calculators/util/landmarks_refinement_calculator_pb2.py +41 -0
- mediapipe/calculators/util/landmarks_smoothing_calculator_pb2.py +33 -0
- mediapipe/calculators/util/landmarks_to_detection_calculator_pb2.py +31 -0
- mediapipe/calculators/util/landmarks_to_floats_calculator_pb2.py +31 -0
- mediapipe/calculators/util/landmarks_to_render_data_calculator_pb2.py +32 -0
- mediapipe/calculators/util/landmarks_transformation_calculator_pb2.py +37 -0
- mediapipe/calculators/util/latency_pb2.py +26 -0
- mediapipe/calculators/util/local_file_contents_calculator_pb2.py +31 -0
- mediapipe/calculators/util/logic_calculator_pb2.py +34 -0
- mediapipe/calculators/util/non_max_suppression_calculator_pb2.py +35 -0
- mediapipe/calculators/util/packet_frequency_calculator_pb2.py +31 -0
- mediapipe/calculators/util/packet_frequency_pb2.py +26 -0
- mediapipe/calculators/util/packet_latency_calculator_pb2.py +31 -0
- mediapipe/calculators/util/rect_to_render_data_calculator_pb2.py +32 -0
- mediapipe/calculators/util/rect_to_render_scale_calculator_pb2.py +31 -0
- mediapipe/calculators/util/rect_transformation_calculator_pb2.py +31 -0
- mediapipe/calculators/util/refine_landmarks_from_heatmap_calculator_pb2.py +31 -0
- mediapipe/calculators/util/resource_provider_calculator_pb2.py +28 -0
- mediapipe/calculators/util/set_joints_visibility_calculator_pb2.py +41 -0
- mediapipe/calculators/util/thresholding_calculator_pb2.py +31 -0
- mediapipe/calculators/util/timed_box_list_id_to_label_calculator_pb2.py +31 -0
- mediapipe/calculators/util/timed_box_list_to_render_data_calculator_pb2.py +32 -0
- mediapipe/calculators/util/top_k_scores_calculator_pb2.py +31 -0
- mediapipe/calculators/util/visibility_copy_calculator_pb2.py +27 -0
- mediapipe/calculators/util/visibility_smoothing_calculator_pb2.py +31 -0
- mediapipe/calculators/video/__init__.py +0 -0
- mediapipe/calculators/video/box_detector_calculator_pb2.py +32 -0
- mediapipe/calculators/video/box_tracker_calculator_pb2.py +32 -0
- mediapipe/calculators/video/flow_packager_calculator_pb2.py +32 -0
- mediapipe/calculators/video/flow_to_image_calculator_pb2.py +31 -0
- mediapipe/calculators/video/motion_analysis_calculator_pb2.py +42 -0
- mediapipe/calculators/video/opencv_video_encoder_calculator_pb2.py +31 -0
- mediapipe/calculators/video/tool/__init__.py +0 -0
- mediapipe/calculators/video/tool/flow_quantizer_model_pb2.py +26 -0
- mediapipe/calculators/video/tracked_detection_manager_calculator_pb2.py +32 -0
- mediapipe/calculators/video/video_pre_stream_calculator_pb2.py +35 -0
- mediapipe/examples/__init__.py +14 -0
- mediapipe/examples/desktop/__init__.py +14 -0
- mediapipe/framework/__init__.py +0 -0
- mediapipe/framework/calculator_options_pb2.py +29 -0
- mediapipe/framework/calculator_pb2.py +59 -0
- mediapipe/framework/calculator_profile_pb2.py +48 -0
- mediapipe/framework/deps/__init__.py +0 -0
- mediapipe/framework/deps/proto_descriptor_pb2.py +29 -0
- mediapipe/framework/formats/__init__.py +0 -0
- mediapipe/framework/formats/affine_transform_data_pb2.py +28 -0
- mediapipe/framework/formats/annotation/__init__.py +0 -0
- mediapipe/framework/formats/annotation/locus_pb2.py +32 -0
- mediapipe/framework/formats/annotation/rasterization_pb2.py +29 -0
- mediapipe/framework/formats/body_rig_pb2.py +28 -0
- mediapipe/framework/formats/classification_pb2.py +31 -0
- mediapipe/framework/formats/detection_pb2.py +36 -0
- mediapipe/framework/formats/image_file_properties_pb2.py +26 -0
- mediapipe/framework/formats/image_format_pb2.py +29 -0
- mediapipe/framework/formats/landmark_pb2.py +37 -0
- mediapipe/framework/formats/location_data_pb2.py +38 -0
- mediapipe/framework/formats/matrix_data_pb2.py +31 -0
- mediapipe/framework/formats/motion/__init__.py +0 -0
- mediapipe/framework/formats/motion/optical_flow_field_data_pb2.py +30 -0
- mediapipe/framework/formats/object_detection/__init__.py +0 -0
- mediapipe/framework/formats/object_detection/anchor_pb2.py +26 -0
- mediapipe/framework/formats/rect_pb2.py +29 -0
- mediapipe/framework/formats/time_series_header_pb2.py +28 -0
- mediapipe/framework/graph_runtime_info_pb2.py +31 -0
- mediapipe/framework/mediapipe_options_pb2.py +27 -0
- mediapipe/framework/packet_factory_pb2.py +31 -0
- mediapipe/framework/packet_generator_pb2.py +33 -0
- mediapipe/framework/status_handler_pb2.py +28 -0
- mediapipe/framework/stream_handler/__init__.py +0 -0
- mediapipe/framework/stream_handler/default_input_stream_handler_pb2.py +27 -0
- mediapipe/framework/stream_handler/fixed_size_input_stream_handler_pb2.py +27 -0
- mediapipe/framework/stream_handler/sync_set_input_stream_handler_pb2.py +29 -0
- mediapipe/framework/stream_handler/timestamp_align_input_stream_handler_pb2.py +27 -0
- mediapipe/framework/stream_handler_pb2.py +30 -0
- mediapipe/framework/test_calculators_pb2.py +31 -0
- mediapipe/framework/thread_pool_executor_pb2.py +29 -0
- mediapipe/framework/tool/__init__.py +0 -0
- mediapipe/framework/tool/calculator_graph_template_pb2.py +44 -0
- mediapipe/framework/tool/field_data_pb2.py +28 -0
- mediapipe/framework/tool/node_chain_subgraph_pb2.py +31 -0
- mediapipe/framework/tool/packet_generator_wrapper_calculator_pb2.py +28 -0
- mediapipe/framework/tool/source_pb2.py +33 -0
- mediapipe/framework/tool/switch_container_pb2.py +32 -0
- mediapipe/gpu/__init__.py +0 -0
- mediapipe/gpu/copy_calculator_pb2.py +33 -0
- mediapipe/gpu/gl_animation_overlay_calculator_pb2.py +31 -0
- mediapipe/gpu/gl_context_options_pb2.py +31 -0
- mediapipe/gpu/gl_scaler_calculator_pb2.py +32 -0
- mediapipe/gpu/gl_surface_sink_calculator_pb2.py +32 -0
- mediapipe/gpu/gpu_origin_pb2.py +29 -0
- mediapipe/gpu/scale_mode_pb2.py +28 -0
- mediapipe/model_maker/__init__.py +27 -0
- mediapipe/model_maker/setup.py +107 -0
- mediapipe/modules/__init__.py +0 -0
- mediapipe/modules/face_detection/__init__.py +0 -0
- mediapipe/modules/face_detection/face_detection_full_range_cpu.binarypb +0 -0
- mediapipe/modules/face_detection/face_detection_full_range_sparse.tflite +0 -0
- mediapipe/modules/face_detection/face_detection_pb2.py +30 -0
- mediapipe/modules/face_detection/face_detection_short_range.tflite +0 -0
- mediapipe/modules/face_detection/face_detection_short_range_cpu.binarypb +0 -0
- mediapipe/modules/face_geometry/__init__.py +0 -0
- mediapipe/modules/face_geometry/data/__init__.py +0 -0
- mediapipe/modules/face_geometry/effect_renderer_calculator_pb2.py +27 -0
- mediapipe/modules/face_geometry/env_generator_calculator_pb2.py +28 -0
- mediapipe/modules/face_geometry/geometry_pipeline_calculator_pb2.py +27 -0
- mediapipe/modules/face_geometry/libs/__init__.py +0 -0
- mediapipe/modules/face_geometry/protos/__init__.py +0 -0
- mediapipe/modules/face_geometry/protos/environment_pb2.py +31 -0
- mediapipe/modules/face_geometry/protos/face_geometry_pb2.py +29 -0
- mediapipe/modules/face_geometry/protos/geometry_pipeline_metadata_pb2.py +32 -0
- mediapipe/modules/face_geometry/protos/mesh_3d_pb2.py +31 -0
- mediapipe/modules/face_landmark/__init__.py +0 -0
- mediapipe/modules/face_landmark/face_landmark.tflite +0 -0
- mediapipe/modules/face_landmark/face_landmark_front_cpu.binarypb +0 -0
- mediapipe/modules/face_landmark/face_landmark_with_attention.tflite +0 -0
- mediapipe/modules/hand_landmark/__init__.py +0 -0
- mediapipe/modules/hand_landmark/calculators/__init__.py +0 -0
- mediapipe/modules/hand_landmark/hand_landmark_full.tflite +0 -0
- mediapipe/modules/hand_landmark/hand_landmark_lite.tflite +0 -0
- mediapipe/modules/hand_landmark/hand_landmark_tracking_cpu.binarypb +0 -0
- mediapipe/modules/hand_landmark/handedness.txt +2 -0
- mediapipe/modules/holistic_landmark/__init__.py +0 -0
- mediapipe/modules/holistic_landmark/calculators/__init__.py +0 -0
- mediapipe/modules/holistic_landmark/calculators/roi_tracking_calculator_pb2.py +37 -0
- mediapipe/modules/holistic_landmark/hand_recrop.tflite +0 -0
- mediapipe/modules/holistic_landmark/holistic_landmark_cpu.binarypb +0 -0
- mediapipe/modules/iris_landmark/__init__.py +0 -0
- mediapipe/modules/iris_landmark/iris_landmark.tflite +0 -0
- mediapipe/modules/objectron/__init__.py +0 -0
- mediapipe/modules/objectron/calculators/__init__.py +0 -0
- mediapipe/modules/objectron/calculators/a_r_capture_metadata_pb2.py +102 -0
- mediapipe/modules/objectron/calculators/annotation_data_pb2.py +38 -0
- mediapipe/modules/objectron/calculators/belief_decoder_config_pb2.py +28 -0
- mediapipe/modules/objectron/calculators/camera_parameters_pb2.py +30 -0
- mediapipe/modules/objectron/calculators/filter_detection_calculator_pb2.py +35 -0
- mediapipe/modules/objectron/calculators/frame_annotation_to_rect_calculator_pb2.py +31 -0
- mediapipe/modules/objectron/calculators/frame_annotation_tracker_calculator_pb2.py +31 -0
- mediapipe/modules/objectron/calculators/lift_2d_frame_annotation_to_3d_calculator_pb2.py +32 -0
- mediapipe/modules/objectron/calculators/object_pb2.py +38 -0
- mediapipe/modules/objectron/calculators/tensors_to_objects_calculator_pb2.py +32 -0
- mediapipe/modules/objectron/calculators/tflite_tensors_to_objects_calculator_pb2.py +32 -0
- mediapipe/modules/objectron/object_detection_oidv4_labelmap.txt +24 -0
- mediapipe/modules/objectron/objectron_cpu.binarypb +0 -0
- mediapipe/modules/palm_detection/__init__.py +0 -0
- mediapipe/modules/palm_detection/palm_detection_full.tflite +0 -0
- mediapipe/modules/palm_detection/palm_detection_lite.tflite +0 -0
- mediapipe/modules/pose_detection/__init__.py +0 -0
- mediapipe/modules/pose_detection/pose_detection.tflite +0 -0
- mediapipe/modules/pose_landmark/__init__.py +0 -0
- mediapipe/modules/pose_landmark/pose_landmark_cpu.binarypb +0 -0
- mediapipe/modules/pose_landmark/pose_landmark_full.tflite +0 -0
- mediapipe/modules/selfie_segmentation/__init__.py +0 -0
- mediapipe/modules/selfie_segmentation/selfie_segmentation.tflite +0 -0
- mediapipe/modules/selfie_segmentation/selfie_segmentation_cpu.binarypb +0 -0
- mediapipe/modules/selfie_segmentation/selfie_segmentation_landscape.tflite +0 -0
- mediapipe/python/__init__.py +29 -0
- mediapipe/python/_framework_bindings.cpython-310-x86_64-linux-gnu.so +0 -0
- mediapipe/python/calculator_graph_test.py +251 -0
- mediapipe/python/image_frame_test.py +194 -0
- mediapipe/python/image_test.py +218 -0
- mediapipe/python/packet_creator.py +275 -0
- mediapipe/python/packet_getter.py +120 -0
- mediapipe/python/packet_test.py +533 -0
- mediapipe/python/solution_base.py +604 -0
- mediapipe/python/solution_base_test.py +396 -0
- mediapipe/python/solutions/__init__.py +27 -0
- mediapipe/python/solutions/download_utils.py +37 -0
- mediapipe/python/solutions/drawing_styles.py +249 -0
- mediapipe/python/solutions/drawing_utils.py +320 -0
- mediapipe/python/solutions/drawing_utils_test.py +258 -0
- mediapipe/python/solutions/face_detection.py +105 -0
- mediapipe/python/solutions/face_detection_test.py +92 -0
- mediapipe/python/solutions/face_mesh.py +125 -0
- mediapipe/python/solutions/face_mesh_connections.py +500 -0
- mediapipe/python/solutions/face_mesh_test.py +170 -0
- mediapipe/python/solutions/hands.py +153 -0
- mediapipe/python/solutions/hands_connections.py +32 -0
- mediapipe/python/solutions/hands_test.py +219 -0
- mediapipe/python/solutions/holistic.py +167 -0
- mediapipe/python/solutions/holistic_test.py +142 -0
- mediapipe/python/solutions/objectron.py +288 -0
- mediapipe/python/solutions/objectron_test.py +81 -0
- mediapipe/python/solutions/pose.py +192 -0
- mediapipe/python/solutions/pose_connections.py +22 -0
- mediapipe/python/solutions/pose_test.py +262 -0
- mediapipe/python/solutions/selfie_segmentation.py +76 -0
- mediapipe/python/solutions/selfie_segmentation_test.py +68 -0
- mediapipe/python/timestamp_test.py +78 -0
- mediapipe/tasks/__init__.py +14 -0
- mediapipe/tasks/cc/__init__.py +0 -0
- mediapipe/tasks/cc/audio/__init__.py +0 -0
- mediapipe/tasks/cc/audio/audio_classifier/__init__.py +0 -0
- mediapipe/tasks/cc/audio/audio_classifier/proto/__init__.py +0 -0
- mediapipe/tasks/cc/audio/audio_classifier/proto/audio_classifier_graph_options_pb2.py +35 -0
- mediapipe/tasks/cc/audio/audio_embedder/__init__.py +0 -0
- mediapipe/tasks/cc/audio/audio_embedder/proto/__init__.py +0 -0
- mediapipe/tasks/cc/audio/audio_embedder/proto/audio_embedder_graph_options_pb2.py +35 -0
- mediapipe/tasks/cc/audio/core/__init__.py +0 -0
- mediapipe/tasks/cc/audio/utils/__init__.py +0 -0
- mediapipe/tasks/cc/components/__init__.py +0 -0
- mediapipe/tasks/cc/components/calculators/__init__.py +0 -0
- mediapipe/tasks/cc/components/calculators/classification_aggregation_calculator_pb2.py +31 -0
- mediapipe/tasks/cc/components/calculators/score_calibration_calculator_pb2.py +35 -0
- mediapipe/tasks/cc/components/calculators/tensors_to_embeddings_calculator_pb2.py +32 -0
- mediapipe/tasks/cc/components/containers/__init__.py +0 -0
- mediapipe/tasks/cc/components/containers/proto/__init__.py +0 -0
- mediapipe/tasks/cc/components/containers/proto/classifications_pb2.py +30 -0
- mediapipe/tasks/cc/components/containers/proto/embeddings_pb2.py +35 -0
- mediapipe/tasks/cc/components/containers/proto/landmarks_detection_result_pb2.py +32 -0
- mediapipe/tasks/cc/components/processors/__init__.py +0 -0
- mediapipe/tasks/cc/components/processors/proto/__init__.py +0 -0
- mediapipe/tasks/cc/components/processors/proto/classification_postprocessing_graph_options_pb2.py +38 -0
- mediapipe/tasks/cc/components/processors/proto/classifier_options_pb2.py +27 -0
- mediapipe/tasks/cc/components/processors/proto/detection_postprocessing_graph_options_pb2.py +36 -0
- mediapipe/tasks/cc/components/processors/proto/detector_options_pb2.py +27 -0
- mediapipe/tasks/cc/components/processors/proto/embedder_options_pb2.py +27 -0
- mediapipe/tasks/cc/components/processors/proto/embedding_postprocessing_graph_options_pb2.py +32 -0
- mediapipe/tasks/cc/components/processors/proto/image_preprocessing_graph_options_pb2.py +34 -0
- mediapipe/tasks/cc/components/processors/proto/text_model_type_pb2.py +28 -0
- mediapipe/tasks/cc/components/processors/proto/text_preprocessing_graph_options_pb2.py +32 -0
- mediapipe/tasks/cc/components/utils/__init__.py +0 -0
- mediapipe/tasks/cc/core/__init__.py +0 -0
- mediapipe/tasks/cc/core/proto/__init__.py +0 -0
- mediapipe/tasks/cc/core/proto/acceleration_pb2.py +28 -0
- mediapipe/tasks/cc/core/proto/base_options_pb2.py +30 -0
- mediapipe/tasks/cc/core/proto/external_file_pb2.py +31 -0
- mediapipe/tasks/cc/core/proto/inference_subgraph_pb2.py +32 -0
- mediapipe/tasks/cc/core/proto/model_resources_calculator_pb2.py +32 -0
- mediapipe/tasks/cc/genai/__init__.py +0 -0
- mediapipe/tasks/cc/genai/inference/__init__.py +0 -0
- mediapipe/tasks/cc/genai/inference/c/__init__.py +0 -0
- mediapipe/tasks/cc/genai/inference/calculators/__init__.py +0 -0
- mediapipe/tasks/cc/genai/inference/calculators/detokenizer_calculator_pb2.py +27 -0
- mediapipe/tasks/cc/genai/inference/calculators/llm_gpu_calculator_pb2.py +32 -0
- mediapipe/tasks/cc/genai/inference/calculators/model_data_calculator_pb2.py +27 -0
- mediapipe/tasks/cc/genai/inference/calculators/tokenizer_calculator_pb2.py +29 -0
- mediapipe/tasks/cc/genai/inference/common/__init__.py +0 -0
- mediapipe/tasks/cc/genai/inference/proto/__init__.py +0 -0
- mediapipe/tasks/cc/genai/inference/proto/llm_file_metadata_pb2.py +32 -0
- mediapipe/tasks/cc/genai/inference/proto/llm_params_pb2.py +33 -0
- mediapipe/tasks/cc/genai/inference/proto/prompt_template_pb2.py +27 -0
- mediapipe/tasks/cc/genai/inference/proto/sampler_params_pb2.py +29 -0
- mediapipe/tasks/cc/genai/inference/proto/transformer_params_pb2.py +45 -0
- mediapipe/tasks/cc/genai/inference/utils/__init__.py +0 -0
- mediapipe/tasks/cc/genai/inference/utils/llm_utils/__init__.py +0 -0
- mediapipe/tasks/cc/genai/inference/utils/xnn_utils/__init__.py +0 -0
- mediapipe/tasks/cc/metadata/__init__.py +0 -0
- mediapipe/tasks/cc/metadata/python/__init__.py +0 -0
- mediapipe/tasks/cc/metadata/python/_pywrap_metadata_version.cpython-310-x86_64-linux-gnu.so +0 -0
- mediapipe/tasks/cc/metadata/tests/__init__.py +0 -0
- mediapipe/tasks/cc/metadata/utils/__init__.py +0 -0
- mediapipe/tasks/cc/text/__init__.py +0 -0
- mediapipe/tasks/cc/text/custom_ops/__init__.py +0 -0
- mediapipe/tasks/cc/text/custom_ops/ragged/__init__.py +0 -0
- mediapipe/tasks/cc/text/custom_ops/sentencepiece/__init__.py +0 -0
- mediapipe/tasks/cc/text/custom_ops/sentencepiece/testdata/__init__.py +0 -0
- mediapipe/tasks/cc/text/language_detector/__init__.py +0 -0
- mediapipe/tasks/cc/text/language_detector/custom_ops/__init__.py +0 -0
- mediapipe/tasks/cc/text/language_detector/custom_ops/utils/__init__.py +0 -0
- mediapipe/tasks/cc/text/language_detector/custom_ops/utils/hash/__init__.py +0 -0
- mediapipe/tasks/cc/text/language_detector/custom_ops/utils/utf/__init__.py +0 -0
- mediapipe/tasks/cc/text/text_classifier/__init__.py +0 -0
- mediapipe/tasks/cc/text/text_classifier/proto/__init__.py +0 -0
- mediapipe/tasks/cc/text/text_classifier/proto/text_classifier_graph_options_pb2.py +35 -0
- mediapipe/tasks/cc/text/text_embedder/__init__.py +0 -0
- mediapipe/tasks/cc/text/text_embedder/proto/__init__.py +0 -0
- mediapipe/tasks/cc/text/text_embedder/proto/text_embedder_graph_options_pb2.py +35 -0
- mediapipe/tasks/cc/text/tokenizers/__init__.py +0 -0
- mediapipe/tasks/cc/text/utils/__init__.py +0 -0
- mediapipe/tasks/cc/vision/__init__.py +0 -0
- mediapipe/tasks/cc/vision/core/__init__.py +0 -0
- mediapipe/tasks/cc/vision/custom_ops/__init__.py +0 -0
- mediapipe/tasks/cc/vision/face_detector/__init__.py +0 -0
- mediapipe/tasks/cc/vision/face_detector/proto/__init__.py +0 -0
- mediapipe/tasks/cc/vision/face_detector/proto/face_detector_graph_options_pb2.py +34 -0
- mediapipe/tasks/cc/vision/face_geometry/__init__.py +0 -0
- mediapipe/tasks/cc/vision/face_geometry/calculators/__init__.py +0 -0
- mediapipe/tasks/cc/vision/face_geometry/calculators/env_generator_calculator_pb2.py +28 -0
- mediapipe/tasks/cc/vision/face_geometry/calculators/geometry_pipeline_calculator_pb2.py +29 -0
- mediapipe/tasks/cc/vision/face_geometry/data/__init__.py +0 -0
- mediapipe/tasks/cc/vision/face_geometry/libs/__init__.py +0 -0
- mediapipe/tasks/cc/vision/face_geometry/proto/__init__.py +0 -0
- mediapipe/tasks/cc/vision/face_geometry/proto/environment_pb2.py +31 -0
- mediapipe/tasks/cc/vision/face_geometry/proto/face_geometry_graph_options_pb2.py +29 -0
- mediapipe/tasks/cc/vision/face_geometry/proto/face_geometry_pb2.py +29 -0
- mediapipe/tasks/cc/vision/face_geometry/proto/geometry_pipeline_metadata_pb2.py +32 -0
- mediapipe/tasks/cc/vision/face_geometry/proto/mesh_3d_pb2.py +31 -0
- mediapipe/tasks/cc/vision/face_landmarker/__init__.py +0 -0
- mediapipe/tasks/cc/vision/face_landmarker/proto/__init__.py +0 -0
- mediapipe/tasks/cc/vision/face_landmarker/proto/face_blendshapes_graph_options_pb2.py +34 -0
- mediapipe/tasks/cc/vision/face_landmarker/proto/face_landmarker_graph_options_pb2.py +37 -0
- mediapipe/tasks/cc/vision/face_landmarker/proto/face_landmarks_detector_graph_options_pb2.py +35 -0
- mediapipe/tasks/cc/vision/face_landmarker/proto/tensors_to_face_landmarks_graph_options_pb2.py +32 -0
- mediapipe/tasks/cc/vision/face_stylizer/__init__.py +0 -0
- mediapipe/tasks/cc/vision/face_stylizer/calculators/__init__.py +0 -0
- mediapipe/tasks/cc/vision/face_stylizer/calculators/tensors_to_image_calculator_pb2.py +36 -0
- mediapipe/tasks/cc/vision/face_stylizer/proto/__init__.py +0 -0
- mediapipe/tasks/cc/vision/face_stylizer/proto/face_stylizer_graph_options_pb2.py +35 -0
- mediapipe/tasks/cc/vision/gesture_recognizer/__init__.py +0 -0
- mediapipe/tasks/cc/vision/gesture_recognizer/calculators/__init__.py +0 -0
- mediapipe/tasks/cc/vision/gesture_recognizer/calculators/combined_prediction_calculator_pb2.py +33 -0
- mediapipe/tasks/cc/vision/gesture_recognizer/calculators/landmarks_to_matrix_calculator_pb2.py +31 -0
- mediapipe/tasks/cc/vision/gesture_recognizer/proto/__init__.py +0 -0
- mediapipe/tasks/cc/vision/gesture_recognizer/proto/gesture_classifier_graph_options_pb2.py +35 -0
- mediapipe/tasks/cc/vision/gesture_recognizer/proto/gesture_embedder_graph_options_pb2.py +34 -0
- mediapipe/tasks/cc/vision/gesture_recognizer/proto/gesture_recognizer_graph_options_pb2.py +36 -0
- mediapipe/tasks/cc/vision/gesture_recognizer/proto/hand_gesture_recognizer_graph_options_pb2.py +36 -0
- mediapipe/tasks/cc/vision/hand_detector/__init__.py +0 -0
- mediapipe/tasks/cc/vision/hand_detector/proto/__init__.py +0 -0
- mediapipe/tasks/cc/vision/hand_detector/proto/hand_detector_graph_options_pb2.py +34 -0
- mediapipe/tasks/cc/vision/hand_detector/proto/hand_detector_result_pb2.py +30 -0
- mediapipe/tasks/cc/vision/hand_landmarker/__init__.py +0 -0
- mediapipe/tasks/cc/vision/hand_landmarker/calculators/__init__.py +0 -0
- mediapipe/tasks/cc/vision/hand_landmarker/calculators/hand_association_calculator_pb2.py +31 -0
- mediapipe/tasks/cc/vision/hand_landmarker/proto/__init__.py +0 -0
- mediapipe/tasks/cc/vision/hand_landmarker/proto/hand_landmarker_graph_options_pb2.py +36 -0
- mediapipe/tasks/cc/vision/hand_landmarker/proto/hand_landmarks_detector_graph_options_pb2.py +34 -0
- mediapipe/tasks/cc/vision/hand_landmarker/proto/hand_roi_refinement_graph_options_pb2.py +28 -0
- mediapipe/tasks/cc/vision/holistic_landmarker/__init__.py +0 -0
- mediapipe/tasks/cc/vision/holistic_landmarker/proto/__init__.py +0 -0
- mediapipe/tasks/cc/vision/holistic_landmarker/proto/holistic_landmarker_graph_options_pb2.py +34 -0
- mediapipe/tasks/cc/vision/holistic_landmarker/proto/holistic_result_pb2.py +29 -0
- mediapipe/tasks/cc/vision/image_classifier/__init__.py +0 -0
- mediapipe/tasks/cc/vision/image_classifier/proto/__init__.py +0 -0
- mediapipe/tasks/cc/vision/image_classifier/proto/image_classifier_graph_options_pb2.py +35 -0
- mediapipe/tasks/cc/vision/image_embedder/__init__.py +0 -0
- mediapipe/tasks/cc/vision/image_embedder/proto/__init__.py +0 -0
- mediapipe/tasks/cc/vision/image_embedder/proto/image_embedder_graph_options_pb2.py +35 -0
- mediapipe/tasks/cc/vision/image_generator/__init__.py +0 -0
- mediapipe/tasks/cc/vision/image_generator/diffuser/__init__.py +0 -0
- mediapipe/tasks/cc/vision/image_generator/diffuser/stable_diffusion_iterate_calculator_pb2.py +40 -0
- mediapipe/tasks/cc/vision/image_generator/proto/__init__.py +0 -0
- mediapipe/tasks/cc/vision/image_generator/proto/conditioned_image_graph_options_pb2.py +40 -0
- mediapipe/tasks/cc/vision/image_generator/proto/control_plugin_graph_options_pb2.py +34 -0
- mediapipe/tasks/cc/vision/image_generator/proto/image_generator_graph_options_pb2.py +30 -0
- mediapipe/tasks/cc/vision/image_segmenter/__init__.py +0 -0
- mediapipe/tasks/cc/vision/image_segmenter/calculators/__init__.py +0 -0
- mediapipe/tasks/cc/vision/image_segmenter/calculators/tensors_to_segmentation_calculator_pb2.py +34 -0
- mediapipe/tasks/cc/vision/image_segmenter/proto/__init__.py +0 -0
- mediapipe/tasks/cc/vision/image_segmenter/proto/image_segmenter_graph_options_pb2.py +35 -0
- mediapipe/tasks/cc/vision/image_segmenter/proto/segmenter_options_pb2.py +33 -0
- mediapipe/tasks/cc/vision/interactive_segmenter/__init__.py +0 -0
- mediapipe/tasks/cc/vision/object_detector/__init__.py +0 -0
- mediapipe/tasks/cc/vision/object_detector/proto/__init__.py +0 -0
- mediapipe/tasks/cc/vision/object_detector/proto/object_detector_options_pb2.py +34 -0
- mediapipe/tasks/cc/vision/pose_detector/__init__.py +0 -0
- mediapipe/tasks/cc/vision/pose_detector/proto/__init__.py +0 -0
- mediapipe/tasks/cc/vision/pose_detector/proto/pose_detector_graph_options_pb2.py +34 -0
- mediapipe/tasks/cc/vision/pose_landmarker/__init__.py +0 -0
- mediapipe/tasks/cc/vision/pose_landmarker/proto/__init__.py +0 -0
- mediapipe/tasks/cc/vision/pose_landmarker/proto/pose_landmarker_graph_options_pb2.py +36 -0
- mediapipe/tasks/cc/vision/pose_landmarker/proto/pose_landmarks_detector_graph_options_pb2.py +34 -0
- mediapipe/tasks/cc/vision/utils/__init__.py +0 -0
- mediapipe/tasks/cc/vision/utils/ghum/__init__.py +0 -0
- mediapipe/tasks/metadata/image_segmenter_metadata_schema.fbs +59 -0
- mediapipe/tasks/metadata/image_segmenter_metadata_schema_py_generated.py +108 -0
- mediapipe/tasks/metadata/metadata_schema.fbs +732 -0
- mediapipe/tasks/metadata/metadata_schema_py_generated.py +3251 -0
- mediapipe/tasks/metadata/object_detector_metadata_schema.fbs +98 -0
- mediapipe/tasks/metadata/object_detector_metadata_schema_py_generated.py +674 -0
- mediapipe/tasks/metadata/schema_py_generated.py +18438 -0
- mediapipe/tasks/python/__init__.py +27 -0
- mediapipe/tasks/python/audio/__init__.py +33 -0
- mediapipe/tasks/python/audio/audio_classifier.py +324 -0
- mediapipe/tasks/python/audio/audio_embedder.py +285 -0
- mediapipe/tasks/python/audio/core/__init__.py +16 -0
- mediapipe/tasks/python/audio/core/audio_record.py +125 -0
- mediapipe/tasks/python/audio/core/audio_task_running_mode.py +29 -0
- mediapipe/tasks/python/audio/core/base_audio_task_api.py +181 -0
- mediapipe/tasks/python/benchmark/__init__.py +13 -0
- mediapipe/tasks/python/benchmark/benchmark_utils.py +70 -0
- mediapipe/tasks/python/benchmark/vision/__init__.py +13 -0
- mediapipe/tasks/python/benchmark/vision/benchmark.py +99 -0
- mediapipe/tasks/python/benchmark/vision/core/__init__.py +14 -0
- mediapipe/tasks/python/benchmark/vision/core/base_vision_benchmark_api.py +40 -0
- mediapipe/tasks/python/components/__init__.py +13 -0
- mediapipe/tasks/python/components/containers/__init__.py +53 -0
- mediapipe/tasks/python/components/containers/audio_data.py +137 -0
- mediapipe/tasks/python/components/containers/bounding_box.py +73 -0
- mediapipe/tasks/python/components/containers/category.py +78 -0
- mediapipe/tasks/python/components/containers/classification_result.py +111 -0
- mediapipe/tasks/python/components/containers/detections.py +181 -0
- mediapipe/tasks/python/components/containers/embedding_result.py +89 -0
- mediapipe/tasks/python/components/containers/keypoint.py +77 -0
- mediapipe/tasks/python/components/containers/landmark.py +122 -0
- mediapipe/tasks/python/components/containers/landmark_detection_result.py +106 -0
- mediapipe/tasks/python/components/containers/rect.py +109 -0
- mediapipe/tasks/python/components/processors/__init__.py +23 -0
- mediapipe/tasks/python/components/processors/classifier_options.py +86 -0
- mediapipe/tasks/python/components/utils/__init__.py +13 -0
- mediapipe/tasks/python/components/utils/cosine_similarity.py +68 -0
- mediapipe/tasks/python/core/__init__.py +13 -0
- mediapipe/tasks/python/core/base_options.py +121 -0
- mediapipe/tasks/python/core/optional_dependencies.py +25 -0
- mediapipe/tasks/python/core/task_info.py +139 -0
- mediapipe/tasks/python/genai/__init__.py +14 -0
- mediapipe/tasks/python/genai/bundler/__init__.py +23 -0
- mediapipe/tasks/python/genai/bundler/llm_bundler.py +130 -0
- mediapipe/tasks/python/genai/bundler/llm_bundler_test.py +168 -0
- mediapipe/tasks/python/genai/converter/__init__.py +24 -0
- mediapipe/tasks/python/genai/converter/converter_base.py +179 -0
- mediapipe/tasks/python/genai/converter/converter_factory.py +79 -0
- mediapipe/tasks/python/genai/converter/llm_converter.py +374 -0
- mediapipe/tasks/python/genai/converter/llm_converter_test.py +63 -0
- mediapipe/tasks/python/genai/converter/pytorch_converter.py +318 -0
- mediapipe/tasks/python/genai/converter/pytorch_converter_test.py +86 -0
- mediapipe/tasks/python/genai/converter/quantization_util.py +516 -0
- mediapipe/tasks/python/genai/converter/quantization_util_test.py +259 -0
- mediapipe/tasks/python/genai/converter/safetensors_converter.py +580 -0
- mediapipe/tasks/python/genai/converter/safetensors_converter_test.py +83 -0
- mediapipe/tasks/python/genai/converter/weight_bins_writer.py +120 -0
- mediapipe/tasks/python/genai/converter/weight_bins_writer_test.py +95 -0
- mediapipe/tasks/python/metadata/__init__.py +13 -0
- mediapipe/tasks/python/metadata/flatbuffers_lib/_pywrap_flatbuffers.cpython-310-x86_64-linux-gnu.so +0 -0
- mediapipe/tasks/python/metadata/metadata.py +928 -0
- mediapipe/tasks/python/metadata/metadata_displayer_cli.py +34 -0
- mediapipe/tasks/python/metadata/metadata_writers/__init__.py +13 -0
- mediapipe/tasks/python/metadata/metadata_writers/face_stylizer.py +138 -0
- mediapipe/tasks/python/metadata/metadata_writers/image_classifier.py +71 -0
- mediapipe/tasks/python/metadata/metadata_writers/image_segmenter.py +170 -0
- mediapipe/tasks/python/metadata/metadata_writers/metadata_info.py +1166 -0
- mediapipe/tasks/python/metadata/metadata_writers/metadata_writer.py +845 -0
- mediapipe/tasks/python/metadata/metadata_writers/model_asset_bundle_utils.py +71 -0
- mediapipe/tasks/python/metadata/metadata_writers/object_detector.py +331 -0
- mediapipe/tasks/python/metadata/metadata_writers/text_classifier.py +119 -0
- mediapipe/tasks/python/metadata/metadata_writers/writer_utils.py +91 -0
- mediapipe/tasks/python/test/__init__.py +13 -0
- mediapipe/tasks/python/test/audio/__init__.py +13 -0
- mediapipe/tasks/python/test/audio/audio_classifier_test.py +387 -0
- mediapipe/tasks/python/test/audio/audio_embedder_test.py +297 -0
- mediapipe/tasks/python/test/test_utils.py +196 -0
- mediapipe/tasks/python/test/text/__init__.py +13 -0
- mediapipe/tasks/python/test/text/language_detector_test.py +228 -0
- mediapipe/tasks/python/test/text/text_classifier_test.py +235 -0
- mediapipe/tasks/python/test/text/text_embedder_test.py +326 -0
- mediapipe/tasks/python/test/vision/__init__.py +13 -0
- mediapipe/tasks/python/test/vision/face_aligner_test.py +190 -0
- mediapipe/tasks/python/test/vision/face_detector_test.py +523 -0
- mediapipe/tasks/python/test/vision/face_landmarker_test.py +565 -0
- mediapipe/tasks/python/test/vision/face_stylizer_test.py +191 -0
- mediapipe/tasks/python/test/vision/hand_landmarker_test.py +437 -0
- mediapipe/tasks/python/test/vision/holistic_landmarker_test.py +544 -0
- mediapipe/tasks/python/test/vision/image_classifier_test.py +657 -0
- mediapipe/tasks/python/test/vision/image_embedder_test.py +423 -0
- mediapipe/tasks/python/test/vision/image_segmenter_test.py +512 -0
- mediapipe/tasks/python/test/vision/interactive_segmenter_test.py +341 -0
- mediapipe/tasks/python/test/vision/object_detector_test.py +493 -0
- mediapipe/tasks/python/test/vision/pose_landmarker_test.py +518 -0
- mediapipe/tasks/python/text/__init__.py +35 -0
- mediapipe/tasks/python/text/core/__init__.py +16 -0
- mediapipe/tasks/python/text/core/base_text_task_api.py +54 -0
- mediapipe/tasks/python/text/language_detector.py +220 -0
- mediapipe/tasks/python/text/text_classifier.py +187 -0
- mediapipe/tasks/python/text/text_embedder.py +188 -0
- mediapipe/tasks/python/vision/__init__.py +90 -0
- mediapipe/tasks/python/vision/core/__init__.py +14 -0
- mediapipe/tasks/python/vision/core/base_vision_task_api.py +226 -0
- mediapipe/tasks/python/vision/core/image_processing_options.py +39 -0
- mediapipe/tasks/python/vision/core/vision_task_running_mode.py +31 -0
- mediapipe/tasks/python/vision/face_aligner.py +158 -0
- mediapipe/tasks/python/vision/face_detector.py +332 -0
- mediapipe/tasks/python/vision/face_landmarker.py +3244 -0
- mediapipe/tasks/python/vision/face_stylizer.py +158 -0
- mediapipe/tasks/python/vision/gesture_recognizer.py +480 -0
- mediapipe/tasks/python/vision/hand_landmarker.py +504 -0
- mediapipe/tasks/python/vision/holistic_landmarker.py +576 -0
- mediapipe/tasks/python/vision/image_classifier.py +358 -0
- mediapipe/tasks/python/vision/image_embedder.py +362 -0
- mediapipe/tasks/python/vision/image_segmenter.py +433 -0
- mediapipe/tasks/python/vision/interactive_segmenter.py +285 -0
- mediapipe/tasks/python/vision/object_detector.py +389 -0
- mediapipe/tasks/python/vision/pose_landmarker.py +455 -0
- mediapipe/util/__init__.py +0 -0
- mediapipe/util/analytics/__init__.py +0 -0
- mediapipe/util/analytics/mediapipe_log_extension_pb2.py +44 -0
- mediapipe/util/analytics/mediapipe_logging_enums_pb2.py +37 -0
- mediapipe/util/audio_decoder_pb2.py +33 -0
- mediapipe/util/color_pb2.py +33 -0
- mediapipe/util/label_map_pb2.py +27 -0
- mediapipe/util/render_data_pb2.py +58 -0
- mediapipe/util/sequence/__init__.py +14 -0
- mediapipe/util/sequence/media_sequence.py +716 -0
- mediapipe/util/sequence/media_sequence_test.py +290 -0
- mediapipe/util/sequence/media_sequence_util.py +800 -0
- mediapipe/util/sequence/media_sequence_util_test.py +389 -0
- mediapipe/util/tracking/__init__.py +0 -0
- mediapipe/util/tracking/box_detector_pb2.py +39 -0
- mediapipe/util/tracking/box_tracker_pb2.py +32 -0
- mediapipe/util/tracking/camera_motion_pb2.py +31 -0
- mediapipe/util/tracking/flow_packager_pb2.py +60 -0
- mediapipe/util/tracking/frame_selection_pb2.py +35 -0
- mediapipe/util/tracking/frame_selection_solution_evaluator_pb2.py +28 -0
- mediapipe/util/tracking/motion_analysis_pb2.py +35 -0
- mediapipe/util/tracking/motion_estimation_pb2.py +66 -0
- mediapipe/util/tracking/motion_models_pb2.py +42 -0
- mediapipe/util/tracking/motion_saliency_pb2.py +26 -0
- mediapipe/util/tracking/push_pull_filtering_pb2.py +26 -0
- mediapipe/util/tracking/region_flow_computation_pb2.py +59 -0
- mediapipe/util/tracking/region_flow_pb2.py +49 -0
- mediapipe/util/tracking/tone_estimation_pb2.py +45 -0
- mediapipe/util/tracking/tone_models_pb2.py +32 -0
- mediapipe/util/tracking/tracked_detection_manager_config_pb2.py +26 -0
- mediapipe/util/tracking/tracking_pb2.py +73 -0
- mediapipe_nightly-0.10.21.post20241223.dist-info/LICENSE +218 -0
- mediapipe_nightly-0.10.21.post20241223.dist-info/METADATA +199 -0
- mediapipe_nightly-0.10.21.post20241223.dist-info/RECORD +593 -0
- mediapipe_nightly-0.10.21.post20241223.dist-info/WHEEL +5 -0
- mediapipe_nightly-0.10.21.post20241223.dist-info/top_level.txt +4 -0
- mediapipe_nightly.libs/libEGL-48f73270.so.1.1.0 +0 -0
- mediapipe_nightly.libs/libGLESv2-ed5eda4f.so.2.1.0 +0 -0
- mediapipe_nightly.libs/libGLdispatch-64b28464.so.0.0.0 +0 -0
@@ -0,0 +1,249 @@
|
|
1
|
+
# Copyright 2021 The MediaPipe Authors.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless requi_RED by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
"""MediaPipe solution drawing styles."""
|
15
|
+
|
16
|
+
from typing import Mapping, Tuple
|
17
|
+
|
18
|
+
from mediapipe.python.solutions import face_mesh_connections
|
19
|
+
from mediapipe.python.solutions import hands_connections
|
20
|
+
from mediapipe.python.solutions.drawing_utils import DrawingSpec
|
21
|
+
from mediapipe.python.solutions.hands import HandLandmark
|
22
|
+
from mediapipe.python.solutions.pose import PoseLandmark
|
23
|
+
|
24
|
+
_RADIUS = 5
|
25
|
+
_RED = (48, 48, 255)
|
26
|
+
_GREEN = (48, 255, 48)
|
27
|
+
_BLUE = (192, 101, 21)
|
28
|
+
_YELLOW = (0, 204, 255)
|
29
|
+
_GRAY = (128, 128, 128)
|
30
|
+
_PURPLE = (128, 64, 128)
|
31
|
+
_PEACH = (180, 229, 255)
|
32
|
+
_WHITE = (224, 224, 224)
|
33
|
+
_CYAN = (192, 255, 48)
|
34
|
+
_MAGENTA = (192, 48, 255)
|
35
|
+
|
36
|
+
# Hands
|
37
|
+
_THICKNESS_WRIST_MCP = 3
|
38
|
+
_THICKNESS_FINGER = 2
|
39
|
+
_THICKNESS_DOT = -1
|
40
|
+
|
41
|
+
# Hand landmarks
|
42
|
+
_PALM_LANDMARKS = (HandLandmark.WRIST, HandLandmark.THUMB_CMC,
|
43
|
+
HandLandmark.INDEX_FINGER_MCP,
|
44
|
+
HandLandmark.MIDDLE_FINGER_MCP, HandLandmark.RING_FINGER_MCP,
|
45
|
+
HandLandmark.PINKY_MCP)
|
46
|
+
_THUMP_LANDMARKS = (HandLandmark.THUMB_MCP, HandLandmark.THUMB_IP,
|
47
|
+
HandLandmark.THUMB_TIP)
|
48
|
+
_INDEX_FINGER_LANDMARKS = (HandLandmark.INDEX_FINGER_PIP,
|
49
|
+
HandLandmark.INDEX_FINGER_DIP,
|
50
|
+
HandLandmark.INDEX_FINGER_TIP)
|
51
|
+
_MIDDLE_FINGER_LANDMARKS = (HandLandmark.MIDDLE_FINGER_PIP,
|
52
|
+
HandLandmark.MIDDLE_FINGER_DIP,
|
53
|
+
HandLandmark.MIDDLE_FINGER_TIP)
|
54
|
+
_RING_FINGER_LANDMARKS = (HandLandmark.RING_FINGER_PIP,
|
55
|
+
HandLandmark.RING_FINGER_DIP,
|
56
|
+
HandLandmark.RING_FINGER_TIP)
|
57
|
+
_PINKY_FINGER_LANDMARKS = (HandLandmark.PINKY_PIP, HandLandmark.PINKY_DIP,
|
58
|
+
HandLandmark.PINKY_TIP)
|
59
|
+
_HAND_LANDMARK_STYLE = {
|
60
|
+
_PALM_LANDMARKS:
|
61
|
+
DrawingSpec(
|
62
|
+
color=_RED, thickness=_THICKNESS_DOT, circle_radius=_RADIUS),
|
63
|
+
_THUMP_LANDMARKS:
|
64
|
+
DrawingSpec(
|
65
|
+
color=_PEACH, thickness=_THICKNESS_DOT, circle_radius=_RADIUS),
|
66
|
+
_INDEX_FINGER_LANDMARKS:
|
67
|
+
DrawingSpec(
|
68
|
+
color=_PURPLE, thickness=_THICKNESS_DOT, circle_radius=_RADIUS),
|
69
|
+
_MIDDLE_FINGER_LANDMARKS:
|
70
|
+
DrawingSpec(
|
71
|
+
color=_YELLOW, thickness=_THICKNESS_DOT, circle_radius=_RADIUS),
|
72
|
+
_RING_FINGER_LANDMARKS:
|
73
|
+
DrawingSpec(
|
74
|
+
color=_GREEN, thickness=_THICKNESS_DOT, circle_radius=_RADIUS),
|
75
|
+
_PINKY_FINGER_LANDMARKS:
|
76
|
+
DrawingSpec(
|
77
|
+
color=_BLUE, thickness=_THICKNESS_DOT, circle_radius=_RADIUS),
|
78
|
+
}
|
79
|
+
|
80
|
+
# Hands connections
|
81
|
+
_HAND_CONNECTION_STYLE = {
|
82
|
+
hands_connections.HAND_PALM_CONNECTIONS:
|
83
|
+
DrawingSpec(color=_GRAY, thickness=_THICKNESS_WRIST_MCP),
|
84
|
+
hands_connections.HAND_THUMB_CONNECTIONS:
|
85
|
+
DrawingSpec(color=_PEACH, thickness=_THICKNESS_FINGER),
|
86
|
+
hands_connections.HAND_INDEX_FINGER_CONNECTIONS:
|
87
|
+
DrawingSpec(color=_PURPLE, thickness=_THICKNESS_FINGER),
|
88
|
+
hands_connections.HAND_MIDDLE_FINGER_CONNECTIONS:
|
89
|
+
DrawingSpec(color=_YELLOW, thickness=_THICKNESS_FINGER),
|
90
|
+
hands_connections.HAND_RING_FINGER_CONNECTIONS:
|
91
|
+
DrawingSpec(color=_GREEN, thickness=_THICKNESS_FINGER),
|
92
|
+
hands_connections.HAND_PINKY_FINGER_CONNECTIONS:
|
93
|
+
DrawingSpec(color=_BLUE, thickness=_THICKNESS_FINGER)
|
94
|
+
}
|
95
|
+
|
96
|
+
# FaceMesh connections
|
97
|
+
_THICKNESS_TESSELATION = 1
|
98
|
+
_THICKNESS_CONTOURS = 2
|
99
|
+
_FACEMESH_CONTOURS_CONNECTION_STYLE = {
|
100
|
+
face_mesh_connections.FACEMESH_LIPS:
|
101
|
+
DrawingSpec(color=_WHITE, thickness=_THICKNESS_CONTOURS),
|
102
|
+
face_mesh_connections.FACEMESH_LEFT_EYE:
|
103
|
+
DrawingSpec(color=_GREEN, thickness=_THICKNESS_CONTOURS),
|
104
|
+
face_mesh_connections.FACEMESH_LEFT_EYEBROW:
|
105
|
+
DrawingSpec(color=_GREEN, thickness=_THICKNESS_CONTOURS),
|
106
|
+
face_mesh_connections.FACEMESH_RIGHT_EYE:
|
107
|
+
DrawingSpec(color=_RED, thickness=_THICKNESS_CONTOURS),
|
108
|
+
face_mesh_connections.FACEMESH_RIGHT_EYEBROW:
|
109
|
+
DrawingSpec(color=_RED, thickness=_THICKNESS_CONTOURS),
|
110
|
+
face_mesh_connections.FACEMESH_FACE_OVAL:
|
111
|
+
DrawingSpec(color=_WHITE, thickness=_THICKNESS_CONTOURS)
|
112
|
+
}
|
113
|
+
|
114
|
+
_FACEMESH_CONTOURS_CONNECTION_STYLE_1 = {
|
115
|
+
face_mesh_connections.FACEMESH_LIPS:
|
116
|
+
DrawingSpec(color=_BLUE, thickness=_THICKNESS_CONTOURS),
|
117
|
+
face_mesh_connections.FACEMESH_LEFT_EYE:
|
118
|
+
DrawingSpec(color=_CYAN, thickness=_THICKNESS_CONTOURS),
|
119
|
+
face_mesh_connections.FACEMESH_LEFT_EYEBROW:
|
120
|
+
DrawingSpec(color=_GREEN, thickness=_THICKNESS_CONTOURS),
|
121
|
+
face_mesh_connections.FACEMESH_RIGHT_EYE:
|
122
|
+
DrawingSpec(color=_MAGENTA, thickness=_THICKNESS_CONTOURS),
|
123
|
+
face_mesh_connections.FACEMESH_RIGHT_EYEBROW:
|
124
|
+
DrawingSpec(color=_RED, thickness=_THICKNESS_CONTOURS),
|
125
|
+
face_mesh_connections.FACEMESH_FACE_OVAL:
|
126
|
+
DrawingSpec(color=_WHITE, thickness=_THICKNESS_CONTOURS),
|
127
|
+
face_mesh_connections.FACEMESH_NOSE:
|
128
|
+
DrawingSpec(color=_YELLOW, thickness=_THICKNESS_CONTOURS)
|
129
|
+
}
|
130
|
+
|
131
|
+
# Pose
|
132
|
+
_THICKNESS_POSE_LANDMARKS = 2
|
133
|
+
_POSE_LANDMARKS_LEFT = frozenset([
|
134
|
+
PoseLandmark.LEFT_EYE_INNER, PoseLandmark.LEFT_EYE,
|
135
|
+
PoseLandmark.LEFT_EYE_OUTER, PoseLandmark.LEFT_EAR, PoseLandmark.MOUTH_LEFT,
|
136
|
+
PoseLandmark.LEFT_SHOULDER, PoseLandmark.LEFT_ELBOW,
|
137
|
+
PoseLandmark.LEFT_WRIST, PoseLandmark.LEFT_PINKY, PoseLandmark.LEFT_INDEX,
|
138
|
+
PoseLandmark.LEFT_THUMB, PoseLandmark.LEFT_HIP, PoseLandmark.LEFT_KNEE,
|
139
|
+
PoseLandmark.LEFT_ANKLE, PoseLandmark.LEFT_HEEL,
|
140
|
+
PoseLandmark.LEFT_FOOT_INDEX
|
141
|
+
])
|
142
|
+
|
143
|
+
_POSE_LANDMARKS_RIGHT = frozenset([
|
144
|
+
PoseLandmark.RIGHT_EYE_INNER, PoseLandmark.RIGHT_EYE,
|
145
|
+
PoseLandmark.RIGHT_EYE_OUTER, PoseLandmark.RIGHT_EAR,
|
146
|
+
PoseLandmark.MOUTH_RIGHT, PoseLandmark.RIGHT_SHOULDER,
|
147
|
+
PoseLandmark.RIGHT_ELBOW, PoseLandmark.RIGHT_WRIST,
|
148
|
+
PoseLandmark.RIGHT_PINKY, PoseLandmark.RIGHT_INDEX,
|
149
|
+
PoseLandmark.RIGHT_THUMB, PoseLandmark.RIGHT_HIP, PoseLandmark.RIGHT_KNEE,
|
150
|
+
PoseLandmark.RIGHT_ANKLE, PoseLandmark.RIGHT_HEEL,
|
151
|
+
PoseLandmark.RIGHT_FOOT_INDEX
|
152
|
+
])
|
153
|
+
|
154
|
+
|
155
|
+
def get_default_hand_landmarks_style() -> Mapping[int, DrawingSpec]:
|
156
|
+
"""Returns the default hand landmarks drawing style.
|
157
|
+
|
158
|
+
Returns:
|
159
|
+
A mapping from each hand landmark to its default drawing spec.
|
160
|
+
"""
|
161
|
+
hand_landmark_style = {}
|
162
|
+
for k, v in _HAND_LANDMARK_STYLE.items():
|
163
|
+
for landmark in k:
|
164
|
+
hand_landmark_style[landmark] = v
|
165
|
+
return hand_landmark_style
|
166
|
+
|
167
|
+
|
168
|
+
def get_default_hand_connections_style(
|
169
|
+
) -> Mapping[Tuple[int, int], DrawingSpec]:
|
170
|
+
"""Returns the default hand connections drawing style.
|
171
|
+
|
172
|
+
Returns:
|
173
|
+
A mapping from each hand connection to its default drawing spec.
|
174
|
+
"""
|
175
|
+
hand_connection_style = {}
|
176
|
+
for k, v in _HAND_CONNECTION_STYLE.items():
|
177
|
+
for connection in k:
|
178
|
+
hand_connection_style[connection] = v
|
179
|
+
return hand_connection_style
|
180
|
+
|
181
|
+
|
182
|
+
def get_default_face_mesh_contours_style(
|
183
|
+
i: int = 0,
|
184
|
+
) -> Mapping[Tuple[int, int], DrawingSpec]:
|
185
|
+
"""Returns the default face mesh contours drawing style.
|
186
|
+
|
187
|
+
Args:
|
188
|
+
i: The id for default style. Currently there are two default styles.
|
189
|
+
|
190
|
+
Returns:
|
191
|
+
A mapping from each face mesh contours connection to its default drawing
|
192
|
+
spec.
|
193
|
+
"""
|
194
|
+
default_style = (
|
195
|
+
_FACEMESH_CONTOURS_CONNECTION_STYLE_1
|
196
|
+
if i == 1
|
197
|
+
else _FACEMESH_CONTOURS_CONNECTION_STYLE
|
198
|
+
)
|
199
|
+
face_mesh_contours_connection_style = {}
|
200
|
+
for k, v in default_style.items():
|
201
|
+
for connection in k:
|
202
|
+
face_mesh_contours_connection_style[connection] = v
|
203
|
+
return face_mesh_contours_connection_style
|
204
|
+
|
205
|
+
|
206
|
+
def get_default_face_mesh_tesselation_style() -> DrawingSpec:
|
207
|
+
"""Returns the default face mesh tesselation drawing style.
|
208
|
+
|
209
|
+
Returns:
|
210
|
+
A DrawingSpec.
|
211
|
+
"""
|
212
|
+
return DrawingSpec(color=_GRAY, thickness=_THICKNESS_TESSELATION)
|
213
|
+
|
214
|
+
|
215
|
+
def get_default_face_mesh_iris_connections_style(
|
216
|
+
) -> Mapping[Tuple[int, int], DrawingSpec]:
|
217
|
+
"""Returns the default face mesh iris connections drawing style.
|
218
|
+
|
219
|
+
Returns:
|
220
|
+
A mapping from each iris connection to its default drawing spec.
|
221
|
+
"""
|
222
|
+
face_mesh_iris_connections_style = {}
|
223
|
+
left_spec = DrawingSpec(color=_GREEN, thickness=_THICKNESS_CONTOURS)
|
224
|
+
for connection in face_mesh_connections.FACEMESH_LEFT_IRIS:
|
225
|
+
face_mesh_iris_connections_style[connection] = left_spec
|
226
|
+
right_spec = DrawingSpec(color=_RED, thickness=_THICKNESS_CONTOURS)
|
227
|
+
for connection in face_mesh_connections.FACEMESH_RIGHT_IRIS:
|
228
|
+
face_mesh_iris_connections_style[connection] = right_spec
|
229
|
+
return face_mesh_iris_connections_style
|
230
|
+
|
231
|
+
|
232
|
+
def get_default_pose_landmarks_style() -> Mapping[int, DrawingSpec]:
|
233
|
+
"""Returns the default pose landmarks drawing style.
|
234
|
+
|
235
|
+
Returns:
|
236
|
+
A mapping from each pose landmark to its default drawing spec.
|
237
|
+
"""
|
238
|
+
pose_landmark_style = {}
|
239
|
+
left_spec = DrawingSpec(
|
240
|
+
color=(0, 138, 255), thickness=_THICKNESS_POSE_LANDMARKS)
|
241
|
+
right_spec = DrawingSpec(
|
242
|
+
color=(231, 217, 0), thickness=_THICKNESS_POSE_LANDMARKS)
|
243
|
+
for landmark in _POSE_LANDMARKS_LEFT:
|
244
|
+
pose_landmark_style[landmark] = left_spec
|
245
|
+
for landmark in _POSE_LANDMARKS_RIGHT:
|
246
|
+
pose_landmark_style[landmark] = right_spec
|
247
|
+
pose_landmark_style[PoseLandmark.NOSE] = DrawingSpec(
|
248
|
+
color=_WHITE, thickness=_THICKNESS_POSE_LANDMARKS)
|
249
|
+
return pose_landmark_style
|
@@ -0,0 +1,320 @@
|
|
1
|
+
# Copyright 2020 The MediaPipe Authors.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
"""MediaPipe solution drawing utils."""
|
15
|
+
|
16
|
+
import dataclasses
|
17
|
+
import math
|
18
|
+
from typing import List, Mapping, Optional, Tuple, Union
|
19
|
+
|
20
|
+
import cv2
|
21
|
+
import matplotlib.pyplot as plt
|
22
|
+
import numpy as np
|
23
|
+
|
24
|
+
from mediapipe.framework.formats import detection_pb2
|
25
|
+
from mediapipe.framework.formats import landmark_pb2
|
26
|
+
from mediapipe.framework.formats import location_data_pb2
|
27
|
+
|
28
|
+
_PRESENCE_THRESHOLD = 0.5
|
29
|
+
_VISIBILITY_THRESHOLD = 0.5
|
30
|
+
_BGR_CHANNELS = 3
|
31
|
+
|
32
|
+
WHITE_COLOR = (224, 224, 224)
|
33
|
+
BLACK_COLOR = (0, 0, 0)
|
34
|
+
RED_COLOR = (0, 0, 255)
|
35
|
+
GREEN_COLOR = (0, 128, 0)
|
36
|
+
BLUE_COLOR = (255, 0, 0)
|
37
|
+
|
38
|
+
|
39
|
+
@dataclasses.dataclass
|
40
|
+
class DrawingSpec:
|
41
|
+
# Color for drawing the annotation. Default to the white color.
|
42
|
+
color: Tuple[int, int, int] = WHITE_COLOR
|
43
|
+
# Thickness for drawing the annotation. Default to 2 pixels.
|
44
|
+
thickness: int = 2
|
45
|
+
# Circle radius. Default to 2 pixels.
|
46
|
+
circle_radius: int = 2
|
47
|
+
|
48
|
+
|
49
|
+
def _normalized_to_pixel_coordinates(
|
50
|
+
normalized_x: float, normalized_y: float, image_width: int,
|
51
|
+
image_height: int) -> Union[None, Tuple[int, int]]:
|
52
|
+
"""Converts normalized value pair to pixel coordinates."""
|
53
|
+
|
54
|
+
# Checks if the float value is between 0 and 1.
|
55
|
+
def is_valid_normalized_value(value: float) -> bool:
|
56
|
+
return (value > 0 or math.isclose(0, value)) and (value < 1 or
|
57
|
+
math.isclose(1, value))
|
58
|
+
|
59
|
+
if not (is_valid_normalized_value(normalized_x) and
|
60
|
+
is_valid_normalized_value(normalized_y)):
|
61
|
+
# TODO: Draw coordinates even if it's outside of the image bounds.
|
62
|
+
return None
|
63
|
+
x_px = min(math.floor(normalized_x * image_width), image_width - 1)
|
64
|
+
y_px = min(math.floor(normalized_y * image_height), image_height - 1)
|
65
|
+
return x_px, y_px
|
66
|
+
|
67
|
+
|
68
|
+
def draw_detection(
|
69
|
+
image: np.ndarray,
|
70
|
+
detection: detection_pb2.Detection,
|
71
|
+
keypoint_drawing_spec: DrawingSpec = DrawingSpec(color=RED_COLOR),
|
72
|
+
bbox_drawing_spec: DrawingSpec = DrawingSpec()):
|
73
|
+
"""Draws the detction bounding box and keypoints on the image.
|
74
|
+
|
75
|
+
Args:
|
76
|
+
image: A three channel BGR image represented as numpy ndarray.
|
77
|
+
detection: A detection proto message to be annotated on the image.
|
78
|
+
keypoint_drawing_spec: A DrawingSpec object that specifies the keypoints'
|
79
|
+
drawing settings such as color, line thickness, and circle radius.
|
80
|
+
bbox_drawing_spec: A DrawingSpec object that specifies the bounding box's
|
81
|
+
drawing settings such as color and line thickness.
|
82
|
+
|
83
|
+
Raises:
|
84
|
+
ValueError: If one of the followings:
|
85
|
+
a) If the input image is not three channel BGR.
|
86
|
+
b) If the location data is not relative data.
|
87
|
+
"""
|
88
|
+
if not detection.location_data:
|
89
|
+
return
|
90
|
+
if image.shape[2] != _BGR_CHANNELS:
|
91
|
+
raise ValueError('Input image must contain three channel bgr data.')
|
92
|
+
image_rows, image_cols, _ = image.shape
|
93
|
+
|
94
|
+
location = detection.location_data
|
95
|
+
if location.format != location_data_pb2.LocationData.RELATIVE_BOUNDING_BOX:
|
96
|
+
raise ValueError(
|
97
|
+
'LocationData must be relative for this drawing funtion to work.')
|
98
|
+
# Draws keypoints.
|
99
|
+
for keypoint in location.relative_keypoints:
|
100
|
+
keypoint_px = _normalized_to_pixel_coordinates(keypoint.x, keypoint.y,
|
101
|
+
image_cols, image_rows)
|
102
|
+
cv2.circle(image, keypoint_px, keypoint_drawing_spec.circle_radius,
|
103
|
+
keypoint_drawing_spec.color, keypoint_drawing_spec.thickness)
|
104
|
+
# Draws bounding box if exists.
|
105
|
+
if not location.HasField('relative_bounding_box'):
|
106
|
+
return
|
107
|
+
relative_bounding_box = location.relative_bounding_box
|
108
|
+
rect_start_point = _normalized_to_pixel_coordinates(
|
109
|
+
relative_bounding_box.xmin, relative_bounding_box.ymin, image_cols,
|
110
|
+
image_rows)
|
111
|
+
rect_end_point = _normalized_to_pixel_coordinates(
|
112
|
+
relative_bounding_box.xmin + relative_bounding_box.width,
|
113
|
+
relative_bounding_box.ymin + relative_bounding_box.height, image_cols,
|
114
|
+
image_rows)
|
115
|
+
cv2.rectangle(image, rect_start_point, rect_end_point,
|
116
|
+
bbox_drawing_spec.color, bbox_drawing_spec.thickness)
|
117
|
+
|
118
|
+
|
119
|
+
def draw_landmarks(
|
120
|
+
image: np.ndarray,
|
121
|
+
landmark_list: landmark_pb2.NormalizedLandmarkList,
|
122
|
+
connections: Optional[List[Tuple[int, int]]] = None,
|
123
|
+
landmark_drawing_spec: Optional[
|
124
|
+
Union[DrawingSpec, Mapping[int, DrawingSpec]]
|
125
|
+
] = DrawingSpec(color=RED_COLOR),
|
126
|
+
connection_drawing_spec: Union[
|
127
|
+
DrawingSpec, Mapping[Tuple[int, int], DrawingSpec]
|
128
|
+
] = DrawingSpec(),
|
129
|
+
is_drawing_landmarks: bool = True,
|
130
|
+
):
|
131
|
+
"""Draws the landmarks and the connections on the image.
|
132
|
+
|
133
|
+
Args:
|
134
|
+
image: A three channel BGR image represented as numpy ndarray.
|
135
|
+
landmark_list: A normalized landmark list proto message to be annotated on
|
136
|
+
the image.
|
137
|
+
connections: A list of landmark index tuples that specifies how landmarks to
|
138
|
+
be connected in the drawing.
|
139
|
+
landmark_drawing_spec: Either a DrawingSpec object or a mapping from hand
|
140
|
+
landmarks to the DrawingSpecs that specifies the landmarks' drawing
|
141
|
+
settings such as color, line thickness, and circle radius. If this
|
142
|
+
argument is explicitly set to None, no landmarks will be drawn.
|
143
|
+
connection_drawing_spec: Either a DrawingSpec object or a mapping from hand
|
144
|
+
connections to the DrawingSpecs that specifies the connections' drawing
|
145
|
+
settings such as color and line thickness. If this argument is explicitly
|
146
|
+
set to None, no landmark connections will be drawn.
|
147
|
+
is_drawing_landmarks: Whether to draw landmarks. If set false, skip drawing
|
148
|
+
landmarks, only contours will be drawed.
|
149
|
+
|
150
|
+
Raises:
|
151
|
+
ValueError: If one of the followings:
|
152
|
+
a) If the input image is not three channel BGR.
|
153
|
+
b) If any connetions contain invalid landmark index.
|
154
|
+
"""
|
155
|
+
if not landmark_list:
|
156
|
+
return
|
157
|
+
if image.shape[2] != _BGR_CHANNELS:
|
158
|
+
raise ValueError('Input image must contain three channel bgr data.')
|
159
|
+
image_rows, image_cols, _ = image.shape
|
160
|
+
idx_to_coordinates = {}
|
161
|
+
for idx, landmark in enumerate(landmark_list.landmark):
|
162
|
+
if ((landmark.HasField('visibility') and
|
163
|
+
landmark.visibility < _VISIBILITY_THRESHOLD) or
|
164
|
+
(landmark.HasField('presence') and
|
165
|
+
landmark.presence < _PRESENCE_THRESHOLD)):
|
166
|
+
continue
|
167
|
+
landmark_px = _normalized_to_pixel_coordinates(landmark.x, landmark.y,
|
168
|
+
image_cols, image_rows)
|
169
|
+
if landmark_px:
|
170
|
+
idx_to_coordinates[idx] = landmark_px
|
171
|
+
if connections:
|
172
|
+
num_landmarks = len(landmark_list.landmark)
|
173
|
+
# Draws the connections if the start and end landmarks are both visible.
|
174
|
+
for connection in connections:
|
175
|
+
start_idx = connection[0]
|
176
|
+
end_idx = connection[1]
|
177
|
+
if not (0 <= start_idx < num_landmarks and 0 <= end_idx < num_landmarks):
|
178
|
+
raise ValueError(f'Landmark index is out of range. Invalid connection '
|
179
|
+
f'from landmark #{start_idx} to landmark #{end_idx}.')
|
180
|
+
if start_idx in idx_to_coordinates and end_idx in idx_to_coordinates:
|
181
|
+
drawing_spec = connection_drawing_spec[connection] if isinstance(
|
182
|
+
connection_drawing_spec, Mapping) else connection_drawing_spec
|
183
|
+
cv2.line(image, idx_to_coordinates[start_idx],
|
184
|
+
idx_to_coordinates[end_idx], drawing_spec.color,
|
185
|
+
drawing_spec.thickness)
|
186
|
+
# Draws landmark points after finishing the connection lines, which is
|
187
|
+
# aesthetically better.
|
188
|
+
if is_drawing_landmarks and landmark_drawing_spec:
|
189
|
+
for idx, landmark_px in idx_to_coordinates.items():
|
190
|
+
drawing_spec = landmark_drawing_spec[idx] if isinstance(
|
191
|
+
landmark_drawing_spec, Mapping) else landmark_drawing_spec
|
192
|
+
# White circle border
|
193
|
+
circle_border_radius = max(drawing_spec.circle_radius + 1,
|
194
|
+
int(drawing_spec.circle_radius * 1.2))
|
195
|
+
cv2.circle(image, landmark_px, circle_border_radius, WHITE_COLOR,
|
196
|
+
drawing_spec.thickness)
|
197
|
+
# Fill color into the circle
|
198
|
+
cv2.circle(image, landmark_px, drawing_spec.circle_radius,
|
199
|
+
drawing_spec.color, drawing_spec.thickness)
|
200
|
+
|
201
|
+
|
202
|
+
def draw_axis(image: np.ndarray,
|
203
|
+
rotation: np.ndarray,
|
204
|
+
translation: np.ndarray,
|
205
|
+
focal_length: Tuple[float, float] = (1.0, 1.0),
|
206
|
+
principal_point: Tuple[float, float] = (0.0, 0.0),
|
207
|
+
axis_length: float = 0.1,
|
208
|
+
axis_drawing_spec: DrawingSpec = DrawingSpec()):
|
209
|
+
"""Draws the 3D axis on the image.
|
210
|
+
|
211
|
+
Args:
|
212
|
+
image: A three channel BGR image represented as numpy ndarray.
|
213
|
+
rotation: Rotation matrix from object to camera coordinate frame.
|
214
|
+
translation: Translation vector from object to camera coordinate frame.
|
215
|
+
focal_length: camera focal length along x and y directions.
|
216
|
+
principal_point: camera principal point in x and y.
|
217
|
+
axis_length: length of the axis in the drawing.
|
218
|
+
axis_drawing_spec: A DrawingSpec object that specifies the xyz axis drawing
|
219
|
+
settings such as line thickness.
|
220
|
+
|
221
|
+
Raises:
|
222
|
+
ValueError: If one of the followings:
|
223
|
+
a) If the input image is not three channel BGR.
|
224
|
+
"""
|
225
|
+
if image.shape[2] != _BGR_CHANNELS:
|
226
|
+
raise ValueError('Input image must contain three channel bgr data.')
|
227
|
+
image_rows, image_cols, _ = image.shape
|
228
|
+
# Create axis points in camera coordinate frame.
|
229
|
+
axis_world = np.float32([[0, 0, 0], [1, 0, 0], [0, 1, 0], [0, 0, 1]])
|
230
|
+
axis_cam = np.matmul(rotation, axis_length * axis_world.T).T + translation
|
231
|
+
x = axis_cam[..., 0]
|
232
|
+
y = axis_cam[..., 1]
|
233
|
+
z = axis_cam[..., 2]
|
234
|
+
# Project 3D points to NDC space.
|
235
|
+
fx, fy = focal_length
|
236
|
+
px, py = principal_point
|
237
|
+
x_ndc = np.clip(-fx * x / (z + 1e-5) + px, -1., 1.)
|
238
|
+
y_ndc = np.clip(-fy * y / (z + 1e-5) + py, -1., 1.)
|
239
|
+
# Convert from NDC space to image space.
|
240
|
+
x_im = np.int32((1 + x_ndc) * 0.5 * image_cols)
|
241
|
+
y_im = np.int32((1 - y_ndc) * 0.5 * image_rows)
|
242
|
+
# Draw xyz axis on the image.
|
243
|
+
origin = (x_im[0], y_im[0])
|
244
|
+
x_axis = (x_im[1], y_im[1])
|
245
|
+
y_axis = (x_im[2], y_im[2])
|
246
|
+
z_axis = (x_im[3], y_im[3])
|
247
|
+
cv2.arrowedLine(image, origin, x_axis, RED_COLOR, axis_drawing_spec.thickness)
|
248
|
+
cv2.arrowedLine(image, origin, y_axis, GREEN_COLOR,
|
249
|
+
axis_drawing_spec.thickness)
|
250
|
+
cv2.arrowedLine(image, origin, z_axis, BLUE_COLOR,
|
251
|
+
axis_drawing_spec.thickness)
|
252
|
+
|
253
|
+
|
254
|
+
def _normalize_color(color):
|
255
|
+
return tuple(v / 255. for v in color)
|
256
|
+
|
257
|
+
|
258
|
+
def plot_landmarks(landmark_list: landmark_pb2.NormalizedLandmarkList,
|
259
|
+
connections: Optional[List[Tuple[int, int]]] = None,
|
260
|
+
landmark_drawing_spec: DrawingSpec = DrawingSpec(
|
261
|
+
color=RED_COLOR, thickness=5),
|
262
|
+
connection_drawing_spec: DrawingSpec = DrawingSpec(
|
263
|
+
color=BLACK_COLOR, thickness=5),
|
264
|
+
elevation: int = 10,
|
265
|
+
azimuth: int = 10):
|
266
|
+
"""Plot the landmarks and the connections in matplotlib 3d.
|
267
|
+
|
268
|
+
Args:
|
269
|
+
landmark_list: A normalized landmark list proto message to be plotted.
|
270
|
+
connections: A list of landmark index tuples that specifies how landmarks to
|
271
|
+
be connected.
|
272
|
+
landmark_drawing_spec: A DrawingSpec object that specifies the landmarks'
|
273
|
+
drawing settings such as color and line thickness.
|
274
|
+
connection_drawing_spec: A DrawingSpec object that specifies the
|
275
|
+
connections' drawing settings such as color and line thickness.
|
276
|
+
elevation: The elevation from which to view the plot.
|
277
|
+
azimuth: the azimuth angle to rotate the plot.
|
278
|
+
|
279
|
+
Raises:
|
280
|
+
ValueError: If any connection contains an invalid landmark index.
|
281
|
+
"""
|
282
|
+
if not landmark_list:
|
283
|
+
return
|
284
|
+
plt.figure(figsize=(10, 10))
|
285
|
+
ax = plt.axes(projection='3d')
|
286
|
+
ax.view_init(elev=elevation, azim=azimuth)
|
287
|
+
plotted_landmarks = {}
|
288
|
+
for idx, landmark in enumerate(landmark_list.landmark):
|
289
|
+
if ((landmark.HasField('visibility') and
|
290
|
+
landmark.visibility < _VISIBILITY_THRESHOLD) or
|
291
|
+
(landmark.HasField('presence') and
|
292
|
+
landmark.presence < _PRESENCE_THRESHOLD)):
|
293
|
+
continue
|
294
|
+
ax.scatter3D(
|
295
|
+
xs=[-landmark.z],
|
296
|
+
ys=[landmark.x],
|
297
|
+
zs=[-landmark.y],
|
298
|
+
color=_normalize_color(landmark_drawing_spec.color[::-1]),
|
299
|
+
linewidth=landmark_drawing_spec.thickness)
|
300
|
+
plotted_landmarks[idx] = (-landmark.z, landmark.x, -landmark.y)
|
301
|
+
if connections:
|
302
|
+
num_landmarks = len(landmark_list.landmark)
|
303
|
+
# Draws the connections if the start and end landmarks are both visible.
|
304
|
+
for connection in connections:
|
305
|
+
start_idx = connection[0]
|
306
|
+
end_idx = connection[1]
|
307
|
+
if not (0 <= start_idx < num_landmarks and 0 <= end_idx < num_landmarks):
|
308
|
+
raise ValueError(f'Landmark index is out of range. Invalid connection '
|
309
|
+
f'from landmark #{start_idx} to landmark #{end_idx}.')
|
310
|
+
if start_idx in plotted_landmarks and end_idx in plotted_landmarks:
|
311
|
+
landmark_pair = [
|
312
|
+
plotted_landmarks[start_idx], plotted_landmarks[end_idx]
|
313
|
+
]
|
314
|
+
ax.plot3D(
|
315
|
+
xs=[landmark_pair[0][0], landmark_pair[1][0]],
|
316
|
+
ys=[landmark_pair[0][1], landmark_pair[1][1]],
|
317
|
+
zs=[landmark_pair[0][2], landmark_pair[1][2]],
|
318
|
+
color=_normalize_color(connection_drawing_spec.color[::-1]),
|
319
|
+
linewidth=connection_drawing_spec.thickness)
|
320
|
+
plt.show()
|