OTVision 0.6.9__tar.gz → 0.6.11__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 (346) hide show
  1. {otvision-0.6.9 → otvision-0.6.11}/.github/workflows/release-pypi.yml +5 -6
  2. {otvision-0.6.9 → otvision-0.6.11}/.github/workflows/release-testpypi.yml +6 -6
  3. otvision-0.6.11/.github/workflows/test.yml +31 -0
  4. {otvision-0.6.9 → otvision-0.6.11}/.pre-commit-config.yaml +4 -0
  5. {otvision-0.6.9 → otvision-0.6.11}/OTVision/version.py +1 -1
  6. {otvision-0.6.9 → otvision-0.6.11}/PKG-INFO +29 -17
  7. {otvision-0.6.9 → otvision-0.6.11}/README.md +15 -12
  8. {otvision-0.6.9 → otvision-0.6.11}/config.yml +8 -14
  9. otvision-0.6.11/install.cmd +18 -0
  10. {otvision-0.6.9 → otvision-0.6.11}/install.sh +7 -9
  11. otvision-0.6.11/install_cuda.cmd +18 -0
  12. otvision-0.6.11/install_cuda.sh +24 -0
  13. otvision-0.6.11/install_dev.cmd +5 -0
  14. otvision-0.6.11/install_dev.sh +10 -0
  15. otvision-0.6.11/pyproject.toml +170 -0
  16. {otvision-0.6.9 → otvision-0.6.11}/update_precommit.py +10 -0
  17. otvision-0.6.11/uv.lock +2057 -0
  18. otvision-0.6.9/.github/workflows/test.yml +0 -25
  19. otvision-0.6.9/install.cmd +0 -16
  20. otvision-0.6.9/install_dev.cmd +0 -6
  21. otvision-0.6.9/install_dev.sh +0 -13
  22. otvision-0.6.9/pyproject.toml +0 -62
  23. otvision-0.6.9/requirements-dev.txt +0 -15
  24. otvision-0.6.9/requirements.txt +0 -18
  25. {otvision-0.6.9 → otvision-0.6.11}/.editorconfig +0 -0
  26. {otvision-0.6.9 → otvision-0.6.11}/.flake8 +0 -0
  27. {otvision-0.6.9 → otvision-0.6.11}/.github/dependabot.yml +0 -0
  28. {otvision-0.6.9 → otvision-0.6.11}/.github/workflows/build-nightly.yml +0 -0
  29. {otvision-0.6.9 → otvision-0.6.11}/.github/workflows/build-release.yml +0 -0
  30. {otvision-0.6.9 → otvision-0.6.11}/.github/workflows/linter.yml +0 -0
  31. {otvision-0.6.9 → otvision-0.6.11}/.gitignore +0 -0
  32. {otvision-0.6.9 → otvision-0.6.11}/.vscode/launch.json +0 -0
  33. {otvision-0.6.9 → otvision-0.6.11}/.vscode/scripts/build_debug_env.cmd +0 -0
  34. {otvision-0.6.9 → otvision-0.6.11}/.vscode/scripts/build_debug_env.sh +0 -0
  35. {otvision-0.6.9 → otvision-0.6.11}/.vscode/scripts/teardown_debug_env.cmd +0 -0
  36. {otvision-0.6.9 → otvision-0.6.11}/.vscode/scripts/teardown_debug_env.sh +0 -0
  37. {otvision-0.6.9 → otvision-0.6.11}/.vscode/settings.json +0 -0
  38. {otvision-0.6.9 → otvision-0.6.11}/.vscode/tasks.json +0 -0
  39. {otvision-0.6.9 → otvision-0.6.11}/.yamllint.yaml +0 -0
  40. {otvision-0.6.9 → otvision-0.6.11}/LICENSE +0 -0
  41. {otvision-0.6.9 → otvision-0.6.11}/OTVision/__init__.py +0 -0
  42. {otvision-0.6.9 → otvision-0.6.11}/OTVision/abstraction/__init__.py +0 -0
  43. {otvision-0.6.9 → otvision-0.6.11}/OTVision/abstraction/defaults.py +0 -0
  44. {otvision-0.6.9 → otvision-0.6.11}/OTVision/abstraction/observer.py +0 -0
  45. {otvision-0.6.9 → otvision-0.6.11}/OTVision/abstraction/pipes_and_filter.py +0 -0
  46. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/__init__.py +0 -0
  47. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/buffer.py +0 -0
  48. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/config.py +0 -0
  49. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/config_parser.py +0 -0
  50. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/configure_logger.py +0 -0
  51. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/detect/__init__.py +0 -0
  52. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/detect/current_object_detector.py +0 -0
  53. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/detect/current_object_detector_metadata.py +0 -0
  54. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/detect/detected_frame_factory.py +0 -0
  55. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/detect/factory.py +0 -0
  56. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/detect/get_detect_cli_args.py +0 -0
  57. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/detect/timestamper.py +0 -0
  58. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/detect/update_detect_config_with_cli_args.py +0 -0
  59. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/event/__init__.py +0 -0
  60. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/event/new_otvision_config.py +0 -0
  61. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/event/new_video_start.py +0 -0
  62. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/frame_count_provider.py +0 -0
  63. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/get_config.py +0 -0
  64. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/get_current_config.py +0 -0
  65. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/otvision_save_path_provider.py +0 -0
  66. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/track/__init__.py +0 -0
  67. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/track/get_track_cli_args.py +0 -0
  68. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/track/ottrk.py +0 -0
  69. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/track/tracking_run_id.py +0 -0
  70. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/track/update_current_track_config.py +0 -0
  71. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/track/update_track_config_with_cli_args.py +0 -0
  72. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/update_current_config.py +0 -0
  73. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/video/__init__.py +0 -0
  74. {otvision-0.6.9 → otvision-0.6.11}/OTVision/application/video/generate_video.py +0 -0
  75. {otvision-0.6.9 → otvision-0.6.11}/OTVision/config.py +0 -0
  76. {otvision-0.6.9 → otvision-0.6.11}/OTVision/convert/__init__.py +0 -0
  77. {otvision-0.6.9 → otvision-0.6.11}/OTVision/convert/convert.py +0 -0
  78. {otvision-0.6.9 → otvision-0.6.11}/OTVision/dataformat.py +0 -0
  79. {otvision-0.6.9 → otvision-0.6.11}/OTVision/detect/__init__.py +0 -0
  80. {otvision-0.6.9 → otvision-0.6.11}/OTVision/detect/builder.py +0 -0
  81. {otvision-0.6.9 → otvision-0.6.11}/OTVision/detect/cli.py +0 -0
  82. {otvision-0.6.9 → otvision-0.6.11}/OTVision/detect/detect.py +0 -0
  83. {otvision-0.6.9 → otvision-0.6.11}/OTVision/detect/detected_frame_buffer.py +0 -0
  84. {otvision-0.6.9 → otvision-0.6.11}/OTVision/detect/detected_frame_producer.py +0 -0
  85. {otvision-0.6.9 → otvision-0.6.11}/OTVision/detect/detected_frame_producer_factory.py +0 -0
  86. {otvision-0.6.9 → otvision-0.6.11}/OTVision/detect/file_based_detect_builder.py +0 -0
  87. {otvision-0.6.9 → otvision-0.6.11}/OTVision/detect/otdet.py +0 -0
  88. {otvision-0.6.9 → otvision-0.6.11}/OTVision/detect/otdet_file_writer.py +0 -0
  89. {otvision-0.6.9 → otvision-0.6.11}/OTVision/detect/plugin_av/__init__.py +0 -0
  90. {otvision-0.6.9 → otvision-0.6.11}/OTVision/detect/plugin_av/rotate_frame.py +0 -0
  91. {otvision-0.6.9 → otvision-0.6.11}/OTVision/detect/pyav_frame_count_provider.py +0 -0
  92. {otvision-0.6.9 → otvision-0.6.11}/OTVision/detect/rtsp_based_detect_builder.py +0 -0
  93. {otvision-0.6.9 → otvision-0.6.11}/OTVision/detect/rtsp_input_source.py +0 -0
  94. {otvision-0.6.9 → otvision-0.6.11}/OTVision/detect/timestamper.py +0 -0
  95. {otvision-0.6.9 → otvision-0.6.11}/OTVision/detect/video_input_source.py +0 -0
  96. {otvision-0.6.9 → otvision-0.6.11}/OTVision/detect/yolo.py +0 -0
  97. {otvision-0.6.9 → otvision-0.6.11}/OTVision/domain/__init__.py +0 -0
  98. {otvision-0.6.9 → otvision-0.6.11}/OTVision/domain/cli.py +0 -0
  99. {otvision-0.6.9 → otvision-0.6.11}/OTVision/domain/current_config.py +0 -0
  100. {otvision-0.6.9 → otvision-0.6.11}/OTVision/domain/detect_producer_consumer.py +0 -0
  101. {otvision-0.6.9 → otvision-0.6.11}/OTVision/domain/detection.py +0 -0
  102. {otvision-0.6.9 → otvision-0.6.11}/OTVision/domain/frame.py +0 -0
  103. {otvision-0.6.9 → otvision-0.6.11}/OTVision/domain/input_source_detect.py +0 -0
  104. {otvision-0.6.9 → otvision-0.6.11}/OTVision/domain/object_detection.py +0 -0
  105. {otvision-0.6.9 → otvision-0.6.11}/OTVision/domain/serialization.py +0 -0
  106. {otvision-0.6.9 → otvision-0.6.11}/OTVision/domain/time.py +0 -0
  107. {otvision-0.6.9 → otvision-0.6.11}/OTVision/domain/video_writer.py +0 -0
  108. {otvision-0.6.9 → otvision-0.6.11}/OTVision/helpers/__init__.py +0 -0
  109. {otvision-0.6.9 → otvision-0.6.11}/OTVision/helpers/date.py +0 -0
  110. {otvision-0.6.9 → otvision-0.6.11}/OTVision/helpers/files.py +0 -0
  111. {otvision-0.6.9 → otvision-0.6.11}/OTVision/helpers/formats.py +0 -0
  112. {otvision-0.6.9 → otvision-0.6.11}/OTVision/helpers/input_types.py +0 -0
  113. {otvision-0.6.9 → otvision-0.6.11}/OTVision/helpers/log.py +0 -0
  114. {otvision-0.6.9 → otvision-0.6.11}/OTVision/helpers/machine.py +0 -0
  115. {otvision-0.6.9 → otvision-0.6.11}/OTVision/helpers/video.py +0 -0
  116. {otvision-0.6.9 → otvision-0.6.11}/OTVision/plugin/__init__.py +0 -0
  117. {otvision-0.6.9 → otvision-0.6.11}/OTVision/plugin/ffmpeg_video_writer.py +0 -0
  118. {otvision-0.6.9 → otvision-0.6.11}/OTVision/plugin/generate_video.py +0 -0
  119. {otvision-0.6.9 → otvision-0.6.11}/OTVision/plugin/yaml_serialization.py +0 -0
  120. {otvision-0.6.9 → otvision-0.6.11}/OTVision/track/__init__.py +0 -0
  121. {otvision-0.6.9 → otvision-0.6.11}/OTVision/track/builder.py +0 -0
  122. {otvision-0.6.9 → otvision-0.6.11}/OTVision/track/cli.py +0 -0
  123. {otvision-0.6.9 → otvision-0.6.11}/OTVision/track/exporter/__init__.py +0 -0
  124. {otvision-0.6.9 → otvision-0.6.11}/OTVision/track/exporter/filebased_exporter.py +0 -0
  125. {otvision-0.6.9 → otvision-0.6.11}/OTVision/track/id_generator.py +0 -0
  126. {otvision-0.6.9 → otvision-0.6.11}/OTVision/track/model/__init__.py +0 -0
  127. {otvision-0.6.9 → otvision-0.6.11}/OTVision/track/model/filebased/__init__.py +0 -0
  128. {otvision-0.6.9 → otvision-0.6.11}/OTVision/track/model/filebased/frame_chunk.py +0 -0
  129. {otvision-0.6.9 → otvision-0.6.11}/OTVision/track/model/filebased/frame_group.py +0 -0
  130. {otvision-0.6.9 → otvision-0.6.11}/OTVision/track/model/track_exporter.py +0 -0
  131. {otvision-0.6.9 → otvision-0.6.11}/OTVision/track/model/tracking_interfaces.py +0 -0
  132. {otvision-0.6.9 → otvision-0.6.11}/OTVision/track/parser/__init__.py +0 -0
  133. {otvision-0.6.9 → otvision-0.6.11}/OTVision/track/parser/chunk_parser_plugins.py +0 -0
  134. {otvision-0.6.9 → otvision-0.6.11}/OTVision/track/parser/frame_group_parser_plugins.py +0 -0
  135. {otvision-0.6.9 → otvision-0.6.11}/OTVision/track/stream_ottrk_file_writer.py +0 -0
  136. {otvision-0.6.9 → otvision-0.6.11}/OTVision/track/track.py +0 -0
  137. {otvision-0.6.9 → otvision-0.6.11}/OTVision/track/tracker/__init__.py +0 -0
  138. {otvision-0.6.9 → otvision-0.6.11}/OTVision/track/tracker/filebased_tracking.py +0 -0
  139. {otvision-0.6.9 → otvision-0.6.11}/OTVision/track/tracker/tracker_plugin_iou.py +0 -0
  140. {otvision-0.6.9 → otvision-0.6.11}/OTVision/transform/__init__.py +0 -0
  141. {otvision-0.6.9 → otvision-0.6.11}/OTVision/transform/get_homography.py +0 -0
  142. {otvision-0.6.9 → otvision-0.6.11}/OTVision/transform/reference_points_picker.py +0 -0
  143. {otvision-0.6.9 → otvision-0.6.11}/OTVision/transform/transform.py +0 -0
  144. {otvision-0.6.9 → otvision-0.6.11}/OTVision/view/__init__.py +0 -0
  145. {otvision-0.6.9 → otvision-0.6.11}/OTVision/view/helpers/OTC.ico +0 -0
  146. {otvision-0.6.9 → otvision-0.6.11}/OTVision/view/view.py +0 -0
  147. {otvision-0.6.9 → otvision-0.6.11}/OTVision/view/view_convert.py +0 -0
  148. {otvision-0.6.9 → otvision-0.6.11}/OTVision/view/view_detect.py +0 -0
  149. {otvision-0.6.9 → otvision-0.6.11}/OTVision/view/view_helpers.py +0 -0
  150. {otvision-0.6.9 → otvision-0.6.11}/OTVision/view/view_track.py +0 -0
  151. {otvision-0.6.9 → otvision-0.6.11}/OTVision/view/view_transform.py +0 -0
  152. {otvision-0.6.9 → otvision-0.6.11}/OTVision.bat +0 -0
  153. {otvision-0.6.9 → otvision-0.6.11}/clean-up-repository.sh +0 -0
  154. {otvision-0.6.9 → otvision-0.6.11}/convert.py +0 -0
  155. {otvision-0.6.9 → otvision-0.6.11}/detect.py +0 -0
  156. {otvision-0.6.9 → otvision-0.6.11}/export_models.py +0 -0
  157. {otvision-0.6.9 → otvision-0.6.11}/generate_video.py +0 -0
  158. {otvision-0.6.9 → otvision-0.6.11}/reference_points_picker.py +0 -0
  159. {otvision-0.6.9 → otvision-0.6.11}/tests/__init__.py +0 -0
  160. {otvision-0.6.9 → otvision-0.6.11}/tests/abstraction/__init__.py +0 -0
  161. {otvision-0.6.9 → otvision-0.6.11}/tests/abstraction/test_defaults.py +0 -0
  162. {otvision-0.6.9 → otvision-0.6.11}/tests/abstraction/test_observer.py +0 -0
  163. {otvision-0.6.9 → otvision-0.6.11}/tests/application/__init__.py +0 -0
  164. {otvision-0.6.9 → otvision-0.6.11}/tests/application/detect/__init__.py +0 -0
  165. {otvision-0.6.9 → otvision-0.6.11}/tests/application/detect/test_current_object_detector.py +0 -0
  166. {otvision-0.6.9 → otvision-0.6.11}/tests/application/detect/test_detected_frame_factory.py +0 -0
  167. {otvision-0.6.9 → otvision-0.6.11}/tests/application/detect/test_get_detect_cli_args.py +0 -0
  168. {otvision-0.6.9 → otvision-0.6.11}/tests/application/detect/test_timestamper.py +0 -0
  169. {otvision-0.6.9 → otvision-0.6.11}/tests/application/detect/test_update_detect_config_with_cli_args.py +0 -0
  170. {otvision-0.6.9 → otvision-0.6.11}/tests/application/test_buffer.py +0 -0
  171. {otvision-0.6.9 → otvision-0.6.11}/tests/application/test_config_parser.py +0 -0
  172. {otvision-0.6.9 → otvision-0.6.11}/tests/application/test_get_config.py +0 -0
  173. {otvision-0.6.9 → otvision-0.6.11}/tests/application/test_otvision_save_path_provider.py +0 -0
  174. {otvision-0.6.9 → otvision-0.6.11}/tests/application/track/__init__.py +0 -0
  175. {otvision-0.6.9 → otvision-0.6.11}/tests/application/track/test_get_track_cli_args.py +0 -0
  176. {otvision-0.6.9 → otvision-0.6.11}/tests/application/track/test_ottrk.py +0 -0
  177. {otvision-0.6.9 → otvision-0.6.11}/tests/application/track/test_update_current_track_config.py +0 -0
  178. {otvision-0.6.9 → otvision-0.6.11}/tests/application/track/test_update_track_config_with_cli_args.py +0 -0
  179. {otvision-0.6.9 → otvision-0.6.11}/tests/cli/custom_cli_test_config.yaml +0 -0
  180. {otvision-0.6.9 → otvision-0.6.11}/tests/cli/test_convert_cli.py +0 -0
  181. {otvision-0.6.9 → otvision-0.6.11}/tests/cli/test_detect_cli.py +0 -0
  182. {otvision-0.6.9 → otvision-0.6.11}/tests/cli/test_track_cli.py +0 -0
  183. {otvision-0.6.9 → otvision-0.6.11}/tests/conftest.py +0 -0
  184. {otvision-0.6.9 → otvision-0.6.11}/tests/convert/__init__.py +0 -0
  185. {otvision-0.6.9 → otvision-0.6.11}/tests/convert/test_convert.py +0 -0
  186. {otvision-0.6.9 → otvision-0.6.11}/tests/data/Testvideo_CamView.png +0 -0
  187. {otvision-0.6.9 → otvision-0.6.11}/tests/data/Testvideo_CamView_Cars-Cyclist.png +0 -0
  188. {otvision-0.6.9 → otvision-0.6.11}/tests/data/Testvideo_CamView_Cars-Truck.png +0 -0
  189. {otvision-0.6.9 → otvision-0.6.11}/tests/data/Testvideo_CamView_refpts.png +0 -0
  190. {otvision-0.6.9 → otvision-0.6.11}/tests/data/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.gpkg +0 -0
  191. {otvision-0.6.9 → otvision-0.6.11}/tests/data/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
  192. {otvision-0.6.9 → otvision-0.6.11}/tests/data/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
  193. {otvision-0.6.9 → otvision-0.6.11}/tests/data/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
  194. {otvision-0.6.9 → otvision-0.6.11}/tests/data/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otrfpts +0 -0
  195. {otvision-0.6.9 → otvision-0.6.11}/tests/data/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
  196. {otvision-0.6.9 → otvision-0.6.11}/tests/data/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.gpkg +0 -0
  197. {otvision-0.6.9 → otvision-0.6.11}/tests/data/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
  198. {otvision-0.6.9 → otvision-0.6.11}/tests/data/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
  199. {otvision-0.6.9 → otvision-0.6.11}/tests/data/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
  200. {otvision-0.6.9 → otvision-0.6.11}/tests/data/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otrfpts +0 -0
  201. {otvision-0.6.9 → otvision-0.6.11}/tests/data/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
  202. {otvision-0.6.9 → otvision-0.6.11}/tests/data/Testvideo_FR20.otrfpts +0 -0
  203. {otvision-0.6.9 → otvision-0.6.11}/tests/data/Testvideo_Satellite.jpg +0 -0
  204. {otvision-0.6.9 → otvision-0.6.11}/tests/data/Testvideo_Satellite_far.jpg +0 -0
  205. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/default/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
  206. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/default/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
  207. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/default/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
  208. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/default/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
  209. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/fail_fps_from_filename/Testvideo_Cars-Cyclist_F20_2020-01-01_00-00-00.h264 +0 -0
  210. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/fail_fps_from_filename/Testvideo_Cars-Truck_2020-01-01_00-00-00.h264 +0 -0
  211. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/fps_from_filename/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
  212. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/fps_from_filename/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
  213. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/fps_from_filename/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
  214. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/fps_from_filename/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
  215. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/input_fps_20/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
  216. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/input_fps_20/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
  217. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/input_fps_20/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
  218. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/input_fps_20/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
  219. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/input_fps_40/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
  220. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/input_fps_40/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
  221. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/input_fps_40/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
  222. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/input_fps_40/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
  223. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/output_filetype_avi/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.avi +0 -0
  224. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/output_filetype_avi/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
  225. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/output_filetype_avi/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.avi +0 -0
  226. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/output_filetype_avi/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
  227. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/output_filetype_mkv/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
  228. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/output_filetype_mkv/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mkv +0 -0
  229. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/output_filetype_mkv/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
  230. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/output_filetype_mkv/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mkv +0 -0
  231. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/output_filetype_mov/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
  232. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/output_filetype_mov/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mov +0 -0
  233. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/output_filetype_mov/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
  234. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/output_filetype_mov/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mov +0 -0
  235. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/output_filetype_mp4/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.h264 +0 -0
  236. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/output_filetype_mp4/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
  237. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/output_filetype_mp4/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.h264 +0 -0
  238. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/output_filetype_mp4/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
  239. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/rotation/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00_rotate.h264 +0 -0
  240. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/rotation/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00_rotate.mov +0 -0
  241. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/rotation/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00_rotate.mp4 +0 -0
  242. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/rotation/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00_rotate.h264 +0 -0
  243. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/rotation/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00_rotate.mov +0 -0
  244. {otvision-0.6.9 → otvision-0.6.11}/tests/data/convert/rotation/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00_rotate.mp4 +0 -0
  245. {otvision-0.6.9 → otvision-0.6.11}/tests/data/detect/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
  246. {otvision-0.6.9 → otvision-0.6.11}/tests/data/detect/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.mp4 +0 -0
  247. {otvision-0.6.9 → otvision-0.6.11}/tests/data/detect/default/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
  248. {otvision-0.6.9 → otvision-0.6.11}/tests/data/detect/default/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
  249. {otvision-0.6.9 → otvision-0.6.11}/tests/data/detect/rotated-Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.mp4 +0 -0
  250. {otvision-0.6.9 → otvision-0.6.11}/tests/data/log/_otvision_logs/test.log +0 -0
  251. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/default/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
  252. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/default/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
  253. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/default/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
  254. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/default/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
  255. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/sigma_h_0_2/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
  256. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/sigma_h_0_2/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
  257. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/sigma_h_0_2/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
  258. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/sigma_h_0_2/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
  259. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/sigma_h_0_6/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
  260. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/sigma_h_0_6/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
  261. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/sigma_h_0_6/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
  262. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/sigma_h_0_6/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
  263. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/sigma_iou_0_2/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
  264. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/sigma_iou_0_2/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
  265. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/sigma_iou_0_2/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
  266. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/sigma_iou_0_2/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
  267. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/sigma_iou_0_6/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
  268. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/sigma_iou_0_6/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
  269. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/sigma_iou_0_6/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
  270. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/sigma_iou_0_6/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
  271. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/sigma_l_0_1/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
  272. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/sigma_l_0_1/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
  273. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/sigma_l_0_1/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
  274. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/sigma_l_0_1/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
  275. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/sigma_l_0_5/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
  276. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/sigma_l_0_5/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
  277. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/sigma_l_0_5/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
  278. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/sigma_l_0_5/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
  279. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/t_min_10/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
  280. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/t_min_10/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
  281. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/t_min_10/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
  282. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/t_min_10/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
  283. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/t_min_3/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
  284. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/t_min_3/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
  285. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/t_min_3/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
  286. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/t_min_3/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
  287. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/t_miss_max_25/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
  288. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/t_miss_max_25/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
  289. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/t_miss_max_25/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
  290. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/t_miss_max_25/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
  291. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/t_miss_max_75/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otdet +0 -0
  292. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/t_miss_max_75/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
  293. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/t_miss_max_75/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otdet +0 -0
  294. {otvision-0.6.9 → otvision-0.6.11}/tests/data/track/t_miss_max_75/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
  295. {otvision-0.6.9 → otvision-0.6.11}/tests/data/transform/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.gpkg +0 -0
  296. {otvision-0.6.9 → otvision-0.6.11}/tests/data/transform/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.otrfpts +0 -0
  297. {otvision-0.6.9 → otvision-0.6.11}/tests/data/transform/Testvideo_Cars-Cyclist_FR20_2020-01-01_00-00-00.ottrk +0 -0
  298. {otvision-0.6.9 → otvision-0.6.11}/tests/data/transform/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.gpkg +0 -0
  299. {otvision-0.6.9 → otvision-0.6.11}/tests/data/transform/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.otrfpts +0 -0
  300. {otvision-0.6.9 → otvision-0.6.11}/tests/data/transform/Testvideo_Cars-Truck_FR20_2020-01-01_00-00-00.ottrk +0 -0
  301. {otvision-0.6.9 → otvision-0.6.11}/tests/data/transform/Testvideo_FR20.otrfpts +0 -0
  302. {otvision-0.6.9 → otvision-0.6.11}/tests/data/yolov8m.mlpackage/Data/com.apple.CoreML/model.mlmodel +0 -0
  303. {otvision-0.6.9 → otvision-0.6.11}/tests/data/yolov8m.mlpackage/Data/com.apple.CoreML/weights/weight.bin +0 -0
  304. {otvision-0.6.9 → otvision-0.6.11}/tests/data/yolov8m.mlpackage/Manifest.json +0 -0
  305. {otvision-0.6.9 → otvision-0.6.11}/tests/detect/__init__.py +0 -0
  306. {otvision-0.6.9 → otvision-0.6.11}/tests/detect/detect_test.py +0 -0
  307. {otvision-0.6.9 → otvision-0.6.11}/tests/detect/plugin_av/__init__.py +0 -0
  308. {otvision-0.6.9 → otvision-0.6.11}/tests/detect/plugin_av/test_rotate_frame.py +0 -0
  309. {otvision-0.6.9 → otvision-0.6.11}/tests/detect/test_detected_frame_buffer.py +0 -0
  310. {otvision-0.6.9 → otvision-0.6.11}/tests/detect/test_detected_frame_producer.py +0 -0
  311. {otvision-0.6.9 → otvision-0.6.11}/tests/detect/test_detected_frame_producer_factory.py +0 -0
  312. {otvision-0.6.9 → otvision-0.6.11}/tests/detect/test_otdet.py +0 -0
  313. {otvision-0.6.9 → otvision-0.6.11}/tests/detect/test_otdet_file_writer.py +0 -0
  314. {otvision-0.6.9 → otvision-0.6.11}/tests/detect/test_pyav_frame_count_provider.py +0 -0
  315. {otvision-0.6.9 → otvision-0.6.11}/tests/detect/test_rtsp_input_source.py +0 -0
  316. {otvision-0.6.9 → otvision-0.6.11}/tests/detect/test_video_input_source.py +0 -0
  317. {otvision-0.6.9 → otvision-0.6.11}/tests/detect/yolo_test.py +0 -0
  318. {otvision-0.6.9 → otvision-0.6.11}/tests/helpers/__init__.py +0 -0
  319. {otvision-0.6.9 → otvision-0.6.11}/tests/helpers/files_test.py +0 -0
  320. {otvision-0.6.9 → otvision-0.6.11}/tests/helpers/formats_test.py +0 -0
  321. {otvision-0.6.9 → otvision-0.6.11}/tests/helpers/test_log.py +0 -0
  322. {otvision-0.6.9 → otvision-0.6.11}/tests/log/__init__.py +0 -0
  323. {otvision-0.6.9 → otvision-0.6.11}/tests/log/log_maker.py +0 -0
  324. {otvision-0.6.9 → otvision-0.6.11}/tests/log/test_log.py +0 -0
  325. {otvision-0.6.9 → otvision-0.6.11}/tests/plugin/__init__.py +0 -0
  326. {otvision-0.6.9 → otvision-0.6.11}/tests/plugin/test_ffmpeg_video_file_writer.py +0 -0
  327. {otvision-0.6.9 → otvision-0.6.11}/tests/test_config.py +0 -0
  328. {otvision-0.6.9 → otvision-0.6.11}/tests/track/__init__.py +0 -0
  329. {otvision-0.6.9 → otvision-0.6.11}/tests/track/helper/__init__.py +0 -0
  330. {otvision-0.6.9 → otvision-0.6.11}/tests/track/helper/data_builder.py +0 -0
  331. {otvision-0.6.9 → otvision-0.6.11}/tests/track/parser/__init__.py +0 -0
  332. {otvision-0.6.9 → otvision-0.6.11}/tests/track/parser/test_chunk_parser_plugins.py +0 -0
  333. {otvision-0.6.9 → otvision-0.6.11}/tests/track/test_frame_chunk.py +0 -0
  334. {otvision-0.6.9 → otvision-0.6.11}/tests/track/test_frame_group.py +0 -0
  335. {otvision-0.6.9 → otvision-0.6.11}/tests/track/test_frame_group_parser_plugins.py +0 -0
  336. {otvision-0.6.9 → otvision-0.6.11}/tests/track/test_stream_ottrk_file_writer.py +0 -0
  337. {otvision-0.6.9 → otvision-0.6.11}/tests/track/test_track.py +0 -0
  338. {otvision-0.6.9 → otvision-0.6.11}/tests/track/test_tracking_data_structures.py +0 -0
  339. {otvision-0.6.9 → otvision-0.6.11}/tests/transform/__init__.py +0 -0
  340. {otvision-0.6.9 → otvision-0.6.11}/tests/transform/test_transform.py +0 -0
  341. {otvision-0.6.9 → otvision-0.6.11}/tests/utils/__init__.py +0 -0
  342. {otvision-0.6.9 → otvision-0.6.11}/tests/utils/generator.py +0 -0
  343. {otvision-0.6.9 → otvision-0.6.11}/tests/utils/mocking.py +0 -0
  344. {otvision-0.6.9 → otvision-0.6.11}/track.py +0 -0
  345. {otvision-0.6.9 → otvision-0.6.11}/transform.py +0 -0
  346. {otvision-0.6.9 → otvision-0.6.11}/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,31 @@
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@v3
26
+ timeout-minutes: 60
27
+ with:
28
+ py-version: ${{ matrix.py }}
29
+ package-path: OTVision
30
+ ffmpeg-required: True
31
+ uv-sync-args: "--extra inference_cpu"
@@ -14,6 +14,10 @@ repos:
14
14
  - id: requirements-txt-fixer
15
15
  - id: check-executables-have-shebangs
16
16
  - id: detect-private-key
17
+ - repo: https://github.com/astral-sh/uv-pre-commit
18
+ rev: 0.8.11
19
+ hooks:
20
+ - id: uv-lock
17
21
  - repo: local
18
22
  hooks:
19
23
  - id: update-type-stubs
@@ -1,4 +1,4 @@
1
- __version__ = "v0.6.9"
1
+ __version__ = "v0.6.11"
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.11
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
@@ -28,11 +29,19 @@ Requires-Dist: numpy==2.1.1; sys_platform != 'win32'
28
29
  Requires-Dist: opencv-python==4.10.0.84
29
30
  Requires-Dist: pandas==2.2.3
30
31
  Requires-Dist: pyyaml==6.0.2
31
- Requires-Dist: torch==2.7.1
32
- Requires-Dist: torchvision==0.22.1
33
32
  Requires-Dist: tqdm==4.67.1
34
33
  Requires-Dist: ujson==5.10.0
35
- Requires-Dist: ultralytics==8.3.159
34
+ Provides-Extra: inference-cpu
35
+ Requires-Dist: torch==2.7.1; extra == 'inference-cpu'
36
+ Requires-Dist: torchvision==0.22.1; extra == 'inference-cpu'
37
+ Requires-Dist: ultralytics==8.3.159; extra == 'inference-cpu'
38
+ Provides-Extra: inference-cuda
39
+ Requires-Dist: tensorrt-cu12-bindings==10.12.0.36; (sys_platform != 'darwin') and extra == 'inference-cuda'
40
+ Requires-Dist: tensorrt-cu12-libs==10.12.0.36; (sys_platform != 'darwin') and extra == 'inference-cuda'
41
+ Requires-Dist: tensorrt==10.12.0.36; (sys_platform != 'darwin') and extra == 'inference-cuda'
42
+ Requires-Dist: torch==2.7.1; extra == 'inference-cuda'
43
+ Requires-Dist: torchvision==0.22.1; extra == 'inference-cuda'
44
+ Requires-Dist: ultralytics==8.3.159; extra == 'inference-cuda'
36
45
  Description-Content-Type: text/markdown
37
46
 
38
47
  # OTVision
@@ -41,22 +50,25 @@ Description-Content-Type: text/markdown
41
50
  [![Tests](https://github.com/OpenTrafficCam/OTVision/actions/workflows/test.yml/badge.svg?tag=latest)](https://github.com/OpenTrafficCam/OTVision/actions/workflows/test.yml?query=tag%3Alatest)
42
51
  [![Tests](https://github.com/OpenTrafficCam/OTVision/actions/workflows/build-release.yml/badge.svg)](https://github.com/OpenTrafficCam/OTVision/actions/workflows/build-release.yml)
43
52
 
44
- OTVision is a core module of the [OpenTrafficCam framework](https://github.com/OpenTrafficCam) designed to detect and track objects (road users) in videos recorded by [OTCamera](https://github.com/OpenTrafficCam/OTCamera) or other camera systems. The resulting trajectories can be used for traffic analysis using [OTAnalytics](https://github.com/OpenTrafficCam/OTAnalytics).
53
+ OTVision is a core module of the [OpenTrafficCam framework](https://github.com/OpenTrafficCam)
54
+ designed to detect and track objects (road users) in videos recorded by
55
+ [OTCamera](https://github.com/OpenTrafficCam/OTCamera) or other camera systems.
56
+ The resulting trajectories can be used for traffic analysis using [OTAnalytics](https://github.com/OpenTrafficCam/OTAnalytics).
45
57
 
46
58
  ## Features
47
59
 
48
60
  - **Video Conversion**: Convert video files (h264 to mp4) with options to set frame rate and rotation
49
61
  - **Object Detection**: Detect road users in videos using state-of-the-art YOLO models
50
62
  - **Object Tracking**: Track detected objects through video frames using IOU-based tracking algorithms
51
- - **Coordinate Transformation**: Transform pixel coordinates to real-world UTM coordinates
52
63
 
53
64
  ## Requirements
54
65
 
55
66
  ### System Requirements
56
67
 
57
- - Python 3.12 or higher
68
+ - Python 3.12
69
+ - [uv for dependency management](https://docs.astral.sh/uv/)
58
70
  - CUDA-capable GPU (recommended for faster processing)
59
- - Dependencies listed in [requirements.txt](requirements.txt)
71
+ - ffmpeg (optional for video conversion)
60
72
 
61
73
  ## Installation
62
74
 
@@ -66,9 +78,9 @@ Pre-built releases are available on GitHub for easy installation:
66
78
 
67
79
  1. Go to the [OTVision Releases page](https://github.com/OpenTrafficCam/OTVision/releases) on GitHub
68
80
  2. Download the appropriate release for your platform:
69
- - **Windows**: Choose between `otvision-win.zip` (standard) or `otvision-win-cuda.zip` (with CUDA support)
70
- - **Linux**: Choose between `otvision-linux.zip` (standard) or `otvision-linux-cuda.zip` (with CUDA support)
71
- - **macOS**: Choose `OTVision-macos.zip`
81
+ - **Windows**: Choose between `OTVision-win-{vX.Y.Z}.zip` (standard) or `OTVision-win-cuda-{vX.Y.Z}.zip` (with CUDA support)
82
+ - **Linux**: Choose between `OTVision-linux-{vX.Y.Z}.zip` (standard) or `OTVision-linux-cuda-{vX.Y.Z}.zip` (with CUDA support)
83
+ - **macOS**: Choose `OTVision-macos-{vX.Y.Z}.zip`
72
84
  3. Extract the downloaded ZIP file
73
85
  4. Run the installation script:
74
86
  - On Windows: Double-click `install.cmd`
@@ -124,7 +136,7 @@ OTVision provides several command-line scripts for different functionalities:
124
136
  Convert video files (e.g., h264 to mp4):
125
137
 
126
138
  ```bash
127
- python convert.py --paths /path/to/videos/*.h264 --input-fps 20.0 --rotation 0
139
+ uv run convert.py --paths /path/to/videos/*.h264 --input-fps 20.0 --rotation 0
128
140
  ```
129
141
 
130
142
  ### Object Detection
@@ -132,7 +144,7 @@ python convert.py --paths /path/to/videos/*.h264 --input-fps 20.0 --rotation 0
132
144
  Detect objects in videos:
133
145
 
134
146
  ```bash
135
- python detect.py --paths /path/to/videos/*.mp4 --weights yolov8s
147
+ uv run detect.py --paths /path/to/videos/*.mp4 --weights yolov8s
136
148
  ```
137
149
 
138
150
  ### Object Tracking
@@ -140,7 +152,7 @@ python detect.py --paths /path/to/videos/*.mp4 --weights yolov8s
140
152
  Track detected objects:
141
153
 
142
154
  ```bash
143
- python track.py --paths /path/to/detections/*.otdet
155
+ uv run track.py --paths /path/to/detections/*.otdet
144
156
  ```
145
157
 
146
158
  ### Coordinate Transformation
@@ -148,7 +160,7 @@ python track.py --paths /path/to/detections/*.otdet
148
160
  Transform pixel coordinates to UTM coordinates:
149
161
 
150
162
  ```bash
151
- python transform.py --paths /path/to/tracks/*.ottrk --refpts-file /path/to/reference_points.json
163
+ uv run transform.py --paths /path/to/tracks/*.ottrk --refpts-file /path/to/reference_points.json
152
164
  ```
153
165
 
154
166
  ### Configuration
@@ -156,7 +168,7 @@ python transform.py --paths /path/to/tracks/*.ottrk --refpts-file /path/to/refer
156
168
  OTVision can be configured using a YAML configuration file. A default configuration is provided in `user_config.otvision.yaml`. You can specify a custom configuration file using the `--config` option:
157
169
 
158
170
  ```bash
159
- python detect.py --config /path/to/custom_config.yaml
171
+ uv run detect.py --config /path/to/custom_config.yaml
160
172
  ```
161
173
 
162
174
  ## Documentation
@@ -4,22 +4,25 @@
4
4
  [![Tests](https://github.com/OpenTrafficCam/OTVision/actions/workflows/test.yml/badge.svg?tag=latest)](https://github.com/OpenTrafficCam/OTVision/actions/workflows/test.yml?query=tag%3Alatest)
5
5
  [![Tests](https://github.com/OpenTrafficCam/OTVision/actions/workflows/build-release.yml/badge.svg)](https://github.com/OpenTrafficCam/OTVision/actions/workflows/build-release.yml)
6
6
 
7
- OTVision is a core module of the [OpenTrafficCam framework](https://github.com/OpenTrafficCam) designed to detect and track objects (road users) in videos recorded by [OTCamera](https://github.com/OpenTrafficCam/OTCamera) or other camera systems. The resulting trajectories can be used for traffic analysis using [OTAnalytics](https://github.com/OpenTrafficCam/OTAnalytics).
7
+ OTVision is a core module of the [OpenTrafficCam framework](https://github.com/OpenTrafficCam)
8
+ designed to detect and track objects (road users) in videos recorded by
9
+ [OTCamera](https://github.com/OpenTrafficCam/OTCamera) or other camera systems.
10
+ The resulting trajectories can be used for traffic analysis using [OTAnalytics](https://github.com/OpenTrafficCam/OTAnalytics).
8
11
 
9
12
  ## Features
10
13
 
11
14
  - **Video Conversion**: Convert video files (h264 to mp4) with options to set frame rate and rotation
12
15
  - **Object Detection**: Detect road users in videos using state-of-the-art YOLO models
13
16
  - **Object Tracking**: Track detected objects through video frames using IOU-based tracking algorithms
14
- - **Coordinate Transformation**: Transform pixel coordinates to real-world UTM coordinates
15
17
 
16
18
  ## Requirements
17
19
 
18
20
  ### System Requirements
19
21
 
20
- - Python 3.12 or higher
22
+ - Python 3.12
23
+ - [uv for dependency management](https://docs.astral.sh/uv/)
21
24
  - CUDA-capable GPU (recommended for faster processing)
22
- - Dependencies listed in [requirements.txt](requirements.txt)
25
+ - ffmpeg (optional for video conversion)
23
26
 
24
27
  ## Installation
25
28
 
@@ -29,9 +32,9 @@ Pre-built releases are available on GitHub for easy installation:
29
32
 
30
33
  1. Go to the [OTVision Releases page](https://github.com/OpenTrafficCam/OTVision/releases) on GitHub
31
34
  2. Download the appropriate release for your platform:
32
- - **Windows**: Choose between `otvision-win.zip` (standard) or `otvision-win-cuda.zip` (with CUDA support)
33
- - **Linux**: Choose between `otvision-linux.zip` (standard) or `otvision-linux-cuda.zip` (with CUDA support)
34
- - **macOS**: Choose `OTVision-macos.zip`
35
+ - **Windows**: Choose between `OTVision-win-{vX.Y.Z}.zip` (standard) or `OTVision-win-cuda-{vX.Y.Z}.zip` (with CUDA support)
36
+ - **Linux**: Choose between `OTVision-linux-{vX.Y.Z}.zip` (standard) or `OTVision-linux-cuda-{vX.Y.Z}.zip` (with CUDA support)
37
+ - **macOS**: Choose `OTVision-macos-{vX.Y.Z}.zip`
35
38
  3. Extract the downloaded ZIP file
36
39
  4. Run the installation script:
37
40
  - On Windows: Double-click `install.cmd`
@@ -87,7 +90,7 @@ OTVision provides several command-line scripts for different functionalities:
87
90
  Convert video files (e.g., h264 to mp4):
88
91
 
89
92
  ```bash
90
- python convert.py --paths /path/to/videos/*.h264 --input-fps 20.0 --rotation 0
93
+ uv run convert.py --paths /path/to/videos/*.h264 --input-fps 20.0 --rotation 0
91
94
  ```
92
95
 
93
96
  ### Object Detection
@@ -95,7 +98,7 @@ python convert.py --paths /path/to/videos/*.h264 --input-fps 20.0 --rotation 0
95
98
  Detect objects in videos:
96
99
 
97
100
  ```bash
98
- python detect.py --paths /path/to/videos/*.mp4 --weights yolov8s
101
+ uv run detect.py --paths /path/to/videos/*.mp4 --weights yolov8s
99
102
  ```
100
103
 
101
104
  ### Object Tracking
@@ -103,7 +106,7 @@ python detect.py --paths /path/to/videos/*.mp4 --weights yolov8s
103
106
  Track detected objects:
104
107
 
105
108
  ```bash
106
- python track.py --paths /path/to/detections/*.otdet
109
+ uv run track.py --paths /path/to/detections/*.otdet
107
110
  ```
108
111
 
109
112
  ### Coordinate Transformation
@@ -111,7 +114,7 @@ python track.py --paths /path/to/detections/*.otdet
111
114
  Transform pixel coordinates to UTM coordinates:
112
115
 
113
116
  ```bash
114
- python transform.py --paths /path/to/tracks/*.ottrk --refpts-file /path/to/reference_points.json
117
+ uv run transform.py --paths /path/to/tracks/*.ottrk --refpts-file /path/to/reference_points.json
115
118
  ```
116
119
 
117
120
  ### Configuration
@@ -119,7 +122,7 @@ python transform.py --paths /path/to/tracks/*.ottrk --refpts-file /path/to/refer
119
122
  OTVision can be configured using a YAML configuration file. A default configuration is provided in `user_config.otvision.yaml`. You can specify a custom configuration file using the `--config` option:
120
123
 
121
124
  ```bash
122
- python detect.py --config /path/to/custom_config.yaml
125
+ uv run detect.py --config /path/to/custom_config.yaml
123
126
  ```
124
127
 
125
128
  ## Documentation
@@ -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,18 @@
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 sync --extra inference_cpu --no-dev
@@ -13,14 +13,12 @@ echo "Install OTVision."
13
13
 
14
14
  echo "$DIR"
15
15
  cd "$DIR" || exit
16
- WORKING_DIR=$(pwd)
17
- VENV="$WORKING_DIR"/.venv
18
- PYTHON="$VENV"/bin/python
19
- PIP="$VENV"/bin/pip
20
- UV="$VENV"/bin/uv
21
16
 
22
- python3.12 -m venv "$VENV"
17
+ # Check if uv is available globally, if not install it
18
+ if ! command -v uv &>/dev/null; then
19
+ echo "uv not found globally, installing uv..."
20
+ curl -LsSf https://astral.sh/uv/install.sh | sh
21
+ export PATH="$HOME/.cargo/bin:$PATH"
22
+ fi
23
23
 
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
24
+ uv sync --extra inference_cpu --no-dev
@@ -0,0 +1,18 @@
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 sync --extra inference_cuda --no-dev
@@ -0,0 +1,24 @@
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
+
17
+ # Check if uv is available globally, if not install it
18
+ if ! command -v uv &>/dev/null; then
19
+ echo "uv not found globally, installing uv..."
20
+ curl -LsSf https://astral.sh/uv/install.sh | sh
21
+ export PATH="$HOME/.cargo/bin:$PATH"
22
+ fi
23
+
24
+ uv sync --extra inference_cuda --no-dev
@@ -0,0 +1,5 @@
1
+ echo Install OTVision development environment.
2
+ call install.cmd
3
+
4
+ uv sync --extra inference_cpu
5
+ uv run pre-commit install --install-hooks
@@ -0,0 +1,10 @@
1
+ #!/bin/bash
2
+ set -e
3
+ echo "Install OTVision development environment."
4
+
5
+ WORKING_DIR=$(pwd)
6
+
7
+ bash "$WORKING_DIR"/install.sh
8
+
9
+ uv sync --extra inference_cpu
10
+ uv run pre-commit install --install-hooks
@@ -0,0 +1,170 @@
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
+ "tqdm==4.67.1",
40
+ "ujson==5.10.0",
41
+ ]
42
+
43
+ [dependency-groups]
44
+ dev = [
45
+ "black==25.1.0",
46
+ "flake8==7.1.1",
47
+ "interrogate==1.5.0",
48
+ "isort==5.13.2",
49
+ "jsonschema==4.23.0",
50
+ "mypy==1.15.0",
51
+ "pandas-stubs==2.2.3.250308",
52
+ "pre-commit==3.8.0",
53
+ "pytest==8.3.3",
54
+ "pytest-cov==5.0.0",
55
+ "twine==6.1.0",
56
+ "yamllint==1.35.1",
57
+ ]
58
+
59
+ [project.optional-dependencies]
60
+ inference_cpu = [
61
+ "torch==2.7.1",
62
+ "torchvision==0.22.1",
63
+ "ultralytics==8.3.159",
64
+ ]
65
+ inference_cuda = [
66
+ "torch==2.7.1",
67
+ "torchvision==0.22.1",
68
+ "tensorrt==10.12.0.36; sys_platform != 'darwin'",
69
+ "tensorrt-cu12-bindings==10.12.0.36; sys_platform != 'darwin'",
70
+ "tensorrt-cu12-libs==10.12.0.36; sys_platform != 'darwin'",
71
+ "ultralytics==8.3.159",
72
+ ]
73
+ [project.urls]
74
+ Homepage = "https://opentrafficcam.org/"
75
+ Documentation = "https://opentrafficcam.org/overview/"
76
+ Repository = "https://github.com/OpenTrafficCam/OTVision"
77
+ Issues = "https://github.com/OpenTrafficCam/OTVision/issues"
78
+ Changelog = "https://github.com/OpenTrafficCam/OTVision/releases"
79
+
80
+
81
+ [tool.hatch.version]
82
+ path = "OTVision/version.py"
83
+
84
+ [tool.hatch.build.targets.wheel]
85
+ packages = ["OTVision"]
86
+
87
+ [tool.hatch.build]
88
+ directory = "dist"
89
+
90
+ [tool.black]
91
+ line-length = 88
92
+
93
+ [tool.isort]
94
+ profile = "black"
95
+
96
+ [tool.mypy]
97
+ ignore_missing_imports = true
98
+ ignore_missing_imports_per_module = true
99
+ disallow_untyped_defs = true
100
+
101
+ [[tool.mypy.overrides]]
102
+ module = "OTVision.view.*"
103
+ ignore_errors = true
104
+
105
+ [[tool.mypy.overrides]]
106
+ module = "OTVision.transform.*"
107
+ ignore_errors = true
108
+
109
+ [[tool.uv.dependency-metadata]]
110
+ name = "tensorrt-cu12"
111
+ requires-dist = ["tensorrt-cu12-bindings", "tensorrt-cu12-libs"]
112
+
113
+ [[tool.uv.dependency-metadata]]
114
+ name = "tensorrt-cu12-libs"
115
+ requires-dist = ["nvidia-cuda-runtime-cu12"]
116
+
117
+ [[tool.uv.dependency-metadata]]
118
+ name = "nvidia-cuda-runtime-cu12"
119
+
120
+ [[tool.uv.dependency-metadata]]
121
+ name = "tensorrt-cu12-bindings"
122
+
123
+ [[tool.uv.dependency-metadata]]
124
+ name = "tensorrt-cu12-libs"
125
+
126
+ [tool.uv]
127
+ environments = [
128
+ "sys_platform == 'win32'",
129
+ "sys_platform == 'darwin'",
130
+ "sys_platform == 'linux'",
131
+ ]
132
+ conflicts = [
133
+ [
134
+ { extra = "inference_cpu" },
135
+ { extra = "inference_cuda" },
136
+ ],
137
+ ]
138
+
139
+
140
+ [tool.uv.sources]
141
+ torch = [
142
+ { index = "pytorch-cu128", marker = "sys_platform != 'darwin'" , extra = "inference_cuda" },
143
+ { index = "pytorch-cpu", marker = "sys_platform == 'darwin'" },
144
+ { index = "pytorch-cpu", marker = "sys_platform == 'linux'", extra="inference_cpu" },
145
+ { index = "pytorch-cpu", marker = "sys_platform == 'win32'", extra="inference_cpu" }
146
+ ]
147
+ torchvision = [
148
+ { index = "pytorch-cu128", marker = "sys_platform != 'darwin'" , extra = "inference_cuda" },
149
+ { index = "pytorch-cpu", marker = "sys_platform == 'darwin'" },
150
+ { index = "pytorch-cpu", marker = "sys_platform == 'linux'", extra="inference_cpu" },
151
+ { index = "pytorch-cpu", marker = "sys_platform == 'win32'", extra="inference_cpu" }
152
+ ]
153
+ tensorrt = { index = "tensorrt", extra = "inference_cuda" }
154
+ tensorrt-cu12-bindings = { index = "tensorrt", extra = "inference_cuda" }
155
+ tensorrt-cu12-libs = { index = "tensorrt", extra = "inference_cuda" }
156
+
157
+ [[tool.uv.index]]
158
+ name = "pytorch-cpu"
159
+ url = "https://download.pytorch.org/whl/cpu"
160
+ explicit = true
161
+
162
+ [[tool.uv.index]]
163
+ name = "pytorch-cu128"
164
+ url = "https://download.pytorch.org/whl/cu128"
165
+ explicit = true
166
+
167
+ [[tool.uv.index]]
168
+ name = "tensorrt"
169
+ url = "https://pypi.nvidia.com/"
170
+ 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],