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.
- OTVision/abstraction/pipes_and_filter.py +4 -4
- OTVision/application/buffer.py +5 -12
- OTVision/application/config_parser.py +51 -2
- OTVision/application/detect/current_object_detector.py +2 -4
- OTVision/application/event/new_otvision_config.py +6 -0
- OTVision/application/{detect/detection_file_save_path_provider.py → otvision_save_path_provider.py} +8 -7
- OTVision/application/track/ottrk.py +203 -0
- OTVision/application/track/tracking_run_id.py +35 -0
- OTVision/detect/builder.py +8 -14
- OTVision/detect/detected_frame_buffer.py +13 -1
- OTVision/detect/detected_frame_producer.py +2 -2
- OTVision/detect/detected_frame_producer_factory.py +4 -8
- OTVision/detect/otdet.py +109 -41
- OTVision/detect/otdet_file_writer.py +52 -29
- OTVision/detect/rtsp_input_source.py +15 -3
- OTVision/detect/video_input_source.py +8 -8
- OTVision/detect/yolo.py +3 -7
- OTVision/domain/detect_producer_consumer.py +3 -3
- OTVision/domain/frame.py +12 -0
- OTVision/domain/input_source_detect.py +3 -3
- OTVision/domain/object_detection.py +4 -6
- OTVision/helpers/date.py +16 -0
- OTVision/plugin/ffmpeg_video_writer.py +2 -4
- OTVision/track/builder.py +2 -5
- OTVision/track/id_generator.py +1 -3
- OTVision/track/parser/chunk_parser_plugins.py +1 -19
- OTVision/track/parser/frame_group_parser_plugins.py +19 -74
- OTVision/track/stream_ottrk_file_writer.py +116 -0
- OTVision/track/track.py +2 -1
- OTVision/version.py +1 -1
- {otvision-0.6.8.dist-info → otvision-0.6.9.dist-info}/METADATA +1 -1
- {otvision-0.6.8.dist-info → otvision-0.6.9.dist-info}/RECORD +34 -30
- {otvision-0.6.8.dist-info → otvision-0.6.9.dist-info}/WHEEL +0 -0
- {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.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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
|
|
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,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: OTVision
|
|
3
|
-
Version: 0.6.
|
|
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=
|
|
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=
|
|
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=
|
|
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
|
|
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=
|
|
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=
|
|
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=
|
|
42
|
-
OTVision/detect/detected_frame_producer.py,sha256=
|
|
43
|
-
OTVision/detect/detected_frame_producer_factory.py,sha256=
|
|
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
|
|
46
|
-
OTVision/detect/otdet_file_writer.py,sha256=
|
|
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=
|
|
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=
|
|
52
|
-
OTVision/detect/yolo.py,sha256=
|
|
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=
|
|
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=
|
|
61
|
-
OTVision/domain/input_source_detect.py,sha256=
|
|
62
|
-
OTVision/domain/object_detection.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
82
|
-
OTVision/track/
|
|
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=
|
|
93
|
-
OTVision/track/parser/frame_group_parser_plugins.py,sha256=
|
|
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.
|
|
110
|
-
otvision-0.6.
|
|
111
|
-
otvision-0.6.
|
|
112
|
-
otvision-0.6.
|
|
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,,
|
|
File without changes
|
|
File without changes
|