Skip to content

Commit 7a38dad

Browse files
committed
Integration of offline video to full DLStream
1 parent 52481c9 commit 7a38dad

File tree

4 files changed

+95
-41
lines changed

4 files changed

+95
-41
lines changed

DeepLabStream.py

Lines changed: 40 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import click
1919

2020
from utils.configloader import RESOLUTION, FRAMERATE, OUT_DIR, MODEL, MULTI_CAM, STACK_FRAMES, \
21-
ANIMALS_NUMBER, STREAMS, EXP_NUMBER
21+
ANIMALS_NUMBER, STREAMS, EXP_NUMBER, VIDEO
2222
from utils.poser import load_deeplabcut, get_pose, find_local_peaks_new, calculate_skeletons
2323
from utils.plotter import plot_bodyparts, plot_metadata_frame
2424
from experiments.experiments import ExampleExperiment
@@ -127,41 +127,47 @@ def set_camera_manager():
127127
! Camera managers cannot be mixed
128128
:return: the chosen camera manager
129129
"""
130-
manager_list = []
131-
# loading realsense manager, if installed
132-
realsense = find_spec("pyrealsense2") is not None
133-
if realsense:
134-
from utils.realsense import RealSenseManager
135-
realsense_manager = RealSenseManager()
136-
manager_list.append(realsense_manager)
137-
138-
# loading basler manager, if installed
139-
pylon = find_spec("pypylon") is not None
140-
if pylon:
141-
from utils.pylon import PylonManager
142-
pylon_manager = PylonManager()
143-
manager_list.append(pylon_manager)
144-
145-
def check_for_cameras(camera_manager):
146-
"""
147-
Helper method to get cameras, connected to that camera manager
148-
"""
149-
cameras = camera_manager.get_connected_devices()
150-
if cameras:
151-
print("Found {} {} camera(s)!".format(len(cameras), camera_manager.get_name()))
152-
return True
153-
else:
154-
return False
155130

156-
# checking for connected cameras for all installed managers
157-
for manager in manager_list:
158-
if check_for_cameras(manager):
159-
return manager
131+
if VIDEO:
132+
from utils.generic import VideoManager
133+
manager = VideoManager()
134+
return manager
160135
else:
161-
# if no camera is found, try generic openCV manager
162-
from utils.generic_camera import GenericManager
163-
generic_manager = GenericManager()
164-
return generic_manager
136+
manager_list = []
137+
# loading realsense manager, if installed
138+
realsense = find_spec("pyrealsense2") is not None
139+
if realsense:
140+
from utils.realsense import RealSenseManager
141+
realsense_manager = RealSenseManager()
142+
manager_list.append(realsense_manager)
143+
144+
# loading basler manager, if installed
145+
pylon = find_spec("pypylon") is not None
146+
if pylon:
147+
from utils.pylon import PylonManager
148+
pylon_manager = PylonManager()
149+
manager_list.append(pylon_manager)
150+
151+
def check_for_cameras(camera_manager):
152+
"""
153+
Helper method to get cameras, connected to that camera manager
154+
"""
155+
cameras = camera_manager.get_connected_devices()
156+
if cameras:
157+
print("Found {} {} camera(s)!".format(len(cameras), camera_manager.get_name()))
158+
return True
159+
else:
160+
return False
161+
162+
# checking for connected cameras for all installed managers
163+
for manager in manager_list:
164+
if check_for_cameras(manager):
165+
return manager
166+
else:
167+
# if no camera is found, try generic openCV manager
168+
from utils.generic import GenericManager
169+
generic_manager = GenericManager()
170+
return generic_manager
165171

166172
@property
167173
def cameras(self):

settings.ini

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
[Streaming]
2-
RESOLUTION = 848, 480
3-
FRAMERATE = 30
2+
RESOLUTION = 320, 256
3+
FRAMERATE = 169
44
STREAMS = color, depth, infrared
55
OUTPUT_DIRECTORY = /Output
66
MULTIPLE_DEVICES = False
77
CAMERA_SOURCE = 2
88

99
[DeepLabCut]
10-
DLC_PATH = /DeepLabCut/deeplabcut
11-
MODEL = Your_network_name
10+
DLC_PATH = D:\maDeepLabCut\deeplabcut
11+
MODEL = 13PointsFeb3-trainset95shuffle1_MobileNetV2
1212

1313
[Experiment]
1414
EXP_NUMBER = 1
1515
RECORD_EXP = True
1616

1717
[Video]
18-
VIDEO_SOURCE = /Offline_Test_video.avi
18+
VIDEO_SOURCE = PATH_TO_PRERECORDED_VIDEO
19+
VIDEO = False

utils/configloader.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ def get_script_path():
4747

4848
# Video
4949
VIDEO_SOURCE = dsc_config['Video'].get('VIDEO_SOURCE')
50+
VIDEO = dsc_config['Video'].getboolean('VIDEO')
51+
5052

5153
# experiment
5254
EXP_NUMBER = dsc_config['Experiment'].getint('EXP_NUMBER')
Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77
"""
88

99
import cv2
10-
from utils.configloader import CAMERA_SOURCE
11-
10+
from utils.configloader import CAMERA_SOURCE, VIDEO_SOURCE, RESOLUTION, FRAMERATE
11+
import time
12+
import numpy as np
1213

1314
class GenericManager:
1415
"""
@@ -85,3 +86,47 @@ def get_name(self) -> str:
8586
return self._manager_name
8687

8788

89+
90+
class VideoManager(GenericManager):
91+
92+
"""
93+
Camera manager class for analyzing videos
94+
"""
95+
def __init__(self):
96+
"""
97+
Generic video manager from video files
98+
Uses pure opencv
99+
"""
100+
self._manager_name = "generic"
101+
self._camera = cv2.VideoCapture(VIDEO_SOURCE)
102+
self._camera_name = "Video"
103+
self.initial_wait = False
104+
self.last_frame_time = time.time()
105+
106+
107+
def get_frames(self) -> tuple:
108+
"""
109+
Collect frames for camera and outputs it in 'color' dictionary
110+
***depth and infrared are not used here***
111+
:return: tuple of three dictionaries: color, depth, infrared
112+
"""
113+
114+
color_frames = {}
115+
depth_maps = {}
116+
infra_frames = {}
117+
ret, image = self._camera.read()
118+
self.last_frame_time = time.time()
119+
print(ret)
120+
if ret:
121+
if not self.initial_wait:
122+
cv2.waitKey(1000)
123+
self.initial_wait = True
124+
image = cv2.resize(image, RESOLUTION)
125+
color_frames[self._camera_name] = image
126+
running_time = time.time() - self.last_frame_time
127+
if running_time <= 1 / FRAMERATE:
128+
sleepy_time = int(np.ceil(1000/FRAMERATE - running_time / 1000))
129+
cv2.waitKey(sleepy_time)
130+
131+
return color_frames, depth_maps, infra_frames
132+

0 commit comments

Comments
 (0)