OTVision 0.6.9__tar.gz → 0.6.10__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (344) hide show
  1. {otvision-0.6.9 → otvision-0.6.10}/.github/workflows/release-pypi.yml +5 -6
  2. {otvision-0.6.9 → otvision-0.6.10}/.github/workflows/release-testpypi.yml +6 -6
  3. otvision-0.6.10/.github/workflows/test.yml +30 -0
  4. {otvision-0.6.9 → otvision-0.6.10}/OTVision/version.py +1 -1
  5. {otvision-0.6.9 → otvision-0.6.10}/PKG-INFO +9 -2
  6. {otvision-0.6.9 → otvision-0.6.10}/config.yml +8 -14
  7. otvision-0.6.10/install.cmd +19 -0
  8. {otvision-0.6.9 → otvision-0.6.10}/install.sh +8 -7
  9. otvision-0.6.10/install_cuda.cmd +19 -0
  10. otvision-0.6.10/install_cuda.sh +27 -0
  11. {otvision-0.6.9 → otvision-0.6.10}/install_dev.cmd +2 -3
  12. {otvision-0.6.9 → otvision-0.6.10}/install_dev.sh +1 -2
  13. otvision-0.6.10/pyproject.toml +157 -0
  14. {otvision-0.6.9 → otvision-0.6.10}/update_precommit.py +10 -0
  15. otvision-0.6.10/uv.lock +1951 -0
  16. otvision-0.6.9/.github/workflows/test.yml +0 -25
  17. otvision-0.6.9/install.cmd +0 -16
  18. otvision-0.6.9/pyproject.toml +0 -62
  19. otvision-0.6.9/requirements-dev.txt +0 -15
  20. otvision-0.6.9/requirements.txt +0 -18
  21. {otvision-0.6.9 → otvision-0.6.10}/.editorconfig +0 -0
  22. {otvision-0.6.9 → otvision-0.6.10}/.flake8 +0 -0
  23. {otvision-0.6.9 → otvision-0.6.10}/.github/dependabot.yml +0 -0
  24. {otvision-0.6.9 → otvision-0.6.10}/.github/workflows/build-nightly.yml +0 -0
  25. {otvision-0.6.9 → otvision-0.6.10}/.github/workflows/build-release.yml +0 -0
  26. {otvision-0.6.9 → otvision-0.6.10}/.github/workflows/linter.yml +0 -0
  27. {otvision-0.6.9 → otvision-0.6.10}/.gitignore +0 -0
  28. {otvision-0.6.9 → otvision-0.6.10}/.pre-commit-config.yaml +0 -0
  29. {otvision-0.6.9 → otvision-0.6.10}/.vscode/launch.json +0 -0
  30. {otvision-0.6.9 → otvision-0.6.10}/.vscode/scripts/build_debug_env.cmd +0 -0
  31. {otvision-0.6.9 → otvision-0.6.10}/.vscode/scripts/build_debug_env.sh +0 -0
  32. {otvision-0.6.9 → otvision-0.6.10}/.vscode/scripts/teardown_debug_env.cmd +0 -0
  33. {otvision-0.6.9 → otvision-0.6.10}/.vscode/scripts/teardown_debug_env.sh +0 -0
  34. {otvision-0.6.9 → otvision-0.6.10}/.vscode/settings.json +0 -0
  35. {otvision-0.6.9 → otvision-0.6.10}/.vscode/tasks.json +0 -0
  36. {otvision-0.6.9 → otvision-0.6.10}/.yamllint.yaml +0 -0
  37. {otvision-0.6.9 → otvision-0.6.10}/LICENSE +0 -0
  38. {otvision-0.6.9 → otvision-0.6.10}/OTVision/__init__.py +0 -0
  39. {otvision-0.6.9 → otvision-0.6.10}/OTVision/abstraction/__init__.py +0 -0
  40. {otvision-0.6.9 → otvision-0.6.10}/OTVision/abstraction/defaults.py +0 -0
  41. {otvision-0.6.9 → otvision-0.6.10}/OTVision/abstraction/observer.py +0 -0
  42. {otvision-0.6.9 → otvision-0.6.10}/OTVision/abstraction/pipes_and_filter.py +0 -0
  43. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/__init__.py +0 -0
  44. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/buffer.py +0 -0
  45. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/config.py +0 -0
  46. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/config_parser.py +0 -0
  47. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/configure_logger.py +0 -0
  48. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/detect/__init__.py +0 -0
  49. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/detect/current_object_detector.py +0 -0
  50. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/detect/current_object_detector_metadata.py +0 -0
  51. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/detect/detected_frame_factory.py +0 -0
  52. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/detect/factory.py +0 -0
  53. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/detect/get_detect_cli_args.py +0 -0
  54. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/detect/timestamper.py +0 -0
  55. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/detect/update_detect_config_with_cli_args.py +0 -0
  56. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/event/__init__.py +0 -0
  57. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/event/new_otvision_config.py +0 -0
  58. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/event/new_video_start.py +0 -0
  59. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/frame_count_provider.py +0 -0
  60. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/get_config.py +0 -0
  61. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/get_current_config.py +0 -0
  62. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/otvision_save_path_provider.py +0 -0
  63. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/track/__init__.py +0 -0
  64. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/track/get_track_cli_args.py +0 -0
  65. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/track/ottrk.py +0 -0
  66. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/track/tracking_run_id.py +0 -0
  67. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/track/update_current_track_config.py +0 -0
  68. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/track/update_track_config_with_cli_args.py +0 -0
  69. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/update_current_config.py +0 -0
  70. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/video/__init__.py +0 -0
  71. {otvision-0.6.9 → otvision-0.6.10}/OTVision/application/video/generate_video.py +0 -0
  72. {otvision-0.6.9 → otvision-0.6.10}/OTVision/config.py +0 -0
  73. {otvision-0.6.9 → otvision-0.6.10}/OTVision/convert/__init__.py +0 -0
  74. {otvision-0.6.9 → otvision-0.6.10}/OTVision/convert/convert.py +0 -0
  75. {otvision-0.6.9 → otvision-0.6.10}/OTVision/dataformat.py +0 -0
  76. {otvision-0.6.9 → otvision-0.6.10}/OTVision/detect/__init__.py +0 -0
  77. {otvision-0.6.9 → otvision-0.6.10}/OTVision/detect/builder.py +0 -0
  78. {otvision-0.6.9 → otvision-0.6.10}/OTVision/detect/cli.py +0 -0
  79. {otvision-0.6.9 → otvision-0.6.10}/OTVision/detect/detect.py +0 -0
  80. {otvision-0.6.9 → otvision-0.6.10}/OTVision/detect/detected_frame_buffer.py +0 -0
  81. {otvision-0.6.9 → otvision-0.6.10}/OTVision/detect/detected_frame_producer.py +0 -0
  82. {otvision-0.6.9 → otvision-0.6.10}/OTVision/detect/detected_frame_producer_factory.py +0 -0
  83. {otvision-0.6.9 → otvision-0.6.10}/OTVision/detect/file_based_detect_builder.py +0 -0
  84. {otvision-0.6.9 → otvision-0.6.10}/OTVision/detect/otdet.py +0 -0
  85. {otvision-0.6.9 → otvision-0.6.10}/OTVision/detect/otdet_file_writer.py +0 -0
  86. {otvision-0.6.9 → otvision-0.6.10}/OTVision/detect/plugin_av/__init__.py +0 -0
  87. {otvision-0.6.9 → otvision-0.6.10}/OTVision/detect/plugin_av/rotate_frame.py +0 -0
  88. {otvision-0.6.9 → otvision-0.6.10}/OTVision/detect/pyav_frame_count_provider.py +0 -0
  89. {otvision-0.6.9 → otvision-0.6.10}/OTVision/detect/rtsp_based_detect_builder.py +0 -0
  90. {otvision-0.6.9 → otvision-0.6.10}/OTVision/detect/rtsp_input_source.py +0 -0
  91. {otvision-0.6.9 → otvision-0.6.10}/OTVision/detect/timestamper.py +0 -0
  92. {otvision-0.6.9 → otvision-0.6.10}/OTVision/detect/video_input_source.py +0 -0
  93. {otvision-0.6.9 → otvision-0.6.10}/OTVision/detect/yolo.py +0 -0
  94. {otvision-0.6.9 → otvision-0.6.10}/OTVision/domain/__init__.py +0 -0
  95. {otvision-0.6.9 → otvision-0.6.10}/OTVision/domain/cli.py +0 -0
  96. {otvision-0.6.9 → otvision-0.6.10}/OTVision/domain/current_config.py +0 -0
  97. {otvision-0.6.9 → otvision-0.6.10}/OTVision/domain/detect_producer_consumer.py +0 -0
  98. {otvision-0.6.9 → otvision-0.6.10}/OTVision/domain/detection.py +0 -0
  99. {otvision-0.6.9 → otvision-0.6.10}/OTVision/domain/frame.py +0 -0
  100. {otvision-0.6.9 → otvision-0.6.10}/OTVision/domain/input_source_detect.py +0 -0
  101. {otvision-0.6.9 → otvision-0.6.10}/OTVision/domain/object_detection.py +0 -0
  102. {otvision-0.6.9 → otvision-0.6.10}/OTVision/domain/serialization.py +0 -0
  103. {otvision-0.6.9 → otvision-0.6.10}/OTVision/domain/time.py +0 -0
  104. {otvision-0.6.9 → otvision-0.6.10}/OTVision/domain/video_writer.py +0 -0
  105. {otvision-0.6.9 → otvision-0.6.10}/OTVision/helpers/__init__.py +0 -0
  106. {otvision-0.6.9 → otvision-0.6.10}/OTVision/helpers/date.py +0 -0
  107. {otvision-0.6.9 → otvision-0.6.10}/OTVision/helpers/files.py +0 -0
  108. {otvision-0.6.9 → otvision-0.6.10}/OTVision/helpers/formats.py +0 -0
  109. {otvision-0.6.9 → otvision-0.6.10}/OTVision/helpers/input_types.py +0 -0
  110. {otvision-0.6.9 → otvision-0.6.10}/OTVision/helpers/log.py +0 -0
  111. {otvision-0.6.9 → otvision-0.6.10}/OTVision/helpers/machine.py +0 -0
  112. {otvision-0.6.9 → otvision-0.6.10}/OTVision/helpers/video.py +0 -0
  113. {otvision-0.6.9 → otvision-0.6.10}/OTVision/plugin/__init__.py +0 -0
  114. {otvision-0.6.9 → otvision-0.6.10}/OTVision/plugin/ffmpeg_video_writer.py +0 -0
  115. {otvision-0.6.9 → otvision-0.6.10}/OTVision/plugin/generate_video.py +0 -0
  116. {otvision-0.6.9 → otvision-0.6.10}/OTVision/plugin/yaml_serialization.py +0 -0
  117. {otvision-0.6.9 → otvision-0.6.10}/OTVision/track/__init__.py +0 -0
  118. {otvision-0.6.9 → otvision-0.6.10}/OTVision/track/builder.py +0 -0
  119. {otvision-0.6.9 → otvision-0.6.10}/OTVision/track/cli.py +0 -0
  120. {otvision-0.6.9 → otvision-0.6.10}/OTVision/track/exporter/__init__.py +0 -0
  121. {otvision-0.6.9 → otvision-0.6.10}/OTVision/track/exporter/filebased_exporter.py +0 -0
  122. {otvision-0.6.9 → otvision-0.6.10}/OTVision/track/id_generator.py +0 -0
  123. {otvision-0.6.9 → otvision-0.6.10}/OTVision/track/model/__init__.py +0 -0
  124. {otvision-0.6.9 → otvision-0.6.10}/OTVision/track/model/filebased/__init__.py +0 -0
  125. {otvision-0.6.9 → otvision-0.6.10}/OTVision/track/model/filebased/frame_chunk.py +0 -0
  126. {otvision-0.6.9 → otvision-0.6.10}/OTVision/track/model/filebased/frame_group.py +0 -0
  127. {otvision-0.6.9 → otvision-0.6.10}/OTVision/track/model/track_exporter.py +0 -0
  128. {otvision-0.6.9 → otvision-0.6.10}/OTVision/track/model/tracking_interfaces.py +0 -0
  129. {otvision-0.6.9 → otvision-0.6.10}/OTVision/track/parser/__init__.py +0 -0
  130. {otvision-0.6.9 → otvision-0.6.10}/OTVision/track/parser/chunk_parser_plugins.py +0 -0
  131. {otvision-0.6.9 → otvision-0.6.10}/OTVision/track/parser/frame_group_parser_plugins.py +0 -0
  132. {otvision-0.6.9 → otvision-0.6.10}/OTVision/track/stream_ottrk_file_writer.py +0 -0
  133. {otvision-0.6.9 → otvision-0.6.10}/OTVision/track/track.py +0 -0
  134. {otvision-0.6.9 → otvision-0.6.10}/OTVision/track/tracker/__init__.py +0 -0
  135. {otvision-0.6.9 → otvision-0.6.10}/OTVision/track/tracker/filebased_tracking.py +0 -0
  136. {otvision-0.6.9 → otvision-0.6.10}/OTVision/track/tracker/tracker_plugin_iou.py +0 -0
  137. {otvision-0.6.9 → otvision-0.6.10}/OTVision/transform/__init__.py +0 -0
  138. {otvision-0.6.9 → otvision-0.6.10}/OTVision/transform/get_homography.py +0 -0
  139. {otvision-0.6.9 → otvision-0.6.10}/OTVision/transform/reference_points_picker.py +0 -0
  140. {otvision-0.6.9 → otvision-0.6.10}/OTVision/transform/transform.py +0 -0
  141. {otvision-0.6.9 → otvision-0.6.10}/OTVision/view/__init__.py +0 -0
  142. {otvision-0.6.9 → otvision-0.6.10}/OTVision/view/helpers/OTC.ico +0 -0
  143. {otvision-0.6.9 → otvision-0.6.10}/OTVision/view/view.py +0 -0
  144. {otvision-0.6.9 → otvision-0.6.10}/OTVision/view/view_convert.py +0 -0
  145. {otvision-0.6.9 → otvision-0.6.10}/OTVision/view/view_detect.py +0 -0
  146. {otvision-0.6.9 → otvision-0.6.10}/OTVision/view/view_helpers.py +0 -0
  147. {otvision-0.6.9 → otvision-0.6.10}/OTVision/view/view_track.py +0 -0
  148. {otvision-0.6.9 → otvision-0.6.10}/OTVision/view/view_transform.py +0 -0
  149. {otvision-0.6.9 → otvision-0.6.10}/OTVision.bat +0 -0
  150. {otvision-0.6.9 → otvision-0.6.10}/README.md +0 -0
  151. {otvision-0.6.9 → otvision-0.6.10}/clean-up-repository.sh +0 -0
  152. {otvision-0.6.9 → otvision-0.6.10}/convert.py +0 -0
  153. {otvision-0.6.9 → otvision-0.6.10}/detect.py +0 -0
  154. {otvision-0.6.9 → otvision-0.6.10}/export_models.py +0 -0
  155. {otvision-0.6.9 → otvision-0.6.10}/generate_video.py +0 -0
  156. {otvision-0.6.9 → otvision-0.6.10}/reference_points_picker.py +0 -0
  157. {otvision-0.6.9 → otvision-0.6.10}/tests/__init__.py +0 -0
  158. {otvision-0.6.9 → otvision-0.6.10}/tests/abstraction/__init__.py +0 -0
  159. {otvision-0.6.9 → otvision-0.6.10}/tests/abstraction/test_defaults.py +0 -0
  160. {otvision-0.6.9 → otvision-0.6.10}/tests/abstraction/test_observer.py +0 -0
  161. {otvision-0.6.9 → otvision-0.6.10}/tests/application/__init__.py +0 -0
  162. {otvision-0.6.9 → otvision-0.6.10}/tests/application/detect/__init__.py +0 -0
  163. {otvision-0.6.9 → otvision-0.6.10}/tests/application/detect/test_current_object_detector.py +0 -0
  164. {otvision-0.6.9 → otvision-0.6.10}/tests/application/detect/test_detected_frame_factory.py +0 -0
  165. {otvision-0.6.9 → otvision-0.6.10}/tests/application/detect/test_get_detect_cli_args.py +0 -0
  166. {otvision-0.6.9 → otvision-0.6.10}/tests/application/detect/test_timestamper.py +0 -0
  167. {otvision-0.6.9 → otvision-0.6.10}/tests/application/detect/test_update_detect_config_with_cli_args.py +0 -0
  168. {otvision-0.6.9 → otvision-0.6.10}/tests/application/test_buffer.py +0 -0
  169. {otvision-0.6.9 → otvision-0.6.10}/tests/application/test_config_parser.py +0 -0
  170. {otvision-0.6.9 → otvision-0.6.10}/tests/application/test_get_config.py +0 -0
  171. {otvision-0.6.9 → otvision-0.6.10}/tests/application/test_otvision_save_path_provider.py +0 -0
  172. {otvision-0.6.9 → otvision-0.6.10}/tests/application/track/__init__.py +0 -0
  173. {otvision-0.6.9 → otvision-0.6.10}/tests/application/track/test_get_track_cli_args.py +0 -0
  174. {otvision-0.6.9 → otvision-0.6.10}/tests/application/track/test_ottrk.py +0 -0
  175. {otvision-0.6.9 → otvision-0.6.10}/tests/application/track/test_update_current_track_config.py +0 -0
  176. {otvision-0.6.9 → otvision-0.6.10}/tests/application/track/test_update_track_config_with_cli_args.py +0 -0
  177. {otvision-0.6.9 → otvision-0.6.10}/tests/cli/custom_cli_test_config.yaml +0 -0
  178. {otvision-0.6.9 → otvision-0.6.10}/tests/cli/test_convert_cli.py +0 -0
  179. {otvision-0.6.9 → otvision-0.6.10}/tests/cli/test_detect_cli.py +0 -0
  180. {otvision-0.6.9 → otvision-0.6.10}/tests/cli/test_track_cli.py +0 -0
  181. {otvision-0.6.9 → otvision-0.6.10}/tests/conftest.py +0 -0
  182. {otvision-0.6.9 → otvision-0.6.10}/tests/convert/__init__.py +0 -0
  183. {otvision-0.6.9 → otvision-0.6.10}/tests/convert/test_convert.py +0 -0
  184. {otvision-0.6.9 → otvision-0.6.10}/tests/data/Testvideo_CamView.png +0 -0
  185. {otvision-0.6.9 → otvision-0.6.10}/tests/data/Testvideo_CamView_Cars-Cyclist.png +0 -0
  186. {otvision-0.6.9 → otvision-0.6.10}/tests/data/Testvideo_CamView_Cars-Truck.png +0 -0
  187. {otvision-0.6.9 → otvision-0.6.10}/tests/data/Testvideo_CamView_refpts.png +0 -0
  188. {otvision-0.6.9 → otvision-0.6.10}/tests/data/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.gpkg +0 -0
  189. {otvision-0.6.9 → otvision-0.6.10}/tests/data/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
  190. {otvision-0.6.9 → otvision-0.6.10}/tests/data/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
  191. {otvision-0.6.9 → otvision-0.6.10}/tests/data/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
  192. {otvision-0.6.9 → otvision-0.6.10}/tests/data/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otrfpts +0 -0
  193. {otvision-0.6.9 → otvision-0.6.10}/tests/data/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
  194. {otvision-0.6.9 → otvision-0.6.10}/tests/data/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.gpkg +0 -0
  195. {otvision-0.6.9 → otvision-0.6.10}/tests/data/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
  196. {otvision-0.6.9 → otvision-0.6.10}/tests/data/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
  197. {otvision-0.6.9 → otvision-0.6.10}/tests/data/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
  198. {otvision-0.6.9 → otvision-0.6.10}/tests/data/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otrfpts +0 -0
  199. {otvision-0.6.9 → otvision-0.6.10}/tests/data/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
  200. {otvision-0.6.9 → otvision-0.6.10}/tests/data/Testvideo_FR20.otrfpts +0 -0
  201. {otvision-0.6.9 → otvision-0.6.10}/tests/data/Testvideo_Satellite.jpg +0 -0
  202. {otvision-0.6.9 → otvision-0.6.10}/tests/data/Testvideo_Satellite_far.jpg +0 -0
  203. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/default/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
  204. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/default/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
  205. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/default/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
  206. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/default/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
  207. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/fail_fps_from_filename/Testvideo_Cars-Cyclist_F20_2020-01-01_00-00-00.h264 +0 -0
  208. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/fail_fps_from_filename/Testvideo_Cars-Truck_2020-01-01_00-00-00.h264 +0 -0
  209. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/fps_from_filename/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
  210. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/fps_from_filename/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
  211. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/fps_from_filename/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
  212. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/fps_from_filename/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
  213. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/input_fps_20/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
  214. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/input_fps_20/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
  215. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/input_fps_20/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
  216. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/input_fps_20/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
  217. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/input_fps_40/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
  218. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/input_fps_40/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
  219. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/input_fps_40/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
  220. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/input_fps_40/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
  221. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/output_filetype_avi/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.avi +0 -0
  222. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/output_filetype_avi/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
  223. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/output_filetype_avi/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.avi +0 -0
  224. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/output_filetype_avi/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
  225. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/output_filetype_mkv/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
  226. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/output_filetype_mkv/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mkv +0 -0
  227. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/output_filetype_mkv/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
  228. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/output_filetype_mkv/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mkv +0 -0
  229. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/output_filetype_mov/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
  230. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/output_filetype_mov/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mov +0 -0
  231. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/output_filetype_mov/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
  232. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/output_filetype_mov/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mov +0 -0
  233. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/output_filetype_mp4/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
  234. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/output_filetype_mp4/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
  235. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/output_filetype_mp4/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
  236. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/output_filetype_mp4/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
  237. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/rotation/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00_rotate.h264 +0 -0
  238. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/rotation/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00_rotate.mov +0 -0
  239. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/rotation/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00_rotate.mp4 +0 -0
  240. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/rotation/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00_rotate.h264 +0 -0
  241. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/rotation/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00_rotate.mov +0 -0
  242. {otvision-0.6.9 → otvision-0.6.10}/tests/data/convert/rotation/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00_rotate.mp4 +0 -0
  243. {otvision-0.6.9 → otvision-0.6.10}/tests/data/detect/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
  244. {otvision-0.6.9 → otvision-0.6.10}/tests/data/detect/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
  245. {otvision-0.6.9 → otvision-0.6.10}/tests/data/detect/default/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
  246. {otvision-0.6.9 → otvision-0.6.10}/tests/data/detect/default/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
  247. {otvision-0.6.9 → otvision-0.6.10}/tests/data/detect/rotated-Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
  248. {otvision-0.6.9 → otvision-0.6.10}/tests/data/log/_otvision_logs/test.log +0 -0
  249. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/default/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
  250. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/default/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
  251. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/default/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
  252. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/default/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
  253. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/sigma_h_0_2/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
  254. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/sigma_h_0_2/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
  255. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/sigma_h_0_2/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
  256. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/sigma_h_0_2/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
  257. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/sigma_h_0_6/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
  258. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/sigma_h_0_6/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
  259. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/sigma_h_0_6/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
  260. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/sigma_h_0_6/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
  261. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/sigma_iou_0_2/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
  262. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/sigma_iou_0_2/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
  263. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/sigma_iou_0_2/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
  264. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/sigma_iou_0_2/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
  265. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/sigma_iou_0_6/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
  266. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/sigma_iou_0_6/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
  267. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/sigma_iou_0_6/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
  268. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/sigma_iou_0_6/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
  269. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/sigma_l_0_1/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
  270. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/sigma_l_0_1/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
  271. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/sigma_l_0_1/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
  272. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/sigma_l_0_1/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
  273. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/sigma_l_0_5/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
  274. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/sigma_l_0_5/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
  275. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/sigma_l_0_5/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
  276. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/sigma_l_0_5/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
  277. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/t_min_10/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
  278. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/t_min_10/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
  279. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/t_min_10/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
  280. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/t_min_10/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
  281. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/t_min_3/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
  282. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/t_min_3/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
  283. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/t_min_3/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
  284. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/t_min_3/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
  285. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/t_miss_max_25/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
  286. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/t_miss_max_25/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
  287. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/t_miss_max_25/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
  288. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/t_miss_max_25/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
  289. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/t_miss_max_75/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
  290. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/t_miss_max_75/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
  291. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/t_miss_max_75/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
  292. {otvision-0.6.9 → otvision-0.6.10}/tests/data/track/t_miss_max_75/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
  293. {otvision-0.6.9 → otvision-0.6.10}/tests/data/transform/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.gpkg +0 -0
  294. {otvision-0.6.9 → otvision-0.6.10}/tests/data/transform/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otrfpts +0 -0
  295. {otvision-0.6.9 → otvision-0.6.10}/tests/data/transform/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
  296. {otvision-0.6.9 → otvision-0.6.10}/tests/data/transform/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.gpkg +0 -0
  297. {otvision-0.6.9 → otvision-0.6.10}/tests/data/transform/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otrfpts +0 -0
  298. {otvision-0.6.9 → otvision-0.6.10}/tests/data/transform/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
  299. {otvision-0.6.9 → otvision-0.6.10}/tests/data/transform/Testvideo_FR20.otrfpts +0 -0
  300. {otvision-0.6.9 → otvision-0.6.10}/tests/data/yolov8m.mlpackage/Data/com.apple.CoreML/model.mlmodel +0 -0
  301. {otvision-0.6.9 → otvision-0.6.10}/tests/data/yolov8m.mlpackage/Data/com.apple.CoreML/weights/weight.bin +0 -0
  302. {otvision-0.6.9 → otvision-0.6.10}/tests/data/yolov8m.mlpackage/Manifest.json +0 -0
  303. {otvision-0.6.9 → otvision-0.6.10}/tests/detect/__init__.py +0 -0
  304. {otvision-0.6.9 → otvision-0.6.10}/tests/detect/detect_test.py +0 -0
  305. {otvision-0.6.9 → otvision-0.6.10}/tests/detect/plugin_av/__init__.py +0 -0
  306. {otvision-0.6.9 → otvision-0.6.10}/tests/detect/plugin_av/test_rotate_frame.py +0 -0
  307. {otvision-0.6.9 → otvision-0.6.10}/tests/detect/test_detected_frame_buffer.py +0 -0
  308. {otvision-0.6.9 → otvision-0.6.10}/tests/detect/test_detected_frame_producer.py +0 -0
  309. {otvision-0.6.9 → otvision-0.6.10}/tests/detect/test_detected_frame_producer_factory.py +0 -0
  310. {otvision-0.6.9 → otvision-0.6.10}/tests/detect/test_otdet.py +0 -0
  311. {otvision-0.6.9 → otvision-0.6.10}/tests/detect/test_otdet_file_writer.py +0 -0
  312. {otvision-0.6.9 → otvision-0.6.10}/tests/detect/test_pyav_frame_count_provider.py +0 -0
  313. {otvision-0.6.9 → otvision-0.6.10}/tests/detect/test_rtsp_input_source.py +0 -0
  314. {otvision-0.6.9 → otvision-0.6.10}/tests/detect/test_video_input_source.py +0 -0
  315. {otvision-0.6.9 → otvision-0.6.10}/tests/detect/yolo_test.py +0 -0
  316. {otvision-0.6.9 → otvision-0.6.10}/tests/helpers/__init__.py +0 -0
  317. {otvision-0.6.9 → otvision-0.6.10}/tests/helpers/files_test.py +0 -0
  318. {otvision-0.6.9 → otvision-0.6.10}/tests/helpers/formats_test.py +0 -0
  319. {otvision-0.6.9 → otvision-0.6.10}/tests/helpers/test_log.py +0 -0
  320. {otvision-0.6.9 → otvision-0.6.10}/tests/log/__init__.py +0 -0
  321. {otvision-0.6.9 → otvision-0.6.10}/tests/log/log_maker.py +0 -0
  322. {otvision-0.6.9 → otvision-0.6.10}/tests/log/test_log.py +0 -0
  323. {otvision-0.6.9 → otvision-0.6.10}/tests/plugin/__init__.py +0 -0
  324. {otvision-0.6.9 → otvision-0.6.10}/tests/plugin/test_ffmpeg_video_file_writer.py +0 -0
  325. {otvision-0.6.9 → otvision-0.6.10}/tests/test_config.py +0 -0
  326. {otvision-0.6.9 → otvision-0.6.10}/tests/track/__init__.py +0 -0
  327. {otvision-0.6.9 → otvision-0.6.10}/tests/track/helper/__init__.py +0 -0
  328. {otvision-0.6.9 → otvision-0.6.10}/tests/track/helper/data_builder.py +0 -0
  329. {otvision-0.6.9 → otvision-0.6.10}/tests/track/parser/__init__.py +0 -0
  330. {otvision-0.6.9 → otvision-0.6.10}/tests/track/parser/test_chunk_parser_plugins.py +0 -0
  331. {otvision-0.6.9 → otvision-0.6.10}/tests/track/test_frame_chunk.py +0 -0
  332. {otvision-0.6.9 → otvision-0.6.10}/tests/track/test_frame_group.py +0 -0
  333. {otvision-0.6.9 → otvision-0.6.10}/tests/track/test_frame_group_parser_plugins.py +0 -0
  334. {otvision-0.6.9 → otvision-0.6.10}/tests/track/test_stream_ottrk_file_writer.py +0 -0
  335. {otvision-0.6.9 → otvision-0.6.10}/tests/track/test_track.py +0 -0
  336. {otvision-0.6.9 → otvision-0.6.10}/tests/track/test_tracking_data_structures.py +0 -0
  337. {otvision-0.6.9 → otvision-0.6.10}/tests/transform/__init__.py +0 -0
  338. {otvision-0.6.9 → otvision-0.6.10}/tests/transform/test_transform.py +0 -0
  339. {otvision-0.6.9 → otvision-0.6.10}/tests/utils/__init__.py +0 -0
  340. {otvision-0.6.9 → otvision-0.6.10}/tests/utils/generator.py +0 -0
  341. {otvision-0.6.9 → otvision-0.6.10}/tests/utils/mocking.py +0 -0
  342. {otvision-0.6.9 → otvision-0.6.10}/track.py +0 -0
  343. {otvision-0.6.9 → otvision-0.6.10}/transform.py +0 -0
  344. {otvision-0.6.9 → otvision-0.6.10}/view.py +0 -0
@@ -31,19 +31,18 @@ jobs:
31
31
  uses: actions/setup-python@v5
32
32
  with:
33
33
  python-version: "3.12"
34
+ - name: Install uv
35
+ uses: astral-sh/setup-uv@v6
36
+ with:
37
+ enable-cache: true
34
38
  - name: Update Python Package Version
35
39
  uses: platomo/update-version-py-action@v1.0.1
36
40
  with:
37
41
  version: ${{ github.ref_name }}
38
42
  file-path: "OTVision"
39
- - name: Install pypa/build
40
- shell: bash
41
- run: |
42
- python3 -m pip install build --user
43
-
44
43
  - name: Build a binary wheel and a source tarball
45
44
  shell: bash
46
- run: python -m build --outdir ${{ env.out_dir }}
45
+ run: uv build --out-dir ${{ env.out_dir }}
47
46
 
48
47
  - name: Store the distribution packages
49
48
  uses: actions/upload-artifact@v4
@@ -35,6 +35,11 @@ jobs:
35
35
  with:
36
36
  python-version: "3.12"
37
37
 
38
+ - name: Install uv
39
+ uses: astral-sh/setup-uv@v6
40
+ with:
41
+ enable-cache: true
42
+
38
43
  - name: Get latest tag and create new version
39
44
  id: get_version
40
45
  run: |
@@ -58,14 +63,9 @@ jobs:
58
63
  with:
59
64
  version: ${{ steps.get_version.outputs.new_version }}
60
65
  file-path: "OTVision"
61
- - name: Install pypa/build
62
- shell: bash
63
- run: |
64
- python3 -m pip install build --user
65
-
66
66
  - name: Build a binary wheel and a source tarball
67
67
  shell: bash
68
- run: python -m build --outdir ${{ env.out_dir }}
68
+ run: uv build --out-dir ${{ env.out_dir }}
69
69
 
70
70
  - name: Store the distribution packages
71
71
  uses: actions/upload-artifact@v4
@@ -0,0 +1,30 @@
1
+ ---
2
+ name: Test
3
+
4
+ on:
5
+ # Run tests each time a PR is opened or changed.
6
+ # Allow other Workflows (e.g., build workflows) to call this workflow.
7
+ pull_request:
8
+ workflow_call:
9
+
10
+ permissions: read-all
11
+
12
+ jobs:
13
+ test:
14
+ name: Run Python tests on multiple OS and Python versions
15
+ strategy:
16
+ fail-fast: True
17
+ matrix:
18
+ os: [ubuntu-latest, windows-latest]
19
+ py: ["3.12"]
20
+ runs-on: ${{ matrix.os }}
21
+ steps:
22
+ - name: Checkout repository
23
+ uses: actions/checkout@v4
24
+ - name: Run Python Tests
25
+ uses: platomo/test-python-app-action@v2
26
+ timeout-minutes: 60
27
+ with:
28
+ py-version: ${{ matrix.py }}
29
+ package-path: OTVision
30
+ ffmpeg-required: True
@@ -1,4 +1,4 @@
1
- __version__ = "v0.6.9"
1
+ __version__ = "v0.6.10"
2
2
 
3
3
 
4
4
  def otdet_version() -> str:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: OTVision
3
- Version: 0.6.9
3
+ Version: 0.6.10
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/
@@ -15,8 +15,9 @@ Classifier: Development Status :: 4 - Beta
15
15
  Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
16
16
  Classifier: Operating System :: OS Independent
17
17
  Classifier: Programming Language :: Python :: 3
18
- Requires-Python: >=3.11
18
+ Requires-Python: ==3.12.*
19
19
  Requires-Dist: av==13.0.0
20
+ Requires-Dist: coremltools==8.2; sys_platform == 'darwin'
20
21
  Requires-Dist: ffmpeg-python==0.2.0
21
22
  Requires-Dist: fire==0.7.0
22
23
  Requires-Dist: geopandas==1.0.1
@@ -33,6 +34,12 @@ Requires-Dist: torchvision==0.22.1
33
34
  Requires-Dist: tqdm==4.67.1
34
35
  Requires-Dist: ujson==5.10.0
35
36
  Requires-Dist: ultralytics==8.3.159
37
+ Provides-Extra: cuda
38
+ Requires-Dist: tensorrt-cu12-bindings==10.12.0.36; (sys_platform != 'darwin') and extra == 'cuda'
39
+ Requires-Dist: tensorrt-cu12-libs==10.12.0.36; (sys_platform != 'darwin') and extra == 'cuda'
40
+ Requires-Dist: tensorrt==10.12.0.36; (sys_platform != 'darwin') and extra == 'cuda'
41
+ Requires-Dist: torch; extra == 'cuda'
42
+ Requires-Dist: torchvision; extra == 'cuda'
36
43
  Description-Content-Type: text/markdown
37
44
 
38
45
  # OTVision
@@ -1,7 +1,7 @@
1
1
  base_files:
2
2
  - "LICENSE"
3
3
  - "README.md"
4
- - "requirements.txt"
4
+ - "pyproject.toml"
5
5
  - "user_config.otvision.yaml"
6
6
  - "track.py"
7
7
  - "detect.py"
@@ -28,26 +28,20 @@ configurations:
28
28
  suffix: "macos"
29
29
  output_file_name: OTVision
30
30
  additional_requirements:
31
- - "coremltools==7.2; sys_platform == 'darwin'"
31
+ - ""
32
32
  - package_path: OTVision
33
33
  files:
34
- - source: "install.cmd"
34
+ - source: "install_cuda.cmd"
35
+ destination: "install.cmd"
35
36
  suffix: "win-cuda"
36
37
  output_file_name: otvision
37
38
  additional_requirements:
38
- - "--extra-index-url https://pypi.nvidia.com/"
39
- - "--extra-index-url https://download.pytorch.org/whl/cu128"
40
- - "tensorrt==10.12.0.36"
41
- - "tensorrt-cu12-bindings==10.12.0.36"
42
- - "tensorrt-cu12-libs==10.12.0.36"
39
+ - ""
43
40
  - package_path: OTVision
44
41
  files:
45
- - source: "install.sh"
42
+ - source: "install_cuda.sh"
43
+ destination: "install.sh"
46
44
  suffix: "linux-cuda"
47
45
  output_file_name: OTVision
48
46
  additional_requirements:
49
- - "--extra-index-url https://pypi.nvidia.com/"
50
- - "--extra-index-url https://download.pytorch.org/whl/cu128"
51
- - "tensorrt==10.12.0.36"
52
- - "tensorrt-cu12-bindings==10.12.0.36"
53
- - "tensorrt-cu12-libs==10.12.0.36"
47
+ - ""
@@ -0,0 +1,19 @@
1
+ echo Install OTVision.
2
+ @echo off
3
+ FOR /F "tokens=* USEBACKQ" %%F IN (`python --version`) DO SET "PYTHON_VERSION=%%F"
4
+
5
+ echo %PYTHON_VERSION%
6
+ if "x%PYTHON_VERSION:3.12=%"=="x%PYTHON_VERSION%" (
7
+ echo "Python Version 3.12 is not installed in environment." & cmd /K & exit
8
+ )
9
+
10
+ REM Check if uv is available globally, if not install it
11
+ where uv >nul 2>nul
12
+ if errorlevel neq 0 (
13
+ echo uv not found globally, installing uv...
14
+ powershell -ExecutionPolicy Bypass -Command "& {irm https://astral.sh/uv/install.ps1 | iex}"
15
+ set "PATH=%USERPROFILE%\.cargo\bin;%PATH%"
16
+ )
17
+
18
+ uv venv .venv
19
+ uv sync --python .venv%
@@ -15,12 +15,13 @@ echo "$DIR"
15
15
  cd "$DIR" || exit
16
16
  WORKING_DIR=$(pwd)
17
17
  VENV="$WORKING_DIR"/.venv
18
- PYTHON="$VENV"/bin/python
19
- PIP="$VENV"/bin/pip
20
- UV="$VENV"/bin/uv
21
18
 
22
- python3.12 -m venv "$VENV"
19
+ # Check if uv is available globally, if not install it
20
+ if ! command -v uv &>/dev/null; then
21
+ echo "uv not found globally, installing uv..."
22
+ curl -LsSf https://astral.sh/uv/install.sh | sh
23
+ export PATH="$HOME/.cargo/bin:$PATH"
24
+ fi
23
25
 
24
- $PYTHON -m pip install --upgrade pip
25
- $PIP install uv
26
- $UV pip install -r requirements.txt --index-strategy unsafe-best-match --python .venv
26
+ uv venv "$VENV"
27
+ uv sync --python "$VENV"
@@ -0,0 +1,19 @@
1
+ echo Install OTVision.
2
+ @echo off
3
+ FOR /F "tokens=* USEBACKQ" %%F IN (`python --version`) DO SET "PYTHON_VERSION=%%F"
4
+
5
+ echo %PYTHON_VERSION%
6
+ if "x%PYTHON_VERSION:3.12=%"=="x%PYTHON_VERSION%" (
7
+ echo "Python Version 3.12 is not installed in environment." & cmd /K & exit
8
+ )
9
+
10
+ REM Check if uv is available globally, if not install it
11
+ where uv >nul 2>nul
12
+ if errorlevel neq 0 (
13
+ echo uv not found globally, installing uv...
14
+ powershell -ExecutionPolicy Bypass -Command "& {irm https://astral.sh/uv/install.ps1 | iex}"
15
+ set "PATH=%USERPROFILE%\.cargo\bin;%PATH%"
16
+ )
17
+
18
+ uv venv .venv
19
+ uv sync --extra cuda --python .venv
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env bash
2
+
3
+ SOURCE=${BASH_SOURCE[0]}
4
+ while [ -L "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
5
+ DIR=$(cd -P "$(dirname "$SOURCE")" >/dev/null 2>&1 && pwd)
6
+ SOURCE=$(readlink "$SOURCE")
7
+ [[ $SOURCE != /* ]] && SOURCE=$DIR/$SOURCE # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
8
+ done
9
+ DIR=$(cd -P "$(dirname "$SOURCE")" >/dev/null 2>&1 && pwd)
10
+
11
+ set -e
12
+ echo "Install OTVision."
13
+
14
+ echo "$DIR"
15
+ cd "$DIR" || exit
16
+ WORKING_DIR=$(pwd)
17
+ VENV="$WORKING_DIR"/.venv
18
+
19
+ # Check if uv is available globally, if not install it
20
+ if ! command -v uv &>/dev/null; then
21
+ echo "uv not found globally, installing uv..."
22
+ curl -LsSf https://astral.sh/uv/install.sh | sh
23
+ export PATH="$HOME/.cargo/bin:$PATH"
24
+ fi
25
+
26
+ uv venv "$VENV"
27
+ uv sync --extra cuda --python "$VENV"
@@ -1,6 +1,5 @@
1
1
  echo Install OTVision development environment.
2
2
  call install.cmd
3
- call .venv\Scripts\activate
4
- uv pip install -r requirements-dev.txt --python .venv%
3
+
4
+ uv sync --only-dev --python .venv%
5
5
  pre-commit install --install-hooks
6
- deactivate
@@ -5,9 +5,8 @@ echo "Install OTVision development environment."
5
5
  WORKING_DIR=$(pwd)
6
6
  VENV="$WORKING_DIR"/.venv
7
7
  PRE_COMMIT="$VENV"/bin/pre-commit
8
- UV="$VENV"/bin/uv
9
8
 
10
9
  bash "$WORKING_DIR"/install.sh
11
10
 
12
- $UV pip install -r requirements-dev.txt --python .venv
11
+ uv sync --only-dev --python "$VENV"
13
12
  $PRE_COMMIT install --install-hooks
@@ -0,0 +1,157 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "OTVision"
7
+ dynamic = ["version"]
8
+ authors = [
9
+ { name="OpenTrafficCam contributors", email="team@opentrafficcam.org" },
10
+ { name="platomo GmbH", email="info@platomo.de" },
11
+ ]
12
+ description = "OTVision is a core module of the OpenTrafficCam framework to perform object detection and tracking."
13
+
14
+ readme = "README.md"
15
+ requires-python = "==3.12.*"
16
+ license = "GPL-3.0-only"
17
+ license-files = ["LICENSE"]
18
+ classifiers = [
19
+ "Development Status :: 4 - Beta",
20
+ "Programming Language :: Python :: 3",
21
+ "License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
22
+ "Operating System :: OS Independent",
23
+ ]
24
+ keywords = ["OpenTrafficCam", "Traffic Analysis", "Traffic Counting", "Trajectories"]
25
+ dependencies = [
26
+ "av==13.0.0",
27
+ "coremltools==8.2; sys_platform == 'darwin'",
28
+ "ffmpeg-python==0.2.0",
29
+ "fire==0.7.0",
30
+ "geopandas==1.0.1",
31
+ "ijson==3.3.0",
32
+ "more-itertools==10.7.0",
33
+ "moviepy==1.0.3",
34
+ "numpy==2.1.1; sys_platform != 'win32'",
35
+ "numpy==1.26.4; sys_platform == 'win32'",
36
+ "opencv-python==4.10.0.84",
37
+ "pandas==2.2.3",
38
+ "PyYAML==6.0.2",
39
+ "torch==2.7.1",
40
+ "torchvision==0.22.1",
41
+ "tqdm==4.67.1",
42
+ "ujson==5.10.0",
43
+ "ultralytics==8.3.159",
44
+ ]
45
+
46
+ [dependency-groups]
47
+ dev = [
48
+ "black==25.1.0",
49
+ "flake8==7.1.1",
50
+ "interrogate==1.5.0",
51
+ "isort==5.13.2",
52
+ "jsonschema==4.23.0",
53
+ "mypy==1.15.0",
54
+ "pandas-stubs==2.2.3.250308",
55
+ "pre-commit==3.8.0",
56
+ "pytest==8.3.3",
57
+ "pytest-cov==5.0.0",
58
+ "twine==6.1.0",
59
+ "yamllint==1.35.1",
60
+ ]
61
+
62
+ [project.optional-dependencies]
63
+ cuda = [
64
+ "torch",
65
+ "torchvision",
66
+ "tensorrt==10.12.0.36; sys_platform != 'darwin'",
67
+ "tensorrt-cu12-bindings==10.12.0.36; sys_platform != 'darwin'",
68
+ "tensorrt-cu12-libs==10.12.0.36; sys_platform != 'darwin'",
69
+ ]
70
+ [project.urls]
71
+ Homepage = "https://opentrafficcam.org/"
72
+ Documentation = "https://opentrafficcam.org/overview/"
73
+ Repository = "https://github.com/OpenTrafficCam/OTVision"
74
+ Issues = "https://github.com/OpenTrafficCam/OTVision/issues"
75
+ Changelog = "https://github.com/OpenTrafficCam/OTVision/releases"
76
+
77
+
78
+ [tool.hatch.version]
79
+ path = "OTVision/version.py"
80
+
81
+ [tool.hatch.build.targets.wheel]
82
+ packages = ["OTVision"]
83
+
84
+ [tool.hatch.build]
85
+ directory = "dist"
86
+
87
+ [tool.black]
88
+ line-length = 88
89
+
90
+ [tool.isort]
91
+ profile = "black"
92
+
93
+ [tool.mypy]
94
+ ignore_missing_imports = true
95
+ ignore_missing_imports_per_module = true
96
+ disallow_untyped_defs = true
97
+
98
+ [[tool.mypy.overrides]]
99
+ module = "OTVision.view.*"
100
+ ignore_errors = true
101
+
102
+ [[tool.mypy.overrides]]
103
+ module = "OTVision.transform.*"
104
+ ignore_errors = true
105
+
106
+ [[tool.uv.dependency-metadata]]
107
+ name = "tensorrt-cu12"
108
+ requires-dist = ["tensorrt-cu12-bindings", "tensorrt-cu12-libs"]
109
+
110
+ [[tool.uv.dependency-metadata]]
111
+ name = "tensorrt-cu12-libs"
112
+ requires-dist = ["nvidia-cuda-runtime-cu12"]
113
+
114
+ [[tool.uv.dependency-metadata]]
115
+ name = "nvidia-cuda-runtime-cu12"
116
+
117
+ [[tool.uv.dependency-metadata]]
118
+ name = "tensorrt-cu12-bindings"
119
+
120
+ [[tool.uv.dependency-metadata]]
121
+ name = "tensorrt-cu12-libs"
122
+
123
+ [tool.uv]
124
+ default-groups = []
125
+ environments = [
126
+ "sys_platform == 'win32'",
127
+ "sys_platform == 'darwin'",
128
+ "sys_platform == 'linux'",
129
+ ]
130
+
131
+ [tool.uv.sources]
132
+ torch = [
133
+ { index = "pytorch-cpu", marker = "sys_platform == 'darwin'" },
134
+ { index = "pytorch-cu128", marker = "sys_platform != 'darwin'" , extra = "cuda" }
135
+ ]
136
+ torchvision = [
137
+ { index = "pytorch-cpu", marker = "sys_platform == 'darwin'" },
138
+ { index = "pytorch-cu128", marker = "sys_platform != 'darwin'" , extra = "cuda" }
139
+ ]
140
+ tensorrt = { index = "tensorrt", extra = "cuda" }
141
+ tensorrt-cu12-bindings = { index = "tensorrt", extra = "cuda" }
142
+ tensorrt-cu12-libs = { index = "tensorrt", extra = "cuda" }
143
+
144
+ [[tool.uv.index]]
145
+ name = "pytorch-cpu"
146
+ url = "https://download.pytorch.org/whl/cpu"
147
+ explicit = true
148
+
149
+ [[tool.uv.index]]
150
+ name = "pytorch-cu128"
151
+ url = "https://download.pytorch.org/whl/cu128"
152
+ explicit = true
153
+
154
+ [[tool.uv.index]]
155
+ name = "tensorrt"
156
+ url = "https://pypi.nvidia.com/"
157
+ explicit = true
@@ -127,6 +127,16 @@ class CustomDumper(yaml.SafeDumper):
127
127
  def increase_indent(self, flow: bool = False, indentless: bool = False) -> None:
128
128
  return super(CustomDumper, self).increase_indent(flow, False)
129
129
 
130
+ def choose_scalar_style(self) -> str:
131
+ # Get the default style choice
132
+ style = super().choose_scalar_style()
133
+
134
+ # If the default choice is single quotes, change to double quotes
135
+ if style == "'":
136
+ return '"'
137
+
138
+ return style
139
+
130
140
 
131
141
  def parse_multiple_requirements_file(
132
142
  files: Iterable[Path],