supervisely 6.73.462__py3-none-any.whl → 6.73.463__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.
Potentially problematic release.
This version of supervisely might be problematic. Click here for more details.
- supervisely/video/sampling.py +41 -21
- supervisely/video/video.py +25 -10
- {supervisely-6.73.462.dist-info → supervisely-6.73.463.dist-info}/METADATA +1 -1
- {supervisely-6.73.462.dist-info → supervisely-6.73.463.dist-info}/RECORD +8 -8
- {supervisely-6.73.462.dist-info → supervisely-6.73.463.dist-info}/LICENSE +0 -0
- {supervisely-6.73.462.dist-info → supervisely-6.73.463.dist-info}/WHEEL +0 -0
- {supervisely-6.73.462.dist-info → supervisely-6.73.463.dist-info}/entry_points.txt +0 -0
- {supervisely-6.73.462.dist-info → supervisely-6.73.463.dist-info}/top_level.txt +0 -0
supervisely/video/sampling.py
CHANGED
|
@@ -225,28 +225,48 @@ def sample_video(
|
|
|
225
225
|
progress.miniters = 1
|
|
226
226
|
progress.refresh()
|
|
227
227
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
228
|
+
batch_size = 50
|
|
229
|
+
try:
|
|
230
|
+
with VideoFrameReader(video_path, frame_indices) as reader:
|
|
231
|
+
for batch_indices in batched_iter(frame_indices, batch_size):
|
|
232
|
+
batch_indices_list = list(batch_indices)
|
|
233
|
+
frames = reader.read_batch(batch_indices_list)
|
|
234
|
+
|
|
235
|
+
if resize:
|
|
236
|
+
resized_frames = []
|
|
237
|
+
for frame in frames:
|
|
238
|
+
resized_frame = cv2.resize(
|
|
239
|
+
frame,
|
|
240
|
+
(resize[1], resize[0]), # (width, height)
|
|
241
|
+
interpolation=cv2.INTER_LINEAR,
|
|
242
|
+
)
|
|
243
|
+
resized_frames.append(resized_frame)
|
|
244
|
+
frames = resized_frames
|
|
245
|
+
|
|
246
|
+
image_ids = _upload_frames(
|
|
247
|
+
api=api,
|
|
248
|
+
frames=frames,
|
|
249
|
+
video_name=video_info.name,
|
|
250
|
+
video_frames_count=video_info.frames_count,
|
|
251
|
+
indices=batch_indices_list,
|
|
252
|
+
dataset_id=dst_dataset_info.id,
|
|
253
|
+
sample_info=sample_info,
|
|
254
|
+
context=context,
|
|
255
|
+
copy_annotations=copy_annotations,
|
|
256
|
+
video_annotation=video_annotation,
|
|
257
|
+
)
|
|
247
258
|
|
|
248
|
-
|
|
249
|
-
|
|
259
|
+
if progress is not None:
|
|
260
|
+
progress.update(len(image_ids))
|
|
261
|
+
|
|
262
|
+
# Free memory after each batch
|
|
263
|
+
del frames
|
|
264
|
+
if resize:
|
|
265
|
+
del resized_frames
|
|
266
|
+
finally:
|
|
267
|
+
import os
|
|
268
|
+
if os.path.exists(video_path):
|
|
269
|
+
os.remove(video_path)
|
|
250
270
|
|
|
251
271
|
|
|
252
272
|
def _get_or_create_dst_dataset(
|
supervisely/video/video.py
CHANGED
|
@@ -537,11 +537,9 @@ class VideoFrameReader:
|
|
|
537
537
|
try:
|
|
538
538
|
import decord
|
|
539
539
|
|
|
540
|
-
self.vr = decord.VideoReader(str(self.video_path))
|
|
540
|
+
self.vr = decord.VideoReader(str(self.video_path), num_threads=1)
|
|
541
541
|
except ImportError:
|
|
542
|
-
default_logger.debug(
|
|
543
|
-
"Decord is not installed. Falling back to OpenCV for video reading."
|
|
544
|
-
)
|
|
542
|
+
default_logger.debug("Decord is not installed. Falling back to OpenCV for video reading.")
|
|
545
543
|
self.cap = cv2.VideoCapture(str(self.video_path))
|
|
546
544
|
|
|
547
545
|
def close(self):
|
|
@@ -562,24 +560,30 @@ class VideoFrameReader:
|
|
|
562
560
|
def __del__(self):
|
|
563
561
|
self.close()
|
|
564
562
|
|
|
565
|
-
def iterate_frames(self, frame_indexes: List[int] = None) -> Generator[np.ndarray, None, None]:
|
|
563
|
+
def iterate_frames(self, frame_indexes: Optional[List[int]] = None) -> Generator[np.ndarray, None, None]:
|
|
566
564
|
self._ensure_initialized()
|
|
567
565
|
if frame_indexes is None:
|
|
568
566
|
frame_indexes = self.frame_indexes
|
|
569
567
|
if self.vr is not None:
|
|
568
|
+
# Decord
|
|
570
569
|
if frame_indexes is None:
|
|
571
570
|
frame_indexes = range(len(self.vr))
|
|
572
|
-
for
|
|
573
|
-
|
|
574
|
-
yield
|
|
571
|
+
for idx in frame_indexes:
|
|
572
|
+
arr = self.vr[idx].asnumpy()
|
|
573
|
+
yield arr
|
|
574
|
+
del arr
|
|
575
575
|
else:
|
|
576
|
+
# OpenCV fallback
|
|
576
577
|
if frame_indexes is None:
|
|
577
578
|
frame_count = int(self.cap.get(cv2.CAP_PROP_FRAME_COUNT))
|
|
578
579
|
frame_indexes = range(frame_count)
|
|
579
580
|
for frame_index in frame_indexes:
|
|
580
|
-
if 1
|
|
581
|
+
if 1 < frame_index - self.prev_idx < 20:
|
|
581
582
|
while self.prev_idx < frame_index - 1:
|
|
582
|
-
self.cap.read()
|
|
583
|
+
ok, _ = self.cap.read()
|
|
584
|
+
if not ok:
|
|
585
|
+
break
|
|
586
|
+
self.prev_idx += 1
|
|
583
587
|
if frame_index != self.prev_idx + 1:
|
|
584
588
|
self.cap.set(cv2.CAP_PROP_POS_FRAMES, frame_index)
|
|
585
589
|
ret, frame = self.cap.read()
|
|
@@ -588,6 +592,17 @@ class VideoFrameReader:
|
|
|
588
592
|
yield cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
|
|
589
593
|
self.prev_idx = frame_index
|
|
590
594
|
|
|
595
|
+
def read_batch(self, frame_indexes: List[int]) -> List[np.ndarray]:
|
|
596
|
+
self._ensure_initialized()
|
|
597
|
+
if self.vr is not None:
|
|
598
|
+
batch_nd = self.vr.get_batch(frame_indexes)
|
|
599
|
+
batch_np = batch_nd.asnumpy()
|
|
600
|
+
frames = [batch_np[i].copy() for i in range(batch_np.shape[0])]
|
|
601
|
+
del batch_np
|
|
602
|
+
return frames
|
|
603
|
+
else:
|
|
604
|
+
return list(self.iterate_frames(frame_indexes))
|
|
605
|
+
|
|
591
606
|
def read_frames(self, frame_indexes: List[int] = None) -> List[np.ndarray]:
|
|
592
607
|
return list(self.iterate_frames(frame_indexes))
|
|
593
608
|
|
|
@@ -1090,8 +1090,8 @@ supervisely/user/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,
|
|
|
1090
1090
|
supervisely/user/user.py,sha256=4GSVIupPAxWjIxZmUtH3Dtms_vGV82-49kM_aaR2gBI,319
|
|
1091
1091
|
supervisely/video/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1092
1092
|
supervisely/video/import_utils.py,sha256=b1Nl0gscNsV0iB9nWPeqt8GrkhOeuTZsN1p-d3gDUmE,544
|
|
1093
|
-
supervisely/video/sampling.py,sha256=
|
|
1094
|
-
supervisely/video/video.py,sha256=
|
|
1093
|
+
supervisely/video/sampling.py,sha256=SA1HeS1yK0-w7oHrojuCQJIAO5UAJuO6zrdOgeE1Twc,20979
|
|
1094
|
+
supervisely/video/video.py,sha256=ufwyec2d9ekV3_CLy4VhOj3Ni0gcXIerIBHtC1KGzTQ,21400
|
|
1095
1095
|
supervisely/video_annotation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1096
1096
|
supervisely/video_annotation/constants.py,sha256=_gW9iMhVk1w_dUaFiaiyXn66mt13S6bkxC64xpjP-CU,529
|
|
1097
1097
|
supervisely/video_annotation/frame.py,sha256=np21FqavJ3xW9VbLbohifDwZQtF5dWIsNSGVSjn-NnY,10574
|
|
@@ -1129,9 +1129,9 @@ supervisely/worker_proto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
|
|
|
1129
1129
|
supervisely/worker_proto/worker_api_pb2.py,sha256=VQfi5JRBHs2pFCK1snec3JECgGnua3Xjqw_-b3aFxuM,59142
|
|
1130
1130
|
supervisely/worker_proto/worker_api_pb2_grpc.py,sha256=3BwQXOaP9qpdi0Dt9EKG--Lm8KGN0C5AgmUfRv77_Jk,28940
|
|
1131
1131
|
supervisely_lib/__init__.py,sha256=yRwzEQmVwSd6lUQoAUdBngKEOlnoQ6hA9ZcoZGJRNC4,331
|
|
1132
|
-
supervisely-6.73.
|
|
1133
|
-
supervisely-6.73.
|
|
1134
|
-
supervisely-6.73.
|
|
1135
|
-
supervisely-6.73.
|
|
1136
|
-
supervisely-6.73.
|
|
1137
|
-
supervisely-6.73.
|
|
1132
|
+
supervisely-6.73.463.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
1133
|
+
supervisely-6.73.463.dist-info/METADATA,sha256=xOtl8l6e5EUS_V-ZuFKjRPc5yb6IwKpjCfqkOvplIcE,35604
|
|
1134
|
+
supervisely-6.73.463.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
|
|
1135
|
+
supervisely-6.73.463.dist-info/entry_points.txt,sha256=U96-5Hxrp2ApRjnCoUiUhWMqijqh8zLR03sEhWtAcms,102
|
|
1136
|
+
supervisely-6.73.463.dist-info/top_level.txt,sha256=kcFVwb7SXtfqZifrZaSE3owHExX4gcNYe7Q2uoby084,28
|
|
1137
|
+
supervisely-6.73.463.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|