Skip to content

Commit e46b24f

Browse files
committed
gui & process: add latency vs. rate modes
1 parent 79b02bc commit e46b24f

2 files changed

Lines changed: 22 additions & 15 deletions

File tree

dlclivegui/dlclivegui.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,7 @@ def edit_dlc_settings(self, new=False):
517517
cur_set['name'] = self.dlc_option.get()
518518
cur_set['cropping'] = ", ".join([str(c) for c in cur_set['cropping']]) if cur_set['cropping'] else ''
519519
cur_set['dynamic'] = ", ".join([str(d) for d in cur_set['dynamic']])
520+
cur_set['mode'] = 'Optimize Latency' if 'mode' not in cur_set else cur_set['mode']
520521

521522
self.dlc_settings_window = Toplevel(self.window)
522523
self.dlc_settings_window.title("DLC Settings")
@@ -558,6 +559,11 @@ def edit_dlc_settings(self, new=False):
558559
Entry(self.dlc_settings_window, textvariable=self.dlc_settings_resize).grid(sticky='nsew', row=cur_row, column=1)
559560
cur_row += 1
560561

562+
Label(self.dlc_settings_window, text="Mode: ").grid(sticky='w', row=cur_row, column=0)
563+
self.dlc_settings_mode = StringVar(self.dlc_settings_window, value=cur_set['mode'])
564+
Combobox(self.dlc_settings_window, textvariable=self.dlc_settings_mode, state='readonly', values=['Optimize Latency', 'Optimize Rate']).grid(sticky='nsew', row=cur_row, column=1)
565+
cur_row += 1
566+
561567
Button(self.dlc_settings_window, text="Update", command=self.update_dlc_settings).grid(sticky='nsew', row=cur_row, column=1)
562568
Button(self.dlc_settings_window, text="Cancel", command=self.dlc_settings_window.destroy).grid(sticky='nsew', row=cur_row, column=2)
563569

@@ -570,7 +576,8 @@ def empty_dlc_settings(self):
570576
'precision' : 'FP32',
571577
'cropping' : '',
572578
'dynamic' : 'False, 0.5, 10',
573-
'resize' : '1.0'}
579+
'resize' : '1.0',
580+
'mode' : 'Optimize Latency'}
574581

575582

576583
def browse_dlc_path(self):
@@ -614,6 +621,7 @@ def update_dlc_settings(self):
614621
dlc_dynamic = (False, 0.5, 10)
615622

616623
dlc_resize = float(self.dlc_settings_resize.get()) if self.dlc_settings_resize.get() else None
624+
dlc_mode = self.dlc_settings_mode.get()
617625

618626
warn_msg = ""
619627
if crop_warn:
@@ -628,7 +636,8 @@ def update_dlc_settings(self):
628636
'precision' : precision,
629637
'cropping' : dlc_crop,
630638
'dynamic' : dlc_dynamic,
631-
'resize' : dlc_resize}
639+
'resize' : dlc_resize,
640+
'mode' : dlc_mode}
632641

633642
if self.dlc_settings_name.get() not in self.cfg['dlc_display_options']:
634643
self.cfg['dlc_display_options'][self.dlc_settings_name.get()] = {'cmap' : 'bgy',

dlclivegui/process.py

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ def _open_dlc_live(self, dlc_params):
8383

8484
ret = False
8585

86+
self.opt_rate = True if dlc_params.pop('mode') == "Optimize Rate" else False
87+
8688
proc_params = dlc_params.pop('processor')
8789
if proc_params is not None:
8890
proc_obj = proc_params.pop('object', None)
@@ -106,32 +108,28 @@ def _pose_loop(self):
106108

107109
run = True
108110
write = False
109-
pose_frame_time = 0
111+
frame_time = 0
112+
pose_time = 0
113+
end_time = time.time()
110114

111115
while run:
112116

113-
stime = time.time()
114-
115-
if self.frame_time[0] > pose_frame_time:
116-
117-
ftime = time.time()
117+
ref_time = frame_time if self.opt_rate else end_time
118+
119+
if self.frame_time[0] > ref_time:
118120

119121
frame = self.frame
120122
frame_time = self.frame_time[0]
121123
pose = self.dlc.get_pose(frame, frame_time=frame_time, record=write)
122124
pose_time = time.time()
123125

124-
ptime = time.time()
125-
126126
self.display_pose_queue.write(pose, clear=True)
127127

128128
if write:
129129
self.poses.append(pose)
130130
self.pose_times.append(pose_time)
131131
self.pose_frame_times.append(frame_time)
132132

133-
wtime = time.time()
134-
135133
cmd = self.q_to_process.read()
136134
if cmd is not None:
137135
if cmd[0] == "pose":
@@ -146,10 +144,10 @@ def _pose_loop(self):
146144
else:
147145
self.q_to_process.write(cmd)
148146

149-
ctime = time.time()
150-
151-
# print(f"POSE RATE = {int(1/(ctime-ftime))} / FRAME TIME = {ftime-stime:0.6f} / GET POSE = {ptime-stime:0.6f} / WRITE TIME = {wtime-ptime:0.6f} / CMD TIME = {ctime-wtime:0.6f}")
147+
# print(f"POSE RATE = {int(1 / (time.time()-end_time))} / POSE LATENCY = {(pose_time-frame_time):0.03f}")
152148

149+
end_time = time.time()
150+
153151

154152
def start_record(self, timeout=5):
155153

0 commit comments

Comments
 (0)