matrice 1.0.99120__tar.gz → 1.0.99122__tar.gz
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.
- {matrice-1.0.99120/src/matrice.egg-info → matrice-1.0.99122}/PKG-INFO +1 -1
- {matrice-1.0.99120 → matrice-1.0.99122}/setup.py +1 -1
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/assembly_line_detection.py +18 -4
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/crop_weed_detection.py +44 -27
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/emergency_vehicle_detection.py +18 -5
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/fashion_detection.py +43 -26
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/gender_detection.py +43 -25
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/price_tag_detection.py +43 -26
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/windmill_maintenance.py +4 -1
- {matrice-1.0.99120 → matrice-1.0.99122/src/matrice.egg-info}/PKG-INFO +1 -1
- {matrice-1.0.99120 → matrice-1.0.99122}/LICENSE.txt +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/README.md +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/setup.cfg +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/__init__.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/action.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/actionTracker.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/action_tracker.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/annotation.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/app_store.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/application.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/compute.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/compute_manager/__init__.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/compute_manager/action_instance.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/compute_manager/actions_manager.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/compute_manager/actions_scaledown_manager.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/compute_manager/instance_manager.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/compute_manager/instance_utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/compute_manager/prechecks.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/compute_manager/resources_tracker.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/compute_manager/scaling.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/compute_manager/shutdown_manager.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/compute_manager/task_utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/__init__.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/__init__.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/base.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/__init__.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/bit_depth_reduction.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/blur.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/brightness_contrast.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/color_jitter.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/compression_artifacts.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/downscale_upscale.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/film_grain.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/flip.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/fog.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/horizontal_flip.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/hsv.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/iso_noise.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/low_light.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/posterize.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/rain.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/random_affine.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/salt_pepper.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/shadows.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/snow.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/speckle.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/sunflare.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/client.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/client_utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/create_dataset.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_augmentation.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_augmentor.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/__init__.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/imagenet_classification.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/labelbox_classification.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/labelbox_detection.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/mscoco_detection.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/pascalvoc_detection.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/unlabelled.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/video_davis_segmentation.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/video_detection_mscoco.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/video_imagenet_classification.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/video_kinetics_activity_recognition.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/video_mot_tracking.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/video_mscoco_detection.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/video_youtube_bb_tracking.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/yolo_detection.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_labelling.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_prep.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_processor.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/image_augmentations.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/image_data_augmentation.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/new_data_augmentation.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/pipeline.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/server.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/server_utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/video_server.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/dataset.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/__init__.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/aggregator/__init__.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/aggregator/aggregator.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/aggregator/ingestor.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/aggregator/pipeline.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/aggregator/publisher.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/aggregator/synchronizer.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/client/__init__.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/client/auto_streaming/__init__.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/client/auto_streaming/auto_streaming.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/client/auto_streaming/auto_streaming_utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/client/client.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/client/client_stream_utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/client/client_utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/client/frame_comparators.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/client/streaming_gateway/__init__.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/client/streaming_gateway/streaming_gateway.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/client/streaming_gateway/streaming_gateway_utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/client/streaming_gateway/streaming_results_handler.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/server/__init__.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/server/inference/__init__.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/server/inference/batch_manager.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/server/inference/cache_manager.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/server/inference/inference_interface.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/server/inference/model_manager.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/server/inference/triton_utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/server/proxy/__init__.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/server/proxy/proxy_interface.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/server/proxy/proxy_utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/server/server.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/server/stream_worker.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/__init__.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/boundary_drawing_internal/__init__.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/boundary_drawing_internal/boundary_drawing_internal.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/boundary_drawing_internal/boundary_drawing_tool.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/boundary_drawing_internal/example_usage.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/kafka_utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/__init__.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/advanced_tracker/__init__.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/advanced_tracker/base.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/advanced_tracker/config.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/advanced_tracker/kalman_filter.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/advanced_tracker/matching.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/advanced_tracker/strack.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/advanced_tracker/tracker.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/config.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/core/__init__.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/core/base.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/core/config.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/core/config_utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/processor.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/test_cases/__init__.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/test_cases/run_tests.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/test_cases/test_advanced_customer_service.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/test_cases/test_basic_counting_tracking.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/test_cases/test_comprehensive.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/test_cases/test_config.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/test_cases/test_customer_service.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/test_cases/test_data_generators.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/test_cases/test_people_counting.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/test_cases/test_processor.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/test_cases/test_utilities.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/test_cases/test_utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/__init__.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/advanced_customer_service.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/age_detection.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/anti_spoofing_detection.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/banana_defect_detection.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/basic_counting_tracking.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/blood_cancer_detection_img.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/car_damage_detection.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/car_part_segmentation.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/chicken_pose_detection.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/child_monitoring.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/color_detection.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/color_map_utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/concrete_crack_detection.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/customer_service.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/defect_detection_products.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/distracted_driver_detection.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/face_emotion.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/field_mapping.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/fire_detection.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/flare_analysis.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/flower_segmentation.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/leaf.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/leaf_disease.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/license_plate_detection.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/mask_detection.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/parking.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/parking_space_detection.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/pedestrian_detection.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/people_counting.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/plaque_segmentation_img.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/pothole_segmentation.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/ppe_compliance.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/road_lane_detection.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/shelf_inventory_detection.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/shoplifting_detection.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/shopping_cart_analysis.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/skin_cancer_classification_img.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/solar_panel.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/template_usecase.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/theft_detection.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/traffic_sign_monitoring.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/underwater_pollution_detection.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/vehicle_monitoring.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/warehouse_object_segmentation.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/weapon_detection.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/weld_defect_detection.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/wound_segmentation.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/utils/__init__.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/utils/advanced_counting_utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/utils/advanced_helper_utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/utils/advanced_tracking_utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/utils/alerting_utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/utils/category_mapping_utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/utils/color_utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/utils/counting_utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/utils/filter_utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/utils/format_utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/utils/geometry_utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/utils/smoothing_utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/utils/tracking_utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deployment/__init__.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deployment/camera_manager.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deployment/deployment.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deployment/inference_pipeline.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deployment/streaming_gateway_manager.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/docker_utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/drift_monitor.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/exported_model.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/local_test.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/metrics_calculator.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/metrics_calculator_oop.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/model_store.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/models.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/pipeline.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/projects.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/rpc.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/scaling.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/session.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/testing.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/token_auth.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/utils.py +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice.egg-info/SOURCES.txt +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice.egg-info/dependency_links.txt +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice.egg-info/requires.txt +0 -0
- {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice.egg-info/top_level.txt +0 -0
@@ -164,11 +164,24 @@ class AssemblyLineUseCase(BaseProcessor):
|
|
164
164
|
from ..advanced_tracker.config import TrackerConfig
|
165
165
|
|
166
166
|
# Create tracker instance if it doesn't exist (preserves state across frames)
|
167
|
+
|
167
168
|
if self.tracker is None:
|
168
|
-
|
169
|
+
if config.confidence_threshold is not None:
|
170
|
+
tracker_config = TrackerConfig(
|
171
|
+
track_high_thresh=float(config.confidence_threshold),
|
172
|
+
# Allow even lower detections to participate in secondary association
|
173
|
+
track_low_thresh=max(0.05, float(config.confidence_threshold) / 2),
|
174
|
+
new_track_thresh=float(config.confidence_threshold)
|
175
|
+
)
|
176
|
+
else:
|
177
|
+
tracker_config = TrackerConfig()
|
169
178
|
self.tracker = AdvancedTracker(tracker_config)
|
170
|
-
self.logger.info(
|
171
|
-
|
179
|
+
self.logger.info(
|
180
|
+
"Initialized AdvancedTracker for Monitoring and tracking with thresholds: "
|
181
|
+
f"high={tracker_config.track_high_thresh}, "
|
182
|
+
f"low={tracker_config.track_low_thresh}, "
|
183
|
+
f"new={tracker_config.new_track_thresh}"
|
184
|
+
)
|
172
185
|
# The tracker expects the data in the same format as input
|
173
186
|
# It will add track_id and frame_id to each detection
|
174
187
|
processed_data = self.tracker.update(processed_data)
|
@@ -590,11 +603,12 @@ class AssemblyLineUseCase(BaseProcessor):
|
|
590
603
|
"""
|
591
604
|
return {cat: len(ids) for cat, ids in getattr(self, '_per_category_total_track_ids', {}).items()}
|
592
605
|
|
606
|
+
|
593
607
|
def _format_timestamp_for_stream(self, timestamp: float) -> str:
|
594
608
|
"""Format timestamp for streams (YYYY:MM:DD HH:MM:SS format)."""
|
595
609
|
dt = datetime.fromtimestamp(timestamp, tz=timezone.utc)
|
596
610
|
return dt.strftime('%Y:%m:%d %H:%M:%S')
|
597
|
-
|
611
|
+
|
598
612
|
def _format_timestamp_for_video(self, timestamp: float) -> str:
|
599
613
|
"""Format timestamp for video chunks (HH:MM:SS.ms format)."""
|
600
614
|
hours = int(timestamp // 3600)
|
@@ -152,12 +152,24 @@ class CropWeedDetectionUseCase(BaseProcessor):
|
|
152
152
|
from ..advanced_tracker import AdvancedTracker
|
153
153
|
from ..advanced_tracker.config import TrackerConfig
|
154
154
|
|
155
|
-
|
155
|
+
|
156
156
|
if self.tracker is None:
|
157
|
-
|
157
|
+
if config.confidence_threshold is not None:
|
158
|
+
tracker_config = TrackerConfig(
|
159
|
+
track_high_thresh=float(config.confidence_threshold),
|
160
|
+
# Allow even lower detections to participate in secondary association
|
161
|
+
track_low_thresh=max(0.05, float(config.confidence_threshold) / 2),
|
162
|
+
new_track_thresh=float(config.confidence_threshold)
|
163
|
+
)
|
164
|
+
else:
|
165
|
+
tracker_config = TrackerConfig()
|
158
166
|
self.tracker = AdvancedTracker(tracker_config)
|
159
|
-
self.logger.info(
|
160
|
-
|
167
|
+
self.logger.info(
|
168
|
+
"Initialized AdvancedTracker for Monitoring and tracking with thresholds: "
|
169
|
+
f"high={tracker_config.track_high_thresh}, "
|
170
|
+
f"low={tracker_config.track_low_thresh}, "
|
171
|
+
f"new={tracker_config.new_track_thresh}"
|
172
|
+
)
|
161
173
|
# The tracker expects the data in the same format as input
|
162
174
|
# It will add track_id and frame_id to each detection
|
163
175
|
processed_data = self.tracker.update(processed_data)
|
@@ -581,38 +593,45 @@ class CropWeedDetectionUseCase(BaseProcessor):
|
|
581
593
|
"""
|
582
594
|
return {cat: len(ids) for cat, ids in getattr(self, '_per_category_total_track_ids', {}).items()}
|
583
595
|
|
584
|
-
|
585
|
-
"""Format timestamp for video chunks (HH:MM:SS.ms format)."""
|
586
|
-
hours = int(timestamp // 3600)
|
587
|
-
minutes = int((timestamp % 3600) // 60)
|
588
|
-
seconds = timestamp % 60
|
589
|
-
return f"{hours:02d}:{minutes:02d}:{seconds:06.2f}"
|
590
|
-
|
596
|
+
|
591
597
|
def _format_timestamp_for_stream(self, timestamp: float) -> str:
|
592
598
|
"""Format timestamp for streams (YYYY:MM:DD HH:MM:SS format)."""
|
593
599
|
dt = datetime.fromtimestamp(timestamp, tz=timezone.utc)
|
594
600
|
return dt.strftime('%Y:%m:%d %H:%M:%S')
|
595
601
|
|
596
|
-
def
|
602
|
+
def _format_timestamp_for_video(self, timestamp: float) -> str:
|
603
|
+
"""Format timestamp for video chunks (HH:MM:SS.ms format)."""
|
604
|
+
hours = int(timestamp // 3600)
|
605
|
+
minutes = int((timestamp % 3600) // 60)
|
606
|
+
seconds = round(float(timestamp % 60),2)
|
607
|
+
return f"{hours:02d}:{minutes:02d}:{seconds:.1f}"
|
608
|
+
|
609
|
+
def _get_current_timestamp_str(self, stream_info: Optional[Dict[str, Any]], precision=False, frame_id: Optional[str]=None) -> str:
|
597
610
|
"""Get formatted current timestamp based on stream type."""
|
598
611
|
if not stream_info:
|
599
612
|
return "00:00:00.00"
|
600
|
-
|
601
613
|
# is_video_chunk = stream_info.get("input_settings", {}).get("is_video_chunk", False)
|
602
614
|
if precision:
|
603
|
-
if stream_info.get("input_settings", {}).get("
|
604
|
-
|
605
|
-
|
615
|
+
if stream_info.get("input_settings", {}).get("start_frame", "na") != "na":
|
616
|
+
if frame_id:
|
617
|
+
start_time = int(frame_id)/stream_info.get("input_settings", {}).get("original_fps", 30)
|
618
|
+
else:
|
619
|
+
start_time = stream_info.get("input_settings", {}).get("start_frame", 30)/stream_info.get("input_settings", {}).get("original_fps", 30)
|
620
|
+
stream_time_str = self._format_timestamp_for_video(start_time)
|
621
|
+
return stream_time_str
|
606
622
|
else:
|
607
623
|
return datetime.now(timezone.utc).strftime("%Y-%m-%d-%H:%M:%S.%f UTC")
|
608
624
|
|
609
|
-
if stream_info.get("input_settings", {}).get("
|
610
|
-
|
611
|
-
|
612
|
-
|
625
|
+
if stream_info.get("input_settings", {}).get("start_frame", "na") != "na":
|
626
|
+
if frame_id:
|
627
|
+
start_time = int(frame_id)/stream_info.get("input_settings", {}).get("original_fps", 30)
|
628
|
+
else:
|
629
|
+
start_time = stream_info.get("input_settings", {}).get("start_frame", 30)/stream_info.get("input_settings", {}).get("original_fps", 30)
|
630
|
+
stream_time_str = self._format_timestamp_for_video(start_time)
|
631
|
+
return stream_time_str
|
613
632
|
else:
|
614
633
|
# For streams, use stream_time from stream_info
|
615
|
-
stream_time_str = stream_info.get("stream_time", "")
|
634
|
+
stream_time_str = stream_info.get("input_settings", {}).get("stream_info", {}).get("stream_time", "")
|
616
635
|
if stream_time_str:
|
617
636
|
# Parse the high precision timestamp string to get timestamp
|
618
637
|
try:
|
@@ -631,23 +650,20 @@ class CropWeedDetectionUseCase(BaseProcessor):
|
|
631
650
|
"""Get formatted start timestamp for 'TOTAL SINCE' based on stream type."""
|
632
651
|
if not stream_info:
|
633
652
|
return "00:00:00"
|
634
|
-
|
635
|
-
is_video_chunk = stream_info.get("input_settings", {}).get("is_video_chunk", False)
|
636
653
|
if precision:
|
637
|
-
if stream_info.get("input_settings", {}).get("
|
654
|
+
if stream_info.get("input_settings", {}).get("start_frame", "na") != "na":
|
638
655
|
return "00:00:00"
|
639
656
|
else:
|
640
657
|
return datetime.now(timezone.utc).strftime("%Y-%m-%d-%H:%M:%S.%f UTC")
|
641
658
|
|
642
|
-
|
643
|
-
if stream_info.get("input_settings", {}).get("stream_type", "video_file") == "video_file":
|
659
|
+
if stream_info.get("input_settings", {}).get("start_frame", "na") != "na":
|
644
660
|
# If video format, start from 00:00:00
|
645
661
|
return "00:00:00"
|
646
662
|
else:
|
647
663
|
# For streams, use tracking start time or current time with minutes/seconds reset
|
648
664
|
if self._tracking_start_time is None:
|
649
665
|
# Try to extract timestamp from stream_time string
|
650
|
-
stream_time_str = stream_info.get("stream_time", "")
|
666
|
+
stream_time_str = stream_info.get("input_settings", {}).get("stream_info", {}).get("stream_time", "")
|
651
667
|
if stream_time_str:
|
652
668
|
try:
|
653
669
|
# Remove " UTC" suffix and parse
|
@@ -665,6 +681,7 @@ class CropWeedDetectionUseCase(BaseProcessor):
|
|
665
681
|
dt = dt.replace(minute=0, second=0, microsecond=0)
|
666
682
|
return dt.strftime('%Y:%m:%d %H:%M:%S')
|
667
683
|
|
684
|
+
|
668
685
|
def _count_categories(self, detections: list, config: CropWeedDetectionConfig) -> dict:
|
669
686
|
"""
|
670
687
|
Count the number of detections per category and return a summary dict.
|
@@ -151,12 +151,24 @@ class EmergencyVehicleUseCase(BaseProcessor):
|
|
151
151
|
from ..advanced_tracker import AdvancedTracker
|
152
152
|
from ..advanced_tracker.config import TrackerConfig
|
153
153
|
|
154
|
-
|
154
|
+
|
155
155
|
if self.tracker is None:
|
156
|
-
|
156
|
+
if config.confidence_threshold is not None:
|
157
|
+
tracker_config = TrackerConfig(
|
158
|
+
track_high_thresh=float(config.confidence_threshold),
|
159
|
+
# Allow even lower detections to participate in secondary association
|
160
|
+
track_low_thresh=max(0.05, float(config.confidence_threshold) / 2),
|
161
|
+
new_track_thresh=float(config.confidence_threshold)
|
162
|
+
)
|
163
|
+
else:
|
164
|
+
tracker_config = TrackerConfig()
|
157
165
|
self.tracker = AdvancedTracker(tracker_config)
|
158
|
-
self.logger.info(
|
159
|
-
|
166
|
+
self.logger.info(
|
167
|
+
"Initialized AdvancedTracker for Monitoring and tracking with thresholds: "
|
168
|
+
f"high={tracker_config.track_high_thresh}, "
|
169
|
+
f"low={tracker_config.track_low_thresh}, "
|
170
|
+
f"new={tracker_config.new_track_thresh}"
|
171
|
+
)
|
160
172
|
# The tracker expects the data in the same format as input
|
161
173
|
# It will add track_id and frame_id to each detection
|
162
174
|
processed_data = self.tracker.update(processed_data)
|
@@ -578,11 +590,12 @@ class EmergencyVehicleUseCase(BaseProcessor):
|
|
578
590
|
"""
|
579
591
|
return {cat: len(ids) for cat, ids in getattr(self, '_per_category_total_track_ids', {}).items()}
|
580
592
|
|
593
|
+
|
581
594
|
def _format_timestamp_for_stream(self, timestamp: float) -> str:
|
582
595
|
"""Format timestamp for streams (YYYY:MM:DD HH:MM:SS format)."""
|
583
596
|
dt = datetime.fromtimestamp(timestamp, tz=timezone.utc)
|
584
597
|
return dt.strftime('%Y:%m:%d %H:%M:%S')
|
585
|
-
|
598
|
+
|
586
599
|
def _format_timestamp_for_video(self, timestamp: float) -> str:
|
587
600
|
"""Format timestamp for video chunks (HH:MM:SS.ms format)."""
|
588
601
|
hours = int(timestamp // 3600)
|
@@ -156,12 +156,24 @@ class FashionDetectionUseCase(BaseProcessor):
|
|
156
156
|
from ..advanced_tracker import AdvancedTracker
|
157
157
|
from ..advanced_tracker.config import TrackerConfig
|
158
158
|
|
159
|
-
|
159
|
+
|
160
160
|
if self.tracker is None:
|
161
|
-
|
161
|
+
if config.confidence_threshold is not None:
|
162
|
+
tracker_config = TrackerConfig(
|
163
|
+
track_high_thresh=float(config.confidence_threshold),
|
164
|
+
# Allow even lower detections to participate in secondary association
|
165
|
+
track_low_thresh=max(0.05, float(config.confidence_threshold) / 2),
|
166
|
+
new_track_thresh=float(config.confidence_threshold)
|
167
|
+
)
|
168
|
+
else:
|
169
|
+
tracker_config = TrackerConfig()
|
162
170
|
self.tracker = AdvancedTracker(tracker_config)
|
163
|
-
self.logger.info(
|
164
|
-
|
171
|
+
self.logger.info(
|
172
|
+
"Initialized AdvancedTracker for Monitoring and tracking with thresholds: "
|
173
|
+
f"high={tracker_config.track_high_thresh}, "
|
174
|
+
f"low={tracker_config.track_low_thresh}, "
|
175
|
+
f"new={tracker_config.new_track_thresh}"
|
176
|
+
)
|
165
177
|
# The tracker expects the data in the same format as input
|
166
178
|
# It will add track_id and frame_id to each detection
|
167
179
|
processed_data = self.tracker.update(processed_data)
|
@@ -585,38 +597,45 @@ class FashionDetectionUseCase(BaseProcessor):
|
|
585
597
|
"""
|
586
598
|
return {cat: len(ids) for cat, ids in getattr(self, '_per_category_total_track_ids', {}).items()}
|
587
599
|
|
588
|
-
def _format_timestamp_for_video(self, timestamp: float) -> str:
|
589
|
-
"""Format timestamp for video chunks (HH:MM:SS.ms format)."""
|
590
|
-
hours = int(timestamp // 3600)
|
591
|
-
minutes = int((timestamp % 3600) // 60)
|
592
|
-
seconds = timestamp % 60
|
593
|
-
return f"{hours:02d}:{minutes:02d}:{seconds:06.2f}"
|
594
600
|
|
595
601
|
def _format_timestamp_for_stream(self, timestamp: float) -> str:
|
596
602
|
"""Format timestamp for streams (YYYY:MM:DD HH:MM:SS format)."""
|
597
603
|
dt = datetime.fromtimestamp(timestamp, tz=timezone.utc)
|
598
604
|
return dt.strftime('%Y:%m:%d %H:%M:%S')
|
599
605
|
|
600
|
-
def
|
606
|
+
def _format_timestamp_for_video(self, timestamp: float) -> str:
|
607
|
+
"""Format timestamp for video chunks (HH:MM:SS.ms format)."""
|
608
|
+
hours = int(timestamp // 3600)
|
609
|
+
minutes = int((timestamp % 3600) // 60)
|
610
|
+
seconds = round(float(timestamp % 60),2)
|
611
|
+
return f"{hours:02d}:{minutes:02d}:{seconds:.1f}"
|
612
|
+
|
613
|
+
def _get_current_timestamp_str(self, stream_info: Optional[Dict[str, Any]], precision=False, frame_id: Optional[str]=None) -> str:
|
601
614
|
"""Get formatted current timestamp based on stream type."""
|
602
615
|
if not stream_info:
|
603
616
|
return "00:00:00.00"
|
604
|
-
|
605
617
|
# is_video_chunk = stream_info.get("input_settings", {}).get("is_video_chunk", False)
|
606
618
|
if precision:
|
607
|
-
if stream_info.get("input_settings", {}).get("
|
608
|
-
|
609
|
-
|
619
|
+
if stream_info.get("input_settings", {}).get("start_frame", "na") != "na":
|
620
|
+
if frame_id:
|
621
|
+
start_time = int(frame_id)/stream_info.get("input_settings", {}).get("original_fps", 30)
|
622
|
+
else:
|
623
|
+
start_time = stream_info.get("input_settings", {}).get("start_frame", 30)/stream_info.get("input_settings", {}).get("original_fps", 30)
|
624
|
+
stream_time_str = self._format_timestamp_for_video(start_time)
|
625
|
+
return stream_time_str
|
610
626
|
else:
|
611
627
|
return datetime.now(timezone.utc).strftime("%Y-%m-%d-%H:%M:%S.%f UTC")
|
612
628
|
|
613
|
-
if stream_info.get("input_settings", {}).get("
|
614
|
-
|
615
|
-
|
616
|
-
|
629
|
+
if stream_info.get("input_settings", {}).get("start_frame", "na") != "na":
|
630
|
+
if frame_id:
|
631
|
+
start_time = int(frame_id)/stream_info.get("input_settings", {}).get("original_fps", 30)
|
632
|
+
else:
|
633
|
+
start_time = stream_info.get("input_settings", {}).get("start_frame", 30)/stream_info.get("input_settings", {}).get("original_fps", 30)
|
634
|
+
stream_time_str = self._format_timestamp_for_video(start_time)
|
635
|
+
return stream_time_str
|
617
636
|
else:
|
618
637
|
# For streams, use stream_time from stream_info
|
619
|
-
stream_time_str = stream_info.get("stream_time", "")
|
638
|
+
stream_time_str = stream_info.get("input_settings", {}).get("stream_info", {}).get("stream_time", "")
|
620
639
|
if stream_time_str:
|
621
640
|
# Parse the high precision timestamp string to get timestamp
|
622
641
|
try:
|
@@ -635,23 +654,20 @@ class FashionDetectionUseCase(BaseProcessor):
|
|
635
654
|
"""Get formatted start timestamp for 'TOTAL SINCE' based on stream type."""
|
636
655
|
if not stream_info:
|
637
656
|
return "00:00:00"
|
638
|
-
|
639
|
-
is_video_chunk = stream_info.get("input_settings", {}).get("is_video_chunk", False)
|
640
657
|
if precision:
|
641
|
-
if stream_info.get("input_settings", {}).get("
|
658
|
+
if stream_info.get("input_settings", {}).get("start_frame", "na") != "na":
|
642
659
|
return "00:00:00"
|
643
660
|
else:
|
644
661
|
return datetime.now(timezone.utc).strftime("%Y-%m-%d-%H:%M:%S.%f UTC")
|
645
662
|
|
646
|
-
|
647
|
-
if stream_info.get("input_settings", {}).get("stream_type", "video_file") == "video_file":
|
663
|
+
if stream_info.get("input_settings", {}).get("start_frame", "na") != "na":
|
648
664
|
# If video format, start from 00:00:00
|
649
665
|
return "00:00:00"
|
650
666
|
else:
|
651
667
|
# For streams, use tracking start time or current time with minutes/seconds reset
|
652
668
|
if self._tracking_start_time is None:
|
653
669
|
# Try to extract timestamp from stream_time string
|
654
|
-
stream_time_str = stream_info.get("stream_time", "")
|
670
|
+
stream_time_str = stream_info.get("input_settings", {}).get("stream_info", {}).get("stream_time", "")
|
655
671
|
if stream_time_str:
|
656
672
|
try:
|
657
673
|
# Remove " UTC" suffix and parse
|
@@ -669,6 +685,7 @@ class FashionDetectionUseCase(BaseProcessor):
|
|
669
685
|
dt = dt.replace(minute=0, second=0, microsecond=0)
|
670
686
|
return dt.strftime('%Y:%m:%d %H:%M:%S')
|
671
687
|
|
688
|
+
|
672
689
|
def _count_categories(self, detections: list, config: FashionDetectionConfig) -> dict:
|
673
690
|
"""
|
674
691
|
Count the number of detections per category and return a summary dict.
|
@@ -152,11 +152,24 @@ class GenderDetectionUseCase(BaseProcessor):
|
|
152
152
|
from ..advanced_tracker import AdvancedTracker
|
153
153
|
from ..advanced_tracker.config import TrackerConfig
|
154
154
|
|
155
|
-
|
155
|
+
|
156
156
|
if self.tracker is None:
|
157
|
-
|
157
|
+
if config.confidence_threshold is not None:
|
158
|
+
tracker_config = TrackerConfig(
|
159
|
+
track_high_thresh=float(config.confidence_threshold),
|
160
|
+
# Allow even lower detections to participate in secondary association
|
161
|
+
track_low_thresh=max(0.05, float(config.confidence_threshold) / 2),
|
162
|
+
new_track_thresh=float(config.confidence_threshold)
|
163
|
+
)
|
164
|
+
else:
|
165
|
+
tracker_config = TrackerConfig()
|
158
166
|
self.tracker = AdvancedTracker(tracker_config)
|
159
|
-
self.logger.info(
|
167
|
+
self.logger.info(
|
168
|
+
"Initialized AdvancedTracker for Monitoring and tracking with thresholds: "
|
169
|
+
f"high={tracker_config.track_high_thresh}, "
|
170
|
+
f"low={tracker_config.track_low_thresh}, "
|
171
|
+
f"new={tracker_config.new_track_thresh}"
|
172
|
+
)
|
160
173
|
|
161
174
|
# The tracker expects the data in the same format as input
|
162
175
|
# It will add track_id and frame_id to each detection
|
@@ -581,38 +594,45 @@ class GenderDetectionUseCase(BaseProcessor):
|
|
581
594
|
"""
|
582
595
|
return {cat: len(ids) for cat, ids in getattr(self, '_per_category_total_track_ids', {}).items()}
|
583
596
|
|
584
|
-
def _format_timestamp_for_video(self, timestamp: float) -> str:
|
585
|
-
"""Format timestamp for video chunks (HH:MM:SS.ms format)."""
|
586
|
-
hours = int(timestamp // 3600)
|
587
|
-
minutes = int((timestamp % 3600) // 60)
|
588
|
-
seconds = timestamp % 60
|
589
|
-
return f"{hours:02d}:{minutes:02d}:{seconds:06.2f}"
|
590
597
|
|
591
598
|
def _format_timestamp_for_stream(self, timestamp: float) -> str:
|
592
599
|
"""Format timestamp for streams (YYYY:MM:DD HH:MM:SS format)."""
|
593
600
|
dt = datetime.fromtimestamp(timestamp, tz=timezone.utc)
|
594
601
|
return dt.strftime('%Y:%m:%d %H:%M:%S')
|
595
602
|
|
596
|
-
def
|
603
|
+
def _format_timestamp_for_video(self, timestamp: float) -> str:
|
604
|
+
"""Format timestamp for video chunks (HH:MM:SS.ms format)."""
|
605
|
+
hours = int(timestamp // 3600)
|
606
|
+
minutes = int((timestamp % 3600) // 60)
|
607
|
+
seconds = round(float(timestamp % 60),2)
|
608
|
+
return f"{hours:02d}:{minutes:02d}:{seconds:.1f}"
|
609
|
+
|
610
|
+
def _get_current_timestamp_str(self, stream_info: Optional[Dict[str, Any]], precision=False, frame_id: Optional[str]=None) -> str:
|
597
611
|
"""Get formatted current timestamp based on stream type."""
|
598
612
|
if not stream_info:
|
599
613
|
return "00:00:00.00"
|
600
|
-
|
601
614
|
# is_video_chunk = stream_info.get("input_settings", {}).get("is_video_chunk", False)
|
602
615
|
if precision:
|
603
|
-
if stream_info.get("input_settings", {}).get("
|
604
|
-
|
605
|
-
|
616
|
+
if stream_info.get("input_settings", {}).get("start_frame", "na") != "na":
|
617
|
+
if frame_id:
|
618
|
+
start_time = int(frame_id)/stream_info.get("input_settings", {}).get("original_fps", 30)
|
619
|
+
else:
|
620
|
+
start_time = stream_info.get("input_settings", {}).get("start_frame", 30)/stream_info.get("input_settings", {}).get("original_fps", 30)
|
621
|
+
stream_time_str = self._format_timestamp_for_video(start_time)
|
622
|
+
return stream_time_str
|
606
623
|
else:
|
607
624
|
return datetime.now(timezone.utc).strftime("%Y-%m-%d-%H:%M:%S.%f UTC")
|
608
625
|
|
609
|
-
if stream_info.get("input_settings", {}).get("
|
610
|
-
|
611
|
-
|
612
|
-
|
626
|
+
if stream_info.get("input_settings", {}).get("start_frame", "na") != "na":
|
627
|
+
if frame_id:
|
628
|
+
start_time = int(frame_id)/stream_info.get("input_settings", {}).get("original_fps", 30)
|
629
|
+
else:
|
630
|
+
start_time = stream_info.get("input_settings", {}).get("start_frame", 30)/stream_info.get("input_settings", {}).get("original_fps", 30)
|
631
|
+
stream_time_str = self._format_timestamp_for_video(start_time)
|
632
|
+
return stream_time_str
|
613
633
|
else:
|
614
634
|
# For streams, use stream_time from stream_info
|
615
|
-
stream_time_str = stream_info.get("stream_time", "")
|
635
|
+
stream_time_str = stream_info.get("input_settings", {}).get("stream_info", {}).get("stream_time", "")
|
616
636
|
if stream_time_str:
|
617
637
|
# Parse the high precision timestamp string to get timestamp
|
618
638
|
try:
|
@@ -631,23 +651,20 @@ class GenderDetectionUseCase(BaseProcessor):
|
|
631
651
|
"""Get formatted start timestamp for 'TOTAL SINCE' based on stream type."""
|
632
652
|
if not stream_info:
|
633
653
|
return "00:00:00"
|
634
|
-
|
635
|
-
is_video_chunk = stream_info.get("input_settings", {}).get("is_video_chunk", False)
|
636
654
|
if precision:
|
637
|
-
if stream_info.get("input_settings", {}).get("
|
655
|
+
if stream_info.get("input_settings", {}).get("start_frame", "na") != "na":
|
638
656
|
return "00:00:00"
|
639
657
|
else:
|
640
658
|
return datetime.now(timezone.utc).strftime("%Y-%m-%d-%H:%M:%S.%f UTC")
|
641
659
|
|
642
|
-
|
643
|
-
if stream_info.get("input_settings", {}).get("stream_type", "video_file") == "video_file":
|
660
|
+
if stream_info.get("input_settings", {}).get("start_frame", "na") != "na":
|
644
661
|
# If video format, start from 00:00:00
|
645
662
|
return "00:00:00"
|
646
663
|
else:
|
647
664
|
# For streams, use tracking start time or current time with minutes/seconds reset
|
648
665
|
if self._tracking_start_time is None:
|
649
666
|
# Try to extract timestamp from stream_time string
|
650
|
-
stream_time_str = stream_info.get("stream_time", "")
|
667
|
+
stream_time_str = stream_info.get("input_settings", {}).get("stream_info", {}).get("stream_time", "")
|
651
668
|
if stream_time_str:
|
652
669
|
try:
|
653
670
|
# Remove " UTC" suffix and parse
|
@@ -665,6 +682,7 @@ class GenderDetectionUseCase(BaseProcessor):
|
|
665
682
|
dt = dt.replace(minute=0, second=0, microsecond=0)
|
666
683
|
return dt.strftime('%Y:%m:%d %H:%M:%S')
|
667
684
|
|
685
|
+
|
668
686
|
def _count_categories(self, detections: list, config: GenderDetectionConfig) -> dict:
|
669
687
|
"""
|
670
688
|
Count the number of detections per category and return a summary dict.
|
@@ -143,12 +143,24 @@ class PriceTagUseCase(BaseProcessor):
|
|
143
143
|
from ..advanced_tracker import AdvancedTracker
|
144
144
|
from ..advanced_tracker.config import TrackerConfig
|
145
145
|
|
146
|
-
|
146
|
+
|
147
147
|
if self.tracker is None:
|
148
|
-
|
148
|
+
if config.confidence_threshold is not None:
|
149
|
+
tracker_config = TrackerConfig(
|
150
|
+
track_high_thresh=float(config.confidence_threshold),
|
151
|
+
# Allow even lower detections to participate in secondary association
|
152
|
+
track_low_thresh=max(0.05, float(config.confidence_threshold) / 2),
|
153
|
+
new_track_thresh=float(config.confidence_threshold)
|
154
|
+
)
|
155
|
+
else:
|
156
|
+
tracker_config = TrackerConfig()
|
149
157
|
self.tracker = AdvancedTracker(tracker_config)
|
150
|
-
self.logger.info(
|
151
|
-
|
158
|
+
self.logger.info(
|
159
|
+
"Initialized AdvancedTracker for Monitoring and tracking with thresholds: "
|
160
|
+
f"high={tracker_config.track_high_thresh}, "
|
161
|
+
f"low={tracker_config.track_low_thresh}, "
|
162
|
+
f"new={tracker_config.new_track_thresh}"
|
163
|
+
)
|
152
164
|
# The tracker expects the data in the same format as input
|
153
165
|
# It will add track_id and frame_id to each detection
|
154
166
|
processed_data = self.tracker.update(processed_data)
|
@@ -572,38 +584,45 @@ class PriceTagUseCase(BaseProcessor):
|
|
572
584
|
"""
|
573
585
|
return {cat: len(ids) for cat, ids in getattr(self, '_per_category_total_track_ids', {}).items()}
|
574
586
|
|
575
|
-
def _format_timestamp_for_video(self, timestamp: float) -> str:
|
576
|
-
"""Format timestamp for video chunks (HH:MM:SS.ms format)."""
|
577
|
-
hours = int(timestamp // 3600)
|
578
|
-
minutes = int((timestamp % 3600) // 60)
|
579
|
-
seconds = timestamp % 60
|
580
|
-
return f"{hours:02d}:{minutes:02d}:{seconds:06.2f}"
|
581
587
|
|
582
588
|
def _format_timestamp_for_stream(self, timestamp: float) -> str:
|
583
589
|
"""Format timestamp for streams (YYYY:MM:DD HH:MM:SS format)."""
|
584
590
|
dt = datetime.fromtimestamp(timestamp, tz=timezone.utc)
|
585
591
|
return dt.strftime('%Y:%m:%d %H:%M:%S')
|
586
592
|
|
587
|
-
def
|
593
|
+
def _format_timestamp_for_video(self, timestamp: float) -> str:
|
594
|
+
"""Format timestamp for video chunks (HH:MM:SS.ms format)."""
|
595
|
+
hours = int(timestamp // 3600)
|
596
|
+
minutes = int((timestamp % 3600) // 60)
|
597
|
+
seconds = round(float(timestamp % 60),2)
|
598
|
+
return f"{hours:02d}:{minutes:02d}:{seconds:.1f}"
|
599
|
+
|
600
|
+
def _get_current_timestamp_str(self, stream_info: Optional[Dict[str, Any]], precision=False, frame_id: Optional[str]=None) -> str:
|
588
601
|
"""Get formatted current timestamp based on stream type."""
|
589
602
|
if not stream_info:
|
590
603
|
return "00:00:00.00"
|
591
|
-
|
592
604
|
# is_video_chunk = stream_info.get("input_settings", {}).get("is_video_chunk", False)
|
593
605
|
if precision:
|
594
|
-
if stream_info.get("input_settings", {}).get("
|
595
|
-
|
596
|
-
|
606
|
+
if stream_info.get("input_settings", {}).get("start_frame", "na") != "na":
|
607
|
+
if frame_id:
|
608
|
+
start_time = int(frame_id)/stream_info.get("input_settings", {}).get("original_fps", 30)
|
609
|
+
else:
|
610
|
+
start_time = stream_info.get("input_settings", {}).get("start_frame", 30)/stream_info.get("input_settings", {}).get("original_fps", 30)
|
611
|
+
stream_time_str = self._format_timestamp_for_video(start_time)
|
612
|
+
return stream_time_str
|
597
613
|
else:
|
598
614
|
return datetime.now(timezone.utc).strftime("%Y-%m-%d-%H:%M:%S.%f UTC")
|
599
615
|
|
600
|
-
if stream_info.get("input_settings", {}).get("
|
601
|
-
|
602
|
-
|
603
|
-
|
616
|
+
if stream_info.get("input_settings", {}).get("start_frame", "na") != "na":
|
617
|
+
if frame_id:
|
618
|
+
start_time = int(frame_id)/stream_info.get("input_settings", {}).get("original_fps", 30)
|
619
|
+
else:
|
620
|
+
start_time = stream_info.get("input_settings", {}).get("start_frame", 30)/stream_info.get("input_settings", {}).get("original_fps", 30)
|
621
|
+
stream_time_str = self._format_timestamp_for_video(start_time)
|
622
|
+
return stream_time_str
|
604
623
|
else:
|
605
624
|
# For streams, use stream_time from stream_info
|
606
|
-
stream_time_str = stream_info.get("stream_time", "")
|
625
|
+
stream_time_str = stream_info.get("input_settings", {}).get("stream_info", {}).get("stream_time", "")
|
607
626
|
if stream_time_str:
|
608
627
|
# Parse the high precision timestamp string to get timestamp
|
609
628
|
try:
|
@@ -622,23 +641,20 @@ class PriceTagUseCase(BaseProcessor):
|
|
622
641
|
"""Get formatted start timestamp for 'TOTAL SINCE' based on stream type."""
|
623
642
|
if not stream_info:
|
624
643
|
return "00:00:00"
|
625
|
-
|
626
|
-
is_video_chunk = stream_info.get("input_settings", {}).get("is_video_chunk", False)
|
627
644
|
if precision:
|
628
|
-
if stream_info.get("input_settings", {}).get("
|
645
|
+
if stream_info.get("input_settings", {}).get("start_frame", "na") != "na":
|
629
646
|
return "00:00:00"
|
630
647
|
else:
|
631
648
|
return datetime.now(timezone.utc).strftime("%Y-%m-%d-%H:%M:%S.%f UTC")
|
632
649
|
|
633
|
-
|
634
|
-
if stream_info.get("input_settings", {}).get("stream_type", "video_file") == "video_file":
|
650
|
+
if stream_info.get("input_settings", {}).get("start_frame", "na") != "na":
|
635
651
|
# If video format, start from 00:00:00
|
636
652
|
return "00:00:00"
|
637
653
|
else:
|
638
654
|
# For streams, use tracking start time or current time with minutes/seconds reset
|
639
655
|
if self._tracking_start_time is None:
|
640
656
|
# Try to extract timestamp from stream_time string
|
641
|
-
stream_time_str = stream_info.get("stream_time", "")
|
657
|
+
stream_time_str = stream_info.get("input_settings", {}).get("stream_info", {}).get("stream_time", "")
|
642
658
|
if stream_time_str:
|
643
659
|
try:
|
644
660
|
# Remove " UTC" suffix and parse
|
@@ -656,6 +672,7 @@ class PriceTagUseCase(BaseProcessor):
|
|
656
672
|
dt = dt.replace(minute=0, second=0, microsecond=0)
|
657
673
|
return dt.strftime('%Y:%m:%d %H:%M:%S')
|
658
674
|
|
675
|
+
|
659
676
|
def _count_categories(self, detections: list, config: PriceTagConfig) -> dict:
|
660
677
|
"""
|
661
678
|
Count the number of detections per category and return a summary dict.
|
@@ -595,6 +595,8 @@ class WindmillMaintenanceUseCase(BaseProcessor):
|
|
595
595
|
Return total unique track_id count for each category.
|
596
596
|
"""
|
597
597
|
return {cat: len(ids) for cat, ids in getattr(self, '_per_category_total_track_ids', {}).items()}
|
598
|
+
|
599
|
+
|
598
600
|
def _format_timestamp_for_stream(self, timestamp: float) -> str:
|
599
601
|
"""Format timestamp for streams (YYYY:MM:DD HH:MM:SS format)."""
|
600
602
|
dt = datetime.fromtimestamp(timestamp, tz=timezone.utc)
|
@@ -681,7 +683,8 @@ class WindmillMaintenanceUseCase(BaseProcessor):
|
|
681
683
|
# Reset minutes and seconds to 00:00 for "TOTAL SINCE" format
|
682
684
|
dt = dt.replace(minute=0, second=0, microsecond=0)
|
683
685
|
return dt.strftime('%Y:%m:%d %H:%M:%S')
|
684
|
-
|
686
|
+
|
687
|
+
|
685
688
|
def _count_categories(self, detections: list, config: WindmillMaintenanceConfig) -> dict:
|
686
689
|
"""
|
687
690
|
Count the number of detections per category and return a summary dict.
|