matrice-analytics 0.1.51__tar.gz → 0.1.52__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.
Potentially problematic release.
This version of matrice-analytics might be problematic. Click here for more details.
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/PKG-INFO +1 -1
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/matrice_analytics.egg-info/PKG-INFO +1 -1
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/face_reg/embedding_manager.py +6 -2
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/face_reg/face_recognition.py +112 -26
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/LICENSE.txt +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/README.md +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/matrice_analytics.egg-info/SOURCES.txt +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/matrice_analytics.egg-info/dependency_links.txt +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/matrice_analytics.egg-info/not-zip-safe +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/matrice_analytics.egg-info/top_level.txt +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/pyproject.toml +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/setup.cfg +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/setup.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/__init__.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/boundary_drawing_internal/README.md +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/boundary_drawing_internal/__init__.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/boundary_drawing_internal/boundary_drawing_internal.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/boundary_drawing_internal/boundary_drawing_tool.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/boundary_drawing_internal/boundary_tool_template.html +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/boundary_drawing_internal/example_usage.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/boundary_drawing_internal/usage/README.md +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/boundary_drawing_internal/usage/boundary_drawer_launcher.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/boundary_drawing_internal/usage/simple_boundary_launcher.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/README.md +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/__init__.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/advanced_tracker/README.md +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/advanced_tracker/__init__.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/advanced_tracker/base.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/advanced_tracker/config.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/advanced_tracker/kalman_filter.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/advanced_tracker/matching.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/advanced_tracker/strack.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/advanced_tracker/tracker.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/config.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/core/__init__.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/core/base.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/core/config.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/core/config_utils.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/face_reg/__init__.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/face_reg/compare_similarity.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/face_reg/face_recognition_client.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/face_reg/people_activity_logging.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/__init__.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/easyocr_extractor.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/__init__.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/cli/__init__.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/cli/cli.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/cli/dataset_stats.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/cli/export.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/cli/train.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/cli/utils.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/cli/valid.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/cli/validate_dataset.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/cli/visualize_augmentation.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/cli/visualize_predictions.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/core/__init__.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/core/process.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/core/types.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/core/utils.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/inference/__init__.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/inference/config.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/inference/hub.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/inference/plate_recognizer.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/py.typed +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/__init__.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/data/__init__.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/data/augmentation.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/data/dataset.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/model/__init__.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/model/config.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/model/layers.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/model/loss.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/model/metric.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/model/model_builders.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/model/model_schema.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/utilities/__init__.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/utilities/backend_utils.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/fast_plate_ocr_py38/train/utilities/utils.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/postprocessing.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/ocr/preprocessing.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/post_processor.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/test_cases/__init__.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/test_cases/run_tests.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/test_cases/test_advanced_customer_service.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/test_cases/test_basic_counting_tracking.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/test_cases/test_comprehensive.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/test_cases/test_config.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/test_cases/test_customer_service.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/test_cases/test_data_generators.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/test_cases/test_people_counting.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/test_cases/test_processor.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/test_cases/test_usecases.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/test_cases/test_utilities.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/test_cases/test_utils.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/Histopathological_Cancer_Detection_img.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/__init__.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/abandoned_object_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/advanced_customer_service.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/age_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/age_gender_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/anti_spoofing_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/assembly_line_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/banana_defect_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/basic_counting_tracking.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/blood_cancer_detection_img.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/car_damage_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/car_part_segmentation.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/car_service.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/cardiomegaly_classification.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/cell_microscopy_segmentation.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/chicken_pose_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/child_monitoring.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/color/clip.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/color/clip_processor/merges.txt +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/color/clip_processor/preprocessor_config.json +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/color/clip_processor/special_tokens_map.json +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/color/clip_processor/tokenizer.json +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/color/clip_processor/tokenizer_config.json +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/color/clip_processor/vocab.json +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/color/color_map_utils.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/color/color_mapper.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/color_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/color_map_utils.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/concrete_crack_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/crop_weed_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/customer_service.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/defect_detection_products.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/distracted_driver_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/drone_traffic_monitoring.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/drowsy_driver_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/dwell_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/emergency_vehicle_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/face_emotion.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/face_recognition.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/fashion_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/field_mapping.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/fire_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/flare_analysis.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/flower_segmentation.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/gas_leak_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/gender_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/human_activity_recognition.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/intrusion_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/leaf.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/leaf_disease.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/leak_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/license_plate_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/license_plate_monitoring.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/litter_monitoring.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/mask_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/natural_disaster.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/parking.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/parking_space_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/pcb_defect_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/pedestrian_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/people_counting.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/people_counting_bckp.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/people_tracking.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/pipeline_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/plaque_segmentation_img.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/pothole_segmentation.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/ppe_compliance.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/price_tag_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/proximity_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/road_lane_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/road_traffic_density.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/road_view_segmentation.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/shelf_inventory_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/shoplifting_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/shopping_cart_analysis.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/skin_cancer_classification_img.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/smoker_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/solar_panel.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/suspicious_activity_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/template_usecase.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/theft_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/traffic_sign_monitoring.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/underground_pipeline_defect_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/underwater_pollution_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/vehicle_monitoring.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/warehouse_object_segmentation.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/waterbody_segmentation.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/weapon_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/weld_defect_detection.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/wildlife_monitoring.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/windmill_maintenance.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/usecases/wound_segmentation.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/utils/__init__.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/utils/advanced_counting_utils.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/utils/advanced_helper_utils.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/utils/advanced_tracking_utils.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/utils/alerting_utils.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/utils/category_mapping_utils.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/utils/color_utils.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/utils/counting_utils.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/utils/filter_utils.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/utils/format_utils.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/utils/geometry_utils.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/utils/smoothing_utils.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/post_processing/utils/tracking_utils.py +0 -0
- {matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/src/matrice_analytics/py.typed +0 -0
|
@@ -49,7 +49,10 @@ class EmbeddingConfig:
|
|
|
49
49
|
|
|
50
50
|
# Background embedding refresh settings
|
|
51
51
|
enable_background_refresh: bool = True
|
|
52
|
-
|
|
52
|
+
# Refresh embeddings every 12 hours by default
|
|
53
|
+
background_refresh_interval: int = 43200
|
|
54
|
+
# TTL for cached staff embeddings (controls on-demand refresh checks)
|
|
55
|
+
staff_embeddings_cache_ttl: int = 43200
|
|
53
56
|
|
|
54
57
|
|
|
55
58
|
class EmbeddingManager:
|
|
@@ -67,7 +70,8 @@ class EmbeddingManager:
|
|
|
67
70
|
# Staff embeddings cache for local similarity search
|
|
68
71
|
self.staff_embeddings: List[StaffEmbedding] = []
|
|
69
72
|
self.staff_embeddings_last_update = 0
|
|
70
|
-
|
|
73
|
+
# Use configured TTL (default: 12 hours)
|
|
74
|
+
self.staff_embeddings_cache_ttl = int(self.config.staff_embeddings_cache_ttl)
|
|
71
75
|
|
|
72
76
|
# Numpy arrays for fast similarity computation
|
|
73
77
|
self.embeddings_matrix = None
|
|
@@ -1,18 +1,27 @@
|
|
|
1
1
|
"""
|
|
2
|
-
Face Recognition with
|
|
2
|
+
Face Recognition with Local Embedding Search Optimization
|
|
3
3
|
|
|
4
|
-
This module
|
|
5
|
-
to reduce redundant API calls. When a face detection is processed:
|
|
4
|
+
This module uses local similarity search for face recognition to achieve high performance:
|
|
6
5
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
Performance Optimization Strategy:
|
|
7
|
+
1. EmbeddingManager loads all staff embeddings from API at startup (~1 API call)
|
|
8
|
+
2. Embeddings are cached in memory as a normalized numpy matrix
|
|
9
|
+
3. Face recognition uses fast local cosine similarity search (~1-5ms per face)
|
|
10
|
+
4. API calls are avoided during normal operation (2000x speedup vs API calls)
|
|
11
|
+
5. Background refresh updates embeddings periodically (configurable TTL)
|
|
12
|
+
|
|
13
|
+
Processing Flow:
|
|
14
|
+
1. TemporalIdentityManager receives face embedding from detection
|
|
15
|
+
2. Uses EmbeddingManager._find_best_local_match() for fast local similarity search
|
|
16
|
+
3. Returns best match if similarity >= threshold, otherwise returns "Unknown"
|
|
17
|
+
4. Only falls back to API if EmbeddingManager unavailable (rare)
|
|
11
18
|
|
|
12
19
|
Configuration options:
|
|
13
|
-
- enable_track_id_cache: Enable/disable
|
|
14
|
-
- cache_max_size: Maximum number of cached track IDs (default:
|
|
20
|
+
- enable_track_id_cache: Enable/disable track-level caching
|
|
21
|
+
- cache_max_size: Maximum number of cached track IDs (default: 3000)
|
|
15
22
|
- cache_ttl: Cache time-to-live in seconds (default: 3600)
|
|
23
|
+
- background_refresh_interval: Embedding refresh interval (default: 43200s = 12h)
|
|
24
|
+
- similarity_threshold: Minimum similarity for recognition (default: 0.45)
|
|
16
25
|
"""
|
|
17
26
|
import subprocess
|
|
18
27
|
import logging
|
|
@@ -81,13 +90,14 @@ class TemporalIdentityManager:
|
|
|
81
90
|
"""
|
|
82
91
|
Maintains stable identity labels per tracker ID using temporal smoothing and embedding history.
|
|
83
92
|
|
|
84
|
-
Adaptation for production: _compute_best_identity
|
|
85
|
-
|
|
93
|
+
Adaptation for production: _compute_best_identity uses EmbeddingManager for local similarity
|
|
94
|
+
search first (fast), then falls back to API only if needed (slow).
|
|
86
95
|
"""
|
|
87
96
|
|
|
88
97
|
def __init__(
|
|
89
98
|
self,
|
|
90
99
|
face_client: FacialRecognitionClient,
|
|
100
|
+
embedding_manager = None,
|
|
91
101
|
recognition_threshold: float = 0.35,
|
|
92
102
|
history_size: int = 20,
|
|
93
103
|
unknown_patience: int = 7,
|
|
@@ -96,6 +106,7 @@ class TemporalIdentityManager:
|
|
|
96
106
|
) -> None:
|
|
97
107
|
self.logger = logging.getLogger(__name__)
|
|
98
108
|
self.face_client = face_client
|
|
109
|
+
self.embedding_manager = embedding_manager
|
|
99
110
|
self.threshold = float(recognition_threshold)
|
|
100
111
|
self.history_size = int(history_size)
|
|
101
112
|
self.unknown_patience = int(unknown_patience)
|
|
@@ -119,14 +130,70 @@ class TemporalIdentityManager:
|
|
|
119
130
|
|
|
120
131
|
async def _compute_best_identity(self, emb: List[float], location: str = "", timestamp: str = "") -> Tuple[Optional[str], str, float, Optional[str], Dict[str, Any], str]:
|
|
121
132
|
"""
|
|
122
|
-
|
|
133
|
+
Find best identity match using local similarity search (fast) with optional API fallback.
|
|
123
134
|
Returns (staff_id, person_name, score, employee_id, staff_details, detection_type).
|
|
124
|
-
|
|
135
|
+
|
|
136
|
+
Performance optimization: Uses EmbeddingManager for local similarity search to avoid
|
|
137
|
+
slow API calls (~2000ms). Only falls back to API if local search is unavailable.
|
|
125
138
|
"""
|
|
126
139
|
if not emb or not isinstance(emb, list):
|
|
127
140
|
return None, "Unknown", 0.0, None, {}, "unknown"
|
|
141
|
+
|
|
142
|
+
st10 = time.time()
|
|
143
|
+
|
|
144
|
+
# PRIMARY PATH: Local similarity search using EmbeddingManager (FAST - ~1-5ms)
|
|
145
|
+
if self.embedding_manager:
|
|
146
|
+
try:
|
|
147
|
+
local_match = self.embedding_manager._find_best_local_match(emb)
|
|
148
|
+
|
|
149
|
+
if local_match:
|
|
150
|
+
staff_embedding, similarity_score = local_match
|
|
151
|
+
|
|
152
|
+
# Extract person name from staff details
|
|
153
|
+
person_name = "Unknown"
|
|
154
|
+
staff_details = staff_embedding.staff_details if isinstance(staff_embedding.staff_details, dict) else {}
|
|
155
|
+
|
|
156
|
+
if staff_details:
|
|
157
|
+
first_name = staff_details.get("firstName")
|
|
158
|
+
last_name = staff_details.get("lastName")
|
|
159
|
+
name = staff_details.get("name")
|
|
160
|
+
if name:
|
|
161
|
+
person_name = str(name)
|
|
162
|
+
elif first_name or last_name:
|
|
163
|
+
person_name = f"{first_name or ''} {last_name or ''}".strip() or "Unknown"
|
|
164
|
+
|
|
165
|
+
print("------------------FACE RECOG TEMPORAL IDENTITY MANAGER UPDATE - COMPUTE BEST IDENTITY (LOCAL)----------------------------")
|
|
166
|
+
print("LATENCY:",(time.time() - st10)*1000,"| Throughput fps:",(1.0 / (time.time() - st10)) if (time.time() - st10) > 0 else None)
|
|
167
|
+
print(f"LOCAL MATCH: staff_id={staff_embedding.staff_id}, similarity={similarity_score:.3f}")
|
|
168
|
+
print("------------------FACE RECOG TEMPORAL IDENTITY MANAGER UPDATE - COMPUTE BEST IDENTITY (LOCAL)----------------------------")
|
|
169
|
+
|
|
170
|
+
self.logger.info(f"Local embedding match - staff_id={staff_embedding.staff_id}, person_name={person_name}, score={similarity_score:.3f}")
|
|
171
|
+
|
|
172
|
+
return (
|
|
173
|
+
str(staff_embedding.staff_id),
|
|
174
|
+
person_name,
|
|
175
|
+
float(similarity_score),
|
|
176
|
+
str(staff_embedding.employee_id),
|
|
177
|
+
staff_details,
|
|
178
|
+
"known"
|
|
179
|
+
)
|
|
180
|
+
else:
|
|
181
|
+
# No local match found
|
|
182
|
+
self.logger.debug("No local match found - returning unknown")
|
|
183
|
+
print("------------------FACE RECOG TEMPORAL IDENTITY MANAGER UPDATE - COMPUTE BEST IDENTITY (LOCAL - NO MATCH)----------------------------")
|
|
184
|
+
print("LATENCY:",(time.time() - st10)*1000,"| Throughput fps:",(1.0 / (time.time() - st10)) if (time.time() - st10) > 0 else None)
|
|
185
|
+
print("------------------FACE RECOG TEMPORAL IDENTITY MANAGER UPDATE - COMPUTE BEST IDENTITY (LOCAL - NO MATCH)----------------------------")
|
|
186
|
+
|
|
187
|
+
return None, "Unknown", 0.0, None, {}, "unknown"
|
|
188
|
+
|
|
189
|
+
except Exception as e:
|
|
190
|
+
self.logger.warning(f"Local similarity search failed, falling back to API: {e}")
|
|
191
|
+
# Fall through to API call below
|
|
192
|
+
|
|
193
|
+
# FALLBACK PATH: API call (SLOW - ~2000ms) - only if embedding manager not available
|
|
194
|
+
# This path should rarely be used in production
|
|
128
195
|
try:
|
|
129
|
-
|
|
196
|
+
self.logger.warning("Using slow API fallback for identity search - consider checking embedding manager initialization")
|
|
130
197
|
resp = await self.face_client.search_similar_faces(
|
|
131
198
|
face_embedding=emb,
|
|
132
199
|
threshold=0.01, # low threshold to always get top-1
|
|
@@ -135,9 +202,10 @@ class TemporalIdentityManager:
|
|
|
135
202
|
location=location,
|
|
136
203
|
timestamp=timestamp,
|
|
137
204
|
)
|
|
138
|
-
print("------------------FACE RECOG TEMPORAL IDENTITY MANAGER UPDATE - COMPUTE BEST
|
|
205
|
+
print("------------------FACE RECOG TEMPORAL IDENTITY MANAGER UPDATE - COMPUTE BEST IDENTITY (API FALLBACK)----------------------------")
|
|
139
206
|
print("LATENCY:",(time.time() - st10)*1000,"| Throughput fps:",(1.0 / (time.time() - st10)) if (time.time() - st10) > 0 else None)
|
|
140
|
-
print("
|
|
207
|
+
print("WARNING: Using slow API fallback!")
|
|
208
|
+
print("------------------FACE RECOG TEMPORAL IDENTITY MANAGER UPDATE - COMPUTE BEST IDENTITY (API FALLBACK)----------------------------")
|
|
141
209
|
|
|
142
210
|
except Exception as e:
|
|
143
211
|
self.logger.error(f"API ERROR: Failed to search similar faces in _compute_best_identity: {e}", exc_info=True)
|
|
@@ -492,7 +560,7 @@ class FaceRecognitionEmbeddingUseCase(BaseProcessor):
|
|
|
492
560
|
# Initialize People activity logging if enabled
|
|
493
561
|
if init_config.enable_people_activity_logging:
|
|
494
562
|
self.people_activity_logging = PeopleActivityLogging(self.face_client)
|
|
495
|
-
|
|
563
|
+
# PeopleActivityLogging starts its background thread in __init__
|
|
496
564
|
self.logger.info("People activity logging enabled and started")
|
|
497
565
|
|
|
498
566
|
# Initialize EmbeddingManager
|
|
@@ -502,21 +570,31 @@ class FaceRecognitionEmbeddingUseCase(BaseProcessor):
|
|
|
502
570
|
confidence_threshold=init_config.confidence_threshold,
|
|
503
571
|
enable_track_id_cache=init_config.enable_track_id_cache,
|
|
504
572
|
cache_max_size=init_config.cache_max_size,
|
|
505
|
-
cache_ttl=3600
|
|
573
|
+
cache_ttl=3600,
|
|
574
|
+
background_refresh_interval=43200,
|
|
575
|
+
staff_embeddings_cache_ttl=43200,
|
|
506
576
|
)
|
|
507
577
|
self.embedding_manager = EmbeddingManager(init_config.embedding_config, self.face_client)
|
|
508
578
|
self.logger.info("Embedding manager initialized")
|
|
509
579
|
|
|
510
|
-
#
|
|
580
|
+
# Load staff embeddings immediately for fast startup (avoid race conditions)
|
|
581
|
+
embeddings_loaded = await self.embedding_manager._load_staff_embeddings()
|
|
582
|
+
if embeddings_loaded:
|
|
583
|
+
self.logger.info(f"Loaded {len(self.embedding_manager.staff_embeddings)} staff embeddings at initialization")
|
|
584
|
+
else:
|
|
585
|
+
self.logger.warning("Failed to load staff embeddings at initialization - will retry in background")
|
|
586
|
+
|
|
587
|
+
# Initialize TemporalIdentityManager with EmbeddingManager for fast local search
|
|
511
588
|
self.temporal_identity_manager = TemporalIdentityManager(
|
|
512
589
|
face_client=self.face_client,
|
|
590
|
+
embedding_manager=self.embedding_manager,
|
|
513
591
|
recognition_threshold=float(init_config.similarity_threshold),
|
|
514
592
|
history_size=20,
|
|
515
593
|
unknown_patience=7,
|
|
516
594
|
switch_patience=5,
|
|
517
595
|
fallback_margin=0.05,
|
|
518
596
|
)
|
|
519
|
-
self.logger.info("Temporal identity manager initialized")
|
|
597
|
+
self.logger.info("Temporal identity manager initialized with embedding manager for local similarity search")
|
|
520
598
|
|
|
521
599
|
self._initialized = True
|
|
522
600
|
self.logger.info("Face recognition use case fully initialized")
|
|
@@ -591,12 +669,20 @@ class FaceRecognitionEmbeddingUseCase(BaseProcessor):
|
|
|
591
669
|
)
|
|
592
670
|
context = ProcessingContext()
|
|
593
671
|
|
|
594
|
-
#
|
|
672
|
+
# Lazy initialization on first process() call (similar to tracker initialization pattern)
|
|
595
673
|
if not self._initialized:
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
674
|
+
self.logger.info("Initializing face recognition use case on first process() call...")
|
|
675
|
+
try:
|
|
676
|
+
await self.initialize(config)
|
|
677
|
+
self.logger.info("Face recognition use case initialized successfully")
|
|
678
|
+
except Exception as e:
|
|
679
|
+
self.logger.error(f"Failed to initialize face recognition use case: {e}", exc_info=True)
|
|
680
|
+
return self.create_error_result(
|
|
681
|
+
f"Initialization failed: {e}",
|
|
682
|
+
usecase=self.name,
|
|
683
|
+
category=self.category,
|
|
684
|
+
context=context,
|
|
685
|
+
)
|
|
600
686
|
|
|
601
687
|
# Ensure confidence threshold is set
|
|
602
688
|
if not config.confidence_threshold:
|
|
@@ -901,7 +987,7 @@ class FaceRecognitionEmbeddingUseCase(BaseProcessor):
|
|
|
901
987
|
) -> List[Dict]:
|
|
902
988
|
"""Process face recognition for each detection with embeddings"""
|
|
903
989
|
|
|
904
|
-
#
|
|
990
|
+
# Expect client to be initialized in initialize(); fail fast if not
|
|
905
991
|
st0=time.time()
|
|
906
992
|
if not self.face_client:
|
|
907
993
|
try:
|
|
File without changes
|
|
File without changes
|
{matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/matrice_analytics.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/matrice_analytics.egg-info/not-zip-safe
RENAMED
|
File without changes
|
{matrice_analytics-0.1.51 → matrice_analytics-0.1.52}/matrice_analytics.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|