Stream output module: added 2 modes that show source frame if merged frame does not exist

This commit is contained in:
iperov 2021-11-18 00:01:48 +04:00
parent 242ec9f06c
commit 05fe7e82dd
3 changed files with 46 additions and 22 deletions

View file

@ -193,7 +193,7 @@ class FaceMarkerWorker(BackendWorker):
fsi.face_ulmrks = face_ulmrks fsi.face_ulmrks = face_ulmrks
self.stop_profile_timing() self.stop_profile_timing()
self.pending_bcd = bcd self.pending_bcd = bcd
if self.pending_bcd is not None: if self.pending_bcd is not None:
if self.bc_out.is_full_read(1): if self.bc_out.is_full_read(1):

View file

@ -39,10 +39,18 @@ class SourceType(IntEnum):
ALIGNED_FACE = 1 ALIGNED_FACE = 1
SWAPPED_FACE = 2 SWAPPED_FACE = 2
MERGED_FRAME = 3 MERGED_FRAME = 3
SOURCE_N_MERGED_FRAME = 4 MERGED_FRAME_OR_SOURCE_FRAME = 4
SOURCE_N_MERGED_FRAME = 5
SOURCE_N_MERGED_FRAME_OR_SOURCE_FRAME = 6
ViewModeNames = ['@StreamOutput.SourceType.SOURCE_FRAME', '@StreamOutput.SourceType.ALIGNED_FACE', '@StreamOutput.SourceType.SWAPPED_FACE', ViewModeNames = ['@StreamOutput.SourceType.SOURCE_FRAME',
'@StreamOutput.SourceType.MERGED_FRAME', '@StreamOutput.SourceType.SOURCE_N_MERGED_FRAME'] '@StreamOutput.SourceType.ALIGNED_FACE',
'@StreamOutput.SourceType.SWAPPED_FACE',
'@StreamOutput.SourceType.MERGED_FRAME',
'@StreamOutput.SourceType.MERGED_FRAME_OR_SOURCE_FRAME',
'@StreamOutput.SourceType.SOURCE_N_MERGED_FRAME',
'@StreamOutput.SourceType.SOURCE_N_MERGED_FRAME_OR_SOURCE_FRAME',
]
class StreamOutputWorker(BackendWorker): class StreamOutputWorker(BackendWorker):
@ -70,7 +78,7 @@ class StreamOutputWorker(BackendWorker):
state, cs = self.get_state(), self.get_control_sheet() state, cs = self.get_state(), self.get_control_sheet()
cs.source_type.call_on_selected(self.on_cs_mode) cs.source_type.call_on_selected(self.on_cs_source_type)
cs.show_hide_window.call_on_signal(self.on_cs_show_hide_window_signal) cs.show_hide_window.call_on_signal(self.on_cs_show_hide_window_signal)
cs.aligned_face_id.call_on_number(self.on_cs_aligned_face_id) cs.aligned_face_id.call_on_number(self.on_cs_aligned_face_id)
cs.target_delay.call_on_number(self.on_cs_target_delay) cs.target_delay.call_on_number(self.on_cs_target_delay)
@ -109,7 +117,7 @@ class StreamOutputWorker(BackendWorker):
def on_cs_mode(self, idx, source_type): def on_cs_source_type(self, idx, source_type):
state, cs = self.get_state(), self.get_control_sheet() state, cs = self.get_state(), self.get_control_sheet()
if source_type == SourceType.ALIGNED_FACE: if source_type == SourceType.ALIGNED_FACE:
cs.aligned_face_id.enable() cs.aligned_face_id.enable()
@ -117,8 +125,8 @@ class StreamOutputWorker(BackendWorker):
cs.aligned_face_id.set_number(state.aligned_face_id or 0) cs.aligned_face_id.set_number(state.aligned_face_id or 0)
else: else:
cs.aligned_face_id.disable() cs.aligned_face_id.disable()
state.source_type = source_type state.source_type = source_type
self.save_state() self.save_state()
self.reemit_frame_signal.send() self.reemit_frame_signal.send()
@ -203,8 +211,10 @@ class StreamOutputWorker(BackendWorker):
if source_type == SourceType.SOURCE_FRAME: if source_type == SourceType.SOURCE_FRAME:
view_image = bcd.get_image(bcd.get_frame_image_name()) view_image = bcd.get_image(bcd.get_frame_image_name())
elif source_type == SourceType.MERGED_FRAME: elif source_type in [SourceType.MERGED_FRAME, SourceType.MERGED_FRAME_OR_SOURCE_FRAME]:
view_image = bcd.get_image(bcd.get_merged_image_name()) view_image = bcd.get_image(bcd.get_merged_image_name())
if view_image is None and source_type == SourceType.MERGED_FRAME_OR_SOURCE_FRAME:
view_image = bcd.get_image(bcd.get_frame_image_name())
elif source_type == SourceType.ALIGNED_FACE: elif source_type == SourceType.ALIGNED_FACE:
aligned_face_id = state.aligned_face_id aligned_face_id = state.aligned_face_id
@ -219,13 +229,18 @@ class StreamOutputWorker(BackendWorker):
if view_image is not None: if view_image is not None:
break break
elif source_type == SourceType.SOURCE_N_MERGED_FRAME: elif source_type in [SourceType.SOURCE_N_MERGED_FRAME, SourceType.SOURCE_N_MERGED_FRAME_OR_SOURCE_FRAME]:
source_frame = bcd.get_image(bcd.get_frame_image_name()) source_frame = bcd.get_image(bcd.get_frame_image_name())
merged_frame = bcd.get_image(bcd.get_merged_image_name()) if source_frame is not None:
if source_frame is not None and merged_frame is not None:
source_frame = ImageProcessor(source_frame).to_ufloat32().get_image('HWC') source_frame = ImageProcessor(source_frame).to_ufloat32().get_image('HWC')
view_image = np.concatenate( (source_frame, merged_frame), 1 )
merged_frame = bcd.get_image(bcd.get_merged_image_name())
if merged_frame is None and source_type == SourceType.SOURCE_N_MERGED_FRAME_OR_SOURCE_FRAME:
merged_frame = source_frame
if source_frame is not None and merged_frame is not None:
view_image = np.concatenate( (source_frame, merged_frame), 1 )
if view_image is not None: if view_image is not None:
buffered_frames.add_buffer( bcd.get_frame_timestamp(), view_image ) buffered_frames.add_buffer( bcd.get_frame_timestamp(), view_image )

View file

@ -717,9 +717,18 @@ class Localization:
'ru-RU' : 'Склеенный кадр', 'ru-RU' : 'Склеенный кадр',
'zh-CN' : '合成后的画面'}, 'zh-CN' : '合成后的画面'},
'StreamOutput.SourceType.MERGED_FRAME_OR_SOURCE_FRAME':{
'en-US' : 'Merged frame or source frame',
'ru-RU' : 'Склеенный кадр или исходный кадр',
'zh-CN' : '合成后的画面否则源帧'},
'StreamOutput.SourceType.SOURCE_N_MERGED_FRAME':{ 'StreamOutput.SourceType.SOURCE_N_MERGED_FRAME':{
'en-US' : 'Source and merged frame', 'en-US' : 'Source and merged frame',
'ru-RU' : 'Исходный и склеенный кадр', 'ru-RU' : 'Исходный и склеенный кадр',
'zh-CN' : '源和融合后的帧'}, 'zh-CN' : '源和融合后的帧'},
'StreamOutput.SourceType.SOURCE_N_MERGED_FRAME_OR_SOURCE_FRAME':{
'en-US' : 'Source and merged frame or source frame',
'ru-RU' : 'Исходный и склеенный кадр или исходный кадр',
'zh-CN' : '源和融合后的帧则源帧'},
} }