OTVision 0.6.6__tar.gz → 0.6.7__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.
- {otvision-0.6.6 → otvision-0.6.7}/.github/workflows/release-testpypi.yml +24 -1
- {otvision-0.6.6 → otvision-0.6.7}/.pre-commit-config.yaml +1 -2
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/detect/rtsp_input_source.py +16 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/version.py +1 -1
- {otvision-0.6.6 → otvision-0.6.7}/PKG-INFO +1 -2
- {otvision-0.6.6 → otvision-0.6.7}/requirements.txt +0 -1
- {otvision-0.6.6 → otvision-0.6.7}/tests/detect/test_rtsp_input_source.py +65 -11
- {otvision-0.6.6 → otvision-0.6.7}/.editorconfig +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/.flake8 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/.github/dependabot.yml +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/.github/workflows/build-nightly.yml +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/.github/workflows/build-release.yml +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/.github/workflows/linter.yml +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/.github/workflows/release-pypi.yml +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/.github/workflows/test.yml +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/.gitignore +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/.vscode/launch.json +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/.vscode/scripts/build_debug_env.cmd +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/.vscode/scripts/build_debug_env.sh +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/.vscode/scripts/teardown_debug_env.cmd +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/.vscode/scripts/teardown_debug_env.sh +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/.vscode/settings.json +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/.vscode/tasks.json +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/.yamllint.yaml +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/LICENSE +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/abstraction/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/abstraction/defaults.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/abstraction/observer.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/abstraction/pipes_and_filter.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/application/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/application/buffer.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/application/config.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/application/config_parser.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/application/configure_logger.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/application/detect/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/application/detect/current_object_detector.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/application/detect/current_object_detector_metadata.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/application/detect/detected_frame_factory.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/application/detect/detected_frame_producer.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/application/detect/detection_file_save_path_provider.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/application/detect/factory.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/application/detect/get_detect_cli_args.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/application/detect/timestamper.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/application/detect/update_detect_config_with_cli_args.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/application/frame_count_provider.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/application/get_config.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/application/get_current_config.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/application/track/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/application/track/get_track_cli_args.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/application/track/update_current_track_config.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/application/track/update_track_config_with_cli_args.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/application/update_current_config.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/config.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/convert/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/convert/convert.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/dataformat.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/detect/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/detect/builder.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/detect/cli.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/detect/detect.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/detect/detected_frame_buffer.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/detect/file_based_detect_builder.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/detect/otdet.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/detect/otdet_file_writer.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/detect/plugin_av/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/detect/plugin_av/rotate_frame.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/detect/pyav_frame_count_provider.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/detect/rtsp_based_detect_builder.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/detect/timestamper.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/detect/video_input_source.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/detect/yolo.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/domain/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/domain/cli.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/domain/current_config.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/domain/detect_producer_consumer.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/domain/detection.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/domain/frame.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/domain/input_source_detect.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/domain/object_detection.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/domain/serialization.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/domain/time.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/helpers/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/helpers/date.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/helpers/files.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/helpers/formats.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/helpers/input_types.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/helpers/log.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/helpers/machine.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/helpers/video.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/plugin/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/plugin/yaml_serialization.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/track/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/track/builder.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/track/cli.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/track/exporter/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/track/exporter/filebased_exporter.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/track/id_generator.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/track/model/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/track/model/filebased/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/track/model/filebased/frame_chunk.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/track/model/filebased/frame_group.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/track/model/track_exporter.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/track/model/tracking_interfaces.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/track/parser/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/track/parser/chunk_parser_plugins.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/track/parser/frame_group_parser_plugins.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/track/track.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/track/tracker/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/track/tracker/filebased_tracking.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/track/tracker/tracker_plugin_iou.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/transform/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/transform/get_homography.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/transform/reference_points_picker.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/transform/transform.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/view/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/view/helpers/OTC.ico +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/view/view.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/view/view_convert.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/view/view_detect.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/view/view_helpers.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/view/view_track.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision/view/view_transform.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/OTVision.bat +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/README.md +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/clean-up-repository.sh +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/config.yml +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/convert.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/detect.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/export_models.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/install.cmd +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/install.sh +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/install_dev.cmd +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/install_dev.sh +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/pyproject.toml +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/reference_points_picker.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/requirements-dev.txt +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/abstraction/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/abstraction/test_defaults.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/abstraction/test_observer.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/application/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/application/detect/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/application/detect/test_current_object_detector.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/application/detect/test_detected_frame_factory.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/application/detect/test_detected_frame_producer.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/application/detect/test_detection_file_save_path_provider.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/application/detect/test_get_detect_cli_args.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/application/detect/test_timestamper.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/application/detect/test_update_detect_config_with_cli_args.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/application/test_buffer.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/application/test_get_config.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/application/track/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/application/track/test_get_track_cli_args.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/application/track/test_update_current_track_config.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/application/track/test_update_track_config_with_cli_args.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/cli/custom_cli_test_config.yaml +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/cli/test_convert_cli.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/cli/test_detect_cli.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/cli/test_track_cli.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/conftest.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/convert/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/convert/test_convert.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/Testvideo_CamView.png +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/Testvideo_CamView_Cars-Cyclist.png +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/Testvideo_CamView_Cars-Truck.png +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/Testvideo_CamView_refpts.png +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.gpkg +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otrfpts +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.gpkg +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otrfpts +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/Testvideo_FR20.otrfpts +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/Testvideo_Satellite.jpg +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/Testvideo_Satellite_far.jpg +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/default/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/default/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/default/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/default/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/fail_fps_from_filename/Testvideo_Cars-Cyclist_F20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/fail_fps_from_filename/Testvideo_Cars-Truck_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/fps_from_filename/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/fps_from_filename/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/fps_from_filename/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/fps_from_filename/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/input_fps_20/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/input_fps_20/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/input_fps_20/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/input_fps_20/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/input_fps_40/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/input_fps_40/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/input_fps_40/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/input_fps_40/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/output_filetype_avi/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.avi +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/output_filetype_avi/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/output_filetype_avi/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.avi +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/output_filetype_avi/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/output_filetype_mkv/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/output_filetype_mkv/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mkv +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/output_filetype_mkv/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/output_filetype_mkv/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mkv +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/output_filetype_mov/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/output_filetype_mov/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mov +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/output_filetype_mov/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/output_filetype_mov/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mov +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/output_filetype_mp4/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/output_filetype_mp4/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/output_filetype_mp4/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/output_filetype_mp4/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/rotation/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00_rotate.h264 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/rotation/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00_rotate.mov +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/rotation/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00_rotate.mp4 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/rotation/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00_rotate.h264 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/rotation/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00_rotate.mov +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/convert/rotation/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00_rotate.mp4 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/detect/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/detect/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/detect/default/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/detect/default/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/detect/rotated-Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/log/_otvision_logs/test.log +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/default/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/default/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/default/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/default/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/sigma_h_0_2/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/sigma_h_0_2/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/sigma_h_0_2/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/sigma_h_0_2/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/sigma_h_0_6/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/sigma_h_0_6/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/sigma_h_0_6/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/sigma_h_0_6/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/sigma_iou_0_2/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/sigma_iou_0_2/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/sigma_iou_0_2/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/sigma_iou_0_2/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/sigma_iou_0_6/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/sigma_iou_0_6/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/sigma_iou_0_6/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/sigma_iou_0_6/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/sigma_l_0_1/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/sigma_l_0_1/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/sigma_l_0_1/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/sigma_l_0_1/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/sigma_l_0_5/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/sigma_l_0_5/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/sigma_l_0_5/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/sigma_l_0_5/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/t_min_10/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/t_min_10/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/t_min_10/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/t_min_10/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/t_min_3/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/t_min_3/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/t_min_3/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/t_min_3/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/t_miss_max_25/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/t_miss_max_25/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/t_miss_max_25/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/t_miss_max_25/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/t_miss_max_75/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/t_miss_max_75/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/t_miss_max_75/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/track/t_miss_max_75/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/transform/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.gpkg +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/transform/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otrfpts +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/transform/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/transform/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.gpkg +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/transform/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otrfpts +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/transform/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/transform/Testvideo_FR20.otrfpts +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/yolov8m.mlpackage/Data/com.apple.CoreML/model.mlmodel +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/yolov8m.mlpackage/Data/com.apple.CoreML/weights/weight.bin +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/data/yolov8m.mlpackage/Manifest.json +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/detect/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/detect/detect_test.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/detect/plugin_av/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/detect/plugin_av/test_rotate_frame.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/detect/test_detected_frame_buffer.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/detect/test_otdet.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/detect/test_otdet_file_writer.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/detect/test_pyav_frame_count_provider.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/detect/test_video_input_source.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/detect/yolo_test.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/helpers/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/helpers/files_test.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/helpers/formats_test.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/helpers/test_log.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/log/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/log/log_maker.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/log/test_log.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/test_config.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/track/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/track/helper/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/track/helper/data_builder.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/track/parser/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/track/parser/test_chunk_parser_plugins.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/track/test_frame_chunk.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/track/test_frame_group.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/track/test_frame_group_parser_plugins.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/track/test_track.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/track/test_tracking_data_structures.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/transform/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/transform/test_transform.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/utils/__init__.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/utils/generator.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/tests/utils/mocking.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/track.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/transform.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/update_precommit.py +0 -0
- {otvision-0.6.6 → otvision-0.6.7}/view.py +0 -0
|
@@ -26,14 +26,37 @@ jobs:
|
|
|
26
26
|
steps:
|
|
27
27
|
- name: Checkout code
|
|
28
28
|
uses: actions/checkout@v4
|
|
29
|
+
|
|
30
|
+
- name: Fetch all tags
|
|
31
|
+
run: git fetch --tags --unshallow
|
|
32
|
+
|
|
29
33
|
- name: Set up Python
|
|
30
34
|
uses: actions/setup-python@v5
|
|
31
35
|
with:
|
|
32
36
|
python-version: "3.12"
|
|
37
|
+
|
|
38
|
+
- name: Get latest tag and create new version
|
|
39
|
+
id: get_version
|
|
40
|
+
run: |
|
|
41
|
+
# Get the latest tag in format v*.*.* (ignoring tags like "nightly")
|
|
42
|
+
LATEST_TAG="$(git tag -l "v*.*.*" | sort -V | tail -n 1 || echo 'v0.0.0')"
|
|
43
|
+
# Extract version without 'v' prefix
|
|
44
|
+
VERSION="${LATEST_TAG#v}"
|
|
45
|
+
# Split version into parts
|
|
46
|
+
IFS='.' read -r MAJOR MINOR PATCH <<< "$VERSION"
|
|
47
|
+
# Increment patch version
|
|
48
|
+
PATCH="$((PATCH + 1))"
|
|
49
|
+
# Create new version with incremented patch
|
|
50
|
+
INCREMENTED_VERSION="$MAJOR.$MINOR.$PATCH"
|
|
51
|
+
DATE_TIME="$(date +'%Y%m%d%H%M%S')"
|
|
52
|
+
NEW_VERSION="${INCREMENTED_VERSION}a${DATE_TIME}"
|
|
53
|
+
echo "Final version: $NEW_VERSION"
|
|
54
|
+
echo "new_version=$NEW_VERSION" >> "$GITHUB_OUTPUT"
|
|
55
|
+
|
|
33
56
|
- name: Update Python Package Version
|
|
34
57
|
uses: platomo/update-version-py-action@v1.0.1
|
|
35
58
|
with:
|
|
36
|
-
version:
|
|
59
|
+
version: ${{ steps.get_version.outputs.new_version }}
|
|
37
60
|
file-path: "OTVision"
|
|
38
61
|
- name: Install pypa/build
|
|
39
62
|
shell: bash
|
|
@@ -63,14 +63,13 @@ repos:
|
|
|
63
63
|
- pre-commit==3.8.0
|
|
64
64
|
- pytest-cov==5.0.0
|
|
65
65
|
- pytest==8.3.3
|
|
66
|
-
- torch==2.3.1
|
|
67
66
|
- torchvision==0.18.1
|
|
68
67
|
- twine==6.1.0
|
|
69
68
|
- types-PyYAML
|
|
70
69
|
- types-flake8
|
|
71
70
|
- types-geopandas
|
|
72
71
|
- types-jsonschema
|
|
73
|
-
- types-
|
|
72
|
+
- types-torch
|
|
74
73
|
- types-tqdm
|
|
75
74
|
- types-ujson
|
|
76
75
|
- ultralytics==8.3.94
|
|
@@ -27,6 +27,7 @@ from OTVision.domain.time import DatetimeProvider
|
|
|
27
27
|
|
|
28
28
|
RTSP_URL = "rtsp://127.0.0.1:8554/test"
|
|
29
29
|
RETRY_SECONDS = 1
|
|
30
|
+
DEFAULT_READ_FAIL_THRESHOLD = 5
|
|
30
31
|
|
|
31
32
|
|
|
32
33
|
class Counter:
|
|
@@ -82,6 +83,7 @@ class RtspInputSource(InputSourceDetect):
|
|
|
82
83
|
datetime_provider: DatetimeProvider,
|
|
83
84
|
frame_counter: Counter,
|
|
84
85
|
get_current_config: GetCurrentConfig,
|
|
86
|
+
read_fail_threshold: int = DEFAULT_READ_FAIL_THRESHOLD,
|
|
85
87
|
) -> None:
|
|
86
88
|
super().__init__(subject)
|
|
87
89
|
self._datetime_provider = datetime_provider
|
|
@@ -93,6 +95,8 @@ class RtspInputSource(InputSourceDetect):
|
|
|
93
95
|
self._stream_start_time: datetime = self._datetime_provider.provide()
|
|
94
96
|
self._current_video_start_time = self._stream_start_time
|
|
95
97
|
self._outdated = True
|
|
98
|
+
self._read_fail_threshold = read_fail_threshold
|
|
99
|
+
self._consecutive_read_fails = 0
|
|
96
100
|
|
|
97
101
|
@property
|
|
98
102
|
def _video_capture(self) -> VideoCapture:
|
|
@@ -157,10 +161,22 @@ class RtspInputSource(InputSourceDetect):
|
|
|
157
161
|
def _read_next_frame(self) -> ndarray | None:
|
|
158
162
|
successful, frame = self._video_capture.read()
|
|
159
163
|
if successful:
|
|
164
|
+
self._consecutive_read_fails = 0
|
|
160
165
|
return frame
|
|
166
|
+
self._consecutive_read_fails += 1
|
|
167
|
+
|
|
168
|
+
if self._consecutive_read_fails >= self._read_fail_threshold:
|
|
169
|
+
self._try_reconnecting_stream()
|
|
170
|
+
|
|
161
171
|
logger().debug("Failed to grab frame")
|
|
162
172
|
return None
|
|
163
173
|
|
|
174
|
+
def _try_reconnecting_stream(self) -> None:
|
|
175
|
+
self._video_capture.release()
|
|
176
|
+
self._current_video_capture = None
|
|
177
|
+
if not self.should_stop() and self._current_stream is not None:
|
|
178
|
+
self._current_video_capture = self._init_video_capture(self._current_stream)
|
|
179
|
+
|
|
164
180
|
def should_stop(self) -> bool:
|
|
165
181
|
return self._stop_capture
|
|
166
182
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: OTVision
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.7
|
|
4
4
|
Summary: OTVision is a core module of the OpenTrafficCam framework to perform object detection and tracking.
|
|
5
5
|
Project-URL: Homepage, https://opentrafficcam.org/
|
|
6
6
|
Project-URL: Documentation, https://opentrafficcam.org/overview/
|
|
@@ -27,7 +27,6 @@ Requires-Dist: numpy==2.1.1; sys_platform != 'win32'
|
|
|
27
27
|
Requires-Dist: opencv-python==4.10.0.84
|
|
28
28
|
Requires-Dist: pandas==2.2.3
|
|
29
29
|
Requires-Dist: pyyaml==6.0.2
|
|
30
|
-
Requires-Dist: setuptools==74.0.0
|
|
31
30
|
Requires-Dist: torch==2.3.1
|
|
32
31
|
Requires-Dist: torchvision==0.18.1
|
|
33
32
|
Requires-Dist: tqdm==4.67.1
|
|
@@ -9,7 +9,6 @@ numpy==1.26.4; sys_platform == 'win32' # ultralytics requires numpy <= 2.1.1; to
|
|
|
9
9
|
opencv-python==4.10.0.84 # only upgrade when https://github.com/opencv/opencv/issues/27091 is resolved
|
|
10
10
|
pandas==2.2.3
|
|
11
11
|
PyYAML==6.0.2
|
|
12
|
-
setuptools==74.0.0
|
|
13
12
|
# Follow instructions at https://pytorch.org to install torch with CUDA
|
|
14
13
|
torch==2.3.1 # NOTE: Omit if using torch with CUDA and install manually
|
|
15
14
|
torchvision==0.18.1 # NOTE: Omit if using torch with CUDA and install manually
|
|
@@ -80,8 +80,8 @@ class TestRtspInputSource:
|
|
|
80
80
|
def test_produce(
|
|
81
81
|
self, mock_video_capture: Mock, mock_convert_frame_to_rgb: Mock
|
|
82
82
|
) -> None:
|
|
83
|
-
given = create_given(mock_video_capture, mock_convert_frame_to_rgb)
|
|
84
|
-
target =
|
|
83
|
+
given = setup_with(create_given(mock_video_capture, mock_convert_frame_to_rgb))
|
|
84
|
+
target = create_target(given)
|
|
85
85
|
generator = target.produce()
|
|
86
86
|
actual = list()
|
|
87
87
|
actual.append(next(generator))
|
|
@@ -140,6 +140,58 @@ class TestRtspInputSource:
|
|
|
140
140
|
]
|
|
141
141
|
assert given.subject.notify.call_args_list == create_expected_flush_events()
|
|
142
142
|
|
|
143
|
+
@patch("OTVision.detect.rtsp_input_source.convert_frame_to_rgb")
|
|
144
|
+
@patch("OTVision.detect.rtsp_input_source.VideoCapture")
|
|
145
|
+
def test_reconnecting_on_consecutive_read_fails(
|
|
146
|
+
self, mock_video_capture: Mock, mock_convert_frame_to_rgb: Mock
|
|
147
|
+
) -> None:
|
|
148
|
+
first_vc_instance = Mock()
|
|
149
|
+
second_vc_instance = Mock()
|
|
150
|
+
third_vc_instance = Mock()
|
|
151
|
+
|
|
152
|
+
given = create_given(mock_video_capture, mock_convert_frame_to_rgb)
|
|
153
|
+
|
|
154
|
+
# This triggers the reconnecting
|
|
155
|
+
first_vc_instance.read.side_effect = [
|
|
156
|
+
(True, FIRST_FRAME_DATA),
|
|
157
|
+
(False, None),
|
|
158
|
+
(False, None),
|
|
159
|
+
]
|
|
160
|
+
|
|
161
|
+
# This simulates the first re-connect try that fails
|
|
162
|
+
second_vc_instance.isOpened.return_value = False
|
|
163
|
+
|
|
164
|
+
# This simulates the second re-connect try that succeeds
|
|
165
|
+
third_vc_instance.read.side_effect = [(True, SECOND_FRAME_DATA)]
|
|
166
|
+
third_vc_instance.isOpened.return_value = True
|
|
167
|
+
|
|
168
|
+
given.video_capture.side_effect = [
|
|
169
|
+
first_vc_instance,
|
|
170
|
+
second_vc_instance,
|
|
171
|
+
third_vc_instance,
|
|
172
|
+
]
|
|
173
|
+
|
|
174
|
+
target = create_target(given)
|
|
175
|
+
target._read_fail_threshold = 2
|
|
176
|
+
|
|
177
|
+
actual = list()
|
|
178
|
+
actual.append(target._read_next_frame()) # First read successful
|
|
179
|
+
actual.append(target._read_next_frame()) # Second read fails
|
|
180
|
+
actual.append(target._read_next_frame()) # Third read fails
|
|
181
|
+
actual.append(target._read_next_frame()) # Fourth read successful
|
|
182
|
+
|
|
183
|
+
assert actual == [FIRST_FRAME_DATA, None, None, SECOND_FRAME_DATA]
|
|
184
|
+
first_vc_instance.release.assert_called_once()
|
|
185
|
+
assert first_vc_instance.read.call_count == 3
|
|
186
|
+
second_vc_instance.isOpened.assert_called_once()
|
|
187
|
+
second_vc_instance.read.assert_not_called()
|
|
188
|
+
assert second_vc_instance.read.call_count == 0
|
|
189
|
+
|
|
190
|
+
third_vc_instance.release.assert_not_called()
|
|
191
|
+
assert third_vc_instance.read.call_count == 1
|
|
192
|
+
|
|
193
|
+
assert target._consecutive_read_fails == 0
|
|
194
|
+
|
|
143
195
|
|
|
144
196
|
def create_given(video_capture: Mock, convert_frame_to_rgb: Mock) -> Given:
|
|
145
197
|
return Given(
|
|
@@ -155,9 +207,16 @@ def create_given(video_capture: Mock, convert_frame_to_rgb: Mock) -> Given:
|
|
|
155
207
|
)
|
|
156
208
|
|
|
157
209
|
|
|
158
|
-
def
|
|
159
|
-
|
|
160
|
-
|
|
210
|
+
def create_target(given: Given) -> RtspInputSource:
|
|
211
|
+
return RtspInputSource(
|
|
212
|
+
subject=given.subject,
|
|
213
|
+
datetime_provider=given.datetime_provider,
|
|
214
|
+
frame_counter=given.frame_counter,
|
|
215
|
+
get_current_config=given.get_current_config,
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
def setup_with(given: Given, video_capture_is_opened: bool = True) -> Given:
|
|
161
220
|
frames = [
|
|
162
221
|
(True, FIRST_FRAME_DATA),
|
|
163
222
|
(False, SECOND_FRAME_DATA),
|
|
@@ -197,12 +256,7 @@ def create_target_with(
|
|
|
197
256
|
given.config.convert.output_fps = OUTPUT_FPS
|
|
198
257
|
given.get_current_config.get.return_value = given.config
|
|
199
258
|
|
|
200
|
-
return
|
|
201
|
-
subject=given.subject,
|
|
202
|
-
datetime_provider=given.datetime_provider,
|
|
203
|
-
frame_counter=given.frame_counter,
|
|
204
|
-
get_current_config=given.get_current_config,
|
|
205
|
-
)
|
|
259
|
+
return given
|
|
206
260
|
|
|
207
261
|
|
|
208
262
|
def create_expected_flush_events() -> list[Any]:
|
|
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
|
{otvision-0.6.6 → otvision-0.6.7}/OTVision/application/detect/current_object_detector_metadata.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{otvision-0.6.6 → otvision-0.6.7}/OTVision/application/detect/detection_file_save_path_provider.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{otvision-0.6.6 → otvision-0.6.7}/OTVision/application/detect/update_detect_config_with_cli_args.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{otvision-0.6.6 → otvision-0.6.7}/OTVision/application/track/update_track_config_with_cli_args.py
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
|
{otvision-0.6.6 → otvision-0.6.7}/tests/application/detect/test_detection_file_save_path_provider.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|