From 030d30e4e8e65ead1aff8ff7a0ab79a77892939d Mon Sep 17 00:00:00 2001 From: jiangchaoqing Date: Sat, 26 Jul 2025 14:17:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=A7=E6=95=B0=E6=8D=AEAI=E8=A7=86=E9=A2=91?= =?UTF-8?q?=E7=8B=AC=E7=AB=8B=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- concurrency/PushVideoStreamProcess.py | 153 ++++++++++---------------- 1 file changed, 56 insertions(+), 97 deletions(-) diff --git a/concurrency/PushVideoStreamProcess.py b/concurrency/PushVideoStreamProcess.py index 39acd89..d2f314b 100644 --- a/concurrency/PushVideoStreamProcess.py +++ b/concurrency/PushVideoStreamProcess.py @@ -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, xy2xyxy, draw_name_joint, plot_one_box_auto, draw_name_ocr,draw_name_crowd +from util.PlotsUtils import draw_painting_joint, filterBox, xywh2xyxy2, draw_name_joint 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,9 +49,16 @@ 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"]: @@ -148,39 +155,17 @@ 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: - # 自研车牌模型处理 - 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) + 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: - 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) - + 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] = {} @@ -199,18 +184,22 @@ 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: - frame_merge = video_conjuncing(frame, copy_frame) + # frame_merge = video_conjuncing(frame, frame.copy()) + + frame_merge = frame.copy() + else: + # frame_merge = video_conjuncing(frame, copy_frame) + + frame_merge = copy_frame # 写原视频到本地 write_or_video_result = t.submit(write_or_video, frame, orFilePath, or_video_file, or_write_status, request_id) @@ -222,7 +211,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)) @@ -248,7 +237,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] = {} @@ -261,11 +250,6 @@ 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: @@ -288,7 +272,7 @@ class OnPushStreamProcess(PushStreamProcess): ex_status = False logger.info("停止推流进程, requestId: {}", request_id) break - + del push_r else: sleep(1) @@ -383,45 +367,24 @@ 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: - # 自研车牌模型处理 - 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) - + 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: - 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) - + 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) @@ -429,17 +392,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) @@ -447,9 +410,11 @@ class OffPushStreamProcess(PushStreamProcess): for r in thread_p: r.result() if self._algSwitch and (not self._algStatus): - frame_merge = video_conjuncing(frame, frame.copy()) - else: - frame_merge = video_conjuncing(frame, copy_frame) + # frame_merge = video_conjuncing(frame, frame.copy()) + frame_merge = frame.copy() + else: + # frame_merge = video_conjuncing(frame, copy_frame) + frame_merge = copy_frame # 写识别视频到本地 write_ai_video_result = t.submit(write_ai_video, frame_merge, aiFilePath, ai_video_file, @@ -457,9 +422,10 @@ 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)) @@ -486,7 +452,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] = {} @@ -499,13 +465,6 @@ 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: