更新 concurrency/PushVideoStreamProcess.py
This commit is contained in:
parent
57de938d7c
commit
9618bbc526
|
|
@ -23,7 +23,7 @@ from util.Cv2Utils import video_conjuncing, write_or_video, write_ai_video, push
|
|||
from util.ImageUtils import url2Array, add_water_pic
|
||||
from util.LogUtils import init_log
|
||||
|
||||
from util.PlotsUtils import draw_painting_joint, filterBox, xywh2xyxy2, draw_name_joint
|
||||
from util.PlotsUtils import draw_painting_joint, filterBox, xywh2xyxy2, xy2xyxy, draw_name_joint, plot_one_box_auto, draw_name_ocr,draw_name_crowd
|
||||
|
||||
from util.QueUtil import get_no_block_queue, put_queue, clear_queue
|
||||
|
||||
|
|
@ -37,7 +37,7 @@ class PushStreamProcess(Process):
|
|||
self._msg, self._push_queue, self._image_queue, self._push_ex_queue, self._hb_queue, self._context = args
|
||||
self._algStatus = False # 默认关闭
|
||||
self._algSwitch = self._context['service']['algSwitch']
|
||||
|
||||
|
||||
|
||||
#0521:
|
||||
default_enabled = str(self._msg.get("defaultEnabled", "True")).lower() == "true"
|
||||
|
|
@ -49,16 +49,9 @@ class PushStreamProcess(Process):
|
|||
print("执行替代程序(defaultEnabled=False)")
|
||||
# 这里放非默认逻辑的代码
|
||||
self._algSwitch = False
|
||||
|
||||
|
||||
|
||||
print("---line53 :PushVideoStreamProcess.py---",self._algSwitch)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def build_logo_url(self):
|
||||
logo = None
|
||||
if self._context["video"]["video_add_water"]:
|
||||
|
|
@ -155,17 +148,39 @@ class OnPushStreamProcess(PushStreamProcess):
|
|||
font_config, allowedList = draw_config["font_config"], draw_config[code]["allowedList"]
|
||||
rainbows, label_arrays = draw_config[code]["rainbows"], draw_config[code]["label_arrays"]
|
||||
for qs in det_result:
|
||||
try: # 应对NaN情况
|
||||
box, score, cls = xywh2xyxy2(qs)
|
||||
except:
|
||||
continue
|
||||
if cls not in allowedList or score < frame_score:
|
||||
continue
|
||||
label_array, color = label_arrays[cls], rainbows[cls]
|
||||
if ModelType.CHANNEL2_MODEL.value[1] == str(code) and cls == 2:
|
||||
rr = t.submit(draw_name_joint, box, copy_frame, draw_config[code]["label_dict"], score, color, font_config, qs[6])
|
||||
# 自研车牌模型处理
|
||||
if ModelType.CITY_CARPLATE_MODEL.value[1] == str(code):
|
||||
cls = 0
|
||||
ocrlabel, xybox = qs
|
||||
box = xy2xyxy(xybox)
|
||||
score = None
|
||||
color = rainbows[cls]
|
||||
label_array = None
|
||||
rr = t.submit(draw_name_ocr, xybox, copy_frame, color, ocrlabel)
|
||||
elif ModelType.CITY_DENSECROWDCOUNT_MODEL.value[1] == str(code):
|
||||
cls = 0
|
||||
crowdlabel, points = qs
|
||||
box = [(0, 0), (0, 0), (0, 0), (0, 0)]
|
||||
score = None
|
||||
color = rainbows[cls]
|
||||
label_array = None
|
||||
rr = t.submit(draw_name_crowd, points, copy_frame, color, crowdlabel)
|
||||
else:
|
||||
rr = t.submit(draw_painting_joint, box, copy_frame, label_array, score, color, font_config)
|
||||
try: # 应对NaN情况
|
||||
box, score, cls = xywh2xyxy2(qs)
|
||||
except:
|
||||
continue
|
||||
if cls not in allowedList or score < frame_score:
|
||||
continue
|
||||
label_array, color = label_arrays[cls], rainbows[cls]
|
||||
if ModelType.CHANNEL2_MODEL.value[1] == str(code) and cls == 2:
|
||||
rr = t.submit(draw_name_joint, box, copy_frame,
|
||||
draw_config[code]["label_dict"], score, color,
|
||||
font_config, qs[6])
|
||||
else:
|
||||
rr = t.submit(draw_painting_joint, box, copy_frame, label_array,
|
||||
score, color, font_config)
|
||||
|
||||
thread_p.append(rr)
|
||||
if det_xywh.get(code) is None:
|
||||
det_xywh[code] = {}
|
||||
|
|
@ -184,17 +199,17 @@ class OnPushStreamProcess(PushStreamProcess):
|
|||
box[2][0], box[2][1], box[3][0], box[3][1],
|
||||
score, cls, code],dtype=np.float32)
|
||||
qs_np = np.row_stack((qs_np, result_li))
|
||||
|
||||
|
||||
if logo:
|
||||
frame = add_water_pic(frame, logo, request_id)
|
||||
copy_frame = add_water_pic(copy_frame, logo, request_id)
|
||||
if len(thread_p) > 0:
|
||||
for r in thread_p:
|
||||
r.result()
|
||||
#print('----line173:',self._algSwitch,self._algStatus)
|
||||
#print('----line173:',self._algSwitch,self._algStatus)
|
||||
if self._algSwitch and (not self._algStatus):
|
||||
frame_merge = video_conjuncing(frame, frame.copy())
|
||||
else:
|
||||
else:
|
||||
frame_merge = video_conjuncing(frame, copy_frame)
|
||||
# 写原视频到本地
|
||||
write_or_video_result = t.submit(write_or_video, frame, orFilePath, or_video_file,
|
||||
|
|
@ -207,7 +222,7 @@ class OnPushStreamProcess(PushStreamProcess):
|
|||
# 如果有问题, 走下面的逻辑
|
||||
if qs_np is not None:
|
||||
if len(qs_np.shape) == 1:
|
||||
qs_np = qs_np[np.newaxis,...]
|
||||
qs_np = qs_np[np.newaxis,...]
|
||||
qs_np_id = qs_np.copy()
|
||||
b = np.ones(qs_np_id.shape[0])
|
||||
qs_np_id = np.column_stack((qs_np_id,b))
|
||||
|
|
@ -233,7 +248,7 @@ class OnPushStreamProcess(PushStreamProcess):
|
|||
if q[11] >= 1:
|
||||
cls = int(q[9])
|
||||
if not (cls in new_lab):
|
||||
continue # 为了防止其他类别被带出
|
||||
continue # 为了防止其他类别被带出
|
||||
code = str(int(q[10])).zfill(3)
|
||||
if det_xywh2.get(code) is None:
|
||||
det_xywh2[code] = {}
|
||||
|
|
@ -246,6 +261,11 @@ class OnPushStreamProcess(PushStreamProcess):
|
|||
is_new = False
|
||||
if q[11] == 1:
|
||||
is_new = True
|
||||
if ModelType.CITY_CARPLATE_MODEL.value[1] == str(code):
|
||||
cls = ocrlabel
|
||||
elif ModelType.CITY_DENSECROWDCOUNT_MODEL.value[1] == str(code):
|
||||
cls = crowdlabel
|
||||
label_array = points
|
||||
if cd is None:
|
||||
det_xywh2[code][cls] = [[cls, box, score, label_array, color, is_new]]
|
||||
else:
|
||||
|
|
@ -268,7 +288,7 @@ class OnPushStreamProcess(PushStreamProcess):
|
|||
ex_status = False
|
||||
logger.info("停止推流进程, requestId: {}", request_id)
|
||||
break
|
||||
|
||||
|
||||
del push_r
|
||||
else:
|
||||
sleep(1)
|
||||
|
|
@ -363,24 +383,45 @@ class OffPushStreamProcess(PushStreamProcess):
|
|||
qs_reurn = []
|
||||
for det in push_objs[i]:
|
||||
code, det_result = det
|
||||
|
||||
|
||||
# 每个单独模型处理
|
||||
# 模型编号、100帧的所有问题, 检测目标、颜色、文字图片
|
||||
if len(det_result) > 0:
|
||||
font_config, allowedList = draw_config["font_config"], draw_config[code]["allowedList"]
|
||||
rainbows, label_arrays = draw_config[code]["rainbows"], draw_config[code]["label_arrays"]
|
||||
for qs in det_result:
|
||||
box, score, cls = xywh2xyxy2(qs)
|
||||
|
||||
if cls not in allowedList or score < frame_score:
|
||||
continue
|
||||
label_array, color = label_arrays[cls], rainbows[cls]
|
||||
if ModelType.CHANNEL2_MODEL.value[1] == str(code) and cls == 2:
|
||||
rr = t.submit(draw_name_joint, box, copy_frame, draw_config[code]["label_dict"], score, color, font_config, qs[6])
|
||||
# 自研车牌模型处理
|
||||
if ModelType.CITY_CARPLATE_MODEL.value[1] == str(code):
|
||||
cls = 0
|
||||
ocrlabel, xybox = qs
|
||||
box = xy2xyxy(xybox)
|
||||
score = None
|
||||
color = rainbows[cls]
|
||||
label_array = None
|
||||
label_arrays = [None]
|
||||
rr = t.submit(draw_name_ocr,xybox,copy_frame,color,ocrlabel)
|
||||
|
||||
elif ModelType.CITY_DENSECROWDCOUNT_MODEL.value[1] == str(code):
|
||||
cls = 0
|
||||
crowdlabel, points = qs
|
||||
box = [(0,0),(0,0),(0,0),(0,0)]
|
||||
score = None
|
||||
color = rainbows[cls]
|
||||
label_array = None
|
||||
rr = t.submit(draw_name_crowd, points, copy_frame, color, crowdlabel)
|
||||
|
||||
else:
|
||||
rr = t.submit(draw_painting_joint, box, copy_frame, label_array, score, color, font_config)
|
||||
box, score, cls = xywh2xyxy2(qs)
|
||||
if cls not in allowedList or score < frame_score:
|
||||
continue
|
||||
label_array, color = label_arrays[cls], rainbows[cls]
|
||||
if ModelType.CHANNEL2_MODEL.value[1] == str(code) and cls == 2:
|
||||
rr = t.submit(draw_name_joint, box, copy_frame, draw_config[code]["label_dict"], score, color, font_config, qs[6])
|
||||
else:
|
||||
rr = t.submit(draw_painting_joint, box, copy_frame, label_array, score, color, font_config)
|
||||
|
||||
thread_p.append(rr)
|
||||
|
||||
|
||||
if det_xywh.get(code) is None:
|
||||
det_xywh[code] = {}
|
||||
cd = det_xywh[code].get(cls)
|
||||
|
|
@ -388,17 +429,17 @@ class OffPushStreamProcess(PushStreamProcess):
|
|||
if cd is None:
|
||||
det_xywh[code][cls] = [[cls, box, score, label_array, color]]
|
||||
else:
|
||||
det_xywh[code][cls].append([cls, box, score, label_array, color])
|
||||
det_xywh[code][cls].append([cls, box, score, label_array, color])
|
||||
if qs_np is None:
|
||||
qs_np = np.array([box[0][0], box[0][1], box[1][0], box[1][1],
|
||||
box[2][0], box[2][1], box[3][0], box[3][1],
|
||||
qs_np = np.array([box[0][0], box[0][1], box[1][0], box[1][1],
|
||||
box[2][0], box[2][1], box[3][0], box[3][1],
|
||||
score, cls, code],dtype=np.float32)
|
||||
else:
|
||||
result_li = np.array([box[0][0], box[0][1], box[1][0], box[1][1],
|
||||
result_li = np.array([box[0][0], box[0][1], box[1][0], box[1][1],
|
||||
box[2][0], box[2][1], box[3][0], box[3][1],
|
||||
score, cls, code],dtype=np.float32)
|
||||
qs_np = np.row_stack((qs_np, result_li))
|
||||
|
||||
|
||||
if logo:
|
||||
frame = add_water_pic(frame, logo, request_id)
|
||||
copy_frame = add_water_pic(copy_frame, logo, request_id)
|
||||
|
|
@ -407,7 +448,7 @@ class OffPushStreamProcess(PushStreamProcess):
|
|||
r.result()
|
||||
if self._algSwitch and (not self._algStatus):
|
||||
frame_merge = video_conjuncing(frame, frame.copy())
|
||||
else:
|
||||
else:
|
||||
frame_merge = video_conjuncing(frame, copy_frame)
|
||||
# 写识别视频到本地
|
||||
write_ai_video_result = t.submit(write_ai_video, frame_merge, aiFilePath,
|
||||
|
|
@ -416,10 +457,9 @@ class OffPushStreamProcess(PushStreamProcess):
|
|||
push_stream_result = t.submit(push_video_stream, frame_merge, push_p, push_url,
|
||||
p_push_status, request_id)
|
||||
|
||||
|
||||
if qs_np is not None:
|
||||
if len(qs_np.shape) == 1:
|
||||
qs_np = qs_np[np.newaxis,...]
|
||||
qs_np = qs_np[np.newaxis,...]
|
||||
qs_np_id = qs_np.copy()
|
||||
b = np.ones(qs_np_id.shape[0])
|
||||
qs_np_id = np.column_stack((qs_np_id,b))
|
||||
|
|
@ -446,7 +486,7 @@ class OffPushStreamProcess(PushStreamProcess):
|
|||
if q[11] >= 1:
|
||||
cls = int(q[9])
|
||||
if not (cls in new_lab):
|
||||
continue # 为了防止其他类别被带出
|
||||
continue # 为了防止其他类别被带出
|
||||
code = str(int(q[10])).zfill(3)
|
||||
if det_xywh2.get(code) is None:
|
||||
det_xywh2[code] = {}
|
||||
|
|
@ -459,6 +499,13 @@ class OffPushStreamProcess(PushStreamProcess):
|
|||
is_new = False
|
||||
if q[11] == 1:
|
||||
is_new = True
|
||||
|
||||
if ModelType.CITY_CARPLATE_MODEL.value[1] == str(code):
|
||||
cls = ocrlabel
|
||||
elif ModelType.CITY_DENSECROWDCOUNT_MODEL.value[1] == str(code):
|
||||
cls = crowdlabel
|
||||
label_array = points
|
||||
|
||||
if cd is None:
|
||||
det_xywh2[code][cls] = [[cls, box, score, label_array, color, is_new]]
|
||||
else:
|
||||
|
|
|
|||
Loading…
Reference in New Issue