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.
Files changed (237) hide show
  1. {matrice-1.0.99120/src/matrice.egg-info → matrice-1.0.99122}/PKG-INFO +1 -1
  2. {matrice-1.0.99120 → matrice-1.0.99122}/setup.py +1 -1
  3. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/assembly_line_detection.py +18 -4
  4. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/crop_weed_detection.py +44 -27
  5. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/emergency_vehicle_detection.py +18 -5
  6. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/fashion_detection.py +43 -26
  7. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/gender_detection.py +43 -25
  8. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/price_tag_detection.py +43 -26
  9. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/windmill_maintenance.py +4 -1
  10. {matrice-1.0.99120 → matrice-1.0.99122/src/matrice.egg-info}/PKG-INFO +1 -1
  11. {matrice-1.0.99120 → matrice-1.0.99122}/LICENSE.txt +0 -0
  12. {matrice-1.0.99120 → matrice-1.0.99122}/README.md +0 -0
  13. {matrice-1.0.99120 → matrice-1.0.99122}/setup.cfg +0 -0
  14. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/__init__.py +0 -0
  15. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/action.py +0 -0
  16. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/actionTracker.py +0 -0
  17. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/action_tracker.py +0 -0
  18. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/annotation.py +0 -0
  19. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/app_store.py +0 -0
  20. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/application.py +0 -0
  21. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/compute.py +0 -0
  22. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/compute_manager/__init__.py +0 -0
  23. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/compute_manager/action_instance.py +0 -0
  24. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/compute_manager/actions_manager.py +0 -0
  25. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/compute_manager/actions_scaledown_manager.py +0 -0
  26. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/compute_manager/instance_manager.py +0 -0
  27. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/compute_manager/instance_utils.py +0 -0
  28. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/compute_manager/prechecks.py +0 -0
  29. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/compute_manager/resources_tracker.py +0 -0
  30. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/compute_manager/scaling.py +0 -0
  31. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/compute_manager/shutdown_manager.py +0 -0
  32. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/compute_manager/task_utils.py +0 -0
  33. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/__init__.py +0 -0
  34. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/__init__.py +0 -0
  35. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/base.py +0 -0
  36. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/__init__.py +0 -0
  37. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/bit_depth_reduction.py +0 -0
  38. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/blur.py +0 -0
  39. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/brightness_contrast.py +0 -0
  40. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/color_jitter.py +0 -0
  41. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/compression_artifacts.py +0 -0
  42. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/downscale_upscale.py +0 -0
  43. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/film_grain.py +0 -0
  44. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/flip.py +0 -0
  45. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/fog.py +0 -0
  46. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/horizontal_flip.py +0 -0
  47. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/hsv.py +0 -0
  48. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/iso_noise.py +0 -0
  49. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/low_light.py +0 -0
  50. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/posterize.py +0 -0
  51. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/rain.py +0 -0
  52. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/random_affine.py +0 -0
  53. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/salt_pepper.py +0 -0
  54. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/shadows.py +0 -0
  55. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/snow.py +0 -0
  56. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/speckle.py +0 -0
  57. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/augmentation_utils/strategies/sunflare.py +0 -0
  58. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/client.py +0 -0
  59. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/client_utils.py +0 -0
  60. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/create_dataset.py +0 -0
  61. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_augmentation.py +0 -0
  62. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_augmentor.py +0 -0
  63. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/__init__.py +0 -0
  64. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/imagenet_classification.py +0 -0
  65. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/labelbox_classification.py +0 -0
  66. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/labelbox_detection.py +0 -0
  67. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/mscoco_detection.py +0 -0
  68. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/pascalvoc_detection.py +0 -0
  69. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/unlabelled.py +0 -0
  70. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/video_davis_segmentation.py +0 -0
  71. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/video_detection_mscoco.py +0 -0
  72. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/video_imagenet_classification.py +0 -0
  73. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/video_kinetics_activity_recognition.py +0 -0
  74. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/video_mot_tracking.py +0 -0
  75. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/video_mscoco_detection.py +0 -0
  76. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/video_youtube_bb_tracking.py +0 -0
  77. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_formats/yolo_detection.py +0 -0
  78. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_labelling.py +0 -0
  79. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_prep.py +0 -0
  80. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/data_processor.py +0 -0
  81. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/image_augmentations.py +0 -0
  82. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/image_data_augmentation.py +0 -0
  83. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/new_data_augmentation.py +0 -0
  84. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/pipeline.py +0 -0
  85. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/server.py +0 -0
  86. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/server_utils.py +0 -0
  87. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/data_processing/video_server.py +0 -0
  88. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/dataset.py +0 -0
  89. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/__init__.py +0 -0
  90. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/aggregator/__init__.py +0 -0
  91. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/aggregator/aggregator.py +0 -0
  92. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/aggregator/ingestor.py +0 -0
  93. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/aggregator/pipeline.py +0 -0
  94. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/aggregator/publisher.py +0 -0
  95. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/aggregator/synchronizer.py +0 -0
  96. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/client/__init__.py +0 -0
  97. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/client/auto_streaming/__init__.py +0 -0
  98. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/client/auto_streaming/auto_streaming.py +0 -0
  99. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/client/auto_streaming/auto_streaming_utils.py +0 -0
  100. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/client/client.py +0 -0
  101. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/client/client_stream_utils.py +0 -0
  102. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/client/client_utils.py +0 -0
  103. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/client/frame_comparators.py +0 -0
  104. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/client/streaming_gateway/__init__.py +0 -0
  105. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/client/streaming_gateway/streaming_gateway.py +0 -0
  106. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/client/streaming_gateway/streaming_gateway_utils.py +0 -0
  107. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/client/streaming_gateway/streaming_results_handler.py +0 -0
  108. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/server/__init__.py +0 -0
  109. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/server/inference/__init__.py +0 -0
  110. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/server/inference/batch_manager.py +0 -0
  111. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/server/inference/cache_manager.py +0 -0
  112. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/server/inference/inference_interface.py +0 -0
  113. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/server/inference/model_manager.py +0 -0
  114. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/server/inference/triton_utils.py +0 -0
  115. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/server/proxy/__init__.py +0 -0
  116. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/server/proxy/proxy_interface.py +0 -0
  117. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/server/proxy/proxy_utils.py +0 -0
  118. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/server/server.py +0 -0
  119. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/server/stream_worker.py +0 -0
  120. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/__init__.py +0 -0
  121. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/boundary_drawing_internal/__init__.py +0 -0
  122. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/boundary_drawing_internal/boundary_drawing_internal.py +0 -0
  123. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/boundary_drawing_internal/boundary_drawing_tool.py +0 -0
  124. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/boundary_drawing_internal/example_usage.py +0 -0
  125. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/kafka_utils.py +0 -0
  126. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/__init__.py +0 -0
  127. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/advanced_tracker/__init__.py +0 -0
  128. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/advanced_tracker/base.py +0 -0
  129. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/advanced_tracker/config.py +0 -0
  130. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/advanced_tracker/kalman_filter.py +0 -0
  131. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/advanced_tracker/matching.py +0 -0
  132. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/advanced_tracker/strack.py +0 -0
  133. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/advanced_tracker/tracker.py +0 -0
  134. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/config.py +0 -0
  135. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/core/__init__.py +0 -0
  136. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/core/base.py +0 -0
  137. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/core/config.py +0 -0
  138. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/core/config_utils.py +0 -0
  139. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/processor.py +0 -0
  140. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/test_cases/__init__.py +0 -0
  141. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/test_cases/run_tests.py +0 -0
  142. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/test_cases/test_advanced_customer_service.py +0 -0
  143. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/test_cases/test_basic_counting_tracking.py +0 -0
  144. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/test_cases/test_comprehensive.py +0 -0
  145. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/test_cases/test_config.py +0 -0
  146. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/test_cases/test_customer_service.py +0 -0
  147. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/test_cases/test_data_generators.py +0 -0
  148. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/test_cases/test_people_counting.py +0 -0
  149. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/test_cases/test_processor.py +0 -0
  150. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/test_cases/test_utilities.py +0 -0
  151. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/test_cases/test_utils.py +0 -0
  152. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/__init__.py +0 -0
  153. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/advanced_customer_service.py +0 -0
  154. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/age_detection.py +0 -0
  155. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/anti_spoofing_detection.py +0 -0
  156. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/banana_defect_detection.py +0 -0
  157. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/basic_counting_tracking.py +0 -0
  158. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/blood_cancer_detection_img.py +0 -0
  159. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/car_damage_detection.py +0 -0
  160. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/car_part_segmentation.py +0 -0
  161. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/chicken_pose_detection.py +0 -0
  162. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/child_monitoring.py +0 -0
  163. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/color_detection.py +0 -0
  164. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/color_map_utils.py +0 -0
  165. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/concrete_crack_detection.py +0 -0
  166. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/customer_service.py +0 -0
  167. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/defect_detection_products.py +0 -0
  168. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/distracted_driver_detection.py +0 -0
  169. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/face_emotion.py +0 -0
  170. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/field_mapping.py +0 -0
  171. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/fire_detection.py +0 -0
  172. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/flare_analysis.py +0 -0
  173. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/flower_segmentation.py +0 -0
  174. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/leaf.py +0 -0
  175. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/leaf_disease.py +0 -0
  176. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/license_plate_detection.py +0 -0
  177. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/mask_detection.py +0 -0
  178. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/parking.py +0 -0
  179. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/parking_space_detection.py +0 -0
  180. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/pedestrian_detection.py +0 -0
  181. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/people_counting.py +0 -0
  182. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/plaque_segmentation_img.py +0 -0
  183. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/pothole_segmentation.py +0 -0
  184. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/ppe_compliance.py +0 -0
  185. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/road_lane_detection.py +0 -0
  186. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/shelf_inventory_detection.py +0 -0
  187. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/shoplifting_detection.py +0 -0
  188. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/shopping_cart_analysis.py +0 -0
  189. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/skin_cancer_classification_img.py +0 -0
  190. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/solar_panel.py +0 -0
  191. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/template_usecase.py +0 -0
  192. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/theft_detection.py +0 -0
  193. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/traffic_sign_monitoring.py +0 -0
  194. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/underwater_pollution_detection.py +0 -0
  195. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/vehicle_monitoring.py +0 -0
  196. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/warehouse_object_segmentation.py +0 -0
  197. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/weapon_detection.py +0 -0
  198. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/weld_defect_detection.py +0 -0
  199. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/usecases/wound_segmentation.py +0 -0
  200. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/utils/__init__.py +0 -0
  201. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/utils/advanced_counting_utils.py +0 -0
  202. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/utils/advanced_helper_utils.py +0 -0
  203. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/utils/advanced_tracking_utils.py +0 -0
  204. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/utils/alerting_utils.py +0 -0
  205. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/utils/category_mapping_utils.py +0 -0
  206. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/utils/color_utils.py +0 -0
  207. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/utils/counting_utils.py +0 -0
  208. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/utils/filter_utils.py +0 -0
  209. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/utils/format_utils.py +0 -0
  210. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/utils/geometry_utils.py +0 -0
  211. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/utils/smoothing_utils.py +0 -0
  212. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deploy/utils/post_processing/utils/tracking_utils.py +0 -0
  213. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deployment/__init__.py +0 -0
  214. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deployment/camera_manager.py +0 -0
  215. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deployment/deployment.py +0 -0
  216. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deployment/inference_pipeline.py +0 -0
  217. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/deployment/streaming_gateway_manager.py +0 -0
  218. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/docker_utils.py +0 -0
  219. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/drift_monitor.py +0 -0
  220. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/exported_model.py +0 -0
  221. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/local_test.py +0 -0
  222. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/metrics_calculator.py +0 -0
  223. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/metrics_calculator_oop.py +0 -0
  224. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/model_store.py +0 -0
  225. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/models.py +0 -0
  226. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/pipeline.py +0 -0
  227. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/projects.py +0 -0
  228. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/rpc.py +0 -0
  229. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/scaling.py +0 -0
  230. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/session.py +0 -0
  231. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/testing.py +0 -0
  232. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/token_auth.py +0 -0
  233. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice/utils.py +0 -0
  234. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice.egg-info/SOURCES.txt +0 -0
  235. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice.egg-info/dependency_links.txt +0 -0
  236. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice.egg-info/requires.txt +0 -0
  237. {matrice-1.0.99120 → matrice-1.0.99122}/src/matrice.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: matrice
3
- Version: 1.0.99120
3
+ Version: 1.0.99122
4
4
  Summary: SDK for connecting to matrice.ai services
5
5
  Home-page: https://github.com/matrice-ai/python-sdk
6
6
  Author: Matrice.ai
@@ -14,7 +14,7 @@ long_description = (here / "README.md").read_text(encoding="utf-8")
14
14
  setup(
15
15
  name="matrice",
16
16
 
17
- version = "1.0.99120",
17
+ version = "1.0.99122",
18
18
 
19
19
  description="SDK for connecting to matrice.ai services",
20
20
  long_description=long_description,
@@ -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
- tracker_config = TrackerConfig()
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("Initialized AdvancedTracker for Monitoring and tracking")
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
- # Create tracker instance if it doesn't exist (preserves state across frames)
155
+
156
156
  if self.tracker is None:
157
- tracker_config = TrackerConfig()
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("Initialized AdvancedTracker for Monitoring and tracking")
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
- 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
-
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 _get_current_timestamp_str(self, stream_info: Optional[Dict[str, Any]], precision=False) -> str:
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("stream_type", "video_file") == "video_file":
604
- stream_time_str = stream_info.get("video_timestamp", "")
605
- return stream_time_str[:8]
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("stream_type", "video_file") == "video_file":
610
- # If video format, return video timestamp
611
- stream_time_str = stream_info.get("video_timestamp", "")
612
- return stream_time_str[:8]
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("stream_type", "video_file") == "video_file":
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
- # Create tracker instance if it doesn't exist (preserves state across frames)
154
+
155
155
  if self.tracker is None:
156
- tracker_config = TrackerConfig()
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("Initialized AdvancedTracker for Monitoring and tracking")
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
- # Create tracker instance if it doesn't exist (preserves state across frames)
159
+
160
160
  if self.tracker is None:
161
- tracker_config = TrackerConfig()
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("Initialized AdvancedTracker for Monitoring and tracking")
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 _get_current_timestamp_str(self, stream_info: Optional[Dict[str, Any]], precision=False) -> str:
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("stream_type", "video_file") == "video_file":
608
- stream_time_str = stream_info.get("video_timestamp", "")
609
- return stream_time_str[:8]
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("stream_type", "video_file") == "video_file":
614
- # If video format, return video timestamp
615
- stream_time_str = stream_info.get("video_timestamp", "")
616
- return stream_time_str[:8]
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("stream_type", "video_file") == "video_file":
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
- # Create tracker instance if it doesn't exist (preserves state across frames)
155
+
156
156
  if self.tracker is None:
157
- tracker_config = TrackerConfig()
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("Initialized AdvancedTracker for Monitoring and tracking")
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 _get_current_timestamp_str(self, stream_info: Optional[Dict[str, Any]], precision=False) -> str:
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("stream_type", "video_file") == "video_file":
604
- stream_time_str = stream_info.get("video_timestamp", "")
605
- return stream_time_str[:8]
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("stream_type", "video_file") == "video_file":
610
- # If video format, return video timestamp
611
- stream_time_str = stream_info.get("video_timestamp", "")
612
- return stream_time_str[:8]
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("stream_type", "video_file") == "video_file":
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
- # Create tracker instance if it doesn't exist (preserves state across frames)
146
+
147
147
  if self.tracker is None:
148
- tracker_config = TrackerConfig()
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("Initialized AdvancedTracker for Monitoring and tracking")
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 _get_current_timestamp_str(self, stream_info: Optional[Dict[str, Any]], precision=False) -> str:
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("stream_type", "video_file") == "video_file":
595
- stream_time_str = stream_info.get("video_timestamp", "")
596
- return stream_time_str[:8]
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("stream_type", "video_file") == "video_file":
601
- # If video format, return video timestamp
602
- stream_time_str = stream_info.get("video_timestamp", "")
603
- return stream_time_str[:8]
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("stream_type", "video_file") == "video_file":
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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: matrice
3
- Version: 1.0.99120
3
+ Version: 1.0.99122
4
4
  Summary: SDK for connecting to matrice.ai services
5
5
  Home-page: https://github.com/matrice-ai/python-sdk
6
6
  Author: Matrice.ai