OTVision 0.6.12__tar.gz → 0.6.14__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.12 → otvision-0.6.14}/OTVision/application/config_parser.py +23 -3
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/track/ottrk.py +3 -2
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/detect/builder.py +12 -1
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/track/stream_ottrk_file_writer.py +17 -4
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/version.py +1 -1
- {otvision-0.6.12 → otvision-0.6.14}/PKG-INFO +1 -1
- {otvision-0.6.12 → otvision-0.6.14}/tests/application/test_config_parser.py +82 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/application/track/test_ottrk.py +2 -3
- {otvision-0.6.12 → otvision-0.6.14}/.editorconfig +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/.flake8 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/.github/dependabot.yml +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/.github/workflows/build-nightly.yml +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/.github/workflows/build-release.yml +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/.github/workflows/linter.yml +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/.github/workflows/release-pypi.yml +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/.github/workflows/release-testpypi.yml +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/.github/workflows/test.yml +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/.gitignore +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/.pre-commit-config.yaml +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/.vscode/launch.json +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/.vscode/scripts/build_debug_env.cmd +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/.vscode/scripts/build_debug_env.sh +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/.vscode/scripts/teardown_debug_env.cmd +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/.vscode/scripts/teardown_debug_env.sh +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/.vscode/settings.json +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/.vscode/tasks.json +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/.yamllint.yaml +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/LICENSE +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/abstraction/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/abstraction/defaults.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/abstraction/observer.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/abstraction/pipes_and_filter.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/buffer.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/config.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/configure_logger.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/detect/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/detect/current_object_detector.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/detect/current_object_detector_metadata.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/detect/detected_frame_factory.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/detect/factory.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/detect/get_detect_cli_args.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/detect/timestamper.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/detect/update_detect_config_with_cli_args.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/event/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/event/new_otvision_config.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/event/new_video_start.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/frame_count_provider.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/get_config.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/get_current_config.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/otvision_save_path_provider.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/track/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/track/get_track_cli_args.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/track/tracking_run_id.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/track/update_current_track_config.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/track/update_track_config_with_cli_args.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/update_current_config.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/video/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/application/video/generate_video.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/config.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/convert/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/convert/convert.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/dataformat.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/detect/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/detect/cli.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/detect/detect.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/detect/detected_frame_buffer.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/detect/detected_frame_producer.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/detect/detected_frame_producer_factory.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/detect/file_based_detect_builder.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/detect/otdet.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/detect/otdet_file_writer.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/detect/plugin_av/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/detect/plugin_av/rotate_frame.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/detect/pyav_frame_count_provider.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/detect/rtsp_based_detect_builder.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/detect/rtsp_input_source.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/detect/timestamper.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/detect/video_input_source.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/detect/yolo.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/domain/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/domain/cli.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/domain/current_config.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/domain/detect_producer_consumer.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/domain/detection.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/domain/frame.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/domain/input_source_detect.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/domain/object_detection.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/domain/serialization.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/domain/time.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/domain/video_writer.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/helpers/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/helpers/date.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/helpers/files.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/helpers/formats.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/helpers/input_types.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/helpers/log.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/helpers/machine.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/helpers/video.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/plugin/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/plugin/ffmpeg_video_writer.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/plugin/generate_video.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/plugin/yaml_serialization.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/track/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/track/builder.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/track/cli.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/track/exporter/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/track/exporter/filebased_exporter.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/track/id_generator.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/track/model/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/track/model/filebased/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/track/model/filebased/frame_chunk.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/track/model/filebased/frame_group.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/track/model/track_exporter.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/track/model/tracking_interfaces.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/track/parser/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/track/parser/chunk_parser_plugins.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/track/parser/frame_group_parser_plugins.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/track/track.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/track/tracker/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/track/tracker/filebased_tracking.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/track/tracker/tracker_plugin_iou.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/transform/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/transform/get_homography.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/transform/reference_points_picker.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/transform/transform.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/view/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/view/helpers/OTC.ico +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/view/view.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/view/view_convert.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/view/view_detect.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/view/view_helpers.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/view/view_track.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision/view/view_transform.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/OTVision.bat +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/README.md +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/clean-up-repository.sh +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/config.yml +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/convert.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/detect.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/export_models.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/generate_video.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/install.cmd +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/install.sh +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/install_cuda.cmd +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/install_cuda.sh +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/install_dev.cmd +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/install_dev.sh +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/pyproject.toml +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/reference_points_picker.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/abstraction/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/abstraction/test_defaults.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/abstraction/test_observer.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/application/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/application/detect/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/application/detect/test_current_object_detector.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/application/detect/test_detected_frame_factory.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/application/detect/test_get_detect_cli_args.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/application/detect/test_timestamper.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/application/detect/test_update_detect_config_with_cli_args.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/application/test_buffer.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/application/test_get_config.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/application/test_otvision_save_path_provider.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/application/track/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/application/track/test_get_track_cli_args.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/application/track/test_update_current_track_config.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/application/track/test_update_track_config_with_cli_args.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/cli/custom_cli_test_config.yaml +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/cli/test_convert_cli.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/cli/test_detect_cli.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/cli/test_track_cli.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/conftest.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/convert/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/convert/test_convert.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/Testvideo_CamView.png +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/Testvideo_CamView_Cars-Cyclist.png +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/Testvideo_CamView_Cars-Truck.png +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/Testvideo_CamView_refpts.png +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.gpkg +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otrfpts +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.gpkg +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otrfpts +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/Testvideo_FR20.otrfpts +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/Testvideo_Satellite.jpg +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/Testvideo_Satellite_far.jpg +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/default/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/default/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/default/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/default/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/fail_fps_from_filename/Testvideo_Cars-Cyclist_F20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/fail_fps_from_filename/Testvideo_Cars-Truck_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/fps_from_filename/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/fps_from_filename/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/fps_from_filename/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/fps_from_filename/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/input_fps_20/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/input_fps_20/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/input_fps_20/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/input_fps_20/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/input_fps_40/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/input_fps_40/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/input_fps_40/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/input_fps_40/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/output_filetype_avi/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.avi +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/output_filetype_avi/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/output_filetype_avi/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.avi +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/output_filetype_avi/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/output_filetype_mkv/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/output_filetype_mkv/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mkv +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/output_filetype_mkv/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/output_filetype_mkv/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mkv +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/output_filetype_mov/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/output_filetype_mov/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mov +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/output_filetype_mov/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/output_filetype_mov/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mov +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/output_filetype_mp4/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/output_filetype_mp4/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/output_filetype_mp4/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/output_filetype_mp4/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/rotation/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00_rotate.h264 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/rotation/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00_rotate.mov +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/rotation/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00_rotate.mp4 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/rotation/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00_rotate.h264 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/rotation/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00_rotate.mov +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/convert/rotation/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00_rotate.mp4 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/detect/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/detect/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/detect/default/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/detect/default/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/detect/rotated-Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/log/_otvision_logs/test.log +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/default/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/default/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/default/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/default/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/sigma_h_0_2/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/sigma_h_0_2/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/sigma_h_0_2/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/sigma_h_0_2/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/sigma_h_0_6/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/sigma_h_0_6/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/sigma_h_0_6/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/sigma_h_0_6/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/sigma_iou_0_2/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/sigma_iou_0_2/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/sigma_iou_0_2/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/sigma_iou_0_2/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/sigma_iou_0_6/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/sigma_iou_0_6/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/sigma_iou_0_6/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/sigma_iou_0_6/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/sigma_l_0_1/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/sigma_l_0_1/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/sigma_l_0_1/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/sigma_l_0_1/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/sigma_l_0_5/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/sigma_l_0_5/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/sigma_l_0_5/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/sigma_l_0_5/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/t_min_10/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/t_min_10/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/t_min_10/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/t_min_10/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/t_min_3/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/t_min_3/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/t_min_3/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/t_min_3/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/t_miss_max_25/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/t_miss_max_25/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/t_miss_max_25/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/t_miss_max_25/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/t_miss_max_75/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/t_miss_max_75/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/t_miss_max_75/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/track/t_miss_max_75/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/transform/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.gpkg +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/transform/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otrfpts +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/transform/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/transform/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.gpkg +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/transform/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otrfpts +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/transform/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/transform/Testvideo_FR20.otrfpts +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/yolov8m.mlpackage/Data/com.apple.CoreML/model.mlmodel +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/yolov8m.mlpackage/Data/com.apple.CoreML/weights/weight.bin +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/data/yolov8m.mlpackage/Manifest.json +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/detect/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/detect/detect_test.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/detect/plugin_av/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/detect/plugin_av/test_rotate_frame.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/detect/test_detected_frame_buffer.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/detect/test_detected_frame_producer.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/detect/test_detected_frame_producer_factory.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/detect/test_otdet.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/detect/test_otdet_file_writer.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/detect/test_pyav_frame_count_provider.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/detect/test_rtsp_input_source.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/detect/test_video_input_source.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/detect/yolo_test.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/helpers/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/helpers/files_test.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/helpers/formats_test.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/helpers/test_log.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/log/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/log/log_maker.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/log/test_log.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/plugin/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/plugin/test_ffmpeg_video_file_writer.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/test_config.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/track/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/track/helper/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/track/helper/data_builder.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/track/parser/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/track/parser/test_chunk_parser_plugins.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/track/test_frame_chunk.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/track/test_frame_group.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/track/test_frame_group_parser_plugins.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/track/test_stream_ottrk_file_writer.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/track/test_track.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/track/test_tracking_data_structures.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/transform/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/transform/test_transform.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/utils/__init__.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/utils/generator.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/tests/utils/mocking.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/track.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/transform.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/update_precommit.py +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/uv.lock +0 -0
- {otvision-0.6.12 → otvision-0.6.14}/view.py +0 -0
|
@@ -73,6 +73,11 @@ from OTVision.application.config import (
|
|
|
73
73
|
_UndistortConfig,
|
|
74
74
|
)
|
|
75
75
|
from OTVision.domain.serialization import Deserializer
|
|
76
|
+
from OTVision.plugin.ffmpeg_video_writer import (
|
|
77
|
+
ConstantRateFactor,
|
|
78
|
+
EncodingSpeed,
|
|
79
|
+
VideoCodec,
|
|
80
|
+
)
|
|
76
81
|
|
|
77
82
|
|
|
78
83
|
class InvalidOtvisionConfigError(Exception):
|
|
@@ -190,6 +195,21 @@ class ConfigParser:
|
|
|
190
195
|
if expected_duration is not None:
|
|
191
196
|
expected_duration = timedelta(seconds=int(expected_duration))
|
|
192
197
|
|
|
198
|
+
if video_codec := data.get(VIDEO_CODEC, None):
|
|
199
|
+
video_codec = VideoCodec(video_codec)
|
|
200
|
+
else:
|
|
201
|
+
video_codec = DetectConfig.video_codec
|
|
202
|
+
|
|
203
|
+
if encoding_speed := data.get(ENCODING_SPEED, None):
|
|
204
|
+
encoding_speed = EncodingSpeed(encoding_speed)
|
|
205
|
+
else:
|
|
206
|
+
encoding_speed = DetectConfig.encoding_speed
|
|
207
|
+
|
|
208
|
+
if data.get(CRF, None) is not None:
|
|
209
|
+
crf = ConstantRateFactor[data[CRF]]
|
|
210
|
+
else:
|
|
211
|
+
crf = DetectConfig.crf
|
|
212
|
+
|
|
193
213
|
start_time = self._parse_start_time(data)
|
|
194
214
|
return DetectConfig(
|
|
195
215
|
paths=sources,
|
|
@@ -202,9 +222,9 @@ class ConfigParser:
|
|
|
202
222
|
detect_start=data.get(DETECT_START, DetectConfig.detect_start),
|
|
203
223
|
detect_end=data.get(DETECT_END, DetectConfig.detect_end),
|
|
204
224
|
write_video=data.get(WRITE_VIDEO, DetectConfig.write_video),
|
|
205
|
-
video_codec=
|
|
206
|
-
encoding_speed=
|
|
207
|
-
crf=
|
|
225
|
+
video_codec=video_codec,
|
|
226
|
+
encoding_speed=encoding_speed,
|
|
227
|
+
crf=crf,
|
|
208
228
|
)
|
|
209
229
|
|
|
210
230
|
def parse_yolo_config(self, data: dict) -> YoloConfig:
|
|
@@ -76,8 +76,9 @@ class OttrkBuilder:
|
|
|
76
76
|
t_min=self.config.t_min,
|
|
77
77
|
t_miss_max=self.config.t_miss_max,
|
|
78
78
|
)
|
|
79
|
-
result[dataformat.
|
|
80
|
-
|
|
79
|
+
tracking_metadata = result[dataformat.TRACKING]
|
|
80
|
+
tracking_metadata[dataformat.TRACKING_RUN_ID] = self.config.tracking_run_id
|
|
81
|
+
tracking_metadata[dataformat.FRAME_GROUP] = self.config.frame_group
|
|
81
82
|
return result
|
|
82
83
|
|
|
83
84
|
def _build_data(self) -> list[dict]:
|
|
@@ -68,6 +68,8 @@ class DetectBuilder(ABC):
|
|
|
68
68
|
|
|
69
69
|
@cached_property
|
|
70
70
|
def configure_logger(self) -> ConfigureLogger:
|
|
71
|
+
if self._configure_logger is not None:
|
|
72
|
+
return self._configure_logger
|
|
71
73
|
return ConfigureLogger()
|
|
72
74
|
|
|
73
75
|
@cached_property
|
|
@@ -94,6 +96,8 @@ class DetectBuilder(ABC):
|
|
|
94
96
|
|
|
95
97
|
@cached_property
|
|
96
98
|
def current_config(self) -> CurrentConfig:
|
|
99
|
+
if self.__current_config is not None:
|
|
100
|
+
return self.__current_config
|
|
97
101
|
return CurrentConfig(Config())
|
|
98
102
|
|
|
99
103
|
@cached_property
|
|
@@ -173,8 +177,15 @@ class DetectBuilder(ABC):
|
|
|
173
177
|
def detect_config(self) -> DetectConfig:
|
|
174
178
|
return self.current_config.get().detect
|
|
175
179
|
|
|
176
|
-
def __init__(
|
|
180
|
+
def __init__(
|
|
181
|
+
self,
|
|
182
|
+
argv: list[str] | None = None,
|
|
183
|
+
current_config: CurrentConfig | None = None,
|
|
184
|
+
configure_logger: ConfigureLogger | None = None,
|
|
185
|
+
) -> None:
|
|
177
186
|
self.argv = argv
|
|
187
|
+
self.__current_config = current_config
|
|
188
|
+
self._configure_logger = configure_logger
|
|
178
189
|
|
|
179
190
|
@property
|
|
180
191
|
@abstractmethod
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from pathlib import Path
|
|
2
|
+
from typing import Any
|
|
2
3
|
|
|
3
4
|
from OTVision.application.buffer import Buffer
|
|
4
5
|
from OTVision.application.config import Config, TrackConfig
|
|
@@ -66,7 +67,7 @@ class StreamOttrkFileWriter(Buffer[TrackedFrame, OtdetFileWrittenEvent]):
|
|
|
66
67
|
)
|
|
67
68
|
self._builder.set_config(builder_config)
|
|
68
69
|
last_frame = tracked_frames[-1]
|
|
69
|
-
self._builder.add_tracked_frames(
|
|
70
|
+
self._builder.add_tracked_frames(tracked_frames)
|
|
70
71
|
self._ottrk_unfinished_tracks = last_frame.unfinished_tracks
|
|
71
72
|
self.reset()
|
|
72
73
|
|
|
@@ -103,9 +104,18 @@ class StreamOttrkFileWriter(Buffer[TrackedFrame, OtdetFileWrittenEvent]):
|
|
|
103
104
|
)
|
|
104
105
|
logger().warning(f"Unfinished tracks: {self._ottrk_unfinished_tracks}")
|
|
105
106
|
if self.build_condition_fulfilled:
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
107
|
+
self._create_ottrk()
|
|
108
|
+
|
|
109
|
+
def _create_ottrk(self) -> None:
|
|
110
|
+
ottrk_data = self._builder.build()
|
|
111
|
+
self.write(ottrk_data)
|
|
112
|
+
self.full_reset()
|
|
113
|
+
|
|
114
|
+
def full_reset(self) -> None:
|
|
115
|
+
self._in_writing_state = False
|
|
116
|
+
self._builder.reset()
|
|
117
|
+
self._ottrk_unfinished_tracks = set()
|
|
118
|
+
self._current_output_file = None
|
|
109
119
|
|
|
110
120
|
def write(self, ottrk: dict) -> None:
|
|
111
121
|
write_json(
|
|
@@ -114,3 +124,6 @@ class StreamOttrkFileWriter(Buffer[TrackedFrame, OtdetFileWrittenEvent]):
|
|
|
114
124
|
filetype=self.config.filetypes.track,
|
|
115
125
|
overwrite=True,
|
|
116
126
|
)
|
|
127
|
+
|
|
128
|
+
def force_flush(self, _: Any) -> None:
|
|
129
|
+
self._create_ottrk()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: OTVision
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.14
|
|
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/
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
from datetime import datetime, timedelta
|
|
1
2
|
from pathlib import Path
|
|
2
3
|
from unittest.mock import Mock
|
|
3
4
|
|
|
@@ -5,11 +6,92 @@ import pytest
|
|
|
5
6
|
|
|
6
7
|
from OTVision.application.config import (
|
|
7
8
|
Config,
|
|
9
|
+
DetectConfig,
|
|
8
10
|
StreamConfig,
|
|
9
11
|
TrackConfig,
|
|
12
|
+
YoloConfig,
|
|
10
13
|
_TrackIouConfig,
|
|
11
14
|
)
|
|
12
15
|
from OTVision.application.config_parser import ConfigParser, InvalidOtvisionConfigError
|
|
16
|
+
from OTVision.plugin.ffmpeg_video_writer import (
|
|
17
|
+
ConstantRateFactor,
|
|
18
|
+
EncodingSpeed,
|
|
19
|
+
VideoCodec,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
# Ensure paths are translated to the respective platform (unix, windows)
|
|
23
|
+
VIDEO_1 = str(Path("tests/data/video1.mp4"))
|
|
24
|
+
VIDEO_2 = str(Path("tests/data/video2.mp4"))
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class TestConfigParser:
|
|
28
|
+
@pytest.fixture
|
|
29
|
+
def given_deserializer(self) -> Mock:
|
|
30
|
+
return Mock()
|
|
31
|
+
|
|
32
|
+
@pytest.fixture
|
|
33
|
+
def given_config_parser(self, given_deserializer: Mock) -> ConfigParser:
|
|
34
|
+
return ConfigParser(given_deserializer)
|
|
35
|
+
|
|
36
|
+
def test_parse_detect_config_with_fully_specified_config(
|
|
37
|
+
self, given_config_parser: ConfigParser
|
|
38
|
+
) -> None:
|
|
39
|
+
detect_dict = {
|
|
40
|
+
"PATHS": [VIDEO_1, VIDEO_2],
|
|
41
|
+
"RUN_CHAINED": False,
|
|
42
|
+
"YOLO": {
|
|
43
|
+
"WEIGHTS": "yolov8m.pt",
|
|
44
|
+
"CONF": 0.35,
|
|
45
|
+
"IOU": 0.5,
|
|
46
|
+
"IMGSIZE": 1280,
|
|
47
|
+
"NORMALIZED": False,
|
|
48
|
+
},
|
|
49
|
+
"EXPECTED_DURATION": 3600,
|
|
50
|
+
"OVERWRITE": False,
|
|
51
|
+
"HALF_PRECISION": True,
|
|
52
|
+
"START_TIME": "2025-10-15_14-30-00",
|
|
53
|
+
"DETECT_START": 10,
|
|
54
|
+
"DETECT_END": 100,
|
|
55
|
+
"WRITE_VIDEO": True,
|
|
56
|
+
"VIDEO_CODEC": "h264_nvenc",
|
|
57
|
+
"ENCODING_SPEED": "medium",
|
|
58
|
+
"CRF": "HIGH_QUALITY",
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
result = given_config_parser.parse_detect_config(detect_dict)
|
|
62
|
+
|
|
63
|
+
expected = DetectConfig(
|
|
64
|
+
paths=[VIDEO_1, VIDEO_2],
|
|
65
|
+
run_chained=False,
|
|
66
|
+
yolo_config=YoloConfig(
|
|
67
|
+
weights="yolov8m.pt",
|
|
68
|
+
conf=0.35,
|
|
69
|
+
iou=0.5,
|
|
70
|
+
img_size=1280,
|
|
71
|
+
normalized=False,
|
|
72
|
+
),
|
|
73
|
+
expected_duration=timedelta(seconds=3600),
|
|
74
|
+
overwrite=False,
|
|
75
|
+
half_precision=True,
|
|
76
|
+
start_time=datetime(2025, 10, 15, 14, 30, 0),
|
|
77
|
+
detect_start=10,
|
|
78
|
+
detect_end=100,
|
|
79
|
+
write_video=True,
|
|
80
|
+
video_codec=VideoCodec.H264_NVENC,
|
|
81
|
+
encoding_speed=EncodingSpeed.MEDIUM,
|
|
82
|
+
crf=ConstantRateFactor.HIGH_QUALITY,
|
|
83
|
+
)
|
|
84
|
+
assert result == expected
|
|
85
|
+
|
|
86
|
+
def test_parse_detect_config_with_empty_config(
|
|
87
|
+
self, given_config_parser: ConfigParser
|
|
88
|
+
) -> None:
|
|
89
|
+
detect_dict: dict = {}
|
|
90
|
+
|
|
91
|
+
result = given_config_parser.parse_detect_config(detect_dict)
|
|
92
|
+
|
|
93
|
+
expected = DetectConfig()
|
|
94
|
+
assert result == expected
|
|
13
95
|
|
|
14
96
|
|
|
15
97
|
class TestConfigParserValidateFlushBufferSupportTrackLifecycle:
|
|
@@ -348,6 +348,8 @@ def create_expected_track_metadata(
|
|
|
348
348
|
config.t_min,
|
|
349
349
|
config.t_miss_max,
|
|
350
350
|
),
|
|
351
|
+
dataformat.TRACKING_RUN_ID: config.tracking_run_id,
|
|
352
|
+
dataformat.FRAME_GROUP: config.frame_group,
|
|
351
353
|
},
|
|
352
354
|
}
|
|
353
355
|
|
|
@@ -431,14 +433,11 @@ def create_expected_ottrk(
|
|
|
431
433
|
) -> dict:
|
|
432
434
|
otdet_metadata = create_otdet_metadata(actual_duration, expected_duration)
|
|
433
435
|
track_metadata = create_expected_track_metadata(actual_duration, expected_duration)
|
|
434
|
-
config = create_ottrk_builder_config(actual_duration, expected_duration)
|
|
435
436
|
|
|
436
437
|
# Add the missing fields that OttrkBuilder adds
|
|
437
438
|
combined_metadata = {
|
|
438
439
|
**otdet_metadata,
|
|
439
440
|
**track_metadata,
|
|
440
|
-
dataformat.TRACKING_RUN_ID: config.tracking_run_id,
|
|
441
|
-
dataformat.FRAME_GROUP: config.frame_group,
|
|
442
441
|
}
|
|
443
442
|
|
|
444
443
|
return {
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.12 → otvision-0.6.14}/OTVision/application/detect/current_object_detector_metadata.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
|
{otvision-0.6.12 → otvision-0.6.14}/OTVision/application/track/update_current_track_config.py
RENAMED
|
File without changes
|
{otvision-0.6.12 → otvision-0.6.14}/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
|