matrice-analytics 0.1.89__py3-none-any.whl → 0.1.96__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. matrice_analytics/post_processing/__init__.py +8 -2
  2. matrice_analytics/post_processing/config.py +2 -0
  3. matrice_analytics/post_processing/core/config.py +40 -3
  4. matrice_analytics/post_processing/face_reg/face_recognition.py +146 -14
  5. matrice_analytics/post_processing/face_reg/face_recognition_client.py +116 -4
  6. matrice_analytics/post_processing/face_reg/people_activity_logging.py +19 -0
  7. matrice_analytics/post_processing/post_processor.py +4 -0
  8. matrice_analytics/post_processing/usecases/__init__.py +4 -1
  9. matrice_analytics/post_processing/usecases/advanced_customer_service.py +5 -2
  10. matrice_analytics/post_processing/usecases/color_detection.py +1 -0
  11. matrice_analytics/post_processing/usecases/fire_detection.py +94 -14
  12. matrice_analytics/post_processing/usecases/footfall.py +750 -0
  13. matrice_analytics/post_processing/usecases/license_plate_monitoring.py +91 -1
  14. matrice_analytics/post_processing/usecases/people_counting.py +55 -22
  15. matrice_analytics/post_processing/usecases/vehicle_monitoring.py +1 -0
  16. matrice_analytics/post_processing/usecases/weapon_detection.py +2 -1
  17. matrice_analytics/post_processing/utils/alert_instance_utils.py +94 -26
  18. matrice_analytics/post_processing/utils/business_metrics_manager_utils.py +97 -4
  19. matrice_analytics/post_processing/utils/incident_manager_utils.py +103 -6
  20. {matrice_analytics-0.1.89.dist-info → matrice_analytics-0.1.96.dist-info}/METADATA +1 -1
  21. {matrice_analytics-0.1.89.dist-info → matrice_analytics-0.1.96.dist-info}/RECORD +24 -23
  22. {matrice_analytics-0.1.89.dist-info → matrice_analytics-0.1.96.dist-info}/WHEEL +0 -0
  23. {matrice_analytics-0.1.89.dist-info → matrice_analytics-0.1.96.dist-info}/licenses/LICENSE.txt +0 -0
  24. {matrice_analytics-0.1.89.dist-info → matrice_analytics-0.1.96.dist-info}/top_level.txt +0 -0
@@ -28,6 +28,9 @@ DEFAULT_AGGREGATION_INTERVAL = 300
28
28
  # Supported aggregation types
29
29
  AGGREGATION_TYPES = ["mean", "min", "max", "sum"]
30
30
 
31
+ # Cache for location names to avoid repeated API calls
32
+ _location_name_cache: Dict[str, str] = {}
33
+
31
34
  # Default metrics configuration with aggregation type
32
35
  DEFAULT_METRICS_CONFIG = {
33
36
  "customer_to_staff_ratio": "mean",
@@ -85,6 +88,8 @@ class CameraMetricsState:
85
88
  camera_name: str = ""
86
89
  app_deployment_id: str = ""
87
90
  application_id: str = ""
91
+ location_id: str = ""
92
+ location_name: str = ""
88
93
  metrics: Dict[str, MetricAggregator] = field(default_factory=dict)
89
94
  last_push_time: float = field(default_factory=time.time)
90
95
 
@@ -311,13 +316,14 @@ class BUSINESS_METRICS_MANAGER:
311
316
  stream_info: Stream metadata from usecase
312
317
 
313
318
  Returns:
314
- Dict with camera_id, camera_name, app_deployment_id, application_id
319
+ Dict with camera_id, camera_name, app_deployment_id, application_id, location_id
315
320
  """
316
321
  result = {
317
322
  "camera_id": "",
318
323
  "camera_name": "",
319
324
  "app_deployment_id": "",
320
- "application_id": ""
325
+ "application_id": "",
326
+ "location_id": ""
321
327
  }
322
328
 
323
329
  if not stream_info:
@@ -393,6 +399,16 @@ class BUSINESS_METRICS_MANAGER:
393
399
  ""
394
400
  )
395
401
 
402
+ # location_id - from camera_info.location
403
+ result["location_id"] = (
404
+ camera_info.get("location", "") or
405
+ camera_info.get("location_id", "") or
406
+ camera_info.get("locationId", "") or
407
+ input_camera_info.get("location", "") or
408
+ input_camera_info.get("location_id", "") or
409
+ ""
410
+ )
411
+
396
412
  self.logger.debug(f"[BUSINESS_METRICS_MANAGER] Extracted camera info: {result}")
397
413
 
398
414
  except Exception as e:
@@ -400,6 +416,66 @@ class BUSINESS_METRICS_MANAGER:
400
416
 
401
417
  return result
402
418
 
419
+ def _fetch_location_name(self, location_id: str) -> str:
420
+ """
421
+ Fetch location name from API using location_id.
422
+
423
+ Args:
424
+ location_id: The location ID to look up
425
+
426
+ Returns:
427
+ Location name string, or 'Entry Reception' as default if API fails
428
+ """
429
+ global _location_name_cache
430
+ default_location = "Entry Reception"
431
+
432
+ if not location_id:
433
+ self.logger.debug(f"[BUSINESS_METRICS_MANAGER] No location_id provided, using default: '{default_location}'")
434
+ return default_location
435
+
436
+ # Check cache first
437
+ if location_id in _location_name_cache:
438
+ cached_name = _location_name_cache[location_id]
439
+ self.logger.debug(f"[BUSINESS_METRICS_MANAGER] Using cached location name for '{location_id}': '{cached_name}'")
440
+ return cached_name
441
+
442
+ # Need factory reference with session to make API call
443
+ if not self._factory_ref or not self._factory_ref._session:
444
+ self.logger.warning(f"[BUSINESS_METRICS_MANAGER] No session available for location API, using default: '{default_location}'")
445
+ return default_location
446
+
447
+ try:
448
+ endpoint = f"/v1/inference/get_location/{location_id}"
449
+ self.logger.info(f"[BUSINESS_METRICS_MANAGER] Fetching location name from API: {endpoint}")
450
+
451
+ response = self._factory_ref._session.rpc.get(endpoint)
452
+
453
+ if response and isinstance(response, dict):
454
+ success = response.get("success", False)
455
+ if success:
456
+ data = response.get("data", {})
457
+ location_name = data.get("locationName", default_location)
458
+ self.logger.info(f"[BUSINESS_METRICS_MANAGER] ✓ Fetched location name: '{location_name}' for location_id: '{location_id}'")
459
+
460
+ # Cache the result
461
+ _location_name_cache[location_id] = location_name
462
+ return location_name
463
+ else:
464
+ self.logger.warning(
465
+ f"[BUSINESS_METRICS_MANAGER] API returned success=false for location_id '{location_id}': "
466
+ f"{response.get('message', 'Unknown error')}"
467
+ )
468
+ else:
469
+ self.logger.warning(f"[BUSINESS_METRICS_MANAGER] Invalid response format from API: {response}")
470
+
471
+ except Exception as e:
472
+ self.logger.error(f"[BUSINESS_METRICS_MANAGER] Error fetching location name for '{location_id}': {e}", exc_info=True)
473
+
474
+ # Use default on any failure
475
+ self.logger.info(f"[BUSINESS_METRICS_MANAGER] Using default location name: '{default_location}'")
476
+ _location_name_cache[location_id] = default_location
477
+ return default_location
478
+
403
479
  def process_metrics(
404
480
  self,
405
481
  camera_id: str,
@@ -452,11 +528,16 @@ class BUSINESS_METRICS_MANAGER:
452
528
  final_camera_name = camera_info.get("camera_name") or ""
453
529
  final_app_deployment_id = camera_info.get("app_deployment_id") or factory_app_deployment_id or ""
454
530
  final_application_id = camera_info.get("application_id") or factory_application_id or ""
531
+ final_location_id = camera_info.get("location_id") or ""
532
+
533
+ # Fetch location_name from API using location_id
534
+ final_location_name = self._fetch_location_name(final_location_id)
455
535
 
456
536
  self.logger.info(
457
537
  f"[BUSINESS_METRICS_MANAGER] Final values - camera_id={final_camera_id}, "
458
538
  f"camera_name={final_camera_name}, app_deployment_id={final_app_deployment_id}, "
459
- f"application_id={final_application_id}"
539
+ f"application_id={final_application_id}, location_id={final_location_id}, "
540
+ f"location_name={final_location_name}"
460
541
  )
461
542
 
462
543
  with self._states_lock:
@@ -466,7 +547,9 @@ class BUSINESS_METRICS_MANAGER:
466
547
  camera_id=final_camera_id,
467
548
  camera_name=final_camera_name,
468
549
  app_deployment_id=final_app_deployment_id,
469
- application_id=final_application_id
550
+ application_id=final_application_id,
551
+ location_id=final_location_id,
552
+ location_name=final_location_name
470
553
  )
471
554
  self.logger.info(
472
555
  f"[BUSINESS_METRICS_MANAGER] ✓ Created new state for camera: {final_camera_id}"
@@ -483,6 +566,12 @@ class BUSINESS_METRICS_MANAGER:
483
566
  self.logger.debug(f"[BUSINESS_METRICS_MANAGER] Updated app_deployment_id to: {final_app_deployment_id}")
484
567
  if final_application_id and not state.application_id:
485
568
  state.application_id = final_application_id
569
+ if final_location_id and not state.location_id:
570
+ state.location_id = final_location_id
571
+ self.logger.debug(f"[BUSINESS_METRICS_MANAGER] Updated location_id to: {final_location_id}")
572
+ if final_location_name and not state.location_name:
573
+ state.location_name = final_location_name
574
+ self.logger.debug(f"[BUSINESS_METRICS_MANAGER] Updated location_name to: {final_location_name}")
486
575
 
487
576
  # Add each metric value to aggregator
488
577
  metrics_added = 0
@@ -589,6 +678,7 @@ class BUSINESS_METRICS_MANAGER:
589
678
  "camera_name": state.camera_name,
590
679
  "app_deployment_id": state.app_deployment_id,
591
680
  "application_id": state.application_id,
681
+ "location_name": state.location_name,
592
682
  "business_metrics": aggregated_metrics,
593
683
  "timestamp": datetime.now(timezone.utc).isoformat(),
594
684
  "aggregation_interval_seconds": self.aggregation_interval
@@ -695,6 +785,8 @@ class BUSINESS_METRICS_MANAGER:
695
785
  "camera_name": state.camera_name,
696
786
  "app_deployment_id": state.app_deployment_id,
697
787
  "application_id": state.application_id,
788
+ "location_id": state.location_id,
789
+ "location_name": state.location_name,
698
790
  "metrics_count": {
699
791
  name: len(agg.values)
700
792
  for name, agg in state.metrics.items()
@@ -711,6 +803,7 @@ class BUSINESS_METRICS_MANAGER:
711
803
  cam_id: {
712
804
  "camera_id": state.camera_id,
713
805
  "camera_name": state.camera_name,
806
+ "location_name": state.location_name,
714
807
  "metrics_count": {
715
808
  name: len(agg.values)
716
809
  for name, agg in state.metrics.items()
@@ -38,6 +38,9 @@ DEFAULT_THRESHOLDS = [
38
38
  {"level": "critical", "percentage": 30}
39
39
  ]
40
40
 
41
+ # Cache for location names to avoid repeated API calls
42
+ _location_name_cache: Dict[str, str] = {}
43
+
41
44
 
42
45
  @dataclass
43
46
  class IncidentState:
@@ -453,20 +456,22 @@ class INCIDENT_MANAGER:
453
456
  'camera_group': 'staging-customer-1',
454
457
  'location': '6908756db129880c34f2e09a'
455
458
  },
456
- 'frame_id': '...'
459
+ 'frame_id': '7b94e2f668fb456f95b73c3084e17f8a'
457
460
  }
458
461
 
459
462
  Args:
460
463
  stream_info: Stream metadata from usecase
461
464
 
462
465
  Returns:
463
- Dict with camera_id, camera_name, app_deployment_id, application_id
466
+ Dict with camera_id, camera_name, app_deployment_id, application_id, frame_id, location_id
464
467
  """
465
468
  result = {
466
469
  "camera_id": "",
467
470
  "camera_name": "",
468
471
  "app_deployment_id": "",
469
- "application_id": ""
472
+ "application_id": "",
473
+ "frame_id": "",
474
+ "location_id": ""
470
475
  }
471
476
 
472
477
  if not stream_info:
@@ -563,10 +568,30 @@ class INCIDENT_MANAGER:
563
568
  ""
564
569
  )
565
570
 
571
+ # frame_id - at top level of stream_info
572
+ result["frame_id"] = (
573
+ stream_info.get("frame_id", "") or
574
+ stream_info.get("frameId", "") or
575
+ input_settings.get("frame_id", "") or
576
+ input_settings.get("frameId", "") or
577
+ ""
578
+ )
579
+
580
+ # location_id - from camera_info.location
581
+ result["location_id"] = (
582
+ camera_info.get("location", "") or
583
+ camera_info.get("location_id", "") or
584
+ camera_info.get("locationId", "") or
585
+ input_camera_info.get("location", "") or
586
+ input_camera_info.get("location_id", "") or
587
+ ""
588
+ )
589
+
566
590
  self.logger.debug(
567
591
  f"[INCIDENT_MANAGER] Extracted from stream_info - "
568
592
  f"camera_id={result['camera_id']}, camera_name={result['camera_name']}, "
569
- f"app_deployment_id={result['app_deployment_id']}, application_id={result['application_id']}"
593
+ f"app_deployment_id={result['app_deployment_id']}, application_id={result['application_id']}, "
594
+ f"frame_id={result['frame_id']}, location_id={result['location_id']}"
570
595
  )
571
596
 
572
597
  except Exception as e:
@@ -592,6 +617,66 @@ class INCIDENT_MANAGER:
592
617
  return "high"
593
618
  return level
594
619
 
620
+ def _fetch_location_name(self, location_id: str) -> str:
621
+ """
622
+ Fetch location name from API using location_id.
623
+
624
+ Args:
625
+ location_id: The location ID to look up
626
+
627
+ Returns:
628
+ Location name string, or 'Entry Reception' as default if API fails
629
+ """
630
+ global _location_name_cache
631
+ default_location = "Entry Reception"
632
+
633
+ if not location_id:
634
+ self.logger.debug(f"[INCIDENT_MANAGER] No location_id provided, using default: '{default_location}'")
635
+ return default_location
636
+
637
+ # Check cache first
638
+ if location_id in _location_name_cache:
639
+ cached_name = _location_name_cache[location_id]
640
+ self.logger.debug(f"[INCIDENT_MANAGER] Using cached location name for '{location_id}': '{cached_name}'")
641
+ return cached_name
642
+
643
+ # Need factory reference with session to make API call
644
+ if not self._factory_ref or not self._factory_ref._session:
645
+ self.logger.warning(f"[INCIDENT_MANAGER] No session available for location API, using default: '{default_location}'")
646
+ return default_location
647
+
648
+ try:
649
+ endpoint = f"/v1/inference/get_location/{location_id}"
650
+ self.logger.info(f"[INCIDENT_MANAGER] Fetching location name from API: {endpoint}")
651
+
652
+ response = self._factory_ref._session.rpc.get(endpoint)
653
+
654
+ if response and isinstance(response, dict):
655
+ success = response.get("success", False)
656
+ if success:
657
+ data = response.get("data", {})
658
+ location_name = data.get("locationName", default_location)
659
+ self.logger.info(f"[INCIDENT_MANAGER] ✓ Fetched location name: '{location_name}' for location_id: '{location_id}'")
660
+
661
+ # Cache the result
662
+ _location_name_cache[location_id] = location_name
663
+ return location_name
664
+ else:
665
+ self.logger.warning(
666
+ f"[INCIDENT_MANAGER] API returned success=false for location_id '{location_id}': "
667
+ f"{response.get('message', 'Unknown error')}"
668
+ )
669
+ else:
670
+ self.logger.warning(f"[INCIDENT_MANAGER] Invalid response format from API: {response}")
671
+
672
+ except Exception as e:
673
+ self.logger.error(f"[INCIDENT_MANAGER] Error fetching location name for '{location_id}': {e}", exc_info=True)
674
+
675
+ # Use default on any failure
676
+ self.logger.info(f"[INCIDENT_MANAGER] Using default location name: '{default_location}'")
677
+ _location_name_cache[location_id] = default_location
678
+ return default_location
679
+
595
680
  def _generate_incident_id(self, camera_id: str, cycle_id: int) -> str:
596
681
  """Generate a unique incident_id for a camera's cycle."""
597
682
  return f"incident_{camera_id}_{cycle_id}"
@@ -1005,6 +1090,8 @@ class INCIDENT_MANAGER:
1005
1090
  "app_deployment_id": "...",
1006
1091
  "application_id": "...",
1007
1092
  "camera_name": "...",
1093
+ "frame_id": "...",
1094
+ "location_name": "...",
1008
1095
  "incidents": [{
1009
1096
  "incident_id": "...",
1010
1097
  "incident_type": "...",
@@ -1061,10 +1148,18 @@ class INCIDENT_MANAGER:
1061
1148
  ""
1062
1149
  )
1063
1150
 
1151
+ # Extract frame_id from stream_info
1152
+ final_frame_id = stream_camera_info.get("frame_id", "")
1153
+
1154
+ # Fetch location_name from API using location_id
1155
+ location_id = stream_camera_info.get("location_id", "")
1156
+ final_location_name = self._fetch_location_name(location_id)
1157
+
1064
1158
  self.logger.info(
1065
1159
  f"[INCIDENT_MANAGER] Building message with - "
1066
1160
  f"camera_id={final_camera_id}, camera_name={final_camera_name}, "
1067
- f"app_deployment_id={final_app_deployment_id}, application_id={final_application_id}"
1161
+ f"app_deployment_id={final_app_deployment_id}, application_id={final_application_id}, "
1162
+ f"frame_id={final_frame_id}, location_name={final_location_name}"
1068
1163
  )
1069
1164
 
1070
1165
  # Build incident - ONLY include required fields
@@ -1081,12 +1176,14 @@ class INCIDENT_MANAGER:
1081
1176
  "human_text": incident_data.get("human_text", "")
1082
1177
  }
1083
1178
 
1084
- # Build final message in STRICT format
1179
+ # Build final message with all required fields
1085
1180
  message = {
1086
1181
  "camera_id": final_camera_id,
1087
1182
  "app_deployment_id": final_app_deployment_id,
1088
1183
  "application_id": final_application_id,
1089
1184
  "camera_name": final_camera_name,
1185
+ "frame_id": final_frame_id,
1186
+ "location_name": final_location_name,
1090
1187
  "incidents": [incident]
1091
1188
  }
1092
1189
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: matrice_analytics
3
- Version: 0.1.89
3
+ Version: 0.1.96
4
4
  Summary: Common server utilities for Matrice.ai services
5
5
  Author-email: "Matrice.ai" <dipendra@matrice.ai>
6
6
  License-Expression: MIT
@@ -11,9 +11,9 @@ matrice_analytics/boundary_drawing_internal/usage/README.md,sha256=9AgWPhYOqUeY2
11
11
  matrice_analytics/boundary_drawing_internal/usage/boundary_drawer_launcher.py,sha256=W3JSeo3A4n04iS6ToID6V0McWwI_dvAIdfhb-xD385w,3638
12
12
  matrice_analytics/boundary_drawing_internal/usage/simple_boundary_launcher.py,sha256=jHPriRLorLuiC8km0MFNS96w121tKxd7t5GQl7I5kKE,3494
13
13
  matrice_analytics/post_processing/README.md,sha256=bDszazvqV5xbGhMM6hDaMctIyk5gox9bADo2IZZ9Goo,13368
14
- matrice_analytics/post_processing/__init__.py,sha256=dxGBUQaRCGndQmXpYAWqUhDeUZAcxU-_6HFnm3GRDRA,29417
15
- matrice_analytics/post_processing/config.py,sha256=xs_JZC7SBCOhLdHaDEQiweQU8ttAPtEQjQ3aE3Vfmgc,6772
16
- matrice_analytics/post_processing/post_processor.py,sha256=F838_vc7p9tjcp-vTMgTbpHqQcLX94xhL9HM06Wvpo8,44384
14
+ matrice_analytics/post_processing/__init__.py,sha256=3t0fgaFMq7N3IojZTaNB0SFFJGLpOeXp-_3pnhheZ7k,29689
15
+ matrice_analytics/post_processing/config.py,sha256=pQ8OVnGsJc7v0R2JlDYULM4e9zR4xDnS1aI9b3DcvLM,6826
16
+ matrice_analytics/post_processing/post_processor.py,sha256=RMl3hWmoMTPzO5LWmShfv2gmNq1-j5eAUUDGvxlCB_4,44501
17
17
  matrice_analytics/post_processing/advanced_tracker/README.md,sha256=RM8dynVoUWKn_hTbw9c6jHAbnQj-8hEAXnmuRZr2w1M,22485
18
18
  matrice_analytics/post_processing/advanced_tracker/__init__.py,sha256=tAPFzI_Yep5TLX60FDwKqBqppc-EbxSr0wNsQ9DGI1o,423
19
19
  matrice_analytics/post_processing/advanced_tracker/base.py,sha256=VqWy4dd5th5LK-JfueTt2_GSEoOi5QQfQxjTNhmQoLc,3580
@@ -24,14 +24,14 @@ matrice_analytics/post_processing/advanced_tracker/strack.py,sha256=OSai-SSpC9_u
24
24
  matrice_analytics/post_processing/advanced_tracker/tracker.py,sha256=yN_tUzDZ-8M4NSoZrKf0OW0JA0JxOvz2oYKgbm-os88,15687
25
25
  matrice_analytics/post_processing/core/__init__.py,sha256=QlgoJwjTU-3UYTEmFRN6wFWpOr7zNSnrohoqLBF5bNY,1434
26
26
  matrice_analytics/post_processing/core/base.py,sha256=7cz1tYhMNphfe46bF5sgc5_z7ULof413axZWHKcdIIQ,29099
27
- matrice_analytics/post_processing/core/config.py,sha256=uyxWndO-DE9PeGD_h5K3TeB0AUgGa5JOpgXNAMEKj6s,131528
27
+ matrice_analytics/post_processing/core/config.py,sha256=rcdTn7JPMOnY1EFoMhX-DZ9Eq0OnTU_XTz3N-IF1o5k,133020
28
28
  matrice_analytics/post_processing/core/config_utils.py,sha256=QuAS-_JKSoNOtfUWgr7Alf_wsqODzN2rHlQu-cHRK0s,34311
29
29
  matrice_analytics/post_processing/face_reg/__init__.py,sha256=yntaiGlW9vdjBpPZQXNuovALihJPzRlFyUE88l3MhBA,1364
30
30
  matrice_analytics/post_processing/face_reg/compare_similarity.py,sha256=NlFc8b2a74k0PqSFAbuM_fUbA1BT3pr3VUgvSqRpJzQ,23396
31
31
  matrice_analytics/post_processing/face_reg/embedding_manager.py,sha256=3Rba94EcYWFK0D4el9JZ7fwqQ9kOyadrwK30lFmTP-k,44964
32
- matrice_analytics/post_processing/face_reg/face_recognition.py,sha256=6BOlOLnuuBpPH7SPU_PT8RfCPIrNdZL1k4BJkpjzQo0,135955
33
- matrice_analytics/post_processing/face_reg/face_recognition_client.py,sha256=IOoK6w8P5oTl-z5cbIJgMbgqZU1CkL3RvMheADCv7B4,31516
34
- matrice_analytics/post_processing/face_reg/people_activity_logging.py,sha256=vZbIvkK1h3h58ROeF0_ygF3lqr19O2h5222bN8XyIis,13675
32
+ matrice_analytics/post_processing/face_reg/face_recognition.py,sha256=jtIdOLQEwDkdZ5lG8s4_8ZomQc4JinZoFddbTaTgrXI,142663
33
+ matrice_analytics/post_processing/face_reg/face_recognition_client.py,sha256=ZGQyMnV7t4w3YBx9ywh-MQF10XtRHN4DAqs-h1N-Wp0,37268
34
+ matrice_analytics/post_processing/face_reg/people_activity_logging.py,sha256=qOggxp8UoLnbKqy-kASAfwQ9FGczIQxgNbpfgV5A35U,14619
35
35
  matrice_analytics/post_processing/ocr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
36
  matrice_analytics/post_processing/ocr/easyocr_extractor.py,sha256=RMrRoGb2gMcJEGouQn8U9cCgCLXPT7qRa8liI4LNxFM,11555
37
37
  matrice_analytics/post_processing/ocr/postprocessing.py,sha256=RILArp8I9WRH7bALVZ9wPGc-aR7YMdqV1ndOOIcOnGQ,12309
@@ -84,9 +84,9 @@ matrice_analytics/post_processing/test_cases/test_usecases.py,sha256=e09c9JaOhti
84
84
  matrice_analytics/post_processing/test_cases/test_utilities.py,sha256=zUtBqwELjovkhQfhn1vM-y7aH04z9sFvt6LIpXXBFSE,13415
85
85
  matrice_analytics/post_processing/test_cases/test_utils.py,sha256=lgDX0vILylA6m8sG3_3kxAJ7TiDo8xkprJNfBrLoID4,29371
86
86
  matrice_analytics/post_processing/usecases/Histopathological_Cancer_Detection_img.py,sha256=bHDXxxG3QgWMFZbDuBaJWpkIvxTXsFMTqCPBCFm3SDs,30247
87
- matrice_analytics/post_processing/usecases/__init__.py,sha256=tsu51e2q2gbr5UcALel9IyB21Dr9RKaYX8t5GSduymI,11304
87
+ matrice_analytics/post_processing/usecases/__init__.py,sha256=9LccMtHsylG6ftJsxzKdcheVlgSDefHKvffdVI40cM8,11403
88
88
  matrice_analytics/post_processing/usecases/abandoned_object_detection.py,sha256=zVrqlvgsjc5F2JHd-Zav6d-poVIpTJBpPKZ3CC71lQk,40332
89
- matrice_analytics/post_processing/usecases/advanced_customer_service.py,sha256=LKmi1MlG5k65jGZrl3ah7VavtB32z8IkPzFGLFgpaoI,97731
89
+ matrice_analytics/post_processing/usecases/advanced_customer_service.py,sha256=HKTeZemkcKkJ6JnFO_QLPhtY1VH7vI1krnf4DlKLOow,97924
90
90
  matrice_analytics/post_processing/usecases/age_detection.py,sha256=yn1LXOgbnOWSMDnsCds6-uN6W-I1Hy4_-AMrjbT5PtY,41318
91
91
  matrice_analytics/post_processing/usecases/age_gender_detection.py,sha256=ok8uCG8pHKqouTSOQyUANou29k6OOohxnhFsTwayOL0,52533
92
92
  matrice_analytics/post_processing/usecases/anti_spoofing_detection.py,sha256=XdtDdXGzZMLQdWcoOoiE5t4LPYHhgOtJ7tZCNlq1A2E,31329
@@ -101,7 +101,7 @@ matrice_analytics/post_processing/usecases/cardiomegaly_classification.py,sha256
101
101
  matrice_analytics/post_processing/usecases/cell_microscopy_segmentation.py,sha256=eQ_s5u3Vnvja6-FmI6ZPxlNkaZtG-pVjTu8NuLjZJ5M,43714
102
102
  matrice_analytics/post_processing/usecases/chicken_pose_detection.py,sha256=-e8di7Am-E-FCQFrSY8qJTO1aWtdRAVJoE-VKBgcyyI,29291
103
103
  matrice_analytics/post_processing/usecases/child_monitoring.py,sha256=z3oymoqq4hDGwA8MkdEONZW_Vx5CAZmvzZaNLsqmCfw,39380
104
- matrice_analytics/post_processing/usecases/color_detection.py,sha256=-oNxx-JdHfOB2tg2YuIB6MZc82y7TbLfiEx9jJdxCNA,92395
104
+ matrice_analytics/post_processing/usecases/color_detection.py,sha256=021oqLPV0o6vuyD88kRtjKukrN2GCJQx4xlB4FsY0uc,92463
105
105
  matrice_analytics/post_processing/usecases/color_map_utils.py,sha256=SP-AEVcjLmL8rxblu-ixqUJC2fqlcr7ab4hWo4Fcr_k,2677
106
106
  matrice_analytics/post_processing/usecases/concrete_crack_detection.py,sha256=pxhOH_hG4hq9yytNepbGMdk2W_lTG8D1_2RAagaPBkg,40252
107
107
  matrice_analytics/post_processing/usecases/crop_weed_detection.py,sha256=Ao1k5fJDYU_f6yZ8VO-jW8-esECV0-zY5Q570c_fako,35674
@@ -116,9 +116,10 @@ matrice_analytics/post_processing/usecases/face_emotion.py,sha256=eRfqBdryB0uNoO
116
116
  matrice_analytics/post_processing/usecases/face_recognition.py,sha256=T5xAuv6b9OrkmTmoXgZs4LZ5XUsbvp9xCpeLBwdu7eI,40231
117
117
  matrice_analytics/post_processing/usecases/fashion_detection.py,sha256=f9gpzMDhIW-gyn46k9jgf8nY7YeoqAnTxGOzksabFbE,40457
118
118
  matrice_analytics/post_processing/usecases/field_mapping.py,sha256=JDwYX8pd2W-waDvBh98Y_o_uchJu7wEYbFxOliA4Iq4,39822
119
- matrice_analytics/post_processing/usecases/fire_detection.py,sha256=QH8oeRkU9mqw5UXpSImazon8SsBiKyqvieS7akUF0rU,61674
119
+ matrice_analytics/post_processing/usecases/fire_detection.py,sha256=r9nkviYNVNqEQsdmlM8m_V4DoeZBWKU4s1mDOo_Swmw,65801
120
120
  matrice_analytics/post_processing/usecases/flare_analysis.py,sha256=3nf4fUeUwlP_UII0h5fQkUGPXbr32ZnJjaM-dukNSP8,42680
121
121
  matrice_analytics/post_processing/usecases/flower_segmentation.py,sha256=4I7qMx9Ztxg_hy9KTVX-3qBhAN-QwDt_Yigf9fFjLus,52017
122
+ matrice_analytics/post_processing/usecases/footfall.py,sha256=eVH0LT9p86Zzt9W7oREPLmFzZH8uLx4UxZ8-GXSel44,36633
122
123
  matrice_analytics/post_processing/usecases/gas_leak_detection.py,sha256=KL2ft7fXvjTas-65-QgcJm3W8KBsrwF44qibSXjfaLc,40557
123
124
  matrice_analytics/post_processing/usecases/gender_detection.py,sha256=DEnCTRew6B7DtPcBQVCTtpd_IQMvMusBcu6nadUg2oM,40107
124
125
  matrice_analytics/post_processing/usecases/human_activity_recognition.py,sha256=SLyvbw1y_nEQ0AlT-ErpeSydjA8U5yfRPrjMx1t3Yz0,42226
@@ -127,7 +128,7 @@ matrice_analytics/post_processing/usecases/leaf.py,sha256=cwgB1ZNxkQFtkk-thSJrkX
127
128
  matrice_analytics/post_processing/usecases/leaf_disease.py,sha256=bkiLccTdf4KUq3he4eCpBlKXb5exr-WBhQ_oWQ7os68,36225
128
129
  matrice_analytics/post_processing/usecases/leak_detection.py,sha256=oOCLLVMuXVeXPHyN8FUrD3U9JYJJwIz-5fcEMgvLdls,40531
129
130
  matrice_analytics/post_processing/usecases/license_plate_detection.py,sha256=dsavd92-wnyXCNrCzaRj24zH7BVvLSa09HkYsrOXYDM,50806
130
- matrice_analytics/post_processing/usecases/license_plate_monitoring.py,sha256=dWx1NNEJNXvnM45IjmoHaCMbLu64VzNQPMExTBxDKrU,117317
131
+ matrice_analytics/post_processing/usecases/license_plate_monitoring.py,sha256=o_ga5aLd3s7EWBxBvP7aieS2yT9Y_3zecngQKBclV-g,121656
131
132
  matrice_analytics/post_processing/usecases/litter_monitoring.py,sha256=XaHAUGRBDJg_iVbu8hRMjTR-5TqrLj6ZNCRkInbzZTY,33255
132
133
  matrice_analytics/post_processing/usecases/mask_detection.py,sha256=L_s6ZiT5zeXG-BsFcskb3HEG98DhLgqeMSDmCuwOteU,41501
133
134
  matrice_analytics/post_processing/usecases/natural_disaster.py,sha256=ehxdPBoYcZWGVDOVn_mHFoz4lIE8LrveAkuXQj0n9XE,44253
@@ -135,7 +136,7 @@ matrice_analytics/post_processing/usecases/parking.py,sha256=lqTGqcjUZZPFw3tu11H
135
136
  matrice_analytics/post_processing/usecases/parking_space_detection.py,sha256=xwhkJjGGKcT827URbasi3olYqhd95Sh0zsEIphwzcgY,39561
136
137
  matrice_analytics/post_processing/usecases/pcb_defect_detection.py,sha256=xH3q-WoR3TwMUeUvWw1W7vPLdCUfu_Kl_gQ9dZFf1SE,43006
137
138
  matrice_analytics/post_processing/usecases/pedestrian_detection.py,sha256=hPFtvpWXXEsbDavmuiXIhrosMNlOhGya--jukT-ZOHA,39288
138
- matrice_analytics/post_processing/usecases/people_counting.py,sha256=yUUqSPlChPt9qiEzPX0xEagWmRil8dkT3P8vHox-6X0,35288
139
+ matrice_analytics/post_processing/usecases/people_counting.py,sha256=vEtFCiMRzXZMq3nZv7UF3n7Tet7_RfDJNjbwX80nta0,37168
139
140
  matrice_analytics/post_processing/usecases/people_counting_bckp.py,sha256=WM9te7oYyhu5f_bIMye_D5BpEn6CwA-6Kz95IMLmSbs,82209
140
141
  matrice_analytics/post_processing/usecases/people_tracking.py,sha256=iXzGJgqKgWxvIVLqa1cFKkiF0DrHolwghSiJ2P8mDhc,90484
141
142
  matrice_analytics/post_processing/usecases/pipeline_detection.py,sha256=VsLTXMAqx0tRw7Olrxqx7SBLolZR7p2aFOrdSXLS-kE,30796
@@ -159,10 +160,10 @@ matrice_analytics/post_processing/usecases/theft_detection.py,sha256=Rs_zKn2z9YM
159
160
  matrice_analytics/post_processing/usecases/traffic_sign_monitoring.py,sha256=nDlEzHgMlUjy_VtJ7usnEzMcdSs-jouqaoJpJ8DYUMw,34351
160
161
  matrice_analytics/post_processing/usecases/underground_pipeline_defect_detection.py,sha256=W_2joZStsP0jl2zn89-jtdtqqGv3vJ0amsalbE5WKwo,37647
161
162
  matrice_analytics/post_processing/usecases/underwater_pollution_detection.py,sha256=jqP1ZKfDZe2-56Lyvgb2DxnbqRfvxm6pPL0Ck3esfBk,40356
162
- matrice_analytics/post_processing/usecases/vehicle_monitoring.py,sha256=D6naqnLRMIlsINKoxLYFuEsoqtGtQK6UlGO48vLNvMI,52913
163
+ matrice_analytics/post_processing/usecases/vehicle_monitoring.py,sha256=as-6h2mgL4T1l-lUHvq0Y-tZmps90EGzrIWQBL9ywF8,52981
163
164
  matrice_analytics/post_processing/usecases/warehouse_object_segmentation.py,sha256=5uZXTJL_A3tUEN08T-_ZQpUoJ9gqbuuMc4z2mT4sMnQ,43753
164
165
  matrice_analytics/post_processing/usecases/waterbody_segmentation.py,sha256=JsCxDEMB8s4WDcezfJDr2zrjM-TCjB9hxOztzSvWmpY,45268
165
- matrice_analytics/post_processing/usecases/weapon_detection.py,sha256=12fwL3IT26fxdq5aZWbZcrei6JGmhMWxal4q8brUv8E,40614
166
+ matrice_analytics/post_processing/usecases/weapon_detection.py,sha256=QZFNm3I216l_ZzE59U4LCSktVsZfkFs6FWj6t4d9SNY,40675
166
167
  matrice_analytics/post_processing/usecases/weld_defect_detection.py,sha256=b0dAJGKUofbGrwHDJfIYb4pqmvp4Y23JK09Qb-34mxg,30209
167
168
  matrice_analytics/post_processing/usecases/wildlife_monitoring.py,sha256=TMVHJ5GLezmqG7DywmqbLggqNXgpsb63MD7IR6kvDkk,43446
168
169
  matrice_analytics/post_processing/usecases/windmill_maintenance.py,sha256=G1eqo3Z-HYmGJ6oeZYrpZwhpvqQ9Lc_T-6S7BLBXHeA,40498
@@ -180,20 +181,20 @@ matrice_analytics/post_processing/utils/__init__.py,sha256=E4_V_Rq3aMRtdUyJuvXoi
180
181
  matrice_analytics/post_processing/utils/advanced_counting_utils.py,sha256=D6jlZNRCfPtfG8COv3AMCbCfZf4_DK9rFhwzVJEYjpg,19152
181
182
  matrice_analytics/post_processing/utils/advanced_helper_utils.py,sha256=W8mDqJTpg98YJgWYBod0rZUNbR4bmvYMeWAGASs14_s,11624
182
183
  matrice_analytics/post_processing/utils/advanced_tracking_utils.py,sha256=tKEGjq-1bJ_AeXEWl_clr-7vAry0NLU_P_Q0cbSqLFI,16942
183
- matrice_analytics/post_processing/utils/alert_instance_utils.py,sha256=Nn9MwmTq4VMyhR05Tcb5DTzEMizK3UfgQN1oeJOXsN4,45858
184
+ matrice_analytics/post_processing/utils/alert_instance_utils.py,sha256=6i4ZTay3JeEXiGiEiRQYfOvFWUg68rKYAevzubqPr1U,49737
184
185
  matrice_analytics/post_processing/utils/alerting_utils.py,sha256=zDX66UiMBMC7FwQNCq-t6eUcP3Zj2JvCQX0K774zhaQ,8430
185
- matrice_analytics/post_processing/utils/business_metrics_manager_utils.py,sha256=Vpm7FSLgcQonciJmUhf1Ka13xZfGj272r2axAc1S1gE,55227
186
+ matrice_analytics/post_processing/utils/business_metrics_manager_utils.py,sha256=9UNdzX9AmLUra1OMgIL2wtYy-GOMh1t2m-AigVcf0cA,59892
186
187
  matrice_analytics/post_processing/utils/category_mapping_utils.py,sha256=B31n8PIyGqT7QMFgYSfZPlkgSQQTpvHAHQ5B0glW48I,3459
187
188
  matrice_analytics/post_processing/utils/color_utils.py,sha256=apolmz75CgcwChTXf3c_QdTCy5eZWtguxYRSpG76exM,21129
188
189
  matrice_analytics/post_processing/utils/counting_utils.py,sha256=a2Y9Qr9pCuzJM2ehmDzI0yQTmN-UYvuBMVtBSjXqRa8,6859
189
190
  matrice_analytics/post_processing/utils/filter_utils.py,sha256=2XR7vtzaCtWnPHzIKnVlsGJBXvAmg3Y75DFwM8b0J30,8775
190
191
  matrice_analytics/post_processing/utils/format_utils.py,sha256=UTF7A5h9j0_S12xH9wG24PWyvBS89d348W9n7DA524Q,11502
191
192
  matrice_analytics/post_processing/utils/geometry_utils.py,sha256=BWfdM6RsdJTTLR1GqkWfdwpjMEjTCJyuBxA4zVGKdfk,9623
192
- matrice_analytics/post_processing/utils/incident_manager_utils.py,sha256=jjb-LJ8hQgwZ00nJfIY2-vM23rVQljAhT97ntTKrkXM,75190
193
+ matrice_analytics/post_processing/utils/incident_manager_utils.py,sha256=Yf-IWP6W7r5VrJspUupVMnj6b4Uy2ViAGyzmlzPn3Mo,79651
193
194
  matrice_analytics/post_processing/utils/smoothing_utils.py,sha256=78U-yucAcjUiZ0NIAc9NOUSIT0PWP1cqyIPA_Fdrjp0,14699
194
195
  matrice_analytics/post_processing/utils/tracking_utils.py,sha256=rWxuotnJ3VLMHIBOud2KLcu4yZfDp7hVPWUtNAq_2xw,8288
195
- matrice_analytics-0.1.89.dist-info/licenses/LICENSE.txt,sha256=_uQUZpgO0mRYL5-fPoEvLSbNnLPv6OmbeEDCHXhK6Qc,1066
196
- matrice_analytics-0.1.89.dist-info/METADATA,sha256=HOKAr30i31zp0Sooy4jhPNzMu_bAKRmr2zZ8tQrUs4M,14378
197
- matrice_analytics-0.1.89.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
198
- matrice_analytics-0.1.89.dist-info/top_level.txt,sha256=STAPEU-e-rWTerXaspdi76T_eVRSrEfFpURSP7_Dt8E,18
199
- matrice_analytics-0.1.89.dist-info/RECORD,,
196
+ matrice_analytics-0.1.96.dist-info/licenses/LICENSE.txt,sha256=_uQUZpgO0mRYL5-fPoEvLSbNnLPv6OmbeEDCHXhK6Qc,1066
197
+ matrice_analytics-0.1.96.dist-info/METADATA,sha256=oL5yLm0vtJsAo7LwR7KSUxcZgyLoDVkneXCqBOXLWaM,14378
198
+ matrice_analytics-0.1.96.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
199
+ matrice_analytics-0.1.96.dist-info/top_level.txt,sha256=STAPEU-e-rWTerXaspdi76T_eVRSrEfFpURSP7_Dt8E,18
200
+ matrice_analytics-0.1.96.dist-info/RECORD,,