Skip to content

Commit 9ad0e92

Browse files
authored
Merge pull request #43 from klemengit/master
Bug fix (get_frames)
2 parents 7fad7c3 + fbb9c2d commit 9ad0e92

File tree

5 files changed

+49
-26
lines changed

5 files changed

+49
-26
lines changed

docs/source/code/modules.rst

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,32 @@
11
pyIDI source code
22
=================
33

4-
pyIDI base class
5-
----------------
6-
.. autoclass:: pyidi.pyidi_legacy.pyIDI
7-
:members:
8-
4+
Video Reader
5+
------------
96

10-
Displacement identification methods
11-
-----------------------------------
7+
.. automodule:: pyidi.video_reader
8+
:members:
129

1310
IDIMetod base class
14-
^^^^^^^^^^^^^^^^^^^
11+
-------------------
1512

1613
.. automodule:: pyidi.methods.idi_method
1714
:members:
1815

1916
Simplified optical flow
20-
^^^^^^^^^^^^^^^^^^^^^^^
17+
-----------------------
2118

2219
.. automodule:: pyidi.methods._simplified_optical_flow
2320
:members:
2421

2522
The Lucas-Kanade algorithm for translations
26-
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
23+
-------------------------------------------
2724

2825
.. automodule:: pyidi.methods._lucas_kanade
2926
:members:
3027

3128
Directional Lucas-Kanade
32-
^^^^^^^^^^^^^^^^^^^^^^^^
29+
------------------------
3330

3431
.. automodule:: pyidi.methods._directional_lucas_kanade
3532
:members:
@@ -40,8 +37,8 @@ Postprocessing
4037
.. automodule:: pyidi.postprocessing._motion_magnification
4138
:members:
4239

43-
Video Reader
44-
------------
40+
pyIDI base class
41+
----------------
4542

46-
.. automodule:: pyidi.video_reader
43+
.. autoclass:: pyidi.pyidi_legacy.pyIDI
4744
:members:

docs/source/conf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@
104104
# Add any paths that contain custom static files (such as style sheets) here,
105105
# relative to this directory. They are copied after the builtin static files,
106106
# so a file named "default.css" will overwrite the builtin "default.css".
107-
html_static_path = []
107+
html_static_path = ["_static"]
108108

109109
# Custom sidebar templates, must be a dictionary that maps document names
110110
# to template names.

pyidi/methods/idi_method.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,10 @@ def create_temp_files(self, init_multi=False):
114114
f'disp_shape: {(self.points.shape[0], self.N_time_points, 2)}\n',
115115
f'analysis_run <{self.analysis_run}>:'
116116
])
117-
117+
118+
if not self.points.shape[0]:
119+
raise Exception("Points not set. Please set the points before running the analysis.")
120+
118121
self.temp_disp = np.memmap(self.disp_filename, dtype=np.float64, mode='w+', shape=(self.points.shape[0], self.N_time_points, 2))
119122

120123
def clear_temp_files(self):

pyidi/video_reader.py

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -164,21 +164,29 @@ def get_frames(self, frame_range=None, *args, **kwargs):
164164

165165
if type(frame_range) in [list, tuple] and len(frame_range) != 2:
166166
raise ValueError('Length of the frame range must be 2!')
167+
168+
if frame_range is None:
169+
frames_start = 0
170+
frames_end = self.N + 1
171+
n_frames = self.N
172+
elif type(frame_range) is int:
173+
frames_start = 0
174+
frames_end = frame_range
175+
n_frames = frame_range
176+
elif type(frame_range) in [list, tuple]:
177+
frames_start = frame_range[0]
178+
frames_end = frame_range[1]
179+
n_frames = frame_range[1] - frame_range[0]
167180

168181
if self.file_format in PHORTRON_HEADER_FILE or self.file_format == 'np.ndarray':
169-
frames = self._frames
182+
frames = self._frames[frames_start:frames_end]
170183

171184
else:
172-
frames = np.zeros((self.N, self.image_height, self.image_width))
173-
for i in self.N:
174-
frames[i] = self.get_frame(i, *args, **kwargs)
185+
frames = np.zeros((n_frames, self.image_height, self.image_width), dtype=int)
186+
for i in range(n_frames):
187+
frames[i] = self.get_frame(i+frames_start, *args, **kwargs)
175188

176-
if frame_range is None:
177-
return frames
178-
elif type(frame_range) is int:
179-
return frames[:frame_range]
180-
elif type(frame_range) in [list, tuple]:
181-
return frames[frame_range[0]:frame_range[1]]
189+
return frames
182190

183191
def _get_frame_from_image(self, frame_number, use_channel='Y'):
184192
"""Reads the frame from the image stream, or image file containing multiple images.

tests/test_reader/test_reader.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,18 @@ def test_1():
1313
assert hasattr(video, "N")
1414
assert hasattr(video, "image_width")
1515
assert hasattr(video, "image_height")
16+
assert hasattr(video, "fps")
17+
18+
def test_get_frames():
19+
video = pyidi.VideoReader(input_file='./data/data_synthetic_img_0.png')
20+
21+
assert video.get_frames().shape[0] == 10
22+
assert video.get_frames(4).shape[0] == 4
23+
assert video.get_frames((1, 5)).shape[0] == 4
24+
25+
def test_get_frames_mraw():
26+
video = pyidi.VideoReader(input_file='./data/data_showcase.cih')
27+
28+
assert video.get_frames().shape[0] == 75
29+
assert video.get_frames(4).shape[0] == 4
30+
assert video.get_frames((1, 5)).shape[0] == 4

0 commit comments

Comments
 (0)