OTVision 0.6.8__py3-none-any.whl → 0.6.9__py3-none-any.whl

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 (34) hide show
  1. OTVision/abstraction/pipes_and_filter.py +4 -4
  2. OTVision/application/buffer.py +5 -12
  3. OTVision/application/config_parser.py +51 -2
  4. OTVision/application/detect/current_object_detector.py +2 -4
  5. OTVision/application/event/new_otvision_config.py +6 -0
  6. OTVision/application/{detect/detection_file_save_path_provider.py → otvision_save_path_provider.py} +8 -7
  7. OTVision/application/track/ottrk.py +203 -0
  8. OTVision/application/track/tracking_run_id.py +35 -0
  9. OTVision/detect/builder.py +8 -14
  10. OTVision/detect/detected_frame_buffer.py +13 -1
  11. OTVision/detect/detected_frame_producer.py +2 -2
  12. OTVision/detect/detected_frame_producer_factory.py +4 -8
  13. OTVision/detect/otdet.py +109 -41
  14. OTVision/detect/otdet_file_writer.py +52 -29
  15. OTVision/detect/rtsp_input_source.py +15 -3
  16. OTVision/detect/video_input_source.py +8 -8
  17. OTVision/detect/yolo.py +3 -7
  18. OTVision/domain/detect_producer_consumer.py +3 -3
  19. OTVision/domain/frame.py +12 -0
  20. OTVision/domain/input_source_detect.py +3 -3
  21. OTVision/domain/object_detection.py +4 -6
  22. OTVision/helpers/date.py +16 -0
  23. OTVision/plugin/ffmpeg_video_writer.py +2 -4
  24. OTVision/track/builder.py +2 -5
  25. OTVision/track/id_generator.py +1 -3
  26. OTVision/track/parser/chunk_parser_plugins.py +1 -19
  27. OTVision/track/parser/frame_group_parser_plugins.py +19 -74
  28. OTVision/track/stream_ottrk_file_writer.py +116 -0
  29. OTVision/track/track.py +2 -1
  30. OTVision/version.py +1 -1
  31. {otvision-0.6.8.dist-info → otvision-0.6.9.dist-info}/METADATA +1 -1
  32. {otvision-0.6.8.dist-info → otvision-0.6.9.dist-info}/RECORD +34 -30
  33. {otvision-0.6.8.dist-info → otvision-0.6.9.dist-info}/WHEEL +0 -0
  34. {otvision-0.6.8.dist-info → otvision-0.6.9.dist-info}/licenses/LICENSE +0 -0
@@ -1,34 +1,17 @@
1
- import re
2
1
  from datetime import datetime, timedelta
3
2
  from pathlib import Path
4
3
 
5
- from OTVision import dataformat, version
6
4
  from OTVision.application.config import TrackConfig
7
5
  from OTVision.application.get_current_config import GetCurrentConfig
8
- from OTVision.dataformat import (
9
- EXPECTED_DURATION,
10
- FILENAME,
11
- FIRST_TRACKED_VIDEO_START,
12
- LAST_TRACKED_VIDEO_END,
13
- LENGTH,
14
- OTTRACK_VERSION,
15
- OTVISION_VERSION,
16
- RECORDED_START_DATE,
17
- TRACKER,
18
- TRACKING,
19
- VIDEO,
20
- )
21
- from OTVision.detect.otdet import parse_video_length
22
- from OTVision.helpers.files import (
23
- FULL_FILE_NAME_PATTERN,
24
- HOSTNAME,
25
- InproperFormattedFilename,
26
- read_json_bz2_metadata,
6
+ from OTVision.application.track.ottrk import create_ottrk_metadata_entry
7
+ from OTVision.detect.otdet import (
8
+ extract_expected_duration_from_otdet,
9
+ extract_hostname_from_otdet,
10
+ extract_start_date_from_otdet,
27
11
  )
12
+ from OTVision.helpers.files import read_json_bz2_metadata
28
13
  from OTVision.track.model.filebased.frame_group import FrameGroup, FrameGroupParser
29
- from OTVision.track.parser.chunk_parser_plugins import parse_datetime
30
14
 
31
- MISSING_START_DATE = datetime(1900, 1, 1)
32
15
  MISSING_EXPECTED_DURATION = timedelta(minutes=15)
33
16
 
34
17
 
@@ -37,16 +20,6 @@ class TimeThresholdFrameGroupParser(FrameGroupParser):
37
20
  def config(self) -> TrackConfig:
38
21
  return self._get_current_config.get().track
39
22
 
40
- @property
41
- def _tracker_data(self) -> dict:
42
- return tracker_metadata(
43
- sigma_l=self.config.sigma_l,
44
- sigma_h=self.config.sigma_h,
45
- sigma_iou=self.config.sigma_iou,
46
- t_min=self.config.t_min,
47
- t_miss_max=self.config.t_miss_max,
48
- )
49
-
50
23
  def __init__(
51
24
  self,
52
25
  get_current_config: GetCurrentConfig,
@@ -80,43 +53,28 @@ class TimeThresholdFrameGroupParser(FrameGroupParser):
80
53
  )
81
54
 
82
55
  def get_hostname(self, file_metadata: dict) -> str:
83
- video_name = Path(file_metadata[VIDEO][FILENAME]).name
84
- match = re.search(
85
- FULL_FILE_NAME_PATTERN,
86
- video_name,
87
- )
88
- if match:
89
- return match.group(HOSTNAME)
90
-
91
- raise InproperFormattedFilename(f"Could not parse {video_name}.")
56
+ return extract_hostname_from_otdet(file_metadata)
92
57
 
93
58
  def extract_start_date_from(self, metadata: dict) -> datetime:
94
- if RECORDED_START_DATE in metadata[VIDEO].keys():
95
- recorded_start_date = metadata[VIDEO][RECORDED_START_DATE]
96
- return parse_datetime(recorded_start_date)
97
- return MISSING_START_DATE
59
+ return extract_start_date_from_otdet(metadata)
98
60
 
99
61
  def extract_expected_duration_from(self, metadata: dict) -> timedelta:
100
- if EXPECTED_DURATION in metadata[VIDEO].keys():
101
- if expected_duration := metadata[VIDEO][EXPECTED_DURATION]:
102
- return timedelta(seconds=int(expected_duration))
103
- return self.parse_video_length(metadata)
104
-
105
- def parse_video_length(self, metadata: dict) -> timedelta:
106
- video_length = metadata[VIDEO][LENGTH]
107
- return parse_video_length(video_length)
62
+ return extract_expected_duration_from_otdet(metadata)
108
63
 
109
64
  def update_metadata(self, frame_group: FrameGroup) -> dict[Path, dict]:
110
65
  metadata_by_file = dict(frame_group.metadata_by_file)
111
66
  for filepath in frame_group.files:
112
67
  metadata = metadata_by_file[filepath]
113
- metadata[OTTRACK_VERSION] = version.ottrack_version()
114
- metadata[TRACKING] = {
115
- OTVISION_VERSION: version.otvision_version(),
116
- FIRST_TRACKED_VIDEO_START: frame_group.start_date.timestamp(),
117
- LAST_TRACKED_VIDEO_END: frame_group.end_date.timestamp(),
118
- TRACKER: self._tracker_data,
119
- }
68
+ ottrk_metadata = create_ottrk_metadata_entry(
69
+ start_date=frame_group.start_date,
70
+ end_date=frame_group.end_date,
71
+ sigma_l=self.config.sigma_l,
72
+ sigma_h=self.config.sigma_h,
73
+ sigma_iou=self.config.sigma_iou,
74
+ t_min=self.config.t_min,
75
+ t_miss_max=self.config.t_miss_max,
76
+ )
77
+ metadata.update(ottrk_metadata)
120
78
 
121
79
  return metadata_by_file
122
80
 
@@ -142,16 +100,3 @@ class TimeThresholdFrameGroupParser(FrameGroupParser):
142
100
  last_group = current_group
143
101
  merged_groups.append(last_group)
144
102
  return merged_groups
145
-
146
-
147
- def tracker_metadata(
148
- sigma_l: float, sigma_h: float, sigma_iou: float, t_min: float, t_miss_max: float
149
- ) -> dict:
150
- return {
151
- dataformat.NAME: "IOU",
152
- dataformat.SIGMA_L: sigma_l,
153
- dataformat.SIGMA_H: sigma_h,
154
- dataformat.SIGMA_IOU: sigma_iou,
155
- dataformat.T_MIN: t_min,
156
- dataformat.T_MISS_MAX: t_miss_max,
157
- }
@@ -0,0 +1,116 @@
1
+ from pathlib import Path
2
+
3
+ from OTVision.application.buffer import Buffer
4
+ from OTVision.application.config import Config, TrackConfig
5
+ from OTVision.application.configure_logger import logger
6
+ from OTVision.application.get_current_config import GetCurrentConfig
7
+ from OTVision.application.otvision_save_path_provider import OtvisionSavePathProvider
8
+ from OTVision.application.track.ottrk import OttrkBuilder, OttrkBuilderConfig
9
+ from OTVision.application.track.tracking_run_id import GetCurrentTrackingRunId
10
+ from OTVision.detect.otdet import OtdetBuilderConfig
11
+ from OTVision.detect.otdet_file_writer import OtdetFileWrittenEvent
12
+ from OTVision.domain.detection import TrackId
13
+ from OTVision.domain.frame import TrackedFrame
14
+ from OTVision.helpers.files import write_json
15
+
16
+ STREAMING_FRAME_GROUP_ID = 0
17
+
18
+
19
+ class StreamOttrkFileWriter(Buffer[TrackedFrame, OtdetFileWrittenEvent]):
20
+ @property
21
+ def config(self) -> Config:
22
+ return self._get_current_config.get()
23
+
24
+ @property
25
+ def track_config(self) -> TrackConfig:
26
+ return self.config.track
27
+
28
+ @property
29
+ def build_condition_fulfilled(self) -> bool:
30
+ return len(self._ottrk_unfinished_tracks) == 0
31
+
32
+ @property
33
+ def current_output_file(self) -> Path:
34
+ if self._current_output_file is None:
35
+ raise ValueError("Output file has not been set yet.")
36
+ return self._current_output_file
37
+
38
+ def __init__(
39
+ self,
40
+ builder: OttrkBuilder,
41
+ get_current_config: GetCurrentConfig,
42
+ get_current_tracking_run_id: GetCurrentTrackingRunId,
43
+ save_path_provider: OtvisionSavePathProvider,
44
+ ) -> None:
45
+ Buffer.__init__(self)
46
+ self._builder = builder
47
+ self._get_current_config = get_current_config
48
+ self._current_tracking_run_id = get_current_tracking_run_id
49
+ self._save_path_provider = save_path_provider
50
+
51
+ self._in_writing_state: bool = False
52
+ self._ottrk_unfinished_tracks: set[TrackId] = set()
53
+ self._current_output_file: Path | None = None
54
+
55
+ def on_flush(self, event: OtdetFileWrittenEvent) -> None:
56
+ tracked_frames = self._get_buffered_elements()
57
+ if not tracked_frames:
58
+ return
59
+
60
+ self._in_writing_state = True
61
+ self._current_output_file = self._save_path_provider.provide(
62
+ event.otdet_builder_config.source, self.config.filetypes.track
63
+ )
64
+ builder_config = self._create_ottrk_builder_config(
65
+ event.otdet_builder_config, event.number_of_frames
66
+ )
67
+ self._builder.set_config(builder_config)
68
+ last_frame = tracked_frames[-1]
69
+ self._builder.add_tracked_frames(self._get_buffered_elements())
70
+ self._ottrk_unfinished_tracks = last_frame.unfinished_tracks
71
+ self.reset()
72
+
73
+ def _create_ottrk_builder_config(
74
+ self,
75
+ otdet_builder_config: OtdetBuilderConfig,
76
+ number_of_frames: int,
77
+ ) -> OttrkBuilderConfig:
78
+ return OttrkBuilderConfig(
79
+ otdet_builder_config=otdet_builder_config,
80
+ number_of_frames=number_of_frames,
81
+ sigma_l=self.track_config.sigma_l,
82
+ sigma_h=self.track_config.sigma_h,
83
+ sigma_iou=self.track_config.sigma_iou,
84
+ t_min=self.track_config.t_min,
85
+ t_miss_max=self.track_config.t_miss_max,
86
+ tracking_run_id=self._current_tracking_run_id.get(),
87
+ frame_group=STREAMING_FRAME_GROUP_ID,
88
+ )
89
+
90
+ def reset(self) -> None:
91
+ self._reset_buffer()
92
+
93
+ def buffer(self, to_buffer: TrackedFrame) -> None:
94
+ self._buffer.append(to_buffer.without_image())
95
+
96
+ if self._in_writing_state:
97
+ self._builder.finish_tracks(to_buffer.finished_tracks)
98
+ self._builder.discard_tracks(to_buffer.discarded_tracks)
99
+ self._ottrk_unfinished_tracks = (
100
+ self._ottrk_unfinished_tracks.difference(to_buffer.unfinished_tracks)
101
+ .difference(to_buffer.finished_tracks)
102
+ .difference(to_buffer.discarded_tracks)
103
+ )
104
+ logger().warning(f"Unfinished tracks: {self._ottrk_unfinished_tracks}")
105
+ if self.build_condition_fulfilled:
106
+ ottrk_data = self._builder.build()
107
+ self.write(ottrk_data)
108
+ self._in_writing_state = False
109
+
110
+ def write(self, ottrk: dict) -> None:
111
+ write_json(
112
+ dict_to_write=ottrk,
113
+ file=self.current_output_file,
114
+ filetype=self.config.filetypes.track,
115
+ overwrite=True,
116
+ )
OTVision/track/track.py CHANGED
@@ -4,10 +4,11 @@ from tqdm import tqdm
4
4
 
5
5
  from OTVision.application.config import Config
6
6
  from OTVision.application.get_current_config import GetCurrentConfig
7
+ from OTVision.application.track.tracking_run_id import StrIdGenerator
7
8
  from OTVision.helpers.files import get_files
8
9
  from OTVision.helpers.input_types import check_types
9
10
  from OTVision.helpers.log import LOGGER_NAME
10
- from OTVision.track.id_generator import StrIdGenerator, tracking_run_uuid_generator
11
+ from OTVision.track.id_generator import tracking_run_uuid_generator
11
12
  from OTVision.track.model.track_exporter import FinishedTracksExporter
12
13
  from OTVision.track.tracker.filebased_tracking import UnfinishedChunksBuffer
13
14
 
OTVision/version.py CHANGED
@@ -1,4 +1,4 @@
1
- __version__ = "v0.6.8"
1
+ __version__ = "v0.6.9"
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.8
3
+ Version: 0.6.9
4
4
  Summary: OTVision is a core module of the OpenTrafficCam framework to perform object detection and tracking.
5
5
  Project-URL: Homepage, https://opentrafficcam.org/
6
6
  Project-URL: Documentation, https://opentrafficcam.org/overview/
@@ -1,33 +1,36 @@
1
1
  OTVision/__init__.py,sha256=CLnfgTlVHM4_nzDacvy06Z_Crc3hU6usd0mUyEvBf24,781
2
2
  OTVision/config.py,sha256=D4NIio27JG9hZk7yHI6kNKiMxKeKa_MGfrKNDdEH370,5389
3
3
  OTVision/dataformat.py,sha256=BHF7qHzyNb80hI1EKfwcdJ9bgG_X4bp_hCXzdg7_MSA,1941
4
- OTVision/version.py,sha256=8pR24rKY8pgm_Tctl-E9a4RhSGvh-bTk4sm-pPiNync,175
4
+ OTVision/version.py,sha256=7tay3MZvaKP1TfrBOGIk7bf5JUEEGJMOrkbKSwKXmIo,175
5
5
  OTVision/abstraction/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  OTVision/abstraction/defaults.py,sha256=ftETDe25gmr563RPSbG6flcEiNiHnRb0iXK1Zj_zdNg,442
7
7
  OTVision/abstraction/observer.py,sha256=ZFGxUUjI3wUpf5ogXg2yDe-QjCcXre6SxH5zOogOx2U,1350
8
- OTVision/abstraction/pipes_and_filter.py,sha256=rzYaWDalXnlMbfpkgI91a0FL0q1llUlCRuIQsidYDv8,940
8
+ OTVision/abstraction/pipes_and_filter.py,sha256=pzK80ZV03_n6V-bZ9_Etu-aLqZACHgBbhTBZRnhz71M,887
9
9
  OTVision/application/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- OTVision/application/buffer.py,sha256=eoK3Rfvc_72cQD3EAASzmxhznjmnIFFh3LX9fqAzXyU,1166
10
+ OTVision/application/buffer.py,sha256=qJQlNBQtriN2pqC1kfpOKk222_YHG0HNRzwC2DKBJQ0,743
11
11
  OTVision/application/config.py,sha256=tTFVo2iJt3zCJ_p06FCeQOJ_NbuwmPd60ttrh-6fANI,13670
12
- OTVision/application/config_parser.py,sha256=-k-FlqH4Cb5q_OD2u5Aa12-Ca8RtKPbpaNcadmGUhXk,9610
12
+ OTVision/application/config_parser.py,sha256=UKbKNy7vXldGHWN5UFg6Q0YN3PjPGevMw033i0R_VfU,11407
13
13
  OTVision/application/configure_logger.py,sha256=1TzHB-zm7vGTPtUp7m28ne4WxOyiUYeChLZU-ZPyOVQ,623
14
14
  OTVision/application/frame_count_provider.py,sha256=zN_75IM-w9Xlc5rT8OArhiWhPHR8mUfFhdzhSmQQuaM,693
15
15
  OTVision/application/get_config.py,sha256=kFRTFQ1eLzBZCIkLrsf0wk7pWIlnUQRXvoZsl0QttVM,829
16
16
  OTVision/application/get_current_config.py,sha256=iqtY10FRpn2FgLsasejjlyPFP3NrQJNKkEGo8PE5tc8,311
17
+ OTVision/application/otvision_save_path_provider.py,sha256=lUzjQ92Qjvxf9sbaZX591FuEaUW5gFAq4GpgmN1k_tM,2179
17
18
  OTVision/application/update_current_config.py,sha256=iW1rpCClTHn8tnmVSpLVxdEB0nh1O_JCyxEqog0r0NU,333
18
19
  OTVision/application/detect/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
- OTVision/application/detect/current_object_detector.py,sha256=J4U5k1s902agN90FYR4M_gO8MYYa_5XkYGREjStWCxQ,1343
20
+ OTVision/application/detect/current_object_detector.py,sha256=P8BqThQGVBUMDzJ3WdNrOCEkB9h-wXqannZ9g_PYZXM,1302
20
21
  OTVision/application/detect/current_object_detector_metadata.py,sha256=xai0UBEzxr-rxXCc8mTmNDECds7mdsw2sem5HZxvQ4Q,1017
21
22
  OTVision/application/detect/detected_frame_factory.py,sha256=sW_l0xaPz44_lPEmCPKz4Xg1Mv4ZGKN9CyBCG_iN8dQ,1007
22
- OTVision/application/detect/detection_file_save_path_provider.py,sha256=nUyzgR7imrH8PkUl_72kdUDiolPXq1_RQqbpFwLI5Cs,2165
23
23
  OTVision/application/detect/factory.py,sha256=UCnLtgpWdNqwwjW0v2yzKF9Gacx6gewjTyy43wXs2Jg,938
24
24
  OTVision/application/detect/get_detect_cli_args.py,sha256=gezr17im8SwbuXW1suCodWRrFs8lSljNKu76SbWBgkY,265
25
25
  OTVision/application/detect/timestamper.py,sha256=us9l1GaPnSfMrUZQ5UEDBPX787ypeUiUtpOZm3JpgM0,653
26
26
  OTVision/application/detect/update_detect_config_with_cli_args.py,sha256=tRT4jB-ynhZ24HvA7c6pyvNDcwIs_M6w-o4k2hCONPQ,4393
27
27
  OTVision/application/event/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
+ OTVision/application/event/new_otvision_config.py,sha256=Xt2YcuPfn57VUYW1nYrH1-oCpEjufuvQTJvh8QxaYdc,98
28
29
  OTVision/application/event/new_video_start.py,sha256=Ydkao4v3fagJUvXASkvxgmplRb7PYY88cmj-bSxmzfk,148
29
30
  OTVision/application/track/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
31
  OTVision/application/track/get_track_cli_args.py,sha256=uebHGDB6xzttak_Z4Nos08Ay69QKT2JypfHwn1dLpIM,553
32
+ OTVision/application/track/ottrk.py,sha256=h7fkgBagCcQI9M7rI7Q4fF34pvRugAmJLnIcbdMoTyo,6711
33
+ OTVision/application/track/tracking_run_id.py,sha256=9_RgQSHR-IMgAM4LawtJWxNcVyw_E6qkZdVes3JVV0g,961
31
34
  OTVision/application/track/update_current_track_config.py,sha256=pCFNuGl6rqpsUUGm2i1kjLSuuITVXv2R79Xf81n45as,1667
32
35
  OTVision/application/track/update_track_config_with_cli_args.py,sha256=5MDr2ih4xHzZ0kI6TSQ2C4mcWsPXW2PB80kA22-M_5I,2273
33
36
  OTVision/application/video/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -35,36 +38,36 @@ OTVision/application/video/generate_video.py,sha256=4zazQoRdwefF_R-sUcnbP-23NTWg
35
38
  OTVision/convert/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
39
  OTVision/convert/convert.py,sha256=UUfzpbtMlxlJgKE6XeT5nyNqK26-K02bQDhq3o7KrXE,11050
37
40
  OTVision/detect/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
- OTVision/detect/builder.py,sha256=ubmxSICTR5wEPhqrLfuH3Bq0fvA_1qxRjn_z9NXa33c,7723
41
+ OTVision/detect/builder.py,sha256=Q6xeeP1ulxRKGvVevr-pPcFhixZHcQ9CpRvjkRWDGxg,7641
39
42
  OTVision/detect/cli.py,sha256=3yf0G_B9cVm2CAz7AFzG10Cctv4ogMOxRHWEg8SZHss,7562
40
43
  OTVision/detect/detect.py,sha256=YaVS-DJXdEmh-OzwE31UPNl2uk7mcFyO_CKKTgMeiuM,1328
41
- OTVision/detect/detected_frame_buffer.py,sha256=TrLbImpvCm1B09Z3c000e2uDO5WguyVwoMmFAqH8Zvk,1505
42
- OTVision/detect/detected_frame_producer.py,sha256=yO60w4YHOum2DkiinA6mi2aaHSOmZxXRykhox2CMsZY,544
43
- OTVision/detect/detected_frame_producer_factory.py,sha256=QeBvjF6MneHiaTPYelTrzJWTpYxWYWDcVBzFYNb1PUQ,1646
44
+ OTVision/detect/detected_frame_buffer.py,sha256=zZZZBcpNcKApPMX4xoLeq7xszDCvxA3eOF_umrwo0N4,1931
45
+ OTVision/detect/detected_frame_producer.py,sha256=thMg5nZNiArUpQI7ctGTQy8A2jxsZs5MJFJpkBPAzNk,530
46
+ OTVision/detect/detected_frame_producer_factory.py,sha256=HiFAHWTvilwyibDrzMv9skwu901d9QW3zvjc3q4Pp80,1576
44
47
  OTVision/detect/file_based_detect_builder.py,sha256=G72GFhF2BCXO3fwfC9pXkbJPhRFfU6RphLRQs3ugCUQ,2315
45
- OTVision/detect/otdet.py,sha256=-8rZGY9NVRAwIHeVcNCjm665SmnW5UVIO_PSKdHegDA,6274
46
- OTVision/detect/otdet_file_writer.py,sha256=idgPKwhgEd18HT7HshaT304JPlSw0kT4Isn2gWJRaSk,4304
48
+ OTVision/detect/otdet.py,sha256=cIwCBVFYWma7oJynoaT0eyIAZw-M2iH1xkvjy6-TwEM,8475
49
+ OTVision/detect/otdet_file_writer.py,sha256=mGygzanR2WwIBBouUQYRVtYwtVAlLJZJtmshVwWTgdY,5164
47
50
  OTVision/detect/pyav_frame_count_provider.py,sha256=w7p9iM3F2fljV8SD7q491gQhIHANbVczqtalcUiKj-E,453
48
51
  OTVision/detect/rtsp_based_detect_builder.py,sha256=P47nKU2C1PJQmokgacv04DzJ-7eG6CUbqqg3bdQhXTQ,2662
49
- OTVision/detect/rtsp_input_source.py,sha256=1us8zziXGeggNROWQWrx7N35XztGwhEhpbbMNHQScvs,10268
52
+ OTVision/detect/rtsp_input_source.py,sha256=nF7AyRcbZlvYwPghvi3QbRPCHU9KTtcgtWiUdAAR4Jg,10806
50
53
  OTVision/detect/timestamper.py,sha256=VvDTzHu9fTI7qQL9x775Gc27r47R8D5Pb040ffwO04k,5288
51
- OTVision/detect/video_input_source.py,sha256=LCmElr8r03n4OqQlzhas9soq5bZ76Q9vXQZ8jk5IxME,10106
52
- OTVision/detect/yolo.py,sha256=7NOH6Tbr1ILkp_u7AdWNmnU3wLem6u7oSMhHAexZaXs,10632
54
+ OTVision/detect/video_input_source.py,sha256=tyvaku4EIwCjCAQyA3lXKFtzVMF325CbrDdn24mfZl0,10124
55
+ OTVision/detect/yolo.py,sha256=JDnnPO-YO30tu61sw80K9qJS6_aYqdR2dQHAhtJ3tl0,10551
53
56
  OTVision/detect/plugin_av/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
57
  OTVision/detect/plugin_av/rotate_frame.py,sha256=4wJqTYI2HRlfa4p2Ffap33vLmKIzE_EwFvQraEkQ4R8,1055
55
58
  OTVision/domain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
59
  OTVision/domain/cli.py,sha256=INiw1dxQNO4XI6GGCIMhX2G08ig68FNS04fdtMt3gNs,2061
57
60
  OTVision/domain/current_config.py,sha256=Q38NCktoGNU1Z_miXNoJXLH8-NDbVszwVOMGR1aAwWM,286
58
- OTVision/domain/detect_producer_consumer.py,sha256=gD7NwscQZLmCxMDZpZkGql0oMrpGHDBBNvdTXs58Vvw,855
61
+ OTVision/domain/detect_producer_consumer.py,sha256=z2N4aXv0mlH-EZxoNUxKYyn7o4aB638YZMbExz9NgZI,840
59
62
  OTVision/domain/detection.py,sha256=SZLP-87XE3NcTkeYz7GTqp4oPMiqI1P5gILp1_yHtxY,3761
60
- OTVision/domain/frame.py,sha256=Hv1v9cegfhVGgl2MB4uKYbvngfkOLrvES_w4gD0HtMo,6410
61
- OTVision/domain/input_source_detect.py,sha256=BNhzxJBurKrM7g5cFrBigJGNmTdIQfVOy9V0pIqsZQ8,1107
62
- OTVision/domain/object_detection.py,sha256=kyrTbP9sZBKtGo54vCNfluDMM8wpWZST9Oqf8m8Q1y4,1394
63
+ OTVision/domain/frame.py,sha256=1H0Cqg_LvO9BEwzGRkvRyJm6AauR_yS6kq0PHujonZk,6791
64
+ OTVision/domain/input_source_detect.py,sha256=pdFnQ2xG1P4-KFWMS7a2-blx0hmR6N8Zza8GSMq4CDo,1081
65
+ OTVision/domain/object_detection.py,sha256=oCazkbarKPBMzvQ3VeY2HQpWMUOgLeJBxXT52kl1syM,1327
63
66
  OTVision/domain/serialization.py,sha256=S7gb648z_W8U3Fb6TSk7hVU4qHlGwOZ7D6FeYSLXQwM,257
64
67
  OTVision/domain/time.py,sha256=_6a4zDbhXU7DmK7PdBYWRrrO2yQ4D68qtSYLTwnwWMQ,302
65
68
  OTVision/domain/video_writer.py,sha256=iYt-QXu8jaNSIwdbpEjc5hsEtHveUgqbmxme7iZNVLA,910
66
69
  OTVision/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
- OTVision/helpers/date.py,sha256=XK0fmXMombQ2CJ2_RXjk-bc-R8qqXRK2rDmCMBi0_G0,854
70
+ OTVision/helpers/date.py,sha256=L99CFQ7u34RwGDisFlrQoopZnkOOggQGDehWUi8kLiY,1347
68
71
  OTVision/helpers/files.py,sha256=G7zoOHzWIYrMmkjgHJHkZbh2hcGtnwZomuspthG2GsE,18444
69
72
  OTVision/helpers/formats.py,sha256=YLo_QLA2nhVREyv5N-xNW20c4nIL7DIF40E1lrsAyLE,4365
70
73
  OTVision/helpers/input_types.py,sha256=d94IYX0e-ersz3bl8xy9SklGUom-LjPUQ-BRsOmpH68,649
@@ -72,14 +75,15 @@ OTVision/helpers/log.py,sha256=fOSMTXQRQ3_3zzYL8pDlx85IXPwyDsI2WGpK-V_R47Q,4985
72
75
  OTVision/helpers/machine.py,sha256=8Bz_Eg7PS0IL4riOVeJcEIi5D9E8Ju8-JomTkW975p8,2166
73
76
  OTVision/helpers/video.py,sha256=xyI35CiWXqoeGd3HeLhZUPxrLz8GccWyzHusxoweJr4,1480
74
77
  OTVision/plugin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
- OTVision/plugin/ffmpeg_video_writer.py,sha256=1e8FVrdNopTOtgn2QOicz_lTXriwLXoJ9CPtAv9hlL4,10469
78
+ OTVision/plugin/ffmpeg_video_writer.py,sha256=Q-exHN7aRoGEXAMyab-EGOqoKDL8ccwpB9IZhr1tjag,10428
76
79
  OTVision/plugin/generate_video.py,sha256=Jxk8iQBP8YhobRIRJ535yW3gx0h4d7H8oz0rULRPgcc,840
77
80
  OTVision/plugin/yaml_serialization.py,sha256=LjJ_QLJPClRwsaw7ooagWT7LBW08OvSb527jbex1qIQ,557
78
81
  OTVision/track/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
- OTVision/track/builder.py,sha256=kHGV8Bb7Uh_SbVP1-tT5p68yzBqiWEeLmjM_P6wnE3A,4868
82
+ OTVision/track/builder.py,sha256=iDq9-QxU8c3CQQd5HDPzT2qkXWIyFl0fk658KQ7Soh0,4905
80
83
  OTVision/track/cli.py,sha256=Lzmij9vMuaArB8MerDcGlaefwKMgRWNWov1YLGWA6SI,4294
81
- OTVision/track/id_generator.py,sha256=qv9SZnI72sXc5ePBIke8TAB6trVs0RU1vgiAqFtpxoo,287
82
- OTVision/track/track.py,sha256=7v_qJ-J3RoU6MNLSVjwM61TFjki6YyctSOhzvE8Z8WY,2303
84
+ OTVision/track/id_generator.py,sha256=2Lkegjhz8T2FXiK1HaiS_FbNZrJjIWzHi407-IoKAHg,241
85
+ OTVision/track/stream_ottrk_file_writer.py,sha256=SyIVo2NVhrVWPbneK4Wi1cZcG6BwlzeBObYRl7_1G-A,4526
86
+ OTVision/track/track.py,sha256=iMOaukcHnPhRiU1eEccaeGEKLzBQoilaUPRVmkmt0rk,2357
83
87
  OTVision/track/exporter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
84
88
  OTVision/track/exporter/filebased_exporter.py,sha256=sdaWY4CxjawyeEKG329T92Bodf1E8wjnXuXocv0Ppgo,986
85
89
  OTVision/track/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -89,8 +93,8 @@ OTVision/track/model/filebased/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5
89
93
  OTVision/track/model/filebased/frame_chunk.py,sha256=rXhQCHXWGJbePy5ZW3JZCdltGz5mZxFdcrW0mgez-2k,6771
90
94
  OTVision/track/model/filebased/frame_group.py,sha256=f-hXS1Vc5U_qf2cgNbYVeSTZ3dg5NUJhasOEHuuX1HE,2977
91
95
  OTVision/track/parser/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
92
- OTVision/track/parser/chunk_parser_plugins.py,sha256=X86W_TBQN20ldZIEuv63FSvWBacG0wEaD0YkC9jcJVg,3142
93
- OTVision/track/parser/frame_group_parser_plugins.py,sha256=TWnGhM-N7ldN8LHZ1YYecEjn4xo2o91PyOGgr4Jzh9M,5479
96
+ OTVision/track/parser/chunk_parser_plugins.py,sha256=iHAuxnoBQvwQ2j6RYfLZgk-EmsBgU0q29bYnf4kAJIM,2607
97
+ OTVision/track/parser/frame_group_parser_plugins.py,sha256=CMl_muqSKl4scIm4URluGZtPbQmMk1JfbJm3d5Yod9g,3815
94
98
  OTVision/track/tracker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
95
99
  OTVision/track/tracker/filebased_tracking.py,sha256=H3WYbsSca-67898diBoixpLjBqQDnOSiqnbvvySE6fc,6576
96
100
  OTVision/track/tracker/tracker_plugin_iou.py,sha256=AecE4CXRf4qUdN3_AvSFcsW4so-zDUGAVXqzfjSb-i0,7517
@@ -106,7 +110,7 @@ OTVision/view/view_helpers.py,sha256=a5yV_6ZxO5bxsSymOmxdHqzOEv0VFq4wFBopVRGuVRo
106
110
  OTVision/view/view_track.py,sha256=vmfMqpbUfnzg_EsWiL-IIKNOApVF09dzSojHpUfYY6M,5393
107
111
  OTVision/view/view_transform.py,sha256=HvRd8g8geKRy0OoiZUDn_oC3SJC5nuXhZf3uZelfGKg,5473
108
112
  OTVision/view/helpers/OTC.ico,sha256=G9kwlDtgBXmXO3yxW6Z-xVFV2q4nUGuz9E1VPHSu_I8,21662
109
- otvision-0.6.8.dist-info/METADATA,sha256=fj6FWmTovYBzy7TPOR3jtVWfkSQW9vmcZiBDybboTlY,6265
110
- otvision-0.6.8.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
111
- otvision-0.6.8.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
112
- otvision-0.6.8.dist-info/RECORD,,
113
+ otvision-0.6.9.dist-info/METADATA,sha256=I_ZMKZa7QoZMILbvCvjoIjwg1jSa4HXV7znqEQlOCtE,6265
114
+ otvision-0.6.9.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
115
+ otvision-0.6.9.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
116
+ otvision-0.6.9.dist-info/RECORD,,