matrice-analytics 0.1.82__tar.gz → 0.1.115__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 (211) hide show
  1. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/PKG-INFO +1 -1
  2. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/matrice_analytics.egg-info/PKG-INFO +1 -1
  3. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/matrice_analytics.egg-info/SOURCES.txt +7 -0
  4. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/__init__.py +28 -3
  5. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/advanced_tracker/config.py +8 -4
  6. matrice_analytics-0.1.115/src/matrice_analytics/post_processing/advanced_tracker/track_class_aggregator.py +128 -0
  7. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/advanced_tracker/tracker.py +22 -1
  8. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/config.py +18 -2
  9. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/core/config.py +146 -4
  10. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/face_reg/face_recognition.py +849 -84
  11. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/face_reg/face_recognition_client.py +116 -4
  12. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/face_reg/people_activity_logging.py +44 -14
  13. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/post_processor.py +16 -0
  14. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/__init__.py +12 -0
  15. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/advanced_customer_service.py +913 -500
  16. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/color_detection.py +19 -18
  17. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/fire_detection.py +142 -32
  18. matrice_analytics-0.1.115/src/matrice_analytics/post_processing/usecases/footfall.py +898 -0
  19. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/license_plate_monitoring.py +257 -142
  20. matrice_analytics-0.1.115/src/matrice_analytics/post_processing/usecases/parking_lot_analytics.py +1137 -0
  21. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/people_counting.py +66 -33
  22. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/vehicle_monitoring.py +79 -70
  23. matrice_analytics-0.1.115/src/matrice_analytics/post_processing/usecases/vehicle_monitoring_drone_view.py +1250 -0
  24. matrice_analytics-0.1.115/src/matrice_analytics/post_processing/usecases/vehicle_monitoring_parking_lot.py +1044 -0
  25. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/weapon_detection.py +2 -1
  26. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/utils/__init__.py +5 -0
  27. matrice_analytics-0.1.115/src/matrice_analytics/post_processing/utils/agnostic_nms.py +759 -0
  28. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/utils/alert_instance_utils.py +148 -32
  29. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/utils/business_metrics_manager_utils.py +268 -19
  30. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/utils/incident_manager_utils.py +364 -43
  31. matrice_analytics-0.1.115/src/matrice_analytics/post_processing/utils/parking_analytics_tracker.py +359 -0
  32. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/LICENSE.txt +0 -0
  33. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/README.md +0 -0
  34. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/matrice_analytics.egg-info/dependency_links.txt +0 -0
  35. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/matrice_analytics.egg-info/not-zip-safe +0 -0
  36. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/matrice_analytics.egg-info/top_level.txt +0 -0
  37. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/pyproject.toml +0 -0
  38. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/setup.cfg +0 -0
  39. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/setup.py +0 -0
  40. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/__init__.py +0 -0
  41. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/boundary_drawing_internal/README.md +0 -0
  42. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/boundary_drawing_internal/__init__.py +0 -0
  43. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/boundary_drawing_internal/boundary_drawing_internal.py +0 -0
  44. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/boundary_drawing_internal/boundary_drawing_tool.py +0 -0
  45. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/boundary_drawing_internal/boundary_tool_template.html +0 -0
  46. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/boundary_drawing_internal/example_usage.py +0 -0
  47. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/boundary_drawing_internal/usage/README.md +0 -0
  48. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/boundary_drawing_internal/usage/boundary_drawer_launcher.py +0 -0
  49. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/boundary_drawing_internal/usage/simple_boundary_launcher.py +0 -0
  50. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/README.md +0 -0
  51. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/advanced_tracker/README.md +0 -0
  52. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/advanced_tracker/__init__.py +0 -0
  53. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/advanced_tracker/base.py +0 -0
  54. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/advanced_tracker/kalman_filter.py +0 -0
  55. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/advanced_tracker/matching.py +0 -0
  56. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/advanced_tracker/strack.py +0 -0
  57. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/core/__init__.py +0 -0
  58. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/core/base.py +0 -0
  59. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/core/config_utils.py +0 -0
  60. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/face_reg/__init__.py +0 -0
  61. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/face_reg/compare_similarity.py +0 -0
  62. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/face_reg/embedding_manager.py +0 -0
  63. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/__init__.py +0 -0
  64. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/easyocr_extractor.py +0 -0
  65. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/__init__.py +0 -0
  66. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/cli/__init__.py +0 -0
  67. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/cli/cli.py +0 -0
  68. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/cli/dataset_stats.py +0 -0
  69. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/cli/export.py +0 -0
  70. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/cli/train.py +0 -0
  71. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/cli/utils.py +0 -0
  72. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/cli/valid.py +0 -0
  73. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/cli/validate_dataset.py +0 -0
  74. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/cli/visualize_augmentation.py +0 -0
  75. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/cli/visualize_predictions.py +0 -0
  76. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/core/__init__.py +0 -0
  77. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/core/process.py +0 -0
  78. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/core/types.py +0 -0
  79. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/core/utils.py +0 -0
  80. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/inference/__init__.py +0 -0
  81. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/inference/config.py +0 -0
  82. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/inference/hub.py +0 -0
  83. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/inference/plate_recognizer.py +0 -0
  84. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/py.typed +0 -0
  85. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/__init__.py +0 -0
  86. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/data/__init__.py +0 -0
  87. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/data/augmentation.py +0 -0
  88. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/data/dataset.py +0 -0
  89. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/model/__init__.py +0 -0
  90. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/model/config.py +0 -0
  91. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/model/layers.py +0 -0
  92. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/model/loss.py +0 -0
  93. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/model/metric.py +0 -0
  94. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/model/model_builders.py +0 -0
  95. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/model/model_schema.py +0 -0
  96. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/utilities/__init__.py +0 -0
  97. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/utilities/backend_utils.py +0 -0
  98. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/utilities/utils.py +0 -0
  99. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/postprocessing.py +0 -0
  100. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/ocr/preprocessing.py +0 -0
  101. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/test_cases/__init__.py +0 -0
  102. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/test_cases/run_tests.py +0 -0
  103. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/test_cases/test_advanced_customer_service.py +0 -0
  104. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/test_cases/test_basic_counting_tracking.py +0 -0
  105. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/test_cases/test_comprehensive.py +0 -0
  106. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/test_cases/test_config.py +0 -0
  107. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/test_cases/test_customer_service.py +0 -0
  108. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/test_cases/test_data_generators.py +0 -0
  109. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/test_cases/test_people_counting.py +0 -0
  110. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/test_cases/test_processor.py +0 -0
  111. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/test_cases/test_usecases.py +0 -0
  112. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/test_cases/test_utilities.py +0 -0
  113. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/test_cases/test_utils.py +0 -0
  114. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/Histopathological_Cancer_Detection_img.py +0 -0
  115. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/abandoned_object_detection.py +0 -0
  116. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/age_detection.py +0 -0
  117. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/age_gender_detection.py +0 -0
  118. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/anti_spoofing_detection.py +0 -0
  119. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/assembly_line_detection.py +0 -0
  120. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/banana_defect_detection.py +0 -0
  121. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/basic_counting_tracking.py +0 -0
  122. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/blood_cancer_detection_img.py +0 -0
  123. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/car_damage_detection.py +0 -0
  124. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/car_part_segmentation.py +0 -0
  125. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/car_service.py +0 -0
  126. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/cardiomegaly_classification.py +0 -0
  127. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/cell_microscopy_segmentation.py +0 -0
  128. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/chicken_pose_detection.py +0 -0
  129. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/child_monitoring.py +0 -0
  130. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/color/clip.py +0 -0
  131. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/color/clip_processor/merges.txt +0 -0
  132. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/color/clip_processor/preprocessor_config.json +0 -0
  133. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/color/clip_processor/special_tokens_map.json +0 -0
  134. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/color/clip_processor/tokenizer.json +0 -0
  135. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/color/clip_processor/tokenizer_config.json +0 -0
  136. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/color/clip_processor/vocab.json +0 -0
  137. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/color/color_map_utils.py +0 -0
  138. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/color/color_mapper.py +0 -0
  139. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/color_map_utils.py +0 -0
  140. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/concrete_crack_detection.py +0 -0
  141. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/crop_weed_detection.py +0 -0
  142. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/customer_service.py +0 -0
  143. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/defect_detection_products.py +0 -0
  144. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/distracted_driver_detection.py +0 -0
  145. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/drone_traffic_monitoring.py +0 -0
  146. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/drowsy_driver_detection.py +0 -0
  147. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/dwell_detection.py +0 -0
  148. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/emergency_vehicle_detection.py +0 -0
  149. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/face_emotion.py +0 -0
  150. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/face_recognition.py +0 -0
  151. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/fashion_detection.py +0 -0
  152. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/field_mapping.py +0 -0
  153. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/flare_analysis.py +0 -0
  154. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/flower_segmentation.py +0 -0
  155. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/gas_leak_detection.py +0 -0
  156. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/gender_detection.py +0 -0
  157. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/human_activity_recognition.py +0 -0
  158. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/intrusion_detection.py +0 -0
  159. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/leaf.py +0 -0
  160. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/leaf_disease.py +0 -0
  161. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/leak_detection.py +0 -0
  162. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/license_plate_detection.py +0 -0
  163. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/litter_monitoring.py +0 -0
  164. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/mask_detection.py +0 -0
  165. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/natural_disaster.py +0 -0
  166. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/parking.py +0 -0
  167. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/parking_space_detection.py +0 -0
  168. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/pcb_defect_detection.py +0 -0
  169. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/pedestrian_detection.py +0 -0
  170. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/people_counting_bckp.py +0 -0
  171. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/people_tracking.py +0 -0
  172. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/pipeline_detection.py +0 -0
  173. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/plaque_segmentation_img.py +0 -0
  174. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/pothole_segmentation.py +0 -0
  175. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/ppe_compliance.py +0 -0
  176. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/price_tag_detection.py +0 -0
  177. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/proximity_detection.py +0 -0
  178. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/road_lane_detection.py +0 -0
  179. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/road_traffic_density.py +0 -0
  180. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/road_view_segmentation.py +0 -0
  181. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/shelf_inventory_detection.py +0 -0
  182. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/shoplifting_detection.py +0 -0
  183. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/shopping_cart_analysis.py +0 -0
  184. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/skin_cancer_classification_img.py +0 -0
  185. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/smoker_detection.py +0 -0
  186. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/solar_panel.py +0 -0
  187. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/suspicious_activity_detection.py +0 -0
  188. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/template_usecase.py +0 -0
  189. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/theft_detection.py +0 -0
  190. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/traffic_sign_monitoring.py +0 -0
  191. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/underground_pipeline_defect_detection.py +0 -0
  192. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/underwater_pollution_detection.py +0 -0
  193. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/warehouse_object_segmentation.py +0 -0
  194. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/waterbody_segmentation.py +0 -0
  195. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/weld_defect_detection.py +0 -0
  196. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/wildlife_monitoring.py +0 -0
  197. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/windmill_maintenance.py +0 -0
  198. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/usecases/wound_segmentation.py +0 -0
  199. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/utils/advanced_counting_utils.py +0 -0
  200. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/utils/advanced_helper_utils.py +0 -0
  201. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/utils/advanced_tracking_utils.py +0 -0
  202. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/utils/alerting_utils.py +0 -0
  203. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/utils/category_mapping_utils.py +0 -0
  204. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/utils/color_utils.py +0 -0
  205. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/utils/counting_utils.py +0 -0
  206. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/utils/filter_utils.py +0 -0
  207. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/utils/format_utils.py +0 -0
  208. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/utils/geometry_utils.py +0 -0
  209. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/utils/smoothing_utils.py +0 -0
  210. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/post_processing/utils/tracking_utils.py +0 -0
  211. {matrice_analytics-0.1.82 → matrice_analytics-0.1.115}/src/matrice_analytics/py.typed +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: matrice_analytics
3
- Version: 0.1.82
3
+ Version: 0.1.115
4
4
  Summary: Common server utilities for Matrice.ai services
5
5
  Author-email: "Matrice.ai" <dipendra@matrice.ai>
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: matrice_analytics
3
- Version: 0.1.82
3
+ Version: 0.1.115
4
4
  Summary: Common server utilities for Matrice.ai services
5
5
  Author-email: "Matrice.ai" <dipendra@matrice.ai>
6
6
  License-Expression: MIT
@@ -29,6 +29,7 @@ src/matrice_analytics/post_processing/advanced_tracker/config.py
29
29
  src/matrice_analytics/post_processing/advanced_tracker/kalman_filter.py
30
30
  src/matrice_analytics/post_processing/advanced_tracker/matching.py
31
31
  src/matrice_analytics/post_processing/advanced_tracker/strack.py
32
+ src/matrice_analytics/post_processing/advanced_tracker/track_class_aggregator.py
32
33
  src/matrice_analytics/post_processing/advanced_tracker/tracker.py
33
34
  src/matrice_analytics/post_processing/core/__init__.py
34
35
  src/matrice_analytics/post_processing/core/base.py
@@ -127,6 +128,7 @@ src/matrice_analytics/post_processing/usecases/field_mapping.py
127
128
  src/matrice_analytics/post_processing/usecases/fire_detection.py
128
129
  src/matrice_analytics/post_processing/usecases/flare_analysis.py
129
130
  src/matrice_analytics/post_processing/usecases/flower_segmentation.py
131
+ src/matrice_analytics/post_processing/usecases/footfall.py
130
132
  src/matrice_analytics/post_processing/usecases/gas_leak_detection.py
131
133
  src/matrice_analytics/post_processing/usecases/gender_detection.py
132
134
  src/matrice_analytics/post_processing/usecases/human_activity_recognition.py
@@ -140,6 +142,7 @@ src/matrice_analytics/post_processing/usecases/litter_monitoring.py
140
142
  src/matrice_analytics/post_processing/usecases/mask_detection.py
141
143
  src/matrice_analytics/post_processing/usecases/natural_disaster.py
142
144
  src/matrice_analytics/post_processing/usecases/parking.py
145
+ src/matrice_analytics/post_processing/usecases/parking_lot_analytics.py
143
146
  src/matrice_analytics/post_processing/usecases/parking_space_detection.py
144
147
  src/matrice_analytics/post_processing/usecases/pcb_defect_detection.py
145
148
  src/matrice_analytics/post_processing/usecases/pedestrian_detection.py
@@ -168,6 +171,8 @@ src/matrice_analytics/post_processing/usecases/traffic_sign_monitoring.py
168
171
  src/matrice_analytics/post_processing/usecases/underground_pipeline_defect_detection.py
169
172
  src/matrice_analytics/post_processing/usecases/underwater_pollution_detection.py
170
173
  src/matrice_analytics/post_processing/usecases/vehicle_monitoring.py
174
+ src/matrice_analytics/post_processing/usecases/vehicle_monitoring_drone_view.py
175
+ src/matrice_analytics/post_processing/usecases/vehicle_monitoring_parking_lot.py
171
176
  src/matrice_analytics/post_processing/usecases/warehouse_object_segmentation.py
172
177
  src/matrice_analytics/post_processing/usecases/waterbody_segmentation.py
173
178
  src/matrice_analytics/post_processing/usecases/weapon_detection.py
@@ -188,6 +193,7 @@ src/matrice_analytics/post_processing/utils/__init__.py
188
193
  src/matrice_analytics/post_processing/utils/advanced_counting_utils.py
189
194
  src/matrice_analytics/post_processing/utils/advanced_helper_utils.py
190
195
  src/matrice_analytics/post_processing/utils/advanced_tracking_utils.py
196
+ src/matrice_analytics/post_processing/utils/agnostic_nms.py
191
197
  src/matrice_analytics/post_processing/utils/alert_instance_utils.py
192
198
  src/matrice_analytics/post_processing/utils/alerting_utils.py
193
199
  src/matrice_analytics/post_processing/utils/business_metrics_manager_utils.py
@@ -198,5 +204,6 @@ src/matrice_analytics/post_processing/utils/filter_utils.py
198
204
  src/matrice_analytics/post_processing/utils/format_utils.py
199
205
  src/matrice_analytics/post_processing/utils/geometry_utils.py
200
206
  src/matrice_analytics/post_processing/utils/incident_manager_utils.py
207
+ src/matrice_analytics/post_processing/utils/parking_analytics_tracker.py
201
208
  src/matrice_analytics/post_processing/utils/smoothing_utils.py
202
209
  src/matrice_analytics/post_processing/utils/tracking_utils.py
@@ -84,7 +84,8 @@ from .usecases.field_mapping import FieldMappingConfig, FieldMappingUseCase
84
84
  from .usecases.leaf_disease import LeafDiseaseDetectionConfig, LeafDiseaseDetectionUseCase
85
85
  from .usecases.parking import ParkingConfig
86
86
  from .usecases.abandoned_object_detection import AbandonedObjectConfig
87
-
87
+ from .usecases.footfall import FootFallConfig
88
+ from .usecases.vehicle_monitoring import VehicleMonitoringConfig
88
89
 
89
90
  from .usecases.weld_defect_detection import WeldDefectConfig
90
91
  from .usecases.weapon_detection import WeaponDetectionConfig
@@ -128,7 +129,10 @@ from .usecases.pcb_defect_detection import PCBDefectConfig, PCBDefectUseCase
128
129
  from .usecases.underground_pipeline_defect_detection import UndergroundPipelineDefectConfig,UndergroundPipelineDefectUseCase
129
130
  from .usecases.suspicious_activity_detection import SusActivityConfig, SusActivityUseCase
130
131
  from .usecases.natural_disaster import NaturalDisasterConfig, NaturalDisasterUseCase
131
-
132
+ from .usecases.footfall import FootFallUseCase
133
+ from .usecases.vehicle_monitoring_parking_lot import VehicleMonitoringParkingLotUseCase, VehicleMonitoringParkingLotConfig
134
+ from .usecases.vehicle_monitoring_drone_view import VehicleMonitoringDroneViewUseCase, VehicleMonitoringDroneViewConfig
135
+ from .usecases.parking_lot_analytics import ParkingLotAnalyticsConfig, ParkingLotAnalyticsUseCase
132
136
  #Put all IMAGE based usecases here
133
137
  from .usecases.blood_cancer_detection_img import BloodCancerDetectionConfig, BloodCancerDetectionUseCase
134
138
  from .usecases.skin_cancer_classification_img import SkinCancerClassificationConfig, SkinCancerClassificationUseCase
@@ -205,6 +209,10 @@ from .usecases import (
205
209
 
206
210
  SusActivityUseCase,
207
211
  NaturalDisasterUseCase,
212
+ FootFallUseCase,
213
+ VehicleMonitoringParkingLotUseCase,
214
+ VehicleMonitoringDroneViewUseCase,
215
+ ParkingLotAnalyticsUseCase,
208
216
 
209
217
  #Put all IMAGE based usecases here
210
218
  BloodCancerDetectionUseCase,
@@ -286,6 +294,10 @@ _pcb_defect_detection = PCBDefectUseCase()
286
294
  _underground_pipeline_defect = UndergroundPipelineDefectUseCase()
287
295
  _suspicious_activity_detection = SusActivityUseCase()
288
296
  _natural_disaster = NaturalDisasterUseCase()
297
+ _footfall = FootFallUseCase()
298
+ _vehicle_monitoring_parking_lot = VehicleMonitoringParkingLotUseCase()
299
+ _vehicle_monitoring_drone_view = VehicleMonitoringDroneViewUseCase()
300
+ _parking_lot_analytics = ParkingLotAnalyticsUseCase()
289
301
 
290
302
  # Face recognition with embeddings
291
303
  _face_recognition = FaceRecognitionEmbeddingUseCase()
@@ -370,6 +382,10 @@ registry.register_use_case(_pcb_defect_detection.category, _pcb_defect_detection
370
382
  registry.register_use_case(_underground_pipeline_defect.category, _underground_pipeline_defect.name, UndergroundPipelineDefectUseCase)
371
383
  registry.register_use_case(_suspicious_activity_detection.category, _suspicious_activity_detection.name, SusActivityUseCase)
372
384
  registry.register_use_case(_natural_disaster.category, _natural_disaster.name, NaturalDisasterUseCase)
385
+ registry.register_use_case(_footfall.category, _footfall.name, FaceEmotionUseCase)
386
+ registry.register_use_case(_vehicle_monitoring_parking_lot.category, _vehicle_monitoring_parking_lot.name, VehicleMonitoringParkingLotUseCase)
387
+ registry.register_use_case(_vehicle_monitoring_drone_view.category, _vehicle_monitoring_drone_view.name, VehicleMonitoringDroneViewUseCase)
388
+ registry.register_use_case(_parking_lot_analytics.category, _parking_lot_analytics.name, ParkingLotAnalyticsUseCase)
373
389
 
374
390
  #Put all IMAGE based usecases here
375
391
  registry.register_use_case(_blood_cancer_detection.category, _blood_cancer_detection.name, BloodCancerDetectionUseCase)
@@ -574,7 +590,11 @@ __all__ = [
574
590
  'UndergroundPipelineDefectConfig',
575
591
  'SusActivityConfig',
576
592
  'NaturalDisasterConfig',
577
- 'VehiclePeopleDroneMonitoringConfig'
593
+ 'VehiclePeopleDroneMonitoringConfig',
594
+ 'FootFallConfig',
595
+ 'VehicleMonitoringParkingLotConfig',
596
+ 'VehicleMonitoringDroneViewConfig',
597
+ 'ParkingLotAnalyticsConfig',
578
598
  #Put all IMAGE based usecase CONFIGS here
579
599
  'BloodCancerDetectionConfig',
580
600
  'SkinCancerClassificationConfig',
@@ -648,6 +668,10 @@ __all__ = [
648
668
  'UndergroundPipelineDefectUseCase',
649
669
  'SusActivityUseCase',
650
670
  'NaturalDisasterUseCase',
671
+ 'FootFallUseCase',
672
+ 'VehicleMonitoringParkingLotUseCase',
673
+ 'VehicleMonitoringDroneViewUseCase',
674
+ 'ParkingLotAnalyticsUseCase',
651
675
 
652
676
  #Put all IMAGE based usecases here
653
677
  'BloodCancerDetectionUseCase',
@@ -710,6 +734,7 @@ __all__ = [
710
734
  'detect_line_crossings',
711
735
  'analyze_track_movements',
712
736
  'filter_tracks_by_duration',
737
+ 'ParkingAnalyticsTracker',
713
738
 
714
739
  # New utilities
715
740
  'create_people_counting_config',
@@ -1,6 +1,5 @@
1
1
  """
2
2
  Configuration classes for advanced tracker.
3
-
4
3
  This module provides configuration classes for the advanced tracker,
5
4
  including parameters for tracking algorithms and thresholds.
6
5
  """
@@ -8,7 +7,6 @@ including parameters for tracking algorithms and thresholds.
8
7
  from dataclasses import dataclass, field
9
8
  from typing import Optional
10
9
 
11
-
12
10
  @dataclass
13
11
  class TrackerConfig:
14
12
  """
@@ -46,6 +44,10 @@ class TrackerConfig:
46
44
  smoothing_window_size: int = 20
47
45
  smoothing_cooldown_frames: int = 5
48
46
 
47
+ # Class aggregation settings
48
+ enable_class_aggregation: bool = False
49
+ class_aggregation_window_size: int = 30
50
+
49
51
  def __post_init__(self):
50
52
  """Validate configuration parameters."""
51
53
  if not 0.0 <= self.track_high_thresh <= 1.0:
@@ -72,6 +74,8 @@ class TrackerConfig:
72
74
  if self.output_format not in ["tracking", "detection"]:
73
75
  raise ValueError(f"Invalid output_format: {self.output_format}")
74
76
 
75
- # Calculate max_time_lost if not explicitly set
76
77
  if self.max_time_lost == 30: # Default value
77
- self.max_time_lost = int(self.frame_rate / 30.0 * self.track_buffer)
78
+ self.max_time_lost = int(self.frame_rate / 30.0 * self.track_buffer)
79
+
80
+ if self.class_aggregation_window_size <= 0:
81
+ raise ValueError(f"class_aggregation_window_size must be positive, got {self.class_aggregation_window_size}")
@@ -0,0 +1,128 @@
1
+ """
2
+ Track class aggregation for object tracking.
3
+
4
+ This module provides a sliding-window-based mechanism to aggregate class labels
5
+ across frames, reducing label flickering in tracking outputs through temporal voting.
6
+ """
7
+
8
+ from typing import Any, Dict
9
+ from collections import deque, Counter
10
+ import logging
11
+
12
+ logger = logging.getLogger(__name__)
13
+
14
+
15
+ class TrackClassAggregator:
16
+ """
17
+ Maintains per-track sliding windows of class labels and returns the most frequent.
18
+
19
+ This aggregator reduces class label flickering in tracking results by applying
20
+ temporal voting based on historical observations within a sliding window.
21
+
22
+ Attributes:
23
+ window_size (int): Maximum number of frames to keep in the sliding window.
24
+ track_windows (Dict[int, deque]): Per-track sliding windows of class labels.
25
+ """
26
+
27
+ def __init__(self, window_size: int = 30):
28
+ """
29
+ Initialize the TrackClassAggregator.
30
+
31
+ Args:
32
+ window_size (int): Number of recent frames to consider for aggregation.
33
+ Must be positive. Larger windows provide more stability but slower
34
+ adaptation to genuine class changes.
35
+ """
36
+ if window_size <= 0:
37
+ raise ValueError(f"window_size must be positive, got {window_size}")
38
+
39
+ self.window_size = window_size
40
+ self.track_windows: Dict[int, deque] = {}
41
+
42
+ def update_and_aggregate(self, track_id: int, observed_class: Any) -> Any:
43
+ """
44
+ Update the sliding window for a track and return the aggregated class label.
45
+
46
+ This method:
47
+ 1. Adds the new observation to the track's window
48
+ 2. Maintains window size by removing oldest entries if needed
49
+ 3. Returns the most frequent class in the window
50
+
51
+ Args:
52
+ track_id (int): Unique identifier for the track.
53
+ observed_class (Any): The class label observed in the current frame.
54
+
55
+ Returns:
56
+ Any: The aggregated class label (most frequent in the window).
57
+ If there's a tie, returns the most recent among tied classes.
58
+ """
59
+ # Initialize window for new tracks
60
+ if track_id not in self.track_windows:
61
+ self.track_windows[track_id] = deque(maxlen=self.window_size)
62
+
63
+ # Add current observation
64
+ window = self.track_windows[track_id]
65
+ window.append(observed_class)
66
+
67
+ # Return most frequent class
68
+ if len(window) == 0:
69
+ return observed_class
70
+
71
+ # Count frequencies and return most common
72
+ class_counts = Counter(window)
73
+ most_common = class_counts.most_common(1)[0][0]
74
+
75
+ return most_common
76
+
77
+ def get_aggregated_class(self, track_id: int, fallback_class: Any) -> Any:
78
+ """
79
+ Get the aggregated class for a track without updating the window.
80
+
81
+ Args:
82
+ track_id (int): Unique identifier for the track.
83
+ fallback_class (Any): Class to return if track has no history.
84
+
85
+ Returns:
86
+ Any: The aggregated class label, or fallback_class if no history exists.
87
+ """
88
+ if track_id not in self.track_windows:
89
+ return fallback_class
90
+
91
+ window = self.track_windows[track_id]
92
+ if len(window) == 0:
93
+ return fallback_class
94
+
95
+ class_counts = Counter(window)
96
+ return class_counts.most_common(1)[0][0]
97
+
98
+ def remove_track(self, track_id: int) -> None:
99
+ """
100
+ Remove a track's window from memory.
101
+
102
+ Args:
103
+ track_id (int): Unique identifier for the track to remove.
104
+ """
105
+ if track_id in self.track_windows:
106
+ del self.track_windows[track_id]
107
+
108
+ def remove_tracks(self, track_ids: list) -> None:
109
+ """
110
+ Remove multiple tracks' windows from memory (batch operation).
111
+
112
+ Args:
113
+ track_ids (list): List of track IDs to remove.
114
+ """
115
+ for track_id in track_ids:
116
+ self.remove_track(track_id)
117
+
118
+ def reset(self) -> None:
119
+ """Clear all track windows."""
120
+ self.track_windows.clear()
121
+
122
+ def get_active_track_count(self) -> int:
123
+ """Get the number of tracks currently being aggregated."""
124
+ return len(self.track_windows)
125
+
126
+ def __repr__(self) -> str:
127
+ """String representation for debugging."""
128
+ return f"TrackClassAggregator(window_size={self.window_size}, active_tracks={len(self.track_windows)})"
@@ -34,6 +34,7 @@ class AdvancedTracker:
34
34
  config (TrackerConfig): Tracker configuration.
35
35
  max_time_lost (int): The maximum frames for a track to be considered as 'lost'.
36
36
  kalman_filter (KalmanFilterXYAH): Kalman Filter object.
37
+ class_smoother (Optional[ClassSmoother]): Optional class smoother for class label smoothing over flicker.
37
38
  """
38
39
 
39
40
  def __init__(self, config: TrackerConfig):
@@ -53,6 +54,11 @@ class AdvancedTracker:
53
54
  self.kalman_filter = self.get_kalmanfilter()
54
55
  self.reset_id()
55
56
 
57
+ self.class_aggregator = None
58
+ if config.enable_class_aggregation:
59
+ from .track_class_aggregator import TrackClassAggregator
60
+ self.class_aggregator = TrackClassAggregator(window_size=config.class_aggregation_window_size)
61
+
56
62
  def update(self, detections: Union[List[Dict], Dict[str, List[Dict]]],
57
63
  img: Optional[np.ndarray] = None) -> Union[List[Dict], Dict[str, List[Dict]]]:
58
64
  """
@@ -186,7 +192,15 @@ class AdvancedTracker:
186
192
  }
187
193
 
188
194
  detections.append(detection)
189
-
195
+
196
+ if self.class_aggregator is not None:
197
+ for detection in detections:
198
+ aggregated_class = self.class_aggregator.update_and_aggregate(
199
+ track_id=detection['track_id'],
200
+ observed_class=detection['category']
201
+ )
202
+ detection['category'] = aggregated_class
203
+
190
204
  return detections
191
205
 
192
206
  def _perform_tracking_update(self, detections: List[STrack],
@@ -296,6 +310,10 @@ class AdvancedTracker:
296
310
 
297
311
  if len(self.removed_stracks) > 1000:
298
312
  self.removed_stracks = self.removed_stracks[-999:]
313
+
314
+ # Clean up aggregator windows for removed tracks
315
+ if self.class_aggregator is not None and removed_stracks:
316
+ self.class_aggregator.remove_tracks([t.track_id for t in removed_stracks])
299
317
 
300
318
  return [x for x in self.tracked_stracks if x.is_activated]
301
319
 
@@ -327,6 +345,9 @@ class AdvancedTracker:
327
345
  self.frame_id = 0
328
346
  self.kalman_filter = self.get_kalmanfilter()
329
347
  self.reset_id()
348
+
349
+ if self.class_aggregator is not None:
350
+ self.class_aggregator.reset()
330
351
 
331
352
  @staticmethod
332
353
  def joint_stracks(tlista: List[STrack], tlistb: List[STrack]) -> List[STrack]:
@@ -7,11 +7,13 @@ APP_NAME_TO_USECASE = {
7
7
  "pipeline_detection": "pipeline_detection",
8
8
  "vehicle_monitoring": "vehicle_monitoring",
9
9
  "Vehicle Type Monitoring": "vehicle_monitoring",
10
+ "Vehicle Monitoring": "vehicle_monitoring",
11
+ "vehicle-monitoring": "vehicle_monitoring",
10
12
  "weapon_detection": "weapon_detection",
11
13
  "traffic_sign_monitoring": "traffic_sign_monitoring",
12
14
  "flare_analysis": "flare_analysis",
13
15
  "ppe_compliance": "ppe_compliance",
14
- "advanced_customer_service": "advanced_customer_service",
16
+ "Customer Activity Analysis": "advanced_customer_service",
15
17
  "assembly_line_detection": "assembly_line_detection",
16
18
  "crop_weed_detection" : "crop_weed_detection",
17
19
  "emergency_vehicle_detection": "emergency_vehicle_detection",
@@ -65,6 +67,12 @@ APP_NAME_TO_USECASE = {
65
67
  "underground_pipeline_defect" : "underground_pipeline_defect",
66
68
  "suspicious_activity_detection": "suspicious_activity_detection",
67
69
  "natural_disaster_detection": "natural_disaster_detection",
70
+ "Foot Fall": "footfall",
71
+ "Parking Lot Vehicle Monitoring": "vehicle_monitoring_parking_lot",
72
+ "vehicle_monitoring_parking_lot": "vehicle_monitoring_parking_lot",
73
+ "Vehicle Monitoring Parking Lot": "vehicle_monitoring_parking_lot",
74
+ "Drone view vehicle monitoring": "vehicle_monitoring_drone_view",
75
+ "Parking Lot Analytics": "parking_lot_analytics",
68
76
  }
69
77
 
70
78
  APP_NAME_TO_CATEGORY = {
@@ -76,11 +84,13 @@ APP_NAME_TO_CATEGORY = {
76
84
  "pipeline_detection": "pipeline_detection",
77
85
  "vehicle_monitoring": "traffic",
78
86
  "Vehicle Type Monitoring": "traffic",
87
+ "Vehicle Monitoring": "traffic",
88
+ "vehicle-monitoring": "traffic",
79
89
  "weapon_detection": "security",
80
90
  "traffic_sign_monitoring": "traffic",
81
91
  "flare_analysis": "flare_detection",
82
92
  "ppe_compliance": "security",
83
- "advanced_customer_service": "sales",
93
+ "Customer Activity Analysis": "sales",
84
94
  "assembly_line_detection": "manufacturing",
85
95
  "crop_weed_detection": "agriculture",
86
96
  "emergency_vehicle_detection": "traffic",
@@ -135,6 +145,12 @@ APP_NAME_TO_CATEGORY = {
135
145
  "underground_pipeline_defect" : "general",
136
146
  "suspicious_activity_detection": "security",
137
147
  "natural_disaster_detection": "environmental",
148
+ "Foot Fall": "retail",
149
+ "Parking Lot Vehicle Monitoring": "traffic",
150
+ "vehicle_monitoring_parking_lot": "traffic",
151
+ "Vehicle Monitoring Parking Lot": "traffic",
152
+ "Drone view vehicle monitoring": "traffic",
153
+ "Parking Lot Analytics": "traffic",
138
154
  }
139
155
 
140
156
  def get_usecase_from_app_name(app_name: str) -> str:
@@ -352,14 +352,19 @@ class AlertConfig:
352
352
  @dataclass
353
353
  class PeopleCountingConfig(BaseConfig):
354
354
  """Configuration for people counting use case."""
355
-
355
+
356
356
  # Smoothing configuration
357
357
  enable_smoothing: bool = True
358
358
  smoothing_algorithm: str = "observability" # "window" or "observability"
359
359
  smoothing_window_size: int = 20
360
360
  smoothing_cooldown_frames: int = 5
361
361
  smoothing_confidence_range_factor: float = 0.5
362
-
362
+
363
+ # ====== PERFORMANCE: Tracker selection (both disabled by default for max throughput) ======
364
+ enable_advanced_tracker: bool = False # Heavy O(n³) tracker - enable only when tracking quality is critical
365
+ enable_simple_tracker: bool = False # Lightweight O(n) tracker - fast but no cross-frame persistence
366
+ # ====== END PERFORMANCE CONFIG ======
367
+
363
368
  # Zone configuration
364
369
  zone_config: Optional[ZoneConfig] = None
365
370
 
@@ -901,6 +906,10 @@ class ConfigManager:
901
906
  'underground_pipeline_defect' : None,
902
907
  'suspicious_activity_detection': None,
903
908
  'natural_disaster_detection': None,
909
+ 'footfall': None,
910
+ 'vehicle_monitoring_parking_lot': None,
911
+ 'vehicle_monitoring_drone_view': None,
912
+ 'parking_lot_analytics': None,
904
913
 
905
914
  #Put all image based usecases here::
906
915
  'blood_cancer_detection_img': None,
@@ -1405,7 +1414,39 @@ class ConfigManager:
1405
1414
  return NaturalDisasterConfig
1406
1415
  except ImportError:
1407
1416
  return None
1408
-
1417
+
1418
+ def footfall_detection_config_class(self):
1419
+ """Register a configuration class for a use case."""
1420
+ try:
1421
+ from ..usecases.footfall import FootFallConfig
1422
+ return FootFallConfig
1423
+ except ImportError:
1424
+ return None
1425
+
1426
+ def vehicle_monitoring_parking_lot_config_class(self):
1427
+ """Register a configuration class for a use case."""
1428
+ try:
1429
+ from ..usecases.vehicle_monitoring_parking_lot import VehicleMonitoringParkingLotConfig
1430
+ return VehicleMonitoringParkingLotConfig
1431
+ except ImportError:
1432
+ return None
1433
+
1434
+ def vehicle_monitoring_drone_view_config_class(self):
1435
+ """Register a configuration class for a use case."""
1436
+ try:
1437
+ from ..usecases.vehicle_monitoring_drone_view import VehicleMonitoringDroneViewConfig
1438
+ return VehicleMonitoringDroneViewConfig
1439
+ except ImportError:
1440
+ return None
1441
+
1442
+ def parking_lot_analytics_config_class(self):
1443
+ """Register a configuration class for a use case."""
1444
+ try:
1445
+ from ..usecases.parking_lot_analytics import ParkingLotAnalyticsConfig
1446
+ return ParkingLotAnalyticsConfig
1447
+ except ImportError:
1448
+ return None
1449
+
1409
1450
  #put all image based usecases here::
1410
1451
  def blood_cancer_detection_config_class(self):
1411
1452
  """Register a configuration class for a use case."""
@@ -2009,15 +2050,27 @@ class ConfigManager:
2009
2050
  from ..usecases.vehicle_monitoring import VehicleMonitoringConfig
2010
2051
 
2011
2052
  # Handle nested configurations
2053
+ zone_config = kwargs.pop("zone_config", None)
2054
+ # VehicleMonitoringConfig expects zone_config as Dict, not ZoneConfig object
2055
+ # If it's a ZoneConfig object, convert it to dict
2056
+ if zone_config and hasattr(zone_config, 'to_dict'):
2057
+ zone_config = zone_config.to_dict()
2058
+ elif zone_config and isinstance(zone_config, ZoneConfig):
2059
+ zone_config = {"zones": zone_config.zones} if zone_config.zones else None
2060
+
2012
2061
  alert_config = kwargs.pop("alert_config", None)
2013
2062
  if alert_config and isinstance(alert_config, dict):
2014
2063
  alert_config = AlertConfig(**alert_config)
2015
2064
 
2065
+ # Filter kwargs to only include valid parameters
2066
+ filtered_kwargs = self._filter_kwargs_for_config(VehicleMonitoringConfig, kwargs)
2067
+
2016
2068
  config = VehicleMonitoringConfig(
2017
2069
  category=category or "traffic",
2018
2070
  usecase=usecase,
2071
+ zone_config=zone_config,
2019
2072
  alert_config=alert_config,
2020
- **kwargs
2073
+ **filtered_kwargs
2021
2074
  )
2022
2075
 
2023
2076
  elif usecase == "drone_traffic_monitoring":
@@ -2684,6 +2737,70 @@ class ConfigManager:
2684
2737
  **kwargs
2685
2738
  )
2686
2739
 
2740
+ elif usecase == "footfall":
2741
+ # Import here to avoid circular import
2742
+ from ..usecases.footfall import FootFallConfig
2743
+
2744
+ # Handle nested configurations
2745
+ alert_config = kwargs.pop("alert_config", None)
2746
+ if alert_config and isinstance(alert_config, dict):
2747
+ alert_config = AlertConfig(**alert_config)
2748
+
2749
+ config = FootFallConfig(
2750
+ category=category or "retail",
2751
+ usecase=usecase,
2752
+ alert_config=alert_config,
2753
+ **kwargs
2754
+ )
2755
+
2756
+ elif usecase == "vehicle_monitoring_parking_lot":
2757
+ # Import here to avoid circular import
2758
+ from ..usecases.vehicle_monitoring_parking_lot import VehicleMonitoringParkingLotConfig
2759
+
2760
+ # Handle nested configurations
2761
+ alert_config = kwargs.pop("alert_config", None)
2762
+ if alert_config and isinstance(alert_config, dict):
2763
+ alert_config = AlertConfig(**alert_config)
2764
+
2765
+ config = VehicleMonitoringParkingLotConfig(
2766
+ category=category or "traffic",
2767
+ usecase=usecase,
2768
+ alert_config=alert_config,
2769
+ **kwargs
2770
+ )
2771
+
2772
+ elif usecase == "vehicle_monitoring_drone_view":
2773
+ # Import here to avoid circular import
2774
+ from ..usecases.vehicle_monitoring_drone_view import VehicleMonitoringDroneViewConfig
2775
+
2776
+ # Handle nested configurations
2777
+ alert_config = kwargs.pop("alert_config", None)
2778
+ if alert_config and isinstance(alert_config, dict):
2779
+ alert_config = AlertConfig(**alert_config)
2780
+
2781
+ config = VehicleMonitoringDroneViewConfig(
2782
+ category=category or "traffic",
2783
+ usecase=usecase,
2784
+ alert_config=alert_config,
2785
+ **kwargs
2786
+ )
2787
+
2788
+ elif usecase == "parking_lot_analytics":
2789
+ # Import here to avoid circular import
2790
+ from ..usecases.parking_lot_analytics import ParkingLotAnalyticsConfig
2791
+
2792
+ # Handle nested configurations
2793
+ alert_config = kwargs.pop("alert_config", None)
2794
+ if alert_config and isinstance(alert_config, dict):
2795
+ alert_config = AlertConfig(**alert_config)
2796
+
2797
+ config = ParkingLotAnalyticsConfig(
2798
+ category=category or "traffic",
2799
+ usecase=usecase,
2800
+ alert_config=alert_config,
2801
+ **kwargs
2802
+ )
2803
+
2687
2804
  #Add IMAGE based usecases here::
2688
2805
  elif usecase == "blood_cancer_detection_img":
2689
2806
  # Import here to avoid circular import
@@ -3234,6 +3351,31 @@ class ConfigManager:
3234
3351
  from ..usecases.natural_disaster import NaturalDisasterConfig
3235
3352
  default_config = NaturalDisasterConfig()
3236
3353
  return default_config.to_dict()
3354
+
3355
+ elif usecase == "footfall":
3356
+ # Import here to avoid circular import
3357
+ from ..usecases.footfall import FootFallConfig
3358
+ default_config = FootFallConfig()
3359
+ return default_config.to_dict()
3360
+
3361
+ elif usecase == "vehicle_monitoring_parking_lot":
3362
+ # Import here to avoid circular import
3363
+ from ..usecases.vehicle_monitoring_parking_lot import VehicleMonitoringParkingLotConfig
3364
+ default_config = VehicleMonitoringParkingLotConfig()
3365
+ return default_config.to_dict()
3366
+
3367
+ elif usecase == "vehicle_monitoring_drone_view":
3368
+ # Import here to avoid circular import
3369
+ from ..usecases.vehicle_monitoring_drone_view import VehicleMonitoringDroneViewConfig
3370
+ default_config = VehicleMonitoringDroneViewConfig()
3371
+ return default_config.to_dict()
3372
+
3373
+ elif usecase == "parking_lot_analytics":
3374
+ # Import here to avoid circular import
3375
+ from ..usecases.parking_lot_analytics import ParkingLotAnalyticsConfig
3376
+ default_config = ParkingLotAnalyticsConfig()
3377
+ return default_config.to_dict()
3378
+
3237
3379
 
3238
3380
  elif usecase == "underground_pipeline_defect":
3239
3381
  # Import here to avoid circular import