Skip to content

Commit 0e358b4

Browse files
authored
Update _reader.py
I have replaced the `Video` reader class with `VideoReaderNP` from the napari-video plugin. I have not changed the PyAV video reader, which does not rely on OpenCV-Python.
1 parent ad506d4 commit 0e358b4

File tree

1 file changed

+8
-54
lines changed

1 file changed

+8
-54
lines changed

src/napari_deeplabcut/_reader.py

Lines changed: 8 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from natsort import natsorted
1515

1616
from napari_deeplabcut import misc
17+
from napari_video.napari_video import VideoReaderNP
1718

1819
SUPPORTED_IMAGES = ".jpg", ".jpeg", ".png"
1920
SUPPORTED_VIDEOS = ".mp4", ".mov", ".avi"
@@ -231,56 +232,9 @@ def read_hdf(filename: str) -> List[LayerData]:
231232
return layers
232233

233234

234-
class Video:
235-
def __init__(self, video_path):
236-
if not os.path.isfile(video_path):
237-
raise ValueError(f'Video path "{video_path}" does not point to a file.')
238-
239-
self.path = video_path
240-
self.stream = cv2.VideoCapture(video_path)
241-
if not self.stream.isOpened():
242-
raise OSError("Video could not be opened.")
243-
244-
self._n_frames = int(self.stream.get(cv2.CAP_PROP_FRAME_COUNT))
245-
self._width = int(self.stream.get(cv2.CAP_PROP_FRAME_WIDTH))
246-
self._height = int(self.stream.get(cv2.CAP_PROP_FRAME_HEIGHT))
247-
self._frame = cv2.UMat(self._height, self._width, cv2.CV_8UC3)
248-
249-
def __len__(self):
250-
return self._n_frames
251-
252-
@property
253-
def width(self):
254-
return self._width
255-
256-
@property
257-
def height(self):
258-
return self._height
259-
260-
def set_to_frame(self, ind):
261-
ind = min(ind, len(self) - 1)
262-
ind += 1 # Unclear why this is needed at all
263-
self.stream.set(cv2.CAP_PROP_POS_FRAMES, ind)
264-
265-
def read_frame(self):
266-
self.stream.retrieve(self._frame)
267-
cv2.cvtColor(self._frame, cv2.COLOR_BGR2RGB, self._frame, 3)
268-
return self._frame.get()
269-
270-
def close(self):
271-
self.stream.release()
272-
273-
274235
def read_video(filename: str, opencv: bool = True):
275236
if opencv:
276-
stream = Video(filename)
277-
shape = stream.width, stream.height, 3
278-
279-
def _read_frame(ind):
280-
stream.set_to_frame(ind)
281-
return stream.read_frame()
282-
283-
lazy_imread = delayed(_read_frame)
237+
movie = VideoReaderNP(filename)
284238
else: # pragma: no cover
285239
from pims import PyAVReaderIndexed
286240

@@ -292,12 +246,12 @@ def _read_frame(ind):
292246
shape = stream.frame_shape
293247
lazy_imread = delayed(stream.get_frame)
294248

295-
movie = da.stack(
296-
[
297-
da.from_delayed(lazy_imread(i), shape=shape, dtype=np.uint8)
298-
for i in range(len(stream))
299-
]
300-
)
249+
movie = da.stack(
250+
[
251+
da.from_delayed(lazy_imread(i), shape=shape, dtype=np.uint8)
252+
for i in range(len(stream))
253+
]
254+
)
301255
elems = list(Path(filename).parts)
302256
elems[-2] = "labeled-data"
303257
elems[-1] = elems[-1].split(".")[0]

0 commit comments

Comments
 (0)