Skip to content

Commit a2cd891

Browse files
committed
Moved creating the row outside of the DLS class
1 parent 9271ec1 commit a2cd891

File tree

3 files changed

+41
-39
lines changed

3 files changed

+41
-39
lines changed

DeepLabStream.py

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,34 @@ def create_video_files(directory, devices, resolution, framerate, codec):
4242
return files
4343

4444

45+
def create_row(index, animal_skeletons, experiment_status, experiment_trial, start_time=None):
46+
"""
47+
Create a pd.Series for each frame from each camera with joints position
48+
:param experiment_trial: current trial name
49+
:param experiment_status: current experiment status
50+
:param index: frame index
51+
:param animal_skeletons: skeletons for that frame
52+
:param start_time: (optional) starting time point for Time column
53+
"""
54+
row_dict = {}
55+
# creating joints columns
56+
for num, animal in enumerate(animal_skeletons):
57+
for joint, value in animal.items():
58+
row_dict[("Animal{}".format(num + 1),
59+
joint, 'x')], row_dict[("Animal{}".format(num + 1), joint, 'y')] = value
60+
# optional time column
61+
if start_time is not None:
62+
row_dict[('Time', '', '')] = round(time.time() - start_time, 3)
63+
# experiment columns
64+
row_dict[('Experiment', 'Status', '')] = experiment_status
65+
if experiment_trial is None and experiment_status:
66+
row_dict[('Experiment', 'Trial', '')] = 'InterTrial'
67+
else:
68+
row_dict[('Experiment', 'Trial', '')] = experiment_trial
69+
row = pd.Series(row_dict, name=index)
70+
return row
71+
72+
4573
def show_stream(frames):
4674
"""
4775
Shows some number of stream frames, depending on cameras quantity
@@ -74,7 +102,6 @@ def __init__(self):
74102
"""
75103
self._camera_manager = self.set_camera_manager() # camera manager, used to get frames from the camera
76104
self._video_codec = cv2.VideoWriter_fourcc(*'DIVX') # codec in which we output the videofiles
77-
self._animals_list = ["Animal{}".format(num) for num in range(1, ANIMALS_NUMBER + 1)]
78105
self._start_time = None # time of initialization
79106
self._data_row = {camera: {} for camera in self.cameras} # dictionary for creating row of data for each frame
80107
self._data_output = {} # dictionary for storing rows for dataframes
@@ -107,6 +134,9 @@ def set_camera_manager():
107134
manager_list.append(pylon_manager)
108135

109136
def check_for_cameras(camera_manager):
137+
"""
138+
Helper method to get cameras, connected to that camera manager
139+
"""
110140
cameras = camera_manager.get_connected_devices()
111141
if cameras:
112142
print("Found {} {} camera(s)!".format(len(cameras), camera_manager.get_name()))
@@ -335,7 +365,7 @@ def get_analysed_frames(self) -> tuple:
335365
# Gathering data as pd.Series for output
336366
if self._data_output:
337367
self.append_row(camera, analysed_index, skeletons,
338-
self._experiment_running, self._experiment.get_trial())
368+
self._experiment_running, self._experiment.get_trial(), self._start_time)
339369

340370
analysed_frames[camera] = analysed_image
341371
return analysed_frames, analysis_time
@@ -447,26 +477,17 @@ def create_output(self):
447477
for camera in self.enabled_cameras:
448478
self._data_output[camera] = []
449479

450-
def append_row(self, camera, index, animal_skeletons, experiment_status, experiment_trial):
480+
def append_row(self, camera, index, animal_skeletons, experiment_status, experiment_trial, start_time=None):
451481
"""
452482
Create a pd.Series for each frame from each camera with joints position and store it
453483
:param experiment_trial: current trial name
454484
:param experiment_status: current experiment status
455485
:param camera: camera name
456486
:param index: frame index
457487
:param animal_skeletons: skeletons for that frame
488+
:param start_time: (optional) starting time point for Time column
458489
"""
459-
row_dict = {}
460-
for num, animal in enumerate(animal_skeletons):
461-
for joint, value in animal.items():
462-
row_dict[(self._animals_list[num], joint, 'x')], row_dict[(self._animals_list[num], joint, 'y')] = value
463-
row_dict[('Time', '', '')] = round(time.time() - self._start_time, 3)
464-
row_dict[('Experiment', 'Status', '')] = experiment_status
465-
if experiment_trial is None and experiment_status:
466-
row_dict[('Experiment', 'Trial', '')] = 'InterTrial'
467-
else:
468-
row_dict[('Experiment', 'Trial', '')] = experiment_trial
469-
row = pd.Series(row_dict, name=index)
490+
row = create_row(index, animal_skeletons, experiment_status, experiment_trial, start_time)
470491
self._data_output[camera].append(row)
471492

472493
def create_dataframes(self):
@@ -478,6 +499,7 @@ def create_dataframes(self):
478499
df.index.name = 'Frame'
479500
print("Saving database for device {}".format(camera))
480501
df.to_csv(OUT_DIR + '/DataOutput{}'.format(camera) + '-' + time.strftime('%d%m%Y-%H%M%S') + '.csv', sep=';')
502+
print("Database saved")
481503

482504
######
483505
# meta

experiments/stimulus_process.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,16 @@ def get_start_time(self):
5959

6060
def example_protocol_run(condition_q: mp.Queue):
6161
current_trial = None
62-
dmod_device = DigitalModDevice('Dev1/PFI0')
62+
# dmod_device = DigitalModDevice('Dev1/PFI0')
6363
while True:
6464
if condition_q.full():
6565
current_trial = condition_q.get()
6666
if current_trial is not None:
6767
show_visual_stim_img(img_type=current_trial, name='inside')
68-
dmod_device.toggle()
68+
# dmod_device.toggle()
6969
else:
7070
show_visual_stim_img(name='inside')
71-
dmod_device.turn_off()
71+
# dmod_device.turn_off()
7272

7373
if cv2.waitKey(1) & 0xFF == ord('q'):
7474
break

utils/VideoAnalyser.py

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,35 +2,15 @@
22
import time
33
import os
44
import sys
5-
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
65
import pandas as pd
6+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
7+
from DeepLabStream import create_row
78
from utils.poser import load_deeplabcut, get_pose, find_local_peaks_new, calculate_skeletons
89
from utils.plotter import plot_bodyparts, plot_metadata_frame, plot_triggers_response
910
from utils.configloader import VIDEO_SOURCE, OUT_DIR, ANIMALS_NUMBER
1011
from experiments.experiments import ExampleExperiment
1112

1213

13-
def create_row(row_index, animal_skeletons, experiment_status, experiment_trial):
14-
"""
15-
Create a pd.Series for each frame from each camera with joints position and store it
16-
:param experiment_trial: current trial name
17-
:param experiment_status: current experiment status
18-
:param row_index: frame index
19-
:param animal_skeletons: skeletons for that frame
20-
"""
21-
row_dict = {}
22-
for num, animal in enumerate(animal_skeletons):
23-
for joint, value in animal.items():
24-
row_dict[(animals_list[num], joint, 'x')], row_dict[(animals_list[num], joint, 'y')] = value
25-
row_dict[('Experiment', 'Status', '')] = experiment_status
26-
if experiment_trial is None and experiment_status:
27-
row_dict[('Experiment', 'Trial', '')] = 'InterTrial'
28-
else:
29-
row_dict[('Experiment', 'Trial', '')] = experiment_trial
30-
row = pd.Series(row_dict, name=row_index)
31-
return row
32-
33-
3414
def create_dataframes(data_output):
3515
"""
3616
Outputting dataframe to csv

0 commit comments

Comments
 (0)