diff --git a/__pycache__/dsp_master.cpython-38.pyc b/__pycache__/dsp_master.cpython-38.pyc deleted file mode 100644 index ae39e3b..0000000 Binary files a/__pycache__/dsp_master.cpython-38.pyc and /dev/null differ diff --git a/common/__pycache__/Constant.cpython-310.pyc b/common/__pycache__/Constant.cpython-310.pyc deleted file mode 100644 index d164c38..0000000 Binary files a/common/__pycache__/Constant.cpython-310.pyc and /dev/null differ diff --git a/common/__pycache__/Constant.cpython-38.pyc b/common/__pycache__/Constant.cpython-38.pyc deleted file mode 100644 index 73d6a84..0000000 Binary files a/common/__pycache__/Constant.cpython-38.pyc and /dev/null differ diff --git a/common/__pycache__/YmlConstant.cpython-38.pyc b/common/__pycache__/YmlConstant.cpython-38.pyc deleted file mode 100644 index 30975e0..0000000 Binary files a/common/__pycache__/YmlConstant.cpython-38.pyc and /dev/null differ diff --git a/common/__pycache__/__init__.cpython-310.pyc b/common/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 58366ca..0000000 Binary files a/common/__pycache__/__init__.cpython-310.pyc and /dev/null differ diff --git a/common/__pycache__/__init__.cpython-38.pyc b/common/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 03bd997..0000000 Binary files a/common/__pycache__/__init__.cpython-38.pyc and /dev/null differ diff --git a/concurrency/FileUploadThread.py b/concurrency/FileUploadThread.py index 96050e0..f328e53 100644 --- a/concurrency/FileUploadThread.py +++ b/concurrency/FileUploadThread.py @@ -26,19 +26,34 @@ class FileUpload(Thread): self._fb_queue, self._context, self._msg, self._image_queue, self._analyse_type,self._mqtt_list = args self._storage_source = self._context['service']['storage_source'] self._algStatus = False # 默认关闭 + + # self._algStatus = True # 默认关闭 self._algSwitch = self._context['service']['algSwitch'] - - - # for algswitch flag: - default_enabled = str(self._msg.get("defaultEnabled","True")).lower() == "true" - + + + + #0521: + default_enabled = str(self._msg.get("defaultEnabled", "True")).lower() == "true" if default_enabled: - self._algSwitch= True + print("执行默认程序(defaultEnabled=True)") + self._algSwitch = True + # 这里放默认逻辑的代码 else: - self._algSwitch= False - - - + print("执行替代程序(defaultEnabled=False)") + # 这里放非默认逻辑的代码 + self._algSwitch = False + + print("---line46 :FileUploadThread.py---",self._algSwitch) + + + + + + + + + + #如果任务是在线、离线处理,则用此类 class ImageFileUpload(FileUpload): __slots__ = () diff --git a/concurrency/PushVideoStreamProcess.py b/concurrency/PushVideoStreamProcess.py index efdd2b2..d10841c 100644 --- a/concurrency/PushVideoStreamProcess.py +++ b/concurrency/PushVideoStreamProcess.py @@ -36,17 +36,28 @@ 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'] - - - # for algswitch flag: - default_enabled = str(self._msg.get("defaultEnabled","True")).lower() == "true" - + self._algSwitch = self._context['service']['algSwitch'] + + + #0521: + default_enabled = str(self._msg.get("defaultEnabled", "True")).lower() == "true" if default_enabled: - self._algSwitch= True + print("执行默认程序(defaultEnabled=True)") + self._algSwitch = True + # 这里放默认逻辑的代码 else: - self._algSwitch= False - + print("执行替代程序(defaultEnabled=False)") + # 这里放非默认逻辑的代码 + self._algSwitch = False + + + print("---line53 :PushVideoStreamProcess.py---",self._algSwitch) + + + + + + def build_logo_url(self): logo = None diff --git a/concurrency/__pycache__/CommonThread.cpython-38.pyc b/concurrency/__pycache__/CommonThread.cpython-38.pyc deleted file mode 100644 index 1a1ff99..0000000 Binary files a/concurrency/__pycache__/CommonThread.cpython-38.pyc and /dev/null differ diff --git a/concurrency/__pycache__/FeedbackThread.cpython-38.pyc b/concurrency/__pycache__/FeedbackThread.cpython-38.pyc deleted file mode 100644 index ea9bb03..0000000 Binary files a/concurrency/__pycache__/FeedbackThread.cpython-38.pyc and /dev/null differ diff --git a/concurrency/__pycache__/FileUploadThread.cpython-38.pyc b/concurrency/__pycache__/FileUploadThread.cpython-38.pyc deleted file mode 100644 index e00f621..0000000 Binary files a/concurrency/__pycache__/FileUploadThread.cpython-38.pyc and /dev/null differ diff --git a/concurrency/__pycache__/HeartbeatThread.cpython-38.pyc b/concurrency/__pycache__/HeartbeatThread.cpython-38.pyc deleted file mode 100644 index 0f848db..0000000 Binary files a/concurrency/__pycache__/HeartbeatThread.cpython-38.pyc and /dev/null differ diff --git a/concurrency/__pycache__/IntelligentRecognitionProcess.cpython-38.pyc b/concurrency/__pycache__/IntelligentRecognitionProcess.cpython-38.pyc deleted file mode 100644 index 013cd6c..0000000 Binary files a/concurrency/__pycache__/IntelligentRecognitionProcess.cpython-38.pyc and /dev/null differ diff --git a/concurrency/__pycache__/IntelligentRecognitionProcess2.cpython-38.pyc b/concurrency/__pycache__/IntelligentRecognitionProcess2.cpython-38.pyc deleted file mode 100644 index ba056c0..0000000 Binary files a/concurrency/__pycache__/IntelligentRecognitionProcess2.cpython-38.pyc and /dev/null differ diff --git a/concurrency/__pycache__/Pull2PushStreamProcess.cpython-38.pyc b/concurrency/__pycache__/Pull2PushStreamProcess.cpython-38.pyc deleted file mode 100644 index c312d3d..0000000 Binary files a/concurrency/__pycache__/Pull2PushStreamProcess.cpython-38.pyc and /dev/null differ diff --git a/concurrency/__pycache__/Pull2PushStreamThread.cpython-38.pyc b/concurrency/__pycache__/Pull2PushStreamThread.cpython-38.pyc deleted file mode 100644 index eb13c99..0000000 Binary files a/concurrency/__pycache__/Pull2PushStreamThread.cpython-38.pyc and /dev/null differ diff --git a/concurrency/__pycache__/PullMqttThread.cpython-38.pyc b/concurrency/__pycache__/PullMqttThread.cpython-38.pyc deleted file mode 100644 index 46040b3..0000000 Binary files a/concurrency/__pycache__/PullMqttThread.cpython-38.pyc and /dev/null differ diff --git a/concurrency/__pycache__/PullStreamThread.cpython-38.pyc b/concurrency/__pycache__/PullStreamThread.cpython-38.pyc deleted file mode 100644 index f92df66..0000000 Binary files a/concurrency/__pycache__/PullStreamThread.cpython-38.pyc and /dev/null differ diff --git a/concurrency/__pycache__/PullVideoStreamProcess.cpython-38.pyc b/concurrency/__pycache__/PullVideoStreamProcess.cpython-38.pyc deleted file mode 100644 index 51d27cb..0000000 Binary files a/concurrency/__pycache__/PullVideoStreamProcess.cpython-38.pyc and /dev/null differ diff --git a/concurrency/__pycache__/PullVideoStreamProcess2.cpython-38.pyc b/concurrency/__pycache__/PullVideoStreamProcess2.cpython-38.pyc deleted file mode 100644 index bf5c126..0000000 Binary files a/concurrency/__pycache__/PullVideoStreamProcess2.cpython-38.pyc and /dev/null differ diff --git a/concurrency/__pycache__/PushStreamThread.cpython-38.pyc b/concurrency/__pycache__/PushStreamThread.cpython-38.pyc deleted file mode 100644 index 338c44f..0000000 Binary files a/concurrency/__pycache__/PushStreamThread.cpython-38.pyc and /dev/null differ diff --git a/concurrency/__pycache__/PushStreamThread2.cpython-38.pyc b/concurrency/__pycache__/PushStreamThread2.cpython-38.pyc deleted file mode 100644 index be48993..0000000 Binary files a/concurrency/__pycache__/PushStreamThread2.cpython-38.pyc and /dev/null differ diff --git a/concurrency/__pycache__/PushVideoStreamProcess.cpython-38.pyc b/concurrency/__pycache__/PushVideoStreamProcess.cpython-38.pyc deleted file mode 100644 index 27cbd8c..0000000 Binary files a/concurrency/__pycache__/PushVideoStreamProcess.cpython-38.pyc and /dev/null differ diff --git a/concurrency/__pycache__/PushVideoStreamProcess2.cpython-38.pyc b/concurrency/__pycache__/PushVideoStreamProcess2.cpython-38.pyc deleted file mode 100644 index dfc1775..0000000 Binary files a/concurrency/__pycache__/PushVideoStreamProcess2.cpython-38.pyc and /dev/null differ diff --git a/concurrency/__pycache__/RecordingHeartbeatThread.cpython-38.pyc b/concurrency/__pycache__/RecordingHeartbeatThread.cpython-38.pyc deleted file mode 100644 index 3c2c11f..0000000 Binary files a/concurrency/__pycache__/RecordingHeartbeatThread.cpython-38.pyc and /dev/null differ diff --git a/concurrency/__pycache__/__init__.cpython-38.pyc b/concurrency/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index b963a8b..0000000 Binary files a/concurrency/__pycache__/__init__.cpython-38.pyc and /dev/null differ diff --git a/concurrency/__pycache__/uploadGPU.cpython-38.pyc b/concurrency/__pycache__/uploadGPU.cpython-38.pyc deleted file mode 100644 index 0928cb6..0000000 Binary files a/concurrency/__pycache__/uploadGPU.cpython-38.pyc and /dev/null differ diff --git a/config/minio/dsp_test_minio.yml b/config/minio/dsp_test_minio.yml index 50a912b..d066ba4 100644 --- a/config/minio/dsp_test_minio.yml +++ b/config/minio/dsp_test_minio.yml @@ -1,8 +1,7 @@ -endpoint: 'minio.t-aaron.com' +endpoint: 'minio.t-aaron.com:9000' domain: 'https://minio.t-aaron.com' access_key: 'IKf3A0ZSXsR1m0oalMjV' secret_key: 'yoC6qRo2hlyZu8Pdbt6eh9TVaTV4gD7KRudromrk' secure: false -image_bucket: 'th-airport' -video_bucket: 'th-airport' -file_dir: 'testFile' +image_bucket: 'image' +video_bucket: 'video' diff --git a/config/service/dsp_test_service.yml b/config/service/dsp_test_service.yml index 2c1b091..ab0def4 100644 --- a/config/service/dsp_test_service.yml +++ b/config/service/dsp_test_service.yml @@ -31,9 +31,9 @@ service: image: limit: 20 #storage source,0--aliyun,1--minio - storage_source: 1 + storage_source: 0 #是否启用mqtt,0--不用,1--启用 mqtt_flag: 0 #是否启用alg控制功能 - algSwitch: false + algSwitch: False diff --git a/entity/__pycache__/FeedBack.cpython-38.pyc b/entity/__pycache__/FeedBack.cpython-38.pyc deleted file mode 100644 index 0785694..0000000 Binary files a/entity/__pycache__/FeedBack.cpython-38.pyc and /dev/null differ diff --git a/entity/__pycache__/__init__.cpython-38.pyc b/entity/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 40746d9..0000000 Binary files a/entity/__pycache__/__init__.cpython-38.pyc and /dev/null differ diff --git a/enums/ModelTypeEnum-jcq.py b/enums/ModelTypeEnum-jcq.py new file mode 100644 index 0000000..aa7de0a --- /dev/null +++ b/enums/ModelTypeEnum-jcq.py @@ -0,0 +1,768 @@ +import sys +from enum import Enum, unique + +from common.Constant import COLOR + +sys.path.extend(['..', '../AIlib2']) +from DMPR import DMPRModel +from DMPRUtils.jointUtil import dmpr_yolo +from segutils.segmodel import SegModel +from utilsK.queRiver import riverDetSegMixProcess +from utilsK.crowdGather import gather_post_process +from segutils.trafficUtils import tracfficAccidentMixFunction +from utilsK.drownUtils import mixDrowing_water_postprocess +from utilsK.noParkingUtils import mixNoParking_road_postprocess +from utilsK.illParkingUtils import illParking_postprocess +from stdc import stdcModel +from yolov5 import yolov5Model +from DMPRUtils.jointUtil import dmpr_yolo_stdc +from AI import default_mix +from ocr import ocrModel +from utilsK.channel2postUtils import channel2_post_process + +''' +参数说明 +1. 编号 +2. 模型编号 +3. 模型名称 +4. 选用的模型名称 +5. 模型配置 +6. 模型引用配置[Detweights文件, Segweights文件, 引用计数] +''' + + +@unique +class ModelType(Enum): + WATER_SURFACE_MODEL = ("1", "001", "河道模型", 'river', lambda device, gpuName: { + 'device': device, + 'labelnames': ["排口", "水生植被", "其它", "漂浮物", "污染排口", "菜地", "违建", "岸坡垃圾"], + 'seg_nclass': 2, + 'trtFlag_seg': True, + 'trtFlag_det': True, + 'segRegionCnt': 1, + 'segPar': { + 'modelSize': (640, 360), + 'mean': (0.485, 0.456, 0.406), + 'std': (0.229, 0.224, 0.225), + 'numpy': False, + 'RGB_convert_first': True, + 'mixFunction': { + 'function': riverDetSegMixProcess, + 'pars': { + 'slopeIndex': [5, 6, 7], + 'riverIou': 0.1 + } + } + }, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.45, + "classes": 5, + "rainbows": COLOR + }, + 'Detweights': "../AIlib2/weights/river/yolov5_%s_fp16.engine" % gpuName, + 'Segweights': '../AIlib2/weights/river/stdc_360X640_%s_fp16.engine' % gpuName + }) + + # FOREST_FARM_MODEL = ("2", "002", "森林模型", 'forest2', lambda device, gpuName: { + # 'device': device, + # 'gpu_name': gpuName, + # 'labelnames': ["林斑", "病死树", "行人", "火焰", "烟雾","云朵"], + # 'trtFlag_det': True, + # 'trtFlag_seg': False, + # 'Detweights': "../AIlib2/weights/forest2/yolov5_%s_fp16.engine" % gpuName, + # 'seg_nclass': 2, + # 'segRegionCnt': 0, + # 'slopeIndex': [], + # 'segPar': None, + # 'postFile': { + # "name": "post_process", + # "conf_thres": 0.25, + # "iou_thres": 0.45, + # "classes": 6, + # "rainbows": COLOR + # }, + # 'Segweights': None + # }) + + + FOREST_FARM_MODEL = ("2", "002", "森林模型", 'forest2', lambda device, gpuName: { + 'labelnames': ["林斑", "病死树", "行人", "火焰", "烟雾","云朵"], + 'postProcess':{'function':default_mix,'pars':{}}, + 'models': + [ + { + 'weight':"../AIlib2/weights/forest2/yolov5_%s_fp16.engine"%(gpuName),###检测模型路径 + 'name':'yolov5', + 'model':yolov5Model, + 'par':{ 'half':True,'device':'cuda:0' ,'conf_thres':0.25,'iou_thres':0.45,'allowedList':[0,1,2,3],'segRegionCnt':1, 'trtFlag_det':False,'trtFlag_seg':False, "score_byClass":{"0":0.25,"1":0.3,"2":0.3,"3":0.3 } }, + } + + + ], + + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.45, + "classes": 5, + "rainbows": COLOR + }, + 'detModelpara':[{"id":str(x),"config":{"k1":"v1","k2":"v2"}} for x in [0,1,2,3,4,5,6,7,8,9] ],###控制哪些检测类别显示、输出 + 'segRegionCnt':2,###分割模型结果需要保留的等值线数目 + "pixScale": 1.2, + + + }) + + + + TRAFFIC_FARM_MODEL = ("3", "003", "交通模型", 'highWay2', lambda device, gpuName: { + 'device': str(device), + 'labelnames': ["行人", "车辆", "纵向裂缝", "横向裂缝", "修补", "网状裂纹", "坑槽", "块状裂纹", "积水", "影子", "事故"], + 'trtFlag_seg': True, + 'trtFlag_det': True, + 'seg_nclass': 3, + 'segRegionCnt': 2, + 'segPar': { + 'modelSize': (640, 360), + 'mean': (0.485, 0.456, 0.406), + 'std': (0.229, 0.224, 0.225), + 'predResize': True, + 'numpy': False, + 'RGB_convert_first': True, + 'mixFunction': { + 'function': tracfficAccidentMixFunction, + 'pars': { + 'modelSize': (640, 360), + #'modelSize': (1920,1080), + 'RoadArea': 16000, + 'roadVehicleAngle': 15, + 'speedRoadVehicleAngleMax': 75, + 'roundness': 1.0, + 'cls': 9, + 'vehicleFactor': 0.1, + 'confThres': 0.25, + 'roadIou': 0.6, + 'radius': 50, + 'vehicleFlag': False, + 'distanceFlag': False + } + } + }, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.25, + "classes": 10, + "rainbows": COLOR + }, + 'Detweights': "../AIlib2/weights/highWay2/yolov5_%s_fp16.engine" % gpuName, + 'Segweights': '../AIlib2/weights/highWay2/stdc_360X640_%s_fp16.engine' % gpuName + }) + + EPIDEMIC_PREVENTION_MODEL = ("4", "004", "防疫模型", None, None) + + PLATE_MODEL = ("5", "005", "车牌模型", None, None) + + VEHICLE_MODEL = ("6", "006", "车辆模型", 'vehicle', lambda device, gpuName: { + 'device': device, + 'gpu_name': gpuName, + 'labelnames': ["车辆"], + 'seg_nclass': 2, + 'segRegionCnt': 0, + 'slopeIndex': [], + 'trtFlag_det': True, + 'trtFlag_seg': False, + 'Detweights': "../AIlib2/weights/vehicle/yolov5_%s_fp16.engine" % gpuName, + 'segPar': None, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.45, + "classes": 5, + "rainbows": COLOR + }, + 'Segweights': None + }) + + PEDESTRIAN_MODEL = ("7", "007", "行人模型", 'pedestrian', lambda device, gpuName: { + 'device': device, + 'gpu_name': gpuName, + 'labelnames': ["行人"], + 'seg_nclass': 2, + 'segRegionCnt': 0, + 'trtFlag_det': True, + 'trtFlag_seg': False, + 'Detweights': "../AIlib2/weights/pedestrian/yolov5_%s_fp16.engine" % gpuName, + 'slopeIndex': [], + 'segPar': None, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.45, + "classes": 5, + "rainbows": COLOR + }, + 'Segweights': None + }) + + SMOGFIRE_MODEL = ("8", "008", "烟火模型", 'smogfire', lambda device, gpuName: { + 'device': device, + 'gpu_name': gpuName, + 'labelnames': ["火焰", "烟雾"], + 'seg_nclass': 2, # 分割模型类别数目,默认2类 + 'segRegionCnt': 0, + 'trtFlag_det': True, + 'trtFlag_seg': False, + 'Detweights': "../AIlib2/weights/smogfire/yolov5_%s_fp16.engine" % gpuName, + 'slopeIndex': [], + 'segPar': None, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.45, + "classes": 5, + "rainbows": COLOR + }, + 'Segweights': None + }) + + ANGLERSWIMMER_MODEL = ("9", "009", "钓鱼游泳模型", 'AnglerSwimmer', lambda device, gpuName: { + 'device': device, + 'gpu_name': gpuName, + 'labelnames': ["钓鱼", "游泳"], + 'seg_nclass': 2, # 分割模型类别数目,默认2类 + 'segRegionCnt': 0, + 'slopeIndex': [], + 'trtFlag_det': True, + 'trtFlag_seg': False, + 'Detweights': "../AIlib2/weights/AnglerSwimmer/yolov5_%s_fp16.engine" % gpuName, + 'segPar': None, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.45, + "classes": 5, + "rainbows": COLOR + }, + 'Segweights': None + }) + + COUNTRYROAD_MODEL = ("10", "010", "乡村模型", 'countryRoad', lambda device, gpuName: { + 'device': device, + 'gpu_name': gpuName, + 'labelnames': ["违法种植"], + 'seg_nclass': 2, # 分割模型类别数目,默认2类 + 'segRegionCnt': 0, + 'slopeIndex': [], + 'trtFlag_det': True, + 'trtFlag_seg': False, + 'Detweights': "../AIlib2/weights/countryRoad/yolov5_%s_fp16.engine" % gpuName, + 'segPar': None, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.45, + "classes": 5, + "rainbows": COLOR + }, + 'Segweights': None + }) + + SHIP_MODEL = ("11", "011", "船只模型", 'ship2', lambda device, gpuName: { + 'model_size': (608, 608), + 'K': 100, + 'conf_thresh': 0.18, + 'device': 'cuda:%s' % device, + 'down_ratio': 4, + 'num_classes': 15, + 'weights': '../AIlib2/weights/ship2/obb_608X608_%s_fp16.engine' % gpuName, + 'dataset': 'dota', + 'half': False, + 'mean': (0.5, 0.5, 0.5), + 'std': (1, 1, 1), + 'heads': {'hm': None, 'wh': 10, 'reg': 2, 'cls_theta': 1}, + 'decoder': None, + 'test_flag': True, + "rainbows": COLOR, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.45, + "classes": 5, + "rainbows": COLOR + }, + 'drawBox': False, + 'label_array': None, + 'labelnames': ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "船只"), + }) + + BAIDU_MODEL = ("12", "012", "百度AI图片识别模型", None, None) + + CHANNEL_EMERGENCY_MODEL = ("13", "013", "航道模型", 'channelEmergency', lambda device, gpuName: { + 'device': device, + 'gpu_name': gpuName, + 'labelnames': ["人"], + 'seg_nclass': 2, # 分割模型类别数目,默认2类 + 'segRegionCnt': 0, + 'slopeIndex': [], + 'trtFlag_det': True, + 'trtFlag_seg': False, + 'Detweights': "../AIlib2/weights/channelEmergency/yolov5_%s_fp16.engine" % gpuName, + 'segPar': None, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.45, + "classes": 5, + "rainbows": COLOR + }, + 'Segweights': None + }) + + RIVER2_MODEL = ("15", "015", "河道检测模型", 'river2', lambda device, gpuName: { + 'device': device, + 'labelnames': ["漂浮物", "岸坡垃圾", "排口", "违建", "菜地", "水生植物", "河湖人员", "钓鱼人员", "船只", + "蓝藻"], + 'trtFlag_seg': True, + 'trtFlag_det': True, + 'seg_nclass': 2, + 'segRegionCnt': 1, + 'segPar': { + 'modelSize': (640, 360), + 'mean': (0.485, 0.456, 0.406), + 'std': (0.229, 0.224, 0.225), + 'numpy': False, + 'RGB_convert_first': True, + 'mixFunction': { + 'function': riverDetSegMixProcess, + 'pars': { + 'slopeIndex': [1, 3, 4, 7], + 'riverIou': 0.1 + } + } + }, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.3, + "ovlap_thres_crossCategory": 0.65, + "classes": 5, + "rainbows": COLOR + }, + # "../AIlib2/weights/conf/%s/yolov5.pt" % modeType.value[3] + 'Detweights': "../AIlib2/weights/river2/yolov5_%s_fp16.engine" % gpuName, + # '../AIlib2/weights/conf/%s/stdc_360X640.pth' % modeType.value[3] + 'Segweights': '../AIlib2/weights/river2/stdc_360X640_%s_fp16.engine' % gpuName + }) + + CITY_MANGEMENT_MODEL = ("16", "016", "城管模型", 'cityMangement2', lambda device, gpuName: { + 'labelnames': ["车辆", "垃圾", "商贩", "违停"], + 'postProcess':{ + 'function':dmpr_yolo_stdc, + 'pars':{'carCls':0 ,'illCls':3,'scaleRatio':0.5,'border':80,'rubCls': 1, 'Rubfilter': 150} + }, + 'models':[ + { + #'weight':'../AIlib2/weights/conf/cityMangement3/yolov5.pt', + 'weight':'../AIlib2/weights/cityMangement3/yolov5_%s_fp16.engine'%(gpuName), + 'name':'yolov5', + 'model':yolov5Model, + 'par':{ 'half':True,'device':'cuda:0' ,'conf_thres':0.25,'iou_thres':0.5,'allowedList':[0,1,2,3],'segRegionCnt':1, 'trtFlag_det':False,'trtFlag_seg':False, "score_byClass":{"0":0.8,"1":0.4,"2":0.5,"3":0.5 } } + }, + { + 'weight':'../AIlib2/weights/conf/cityMangement3/dmpr.pth', + 'par':{ + 'depth_factor':32,'NUM_FEATURE_MAP_CHANNEL':6,'dmpr_thresh':0.1, 'dmprimg_size':640, + 'name':'dmpr' + }, + 'model':DMPRModel, + 'name':'dmpr' + }, + { + 'weight':'../AIlib2/weights/conf/cityMangement3/stdc_360X640.pth', + + 'par':{ + 'modelSize':(640,360),'mean':(0.485, 0.456, 0.406),'std' :(0.229, 0.224, 0.225),'predResize':True,'numpy':False, 'RGB_convert_first':True,'seg_nclass':2},###分割模型预处理参数 + 'model':stdcModel, + 'name':'stdc' + } + ], + 'postFile': { + "name": "post_process", + "conf_thres": 0.5, + "iou_thres": 0.5, + "classes": 5, + "rainbows": COLOR + }, + 'detModelpara':[{"id":str(x),"config":{"k1":"v1","k2":"v2"}} for x in [0,1,2,3,5,6,7,8,9] ],###控制哪些检测类别显示、输出 + 'segRegionCnt':2,###分割模型结果需要保留的等值线数目 + "pixScale": 1.2, + }) + + DROWING_MODEL = ("17", "017", "人员落水模型", 'drowning', lambda device, gpuName: { + 'device': device, + 'labelnames': ["人头", "人", "船只"], + 'trtFlag_seg': True, + 'trtFlag_det': True, + 'seg_nclass': 2, + 'segRegionCnt': 2, + 'segPar': { + 'modelSize': (640, 360), + 'mean': (0.485, 0.456, 0.406), + 'std': (0.229, 0.224, 0.225), + 'predResize': True, + 'numpy': False, + 'RGB_convert_first': True, + 'mixFunction': { + 'function': mixDrowing_water_postprocess, + 'pars': { + 'modelSize': (640, 360) + } + } + }, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.25, + "classes": 9, + "rainbows": COLOR + }, + # "../AIlib2/weights/conf/%s/yolov5.pt" % modeType.value[3] + 'Detweights': "../AIlib2/weights/drowning/yolov5_%s_fp16.engine" % gpuName, + # '../AIlib2/weights/conf/%s/stdc_360X640.pth' % modeType.value[3] + 'Segweights': '../AIlib2/weights/drowning/stdc_360X640_%s_fp16.engine' % gpuName + }) + + NOPARKING_MODEL = ( + "18", "018", "城市违章模型", 'noParking', lambda device, gpuName: { + 'device': device, + 'labelnames': ["车辆", "违停"], + 'trtFlag_seg': True, + 'trtFlag_det': True, + 'seg_nclass': 4, + 'segRegionCnt': 2, + 'segPar': { + 'modelSize': (640, 360), + 'mean': (0.485, 0.456, 0.406), + 'std': (0.229, 0.224, 0.225), + 'predResize': True, + 'numpy': False, + 'RGB_convert_first': True, ###分割模型预处理参数 + 'mixFunction': { + 'function': mixNoParking_road_postprocess, + 'pars': { + 'modelSize': (640, 360), + 'roundness': 0.3, + 'cls': 9, + 'laneArea': 10, + 'laneAngleCha': 5, + 'RoadArea': 16000, + 'fitOrder':2 + } + } + }, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.25, + "classes": 9, + "rainbows": COLOR + }, + 'Detweights': "../AIlib2/weights/noParking/yolov5_%s_fp16.engine" % gpuName, + 'Segweights': '../AIlib2/weights/noParking/stdc_360X640_%s_fp16.engine' % gpuName + }) + + ILLPARKING_MODEL = ("19", "019", "车辆违停模型", 'illParking', lambda device, gpuName: { + 'device': device, + 'labelnames': ["车", "T角点", "L角点", "违停"], + 'trtFlag_seg': False, + 'trtFlag_det': True, + 'seg_nclass': 4, + 'segRegionCnt': 2, + 'segPar': { + 'mixFunction': { + 'function': illParking_postprocess, + 'pars': {} + } + }, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.25, + "classes": 9, + "rainbows": COLOR + }, + 'Detweights': "../AIlib2/weights/illParking/yolov5_%s_fp16.engine" % gpuName, + 'Segweights': None + }) + + CITYROAD_MODEL = ("20", "020", "城市公路模型", 'cityRoad', lambda device, gpuName: { + 'device': device, + 'labelnames': ["护栏", "交通标志", "非交通标志", "施工", "施工"], + 'trtFlag_seg': False, + 'trtFlag_det': True, + 'slopeIndex': [], + 'seg_nclass': 2, + 'segRegionCnt': 0, + 'segPar': None, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.5, + "classes": 5, + "rainbows": COLOR + }, + 'Detweights': "../AIlib2/weights/cityRoad/yolov5_%s_fp16.engine" % gpuName, + 'Segweights': None + }) + + POTHOLE_MODEL = ("23", "023", "坑槽检测模型", 'pothole', lambda device, gpuName: { + 'device': device, + 'gpu_name': gpuName, + 'labelnames': ["坑槽"], + 'seg_nclass': 2, # 分割模型类别数目,默认2类 + 'segRegionCnt': 0, + 'slopeIndex': [], + 'trtFlag_det': True, + 'trtFlag_seg': False, + 'Detweights': "../AIlib2/weights/pothole/yolov5_%s_fp16.engine" % gpuName, + 'segPar': None, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.45, + "classes": 5, + "rainbows": COLOR + }, + 'Segweights': None, + }) + + CHANNEL2_MODEL = ("24", "024", "船只综合检测模型", 'channel2', lambda device, gpuName: { + 'device': device, + 'gpu_name': gpuName, + + 'labelnames': ["国旗", "浮标", "船名", "船只","未挂国旗船只","未封仓"], # 保持原来的标签顺序不变,方便后面业务端增加 + 'segRegionCnt': 0, + 'postProcess':{'function':channel2_post_process,'name':'channel2','pars':{ + 'objs':[2], + 'wRation':1/6.0, + 'hRation':1/6.0, + 'smallId':0, #旗帜 + 'bigId':3, #船只 + 'newId':4, #未挂国旗船只 + 'uncoverId':5, #未封仓标签 + 'recScale':1.2, + 'target_cls':3.0, #目标种类 + 'filter_cls':4.0 #被过滤的种类 + }}, + 'models':[ + { + #'weight':'../AIlib2/weights/conf/channel2/yolov5.pt', + # 'weight':'../AIlib2/weights/channel2/yolov5_%s_fp16.engine'%(gpuName), + + 'weight':'/home/thsw2/jcq/test/AIlib2/weights/channel2/best.pt', # yolov5 原来模型基础上增加了未封仓 + + # 'weight':'../AIlib2/weights/channel2/yolov5_%s_fp16.engine'%(gpuName), + + 'name':'yolov5', + 'model':yolov5Model, + 'par':{ 'half':True,'device':'cuda:0' ,'conf_thres':0.1,'iou_thres':0.45,'allowedList':list(range(20)),'segRegionCnt':1, 'trtFlag_det':False,'trtFlag_seg':False, "score_byClass":{"0":0.7,"1":0.7,"2":0.8,"3":0.6} } + }, + { + # 'weight' : '../AIlib2/weights/ocr2/crnn_ch_4090_fp16_192X32.engine', + 'weight' : '../AIlib2/weights/conf/ocr2/crnn_ch.pth', + 'name':'ocr', + 'model':ocrModel, + 'par':{ + 'char_file':'../AIlib2/weights/conf/ocr2/benchmark.txt', + 'mode':'ch', + 'nc':3, + 'imgH':32, + 'imgW':192, + 'hidden':256, + 'mean':[0.5,0.5,0.5], + 'std':[0.5,0.5,0.5], + 'dynamic':False, + }, + } , + + + # { + # 'weight':'/home/thsw2/jcq/test/AIlib2/weights1/conf/channel2/yolov5_04.pt', # yolov5_04 添加了uncover 0 4 ;标签 yolov5_jcq + # 'name':'yolov5', + # 'model':yolov5Model, + # 'par':{ 'half':True,'device':'cuda:0' ,'conf_thres':0.15,'iou_thres':0.25,'allowedList':list(range(20)),'segRegionCnt':1, 'trtFlag_det':False,'trtFlag_seg':False, "score_byClass":{"0":0.7,"1":0.7,"2":0.8,"3":0.6} } + # } + + + ], + 'detModelpara':[{"id":str(x),"config":{"k1":"v1","k2":"v2"}} for x in [0,1,2,3]], + 'segPar': None, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.45, + "classes": 5, + "rainbows": COLOR + }, + 'Segweights': None, + }) + + RIVERT_MODEL = ("25", "025", "河道检测模型(T)", 'riverT', lambda device, gpuName: { + 'device': device, + 'labelnames': ["漂浮物", "岸坡垃圾", "排口", "违建", "菜地", "水生植物", "河湖人员", "钓鱼人员", "船只", + "蓝藻"], + 'trtFlag_seg': True, + 'trtFlag_det': True, + 'seg_nclass': 2, + 'segRegionCnt': 1, + 'segPar': { + 'modelSize': (640, 360), + 'mean': (0.485, 0.456, 0.406), + 'std': (0.229, 0.224, 0.225), + 'numpy': False, + 'RGB_convert_first': True, + 'mixFunction': { + 'function': riverDetSegMixProcess, + 'pars': { + 'slopeIndex': [1, 3, 4, 7], + 'riverIou': 0.1 + } + } + }, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.3, + "ovlap_thres_crossCategory": 0.65, + "classes": 5, + "rainbows": COLOR + }, + # "../AIlib2/weights/conf/%s/yolov5.pt" % modeType.value[3] + 'Detweights': "../AIlib2/weights/riverT/yolov5_%s_fp16.engine" % gpuName, + # '../AIlib2/weights/conf/%s/stdc_360X640.pth' % modeType.value[3] + 'Segweights': '../AIlib2/weights/riverT/stdc_360X640_%s_fp16.engine' % gpuName + }) + + + + FORESTCROWD_FARM_MODEL = ("2", "026", "森林人群模型", 'forestCrowd', lambda device, gpuName: { + 'labelnames': ["林斑", "病死树", "行人", "火焰", "烟雾","人群"], + 'postProcess':{'function':gather_post_process,'pars':{'pedestrianId':2,'crowdThreshold':4,'gatherId':5,'distancePersonScale':2.0}}, + 'models': + [ + { + 'weight':"../AIlib2/weights/forestCrowd/yolov5_%s_fp16.engine"%(gpuName),###检测模型路径 + 'name':'yolov5', + 'model':yolov5Model, + 'par':{ 'half':True,'device':'cuda:0' ,'conf_thres':0.25,'iou_thres':0.5,'allowedList':[0,1,2,3],'segRegionCnt':1, 'trtFlag_det':False,'trtFlag_seg':False, "score_byClass":{ "0":0.25,"1":0.25,"2":0.6,"3":0.6,'4':0.6 ,'5':0.6 } }, + } + + + ], + + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.45, + "classes": 5, + "rainbows": COLOR + }, + 'detModelpara':[{"id":str(x),"config":{"k1":"v1","k2":"v2"}} for x in [0,1,2,3,4,5,6,7,8,9] ],###控制哪些检测类别显示、输出 + 'segRegionCnt':2,###分割模型结果需要保留的等值线数目 + "pixScale": 1.2, + + + }) + TRAFFICFORDSJ_FARM_MODEL = ("27", "027", "交通模型-大数据局", 'highWay2T', lambda device, gpuName: { + 'device': str(device), + 'labelnames': ["行人", "车辆", "纵向裂缝", "横向裂缝", "修补", "网状裂纹", "坑槽", "块状裂纹", "积水", "影子", "事故", "桥梁外观","设施破损缺失","龙门架","防抛网","标识牌损坏","护栏损坏","钢筋裸露" ], + 'trtFlag_seg': True, + 'trtFlag_det': True, + 'seg_nclass': 3, + 'segRegionCnt': 2, + 'segPar': { + 'modelSize': (640, 360), + 'mean': (0.485, 0.456, 0.406), + 'std': (0.229, 0.224, 0.225), + 'predResize': True, + 'numpy': False, + 'RGB_convert_first': True, + 'mixFunction': { + 'function': tracfficAccidentMixFunction, + 'pars': { + 'modelSize': (640, 360), + #'modelSize': (1920,1080), + 'RoadArea': 16000, + 'roadVehicleAngle': 15, + 'speedRoadVehicleAngleMax': 75, + 'roundness': 1.0, + 'cls': 9, + 'vehicleFactor': 0.1, + 'confThres': 0.25, + 'roadIou': 0.6, + 'radius': 50, + 'vehicleFlag': False, + 'distanceFlag': False + } + } + }, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.25, + "classes": 10, + "rainbows": COLOR + }, + 'Detweights': "../AIlib2/weights/highWay2/yolov5_%s_fp16.engine" % gpuName, + 'Segweights': '../AIlib2/weights/highWay2/stdc_360X640_%s_fp16.engine' % gpuName + }) + + + + @staticmethod + def checkCode(code): + for model in ModelType: + if model.value[1] == code: + return True + return False + + +''' + 参数1: 检测目标名称 + 参数2: 检测目标 + 参数3: 初始化百度检测客户端 +''' + + +@unique +class BaiduModelTarget(Enum): + VEHICLE_DETECTION = ( + "车辆检测", 0, lambda client0, client1, url, request_id: client0.vehicleDetectUrl(url, request_id)) + + HUMAN_DETECTION = ( + "人体检测与属性识别", 1, lambda client0, client1, url, request_id: client1.bodyAttr(url, request_id)) + + PEOPLE_COUNTING = ("人流量统计", 2, lambda client0, client1, url, request_id: client1.bodyNum(url, request_id)) + + +BAIDU_MODEL_TARGET_CONFIG = { + BaiduModelTarget.VEHICLE_DETECTION.value[1]: BaiduModelTarget.VEHICLE_DETECTION, + BaiduModelTarget.HUMAN_DETECTION.value[1]: BaiduModelTarget.HUMAN_DETECTION, + BaiduModelTarget.PEOPLE_COUNTING.value[1]: BaiduModelTarget.PEOPLE_COUNTING +} + +EPIDEMIC_PREVENTION_CONFIG = {1: "行程码", 2: "健康码"} + + +# 模型分析方式 +@unique +class ModelMethodTypeEnum(Enum): + # 方式一: 正常识别方式 + NORMAL = 1 + + # 方式二: 追踪识别方式 + TRACE = 2 diff --git a/enums/ModelTypeEnum-raw.py b/enums/ModelTypeEnum-raw.py new file mode 100644 index 0000000..79fd69c --- /dev/null +++ b/enums/ModelTypeEnum-raw.py @@ -0,0 +1,807 @@ +import sys +from enum import Enum, unique + +from common.Constant import COLOR + +sys.path.extend(['..', '../AIlib2']) +from DMPR import DMPRModel +from DMPRUtils.jointUtil import dmpr_yolo +from segutils.segmodel import SegModel +from utilsK.queRiver import riverDetSegMixProcess +from utilsK.crowdGather import gather_post_process +from segutils.trafficUtils import tracfficAccidentMixFunction +from utilsK.drownUtils import mixDrowing_water_postprocess +from utilsK.noParkingUtils import mixNoParking_road_postprocess +from utilsK.illParkingUtils import illParking_postprocess +from stdc import stdcModel +from yolov5 import yolov5Model +from DMPRUtils.jointUtil import dmpr_yolo_stdc +from AI import default_mix +from ocr import ocrModel +from utilsK.channel2postUtils import channel2_post_process + +''' +参数说明 +1. 编号 +2. 模型编号 +3. 模型名称 +4. 选用的模型名称 +5. 模型配置 +6. 模型引用配置[Detweights文件, Segweights文件, 引用计数] +''' + + +@unique +class ModelType(Enum): + WATER_SURFACE_MODEL = ("1", "001", "河道模型", 'river', lambda device, gpuName: { + 'device': device, + 'labelnames': ["排口", "水生植被", "其它", "漂浮物", "污染排口", "菜地", "违建", "岸坡垃圾"], + 'seg_nclass': 2, + 'trtFlag_seg': True, + 'trtFlag_det': True, + 'segRegionCnt': 1, + 'segPar': { + 'modelSize': (640, 360), + 'mean': (0.485, 0.456, 0.406), + 'std': (0.229, 0.224, 0.225), + 'numpy': False, + 'RGB_convert_first': True, + 'mixFunction': { + 'function': riverDetSegMixProcess, + 'pars': { + 'slopeIndex': [5, 6, 7], + 'riverIou': 0.1 + } + } + }, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.45, + "classes": 5, + "rainbows": COLOR + }, + 'Detweights': "../AIlib2/weights/river/yolov5_%s_fp16.engine" % gpuName, + 'Segweights': '../AIlib2/weights/river/stdc_360X640_%s_fp16.engine' % gpuName + }) + + # FOREST_FARM_MODEL = ("2", "002", "森林模型", 'forest2', lambda device, gpuName: { + # 'device': device, + # 'gpu_name': gpuName, + # 'labelnames': ["林斑", "病死树", "行人", "火焰", "烟雾","云朵"], + # 'trtFlag_det': True, + # 'trtFlag_seg': False, + # 'Detweights': "../AIlib2/weights/forest2/yolov5_%s_fp16.engine" % gpuName, + # 'seg_nclass': 2, + # 'segRegionCnt': 0, + # 'slopeIndex': [], + # 'segPar': None, + # 'postFile': { + # "name": "post_process", + # "conf_thres": 0.25, + # "iou_thres": 0.45, + # "classes": 6, + # "rainbows": COLOR + # }, + # 'Segweights': None + # }) + + + FOREST_FARM_MODEL = ("2", "002", "森林模型", 'forest2', lambda device, gpuName: { + 'labelnames': ["林斑", "病死树", "行人", "火焰", "烟雾","云朵"], + 'postProcess':{'function':default_mix,'pars':{}}, + 'models': + [ + { + 'weight':"../AIlib2/weights/forest2/yolov5_%s_fp16.engine"%(gpuName),###检测模型路径 + 'name':'yolov5', + 'model':yolov5Model, + 'par':{ 'half':True,'device':'cuda:0' ,'conf_thres':0.25,'iou_thres':0.45,'allowedList':[0,1,2,3],'segRegionCnt':1, 'trtFlag_det':False,'trtFlag_seg':False, "score_byClass":{"0":0.25,"1":0.3,"2":0.3,"3":0.3 } }, + } + + + ], + + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.45, + "classes": 5, + "rainbows": COLOR + }, + 'detModelpara':[{"id":str(x),"config":{"k1":"v1","k2":"v2"}} for x in [0,1,2,3,4,5,6,7,8,9] ],###控制哪些检测类别显示、输出 + 'segRegionCnt':2,###分割模型结果需要保留的等值线数目 + "pixScale": 1.2, + + + }) + + + + TRAFFIC_FARM_MODEL = ("3", "003", "交通模型", 'highWay2', lambda device, gpuName: { + 'device': str(device), + 'labelnames': ["行人", "车辆", "纵向裂缝", "横向裂缝", "修补", "网状裂纹", "坑槽", "块状裂纹", "积水", "影子", "事故"], + 'trtFlag_seg': True, + 'trtFlag_det': True, + 'seg_nclass': 3, + 'segRegionCnt': 2, + 'segPar': { + #'modelSize': (640, 360), + 'modelSize': (1920, 1080), + 'mean': (0.485, 0.456, 0.406), + 'std': (0.229, 0.224, 0.225), + 'predResize': True, + 'numpy': False, + 'RGB_convert_first': True, + 'mixFunction': { + 'function': tracfficAccidentMixFunction, + 'pars': { + #'modelSize': (640, 360), + 'modelSize': (1920,1080), + 'RoadArea': 16000, + 'roadVehicleAngle': 15, + 'speedRoadVehicleAngleMax': 75, + 'roundness': 1.0, + 'cls': 10, + 'vehicleFactor': 0.1, + 'confThres': 0.25, + 'roadIou': 0.6, + 'radius': 50, + 'vehicleFlag': False, + 'distanceFlag': False + } + } + }, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.25, + "classes": 10, + "rainbows": COLOR + }, + 'Detweights': "../AIlib2/weights/highWay2/yolov5_%s_fp16.engine" % gpuName, + 'Segweights': '../AIlib2/weights/highWay2/stdc_360X640_%s_fp16.engine' % gpuName + }) + + EPIDEMIC_PREVENTION_MODEL = ("4", "004", "防疫模型", None, None) + + PLATE_MODEL = ("5", "005", "车牌模型", None, None) + + VEHICLE_MODEL = ("6", "006", "车辆模型", 'vehicle', lambda device, gpuName: { + 'device': device, + 'gpu_name': gpuName, + 'labelnames': ["车辆"], + 'seg_nclass': 2, + 'segRegionCnt': 0, + 'slopeIndex': [], + 'trtFlag_det': True, + 'trtFlag_seg': False, + 'Detweights': "../AIlib2/weights/vehicle/yolov5_%s_fp16.engine" % gpuName, + 'segPar': None, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.45, + "classes": 5, + "rainbows": COLOR + }, + 'Segweights': None + }) + + PEDESTRIAN_MODEL = ("7", "007", "行人模型", 'pedestrian', lambda device, gpuName: { + 'device': device, + 'gpu_name': gpuName, + 'labelnames': ["行人"], + 'seg_nclass': 2, + 'segRegionCnt': 0, + 'trtFlag_det': True, + 'trtFlag_seg': False, + 'Detweights': "../AIlib2/weights/pedestrian/yolov5_%s_fp16.engine" % gpuName, + 'slopeIndex': [], + 'segPar': None, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.45, + "classes": 5, + "rainbows": COLOR + }, + 'Segweights': None + }) + + SMOGFIRE_MODEL = ("8", "008", "烟火模型", 'smogfire', lambda device, gpuName: { + 'device': device, + 'gpu_name': gpuName, + 'labelnames': ["火焰", "烟雾"], + 'seg_nclass': 2, # 分割模型类别数目,默认2类 + 'segRegionCnt': 0, + 'trtFlag_det': True, + 'trtFlag_seg': False, + 'Detweights': "../AIlib2/weights/smogfire/yolov5_%s_fp16.engine" % gpuName, + 'slopeIndex': [], + 'segPar': None, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.45, + "classes": 5, + "rainbows": COLOR + }, + 'Segweights': None + }) + + ANGLERSWIMMER_MODEL = ("9", "009", "钓鱼游泳模型", 'AnglerSwimmer', lambda device, gpuName: { + 'device': device, + 'gpu_name': gpuName, + 'labelnames': ["钓鱼", "游泳"], + 'seg_nclass': 2, # 分割模型类别数目,默认2类 + 'segRegionCnt': 0, + 'slopeIndex': [], + 'trtFlag_det': True, + 'trtFlag_seg': False, + 'Detweights': "../AIlib2/weights/AnglerSwimmer/yolov5_%s_fp16.engine" % gpuName, + 'segPar': None, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.45, + "classes": 5, + "rainbows": COLOR + }, + 'Segweights': None + }) + + COUNTRYROAD_MODEL = ("10", "010", "乡村模型", 'countryRoad', lambda device, gpuName: { + 'device': device, + 'gpu_name': gpuName, + 'labelnames': ["违法种植"], + 'seg_nclass': 2, # 分割模型类别数目,默认2类 + 'segRegionCnt': 0, + 'slopeIndex': [], + 'trtFlag_det': True, + 'trtFlag_seg': False, + 'Detweights': "../AIlib2/weights/countryRoad/yolov5_%s_fp16.engine" % gpuName, + 'segPar': None, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.45, + "classes": 5, + "rainbows": COLOR + }, + 'Segweights': None + }) + + SHIP_MODEL = ("11", "011", "船只模型", 'ship2', lambda device, gpuName: { + 'model_size': (608, 608), + 'K': 100, + 'conf_thresh': 0.18, + 'device': 'cuda:%s' % device, + 'down_ratio': 4, + 'num_classes': 15, + 'weights': '../AIlib2/weights/ship2/obb_608X608_%s_fp16.engine' % gpuName, + 'dataset': 'dota', + 'half': False, + 'mean': (0.5, 0.5, 0.5), + 'std': (1, 1, 1), + 'heads': {'hm': None, 'wh': 10, 'reg': 2, 'cls_theta': 1}, + 'decoder': None, + 'test_flag': True, + "rainbows": COLOR, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.45, + "classes": 5, + "rainbows": COLOR + }, + 'drawBox': False, + 'label_array': None, + 'labelnames': ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "船只"), + }) + + BAIDU_MODEL = ("12", "012", "百度AI图片识别模型", None, None) + + CHANNEL_EMERGENCY_MODEL = ("13", "013", "航道模型", 'channelEmergency', lambda device, gpuName: { + 'device': device, + 'gpu_name': gpuName, + 'labelnames': ["人"], + 'seg_nclass': 2, # 分割模型类别数目,默认2类 + 'segRegionCnt': 0, + 'slopeIndex': [], + 'trtFlag_det': True, + 'trtFlag_seg': False, + 'Detweights': "../AIlib2/weights/channelEmergency/yolov5_%s_fp16.engine" % gpuName, + 'segPar': None, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.45, + "classes": 5, + "rainbows": COLOR + }, + 'Segweights': None + }) + + RIVER2_MODEL = ("15", "015", "河道检测模型", 'river2', lambda device, gpuName: { + 'device': device, + 'labelnames': ["漂浮物", "岸坡垃圾", "排口", "违建", "菜地", "水生植物", "河湖人员", "钓鱼人员", "船只", + "蓝藻"], + 'trtFlag_seg': True, + 'trtFlag_det': True, + 'seg_nclass': 2, + 'segRegionCnt': 1, + 'segPar': { + 'modelSize': (640, 360), + 'mean': (0.485, 0.456, 0.406), + 'std': (0.229, 0.224, 0.225), + 'numpy': False, + 'RGB_convert_first': True, + 'mixFunction': { + 'function': riverDetSegMixProcess, + 'pars': { + 'slopeIndex': [1, 3, 4, 7], + 'riverIou': 0.1 + } + } + }, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.3, + "ovlap_thres_crossCategory": 0.65, + "classes": 5, + "rainbows": COLOR + }, + # "../AIlib2/weights/conf/%s/yolov5.pt" % modeType.value[3] + 'Detweights': "../AIlib2/weights/river2/yolov5_%s_fp16.engine" % gpuName, + # '../AIlib2/weights/conf/%s/stdc_360X640.pth' % modeType.value[3] + 'Segweights': '../AIlib2/weights/river2/stdc_360X640_%s_fp16.engine' % gpuName + }) + + CITY_MANGEMENT_MODEL = ("16", "016", "城管模型", 'cityMangement2', lambda device, gpuName: { + 'labelnames': ["车辆", "垃圾", "商贩", "裸土","占道经营","违停"], + 'postProcess':{ + 'function':dmpr_yolo_stdc, + 'pars':{'carCls':0 ,'illCls':5,'scaleRatio':0.5,'border':80} + }, + 'models':[ + { + #'weight':'../AIlib2/weights/conf/cityMangement3/yolov5.pt', + 'weight':'../AIlib2/weights/cityMangement3/yolov5_%s_fp16.engine'%(gpuName), + 'name':'yolov5', + 'model':yolov5Model, + 'par':{ 'half':True,'device':'cuda:0' ,'conf_thres':0.25,'iou_thres':0.45,'allowedList':[0,1,2,3,4,5],'segRegionCnt':1, 'trtFlag_det':False,'trtFlag_seg':False, "score_byClass":{"0":0.8,"1":0.4,"2":0.5,"3":0.5,"4":0.4,"5":0.5 } } + }, + { + 'weight':'../AIlib2/weights/conf/cityMangement3/dmpr.pth', + 'par':{ + 'depth_factor':32,'NUM_FEATURE_MAP_CHANNEL':6,'dmpr_thresh':0.1, 'dmprimg_size':640, + 'name':'dmpr' + }, + 'model':DMPRModel, + 'name':'dmpr' + }, + { + 'weight':'../AIlib2/weights/conf/cityMangement3/stdc_360X640.pth', + 'par':{ + 'modelSize':(640,360),'mean':(0.485, 0.456, 0.406),'std' :(0.229, 0.224, 0.225),'predResize':True,'numpy':False, 'RGB_convert_first':True,'seg_nclass':2},###分割模型预处理参数 + 'model':stdcModel, + 'name':'stdc' + } + ], + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.45, + "classes": 5, + "rainbows": COLOR + }, + 'detModelpara':[{"id":str(x),"config":{"k1":"v1","k2":"v2"}} for x in [0,1,2,3,5,6,7,8,9] ],###控制哪些检测类别显示、输出 + 'segRegionCnt':2,###分割模型结果需要保留的等值线数目 + "pixScale": 1.2, + }) + + DROWING_MODEL = ("17", "017", "人员落水模型", 'drowning', lambda device, gpuName: { + 'device': device, + 'labelnames': ["人头", "人", "船只"], + 'trtFlag_seg': True, + 'trtFlag_det': True, + 'seg_nclass': 2, + 'segRegionCnt': 2, + 'segPar': { + 'modelSize': (640, 360), + 'mean': (0.485, 0.456, 0.406), + 'std': (0.229, 0.224, 0.225), + 'predResize': True, + 'numpy': False, + 'RGB_convert_first': True, + 'mixFunction': { + 'function': mixDrowing_water_postprocess, + 'pars': { + 'modelSize': (640, 360) + } + } + }, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.25, + "classes": 9, + "rainbows": COLOR + }, + # "../AIlib2/weights/conf/%s/yolov5.pt" % modeType.value[3] + 'Detweights': "../AIlib2/weights/drowning/yolov5_%s_fp16.engine" % gpuName, + # '../AIlib2/weights/conf/%s/stdc_360X640.pth' % modeType.value[3] + 'Segweights': '../AIlib2/weights/drowning/stdc_360X640_%s_fp16.engine' % gpuName + }) + + NOPARKING_MODEL = ( + "18", "018", "城市违章模型", 'noParking', lambda device, gpuName: { + 'device': device, + 'labelnames': ["车辆", "违停"], + 'trtFlag_seg': True, + 'trtFlag_det': True, + 'seg_nclass': 4, + 'segRegionCnt': 2, + 'segPar': { + 'modelSize': (640, 360), + 'mean': (0.485, 0.456, 0.406), + 'std': (0.229, 0.224, 0.225), + 'predResize': True, + 'numpy': False, + 'RGB_convert_first': True, ###分割模型预处理参数 + 'mixFunction': { + 'function': mixNoParking_road_postprocess, + 'pars': { + 'modelSize': (640, 360), + 'roundness': 0.3, + 'cls': 9, + 'laneArea': 10, + 'laneAngleCha': 5, + 'RoadArea': 16000, + 'fitOrder':2 + } + } + }, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.25, + "classes": 9, + "rainbows": COLOR + }, + 'Detweights': "../AIlib2/weights/noParking/yolov5_%s_fp16.engine" % gpuName, + 'Segweights': '../AIlib2/weights/noParking/stdc_360X640_%s_fp16.engine' % gpuName + }) + + ILLPARKING_MODEL = ("19", "019", "车辆违停模型", 'illParking', lambda device, gpuName: { + 'device': device, + 'labelnames': ["车", "T角点", "L角点", "违停"], + 'trtFlag_seg': False, + 'trtFlag_det': True, + 'seg_nclass': 4, + 'segRegionCnt': 2, + 'segPar': { + 'mixFunction': { + 'function': illParking_postprocess, + 'pars': {} + } + }, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.25, + "classes": 9, + "rainbows": COLOR + }, + 'Detweights': "../AIlib2/weights/illParking/yolov5_%s_fp16.engine" % gpuName, + 'Segweights': None + }) + + CITYROAD_MODEL = ("20", "020", "城市公路模型", 'cityRoad', lambda device, gpuName: { + 'device': device, + 'labelnames': ["护栏", "交通标志", "非交通标志", "施工", "施工"], + 'trtFlag_seg': False, + 'trtFlag_det': True, + 'slopeIndex': [], + 'seg_nclass': 2, + 'segRegionCnt': 0, + 'segPar': None, + 'postFile': { + "name": "post_process", + "conf_thres": 0.8, + "iou_thres": 0.45, + "classes": 5, + "rainbows": COLOR + }, + 'Detweights': "../AIlib2/weights/cityRoad/yolov5_%s_fp16.engine" % gpuName, + 'Segweights': None + }) + + POTHOLE_MODEL = ("23", "023", "坑槽检测模型", 'pothole', lambda device, gpuName: { + 'device': device, + 'gpu_name': gpuName, + 'labelnames': ["坑槽"], + 'seg_nclass': 2, # 分割模型类别数目,默认2类 + 'segRegionCnt': 0, + 'slopeIndex': [], + 'trtFlag_det': True, + 'trtFlag_seg': False, + 'Detweights': "../AIlib2/weights/pothole/yolov5_%s_fp16.engine" % gpuName, + 'segPar': None, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.45, + "classes": 5, + "rainbows": COLOR + }, + 'Segweights': None, + }) + + CHANNEL2_MODEL = ("24", "024", "船只综合检测模型", 'channel2', lambda device, gpuName: { + 'device': device, + 'gpu_name': gpuName, + 'labelnames': ["国旗", "浮标", "船名", "船只","未挂国旗船只"], + 'segRegionCnt': 0, + 'postProcess':{'function':channel2_post_process,'name':'channel2','pars':{ + 'objs':[2], + 'wRation':1/6.0, + 'hRation':1/6.0, + 'smallId':0, + 'bigId':3, + 'newId':4, + 'recScale':1.2}}, + 'models':[ + { + #'weight':'../AIlib2/weights/conf/channel2/yolov5.pt', + 'weight':'../AIlib2/weights/channel2/yolov5_%s_fp16.engine'%(gpuName), + 'name':'yolov5', + 'model':yolov5Model, + 'par':{ 'half':True,'device':'cuda:0' ,'conf_thres':0.1,'iou_thres':0.45,'allowedList':list(range(20)),'segRegionCnt':1, 'trtFlag_det':False,'trtFlag_seg':False, "score_byClass":{"0":0.7,"1":0.7,"2":0.8,"3":0.6} } + }, + { + # 'weight' : '../AIlib2/weights/ocr2/crnn_ch_4090_fp16_192X32.engine', + 'weight' : '../AIlib2/weights/conf/ocr2/crnn_ch.pth', + 'name':'ocr', + 'model':ocrModel, + 'par':{ + 'char_file':'../AIlib2/weights/conf/ocr2/benchmark.txt', + 'mode':'ch', + 'nc':3, + 'imgH':32, + 'imgW':192, + 'hidden':256, + 'mean':[0.5,0.5,0.5], + 'std':[0.5,0.5,0.5], + 'dynamic':False, + }, + } + ], + 'detModelpara':[{"id":str(x),"config":{"k1":"v1","k2":"v2"}} for x in [0,1,2,3]], + 'segPar': None, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.45, + "classes": 5, + "rainbows": COLOR + }, + 'Segweights': None, + }) + + RIVERT_MODEL = ("25", "025", "河道检测模型(T)", 'riverT', lambda device, gpuName: { + 'device': device, + 'labelnames': ["漂浮物", "岸坡垃圾", "排口", "违建", "菜地", "水生植物", "河湖人员", "钓鱼人员", "船只", + "蓝藻"], + 'trtFlag_seg': True, + 'trtFlag_det': True, + 'seg_nclass': 2, + 'segRegionCnt': 1, + 'segPar': { + 'modelSize': (640, 360), + 'mean': (0.485, 0.456, 0.406), + 'std': (0.229, 0.224, 0.225), + 'numpy': False, + 'RGB_convert_first': True, + 'mixFunction': { + 'function': riverDetSegMixProcess, + 'pars': { + 'slopeIndex': [1, 3, 4, 7], + 'riverIou': 0.1 + } + } + }, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.3, + "ovlap_thres_crossCategory": 0.65, + "classes": 5, + "rainbows": COLOR + }, + # "../AIlib2/weights/conf/%s/yolov5.pt" % modeType.value[3] + 'Detweights': "../AIlib2/weights/riverT/yolov5_%s_fp16.engine" % gpuName, + # '../AIlib2/weights/conf/%s/stdc_360X640.pth' % modeType.value[3] + 'Segweights': '../AIlib2/weights/riverT/stdc_360X640_%s_fp16.engine' % gpuName + }) + + + + FORESTCROWD_FARM_MODEL = ("26", "026", "森林人群模型", 'forestCrowd', lambda device, gpuName: { + 'labelnames': ["林斑", "病死树", "行人", "火焰", "烟雾","人群"], + 'postProcess':{'function':gather_post_process,'pars':{'pedestrianId':2,'crowdThreshold':4,'gatherId':5,'distancePersonScale':2.0}}, + 'models': + [ + { + 'weight':"../AIlib2/weights/forestCrowd/yolov5_%s_fp16.engine"%(gpuName),###检测模型路径 + 'name':'yolov5', + 'model':yolov5Model, + 'par':{ 'half':True,'device':'cuda:0' ,'conf_thres':0.25,'iou_thres':0.45,'allowedList':[0,1,2,3],'segRegionCnt':1, 'trtFlag_det':False,'trtFlag_seg':False, "score_byClass":{ "0":0.25,"1":0.25,"2":0.6,"3":0.6,'4':0.6 ,'5':0.6 } }, + } + + + ], + + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.45, + "classes": 5, + "rainbows": COLOR + }, + 'detModelpara':[{"id":str(x),"config":{"k1":"v1","k2":"v2"}} for x in [0,1,2,3,4,5,6,7,8,9] ],###控制哪些检测类别显示、输出 + 'segRegionCnt':2,###分割模型结果需要保留的等值线数目 + "pixScale": 1.2, + + + }) + TRAFFICFORDSJ_FARM_MODEL = ("27", "027", "交通模型-大数据局", 'highWay2T', lambda device, gpuName: { + 'device': str(device), + 'labelnames': ["行人", "车辆", "纵向裂缝", "横向裂缝", "修补", "网状裂纹", "坑槽", "块状裂纹", "积水", "影子", "事故", "桥梁外观","设施破损缺失","龙门架","防抛网","标识牌损坏","护栏损坏","钢筋裸露" ], + 'trtFlag_seg': True, + 'trtFlag_det': True, + 'seg_nclass': 3, + 'segRegionCnt': 2, + 'segPar': { + 'modelSize': (640, 360), + 'mean': (0.485, 0.456, 0.406), + 'std': (0.229, 0.224, 0.225), + 'predResize': True, + 'numpy': False, + 'RGB_convert_first': True, + 'mixFunction': { + 'function': tracfficAccidentMixFunction, + 'pars': { + 'modelSize': (640, 360), + #'modelSize': (1920,1080), + 'RoadArea': 16000, + 'roadVehicleAngle': 15, + 'speedRoadVehicleAngleMax': 75, + 'roundness': 1.0, + 'cls': 9, + 'vehicleFactor': 0.1, + 'confThres': 0.25, + 'roadIou': 0.6, + 'radius': 50, + 'vehicleFlag': False, + 'distanceFlag': False + } + } + }, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.25, + "classes": 10, + "rainbows": COLOR + }, + 'Detweights': "../AIlib2/weights/highWay2/yolov5_%s_fp16.engine" % gpuName, + 'Segweights': '../AIlib2/weights/highWay2/stdc_360X640_%s_fp16.engine' % gpuName + }) + + SMARTSITE_MODEL = ("28", "028", "智慧工地模型", 'smartSite', lambda device, gpuName: { + 'labelnames': [ "工人","塔式起重机","悬臂","起重机","压路机","推土机","挖掘机","卡车","装载机","泵车","混凝土搅拌车","打桩","其他车辆" ], + 'postProcess':{'function':default_mix,'pars':{}}, + 'models': + [ + { + 'weight':"../AIlib2/weights/smartSite/yolov5_%s_fp16.engine"%(gpuName),###检测模型路径 + 'name':'yolov5', + 'model':yolov5Model, + 'par':{ 'half':True,'device':'cuda:0' ,'conf_thres':0.25,'iou_thres':0.45,'allowedList':list(range(20)),'segRegionCnt':1, 'trtFlag_det':True,'trtFlag_seg':False, "score_byClass":{"0":0.25,"1":0.3,"2":0.3,"3":0.3 } }, + } + + + ], + 'postFile': { + "rainbows": COLOR + }, + + }) + + RUBBISH_MODEL = ("29", "029", "垃圾模型", 'rubbish', lambda device, gpuName: { + 'labelnames': [ "建筑垃圾","白色垃圾","其他垃圾"], + 'postProcess':{'function':default_mix,'pars':{}}, + 'models': + [ + { + 'weight':"../AIlib2/weights/rubbish/yolov5_%s_fp16.engine"%(gpuName),###检测模型路径 + 'name':'yolov5', + 'model':yolov5Model, + 'par':{ 'half':True,'device':'cuda:0' ,'conf_thres':0.25,'iou_thres':0.45,'allowedList':list(range(20)),'segRegionCnt':1, 'trtFlag_det':True,'trtFlag_seg':False, "score_byClass":{"0":0.25,"1":0.3,"2":0.3,"3":0.3 } }, + } + + + ], + 'postFile': { + "rainbows": COLOR + }, + + }) + + FIREWORK_MODEL = ("30", "030", "烟花模型", 'firework', lambda device, gpuName: { + 'labelnames': [ "烟花"], + 'postProcess':{'function':default_mix,'pars':{}}, + 'models': + [ + { + 'weight':"../AIlib2/weights/firework/yolov5_%s_fp16.engine"%(gpuName),###检测模型路径 + 'name':'yolov5', + 'model':yolov5Model, + 'par':{ 'half':True,'device':'cuda:0' ,'conf_thres':0.25,'iou_thres':0.45,'allowedList':list(range(20)),'segRegionCnt':1, 'trtFlag_det':True,'trtFlag_seg':False, "score_byClass":{"0":0.25,"1":0.3,"2":0.3,"3":0.3 } }, + } + + + ], + 'postFile': { + "rainbows": COLOR + }, + + }) + + + @staticmethod + def checkCode(code): + for model in ModelType: + if model.value[1] == code: + return True + return False + + +''' + 参数1: 检测目标名称 + 参数2: 检测目标 + 参数3: 初始化百度检测客户端 +''' + + +@unique +class BaiduModelTarget(Enum): + VEHICLE_DETECTION = ( + "车辆检测", 0, lambda client0, client1, url, request_id: client0.vehicleDetectUrl(url, request_id)) + + HUMAN_DETECTION = ( + "人体检测与属性识别", 1, lambda client0, client1, url, request_id: client1.bodyAttr(url, request_id)) + + PEOPLE_COUNTING = ("人流量统计", 2, lambda client0, client1, url, request_id: client1.bodyNum(url, request_id)) + + +BAIDU_MODEL_TARGET_CONFIG = { + BaiduModelTarget.VEHICLE_DETECTION.value[1]: BaiduModelTarget.VEHICLE_DETECTION, + BaiduModelTarget.HUMAN_DETECTION.value[1]: BaiduModelTarget.HUMAN_DETECTION, + BaiduModelTarget.PEOPLE_COUNTING.value[1]: BaiduModelTarget.PEOPLE_COUNTING +} + +EPIDEMIC_PREVENTION_CONFIG = {1: "行程码", 2: "健康码"} + + +# 模型分析方式 +@unique +class ModelMethodTypeEnum(Enum): + # 方式一: 正常识别方式 + NORMAL = 1 + + # 方式二: 追踪识别方式 + TRACE = 2 diff --git a/enums/ModelTypeEnum.py b/enums/ModelTypeEnum.py index e3d473a..8168344 100644 --- a/enums/ModelTypeEnum.py +++ b/enums/ModelTypeEnum.py @@ -13,6 +13,9 @@ from segutils.trafficUtils import tracfficAccidentMixFunction from utilsK.drownUtils import mixDrowing_water_postprocess from utilsK.noParkingUtils import mixNoParking_road_postprocess from utilsK.illParkingUtils import illParking_postprocess +from utilsK.spillUtils import mixSpillage_postprocess +from utilsK.cthcUtils import mixCthc_postprocess +from utilsK.pannelpostUtils import pannel_post_process from stdc import stdcModel from yolov5 import yolov5Model from DMPRUtils.jointUtil import dmpr_yolo_stdc @@ -61,8 +64,9 @@ class ModelType(Enum): "classes": 5, "rainbows": COLOR }, - 'Detweights': "../AIlib2/weights/river/yolov5_%s_fp16.engine" % gpuName, - 'Segweights': '../AIlib2/weights/river/stdc_360X640_%s_fp16.engine' % gpuName + + 'Detweights': "../weights/trt/AIlib2/river/yolov5_%s_fp16.engine" % gpuName, + 'Segweights': '../weights/trt/AIlib2/river/stdc_360X640_%s_fp16.engine' % gpuName }) # FOREST_FARM_MODEL = ("2", "002", "森林模型", 'forest2', lambda device, gpuName: { @@ -71,7 +75,7 @@ class ModelType(Enum): # 'labelnames': ["林斑", "病死树", "行人", "火焰", "烟雾","云朵"], # 'trtFlag_det': True, # 'trtFlag_seg': False, - # 'Detweights': "../AIlib2/weights/forest2/yolov5_%s_fp16.engine" % gpuName, + # 'Detweights': "../weights/trt/AIlib2/forest2/yolov5_%s_fp16.engine" % gpuName, # 'seg_nclass': 2, # 'segRegionCnt': 0, # 'slopeIndex': [], @@ -93,7 +97,7 @@ class ModelType(Enum): 'models': [ { - 'weight':"../AIlib2/weights/forest2/yolov5_%s_fp16.engine"%(gpuName),###检测模型路径 + 'weight':"../weights/trt/AIlib2/forest2/yolov5_%s_fp16.engine"%(gpuName),###检测模型路径 'name':'yolov5', 'model':yolov5Model, 'par':{ 'half':True,'device':'cuda:0' ,'conf_thres':0.25,'iou_thres':0.45,'allowedList':[0,1,2,3],'segRegionCnt':1, 'trtFlag_det':False,'trtFlag_seg':False, "score_byClass":{"0":0.25,"1":0.3,"2":0.3,"3":0.3 } }, @@ -120,7 +124,8 @@ class ModelType(Enum): TRAFFIC_FARM_MODEL = ("3", "003", "交通模型", 'highWay2', lambda device, gpuName: { 'device': str(device), - 'labelnames': ["行人", "车辆", "纵向裂缝", "横向裂缝", "修补", "网状裂纹", "坑槽", "块状裂纹", "积水", "影子", "事故"], + 'labelnames': ["行人", "车辆", "纵向裂缝", "横向裂缝", "修补", "网状裂纹", "坑槽", "块状裂纹", "积水", "影子", + "事故","抛撒物", "危化品车辆", "虚标线","其他标线","其他","桥梁外观","设施破损缺失","龙门架","防抛网","标识牌损坏","护栏损坏","钢筋裸露"], 'trtFlag_seg': True, 'trtFlag_det': True, 'seg_nclass': 3, @@ -143,6 +148,8 @@ class ModelType(Enum): 'speedRoadVehicleAngleMax': 75, 'roundness': 1.0, 'cls': 10, + 'CarId':1, + 'CthcId':12, 'vehicleFactor': 0.1, 'confThres': 0.25, 'roadIou': 0.6, @@ -159,8 +166,9 @@ class ModelType(Enum): "classes": 10, "rainbows": COLOR }, - 'Detweights': "../AIlib2/weights/highWay2/yolov5_%s_fp16.engine" % gpuName, - 'Segweights': '../AIlib2/weights/highWay2/stdc_360X640_%s_fp16.engine' % gpuName + 'allowedList':[0,1,2,3,4,5,6,7,8,9,10,11,12,16,17,18,19,20,21,22], + 'Detweights': "../weights/trt/AIlib2/highWay2/yolov5_%s_fp16.engine" % gpuName, + 'Segweights': '../weights/trt/AIlib2/highWay2/stdc_360X640_%s_fp16.engine' % gpuName }) EPIDEMIC_PREVENTION_MODEL = ("4", "004", "防疫模型", None, None) @@ -176,7 +184,7 @@ class ModelType(Enum): 'slopeIndex': [], 'trtFlag_det': True, 'trtFlag_seg': False, - 'Detweights': "../AIlib2/weights/vehicle/yolov5_%s_fp16.engine" % gpuName, + 'Detweights': "../weights/trt/AIlib2/vehicle/yolov5_%s_fp16.engine" % gpuName, 'segPar': None, 'postFile': { "name": "post_process", @@ -196,7 +204,7 @@ class ModelType(Enum): 'segRegionCnt': 0, 'trtFlag_det': True, 'trtFlag_seg': False, - 'Detweights': "../AIlib2/weights/pedestrian/yolov5_%s_fp16.engine" % gpuName, + 'Detweights': "../weights/trt/AIlib2/pedestrian/yolov5_%s_fp16.engine" % gpuName, 'slopeIndex': [], 'segPar': None, 'postFile': { @@ -217,7 +225,7 @@ class ModelType(Enum): 'segRegionCnt': 0, 'trtFlag_det': True, 'trtFlag_seg': False, - 'Detweights': "../AIlib2/weights/smogfire/yolov5_%s_fp16.engine" % gpuName, + 'Detweights': "../weights/trt/AIlib2/smogfire/yolov5_%s_fp16.engine" % gpuName, 'slopeIndex': [], 'segPar': None, 'postFile': { @@ -239,7 +247,7 @@ class ModelType(Enum): 'slopeIndex': [], 'trtFlag_det': True, 'trtFlag_seg': False, - 'Detweights': "../AIlib2/weights/AnglerSwimmer/yolov5_%s_fp16.engine" % gpuName, + 'Detweights': "../weights/trt/AIlib2/AnglerSwimmer/yolov5_%s_fp16.engine" % gpuName, 'segPar': None, 'postFile': { "name": "post_process", @@ -260,7 +268,7 @@ class ModelType(Enum): 'slopeIndex': [], 'trtFlag_det': True, 'trtFlag_seg': False, - 'Detweights': "../AIlib2/weights/countryRoad/yolov5_%s_fp16.engine" % gpuName, + 'Detweights': "../weights/trt/AIlib2/countryRoad/yolov5_%s_fp16.engine" % gpuName, 'segPar': None, 'postFile': { "name": "post_process", @@ -279,7 +287,7 @@ class ModelType(Enum): 'device': 'cuda:%s' % device, 'down_ratio': 4, 'num_classes': 15, - 'weights': '../AIlib2/weights/ship2/obb_608X608_%s_fp16.engine' % gpuName, + 'weights': '../weights/trt/AIlib2/ship2/obb_608X608_%s_fp16.engine' % gpuName, 'dataset': 'dota', 'half': False, 'mean': (0.5, 0.5, 0.5), @@ -311,7 +319,7 @@ class ModelType(Enum): 'slopeIndex': [], 'trtFlag_det': True, 'trtFlag_seg': False, - 'Detweights': "../AIlib2/weights/channelEmergency/yolov5_%s_fp16.engine" % gpuName, + 'Detweights': "../weights/trt/AIlib2/channelEmergency/yolov5_%s_fp16.engine" % gpuName, 'segPar': None, 'postFile': { "name": "post_process", @@ -353,33 +361,33 @@ class ModelType(Enum): "classes": 5, "rainbows": COLOR }, - # "../AIlib2/weights/conf/%s/yolov5.pt" % modeType.value[3] - 'Detweights': "../AIlib2/weights/river2/yolov5_%s_fp16.engine" % gpuName, - # '../AIlib2/weights/conf/%s/stdc_360X640.pth' % modeType.value[3] - 'Segweights': '../AIlib2/weights/river2/stdc_360X640_%s_fp16.engine' % gpuName + # "../weights/pth/AIlib2/%s/yolov5.pt" % modeType.value[3] + 'Detweights': "../weights/trt/AIlib2/river2/yolov5_%s_fp16.engine" % gpuName, + # '../weights/pth/AIlib2/%s/stdc_360X640.pth' % modeType.value[3] + 'Segweights': '../weights/trt/AIlib2/river2/stdc_360X640_%s_fp16.engine' % gpuName }) CITY_MANGEMENT_MODEL = ("16", "016", "城管模型", 'cityMangement2', lambda device, gpuName: { - 'labelnames': [ "车辆", "垃圾", "商贩", "违停","占道经营","裸土" ], + 'labelnames': [ "车辆", "垃圾", "商贩", "违停","占道经营","裸土","未覆盖裸土" ], 'postProcess':{ 'function':dmpr_yolo_stdc, 'pars':{ - 'carCls':0 ,'illCls':5,'scaleRatio':0.5,'border':80, + 'carCls':0 ,'illCls':6,'scaleRatio':0.5,'border':80, #车辆","垃圾","商贩","裸土","占道经营","违停"---> #"车辆","垃圾","商贩","违停","占道经营","裸土" - 'classReindex':{ 0:0,1:1,2:2,3:5,4:4,5:3} + 'classReindex':{ 0:0,1:1,2:2,3:6,4:4,5:5,6:3} } }, 'models':[ { - #'weight':'../AIlib2/weights/conf/cityMangement3/yolov5.pt', - 'weight':'../AIlib2/weights/cityMangement3/yolov5_%s_fp16.engine'%(gpuName), + 'weight':'../weights/pth/AIlib2/cityMangement3/yolov5.pt', + #'weight':'../weights/trt/AIlib2/cityMangement3/yolov5_%s_fp16.engine'%(gpuName), 'name':'yolov5', 'model':yolov5Model, - 'par':{ 'half':True,'device':'cuda:0' ,'conf_thres':0.25,'iou_thres':0.45,'allowedList':[0,1,2,3],'segRegionCnt':1, 'trtFlag_det':False,'trtFlag_seg':False, "score_byClass":{"0":0.8,"1":0.4,"2":0.5,"3":0.5 } } + 'par':{ 'half':True,'device':'cuda:0' ,'conf_thres':0.25,'iou_thres':0.45,'allowedList':[0,1,2,3],'segRegionCnt':1, 'trtFlag_det':False,'trtFlag_seg':False, "score_byClass":{"0":0.25,"1":0.4,"2":0.5,"3":0.5 } } }, { - 'weight':'../AIlib2/weights/conf/cityMangement3/dmpr.pth', + 'weight':'../weights/pth/AIlib2/cityMangement3/dmpr.pth', 'par':{ 'depth_factor':32,'NUM_FEATURE_MAP_CHANNEL':6,'dmpr_thresh':0.1, 'dmprimg_size':640, 'name':'dmpr' @@ -387,8 +395,8 @@ class ModelType(Enum): 'model':DMPRModel, 'name':'dmpr' }, - { - 'weight':'../AIlib2/weights/conf/cityMangement3/stdc_360X640.pth', + { + 'weight':'../weights/pth/AIlib2/cityMangement3/stdc_360X640.pth', 'par':{ 'modelSize':(640,360),'mean':(0.485, 0.456, 0.406),'std' :(0.229, 0.224, 0.225),'predResize':True,'numpy':False, 'RGB_convert_first':True,'seg_nclass':2},###分割模型预处理参数 'model':stdcModel, @@ -399,7 +407,7 @@ class ModelType(Enum): "name": "post_process", "conf_thres": 0.25, "iou_thres": 0.45, - "classes": 5, + "classes": 6, "rainbows": COLOR }, 'detModelpara':[{"id":str(x),"config":{"k1":"v1","k2":"v2"}} for x in [0,1,2,3,5,6,7,8,9] ],###控制哪些检测类别显示、输出 @@ -435,10 +443,10 @@ class ModelType(Enum): "classes": 9, "rainbows": COLOR }, - # "../AIlib2/weights/conf/%s/yolov5.pt" % modeType.value[3] - 'Detweights': "../AIlib2/weights/drowning/yolov5_%s_fp16.engine" % gpuName, - # '../AIlib2/weights/conf/%s/stdc_360X640.pth' % modeType.value[3] - 'Segweights': '../AIlib2/weights/drowning/stdc_360X640_%s_fp16.engine' % gpuName + # "../weights/pth/AIlib2/%s/yolov5.pt" % modeType.value[3] + 'Detweights': "../weights/trt/AIlib2/drowning/yolov5_%s_fp16.engine" % gpuName, + # '../weights/pth/AIlib2/%s/stdc_360X640.pth' % modeType.value[3] + 'Segweights': '../weights/trt/AIlib2/drowning/stdc_360X640_%s_fp16.engine' % gpuName }) NOPARKING_MODEL = ( @@ -476,8 +484,8 @@ class ModelType(Enum): "classes": 9, "rainbows": COLOR }, - 'Detweights': "../AIlib2/weights/noParking/yolov5_%s_fp16.engine" % gpuName, - 'Segweights': '../AIlib2/weights/noParking/stdc_360X640_%s_fp16.engine' % gpuName + 'Detweights': "../weights/trt/AIlib2/noParking/yolov5_%s_fp16.engine" % gpuName, + 'Segweights': '../weights/trt/AIlib2/noParking/stdc_360X640_%s_fp16.engine' % gpuName }) ILLPARKING_MODEL = ("19", "019", "车辆违停模型", 'illParking', lambda device, gpuName: { @@ -500,7 +508,7 @@ class ModelType(Enum): "classes": 9, "rainbows": COLOR }, - 'Detweights': "../AIlib2/weights/illParking/yolov5_%s_fp16.engine" % gpuName, + 'Detweights': "../weights/trt/AIlib2/illParking/yolov5_%s_fp16.engine" % gpuName, 'Segweights': None }) @@ -520,7 +528,7 @@ class ModelType(Enum): "classes": 5, "rainbows": COLOR }, - 'Detweights': "../AIlib2/weights/cityRoad/yolov5_%s_fp16.engine" % gpuName, + 'Detweights': "../weights/trt/AIlib2/cityRoad/yolov5_%s_fp16.engine" % gpuName, 'Segweights': None }) @@ -533,7 +541,7 @@ class ModelType(Enum): 'slopeIndex': [], 'trtFlag_det': True, 'trtFlag_seg': False, - 'Detweights': "../AIlib2/weights/pothole/yolov5_%s_fp16.engine" % gpuName, + 'Detweights': "../weights/trt/AIlib2/pothole/yolov5_%s_fp16.engine" % gpuName, 'segPar': None, 'postFile': { "name": "post_process", @@ -548,31 +556,37 @@ class ModelType(Enum): CHANNEL2_MODEL = ("24", "024", "船只综合检测模型", 'channel2', lambda device, gpuName: { 'device': device, 'gpu_name': gpuName, - 'labelnames': ["国旗", "浮标", "船名", "船只","未挂国旗船只"], + # 'labelnames': ["国旗", "浮标", "船名", "船只","未挂国旗船只"], + 'labelnames': ["国旗", "浮标", "船名", "船只", "未挂国旗船只","未封仓船只","未挂国旗且未封仓船只"], 'segRegionCnt': 0, 'postProcess':{'function':channel2_post_process,'name':'channel2','pars':{ 'objs':[2], 'wRation':1/6.0, 'hRation':1/6.0, - 'smallId':0, - 'bigId':3, - 'newId':4, - 'recScale':1.2}}, + 'flagId':0, + 'boatId':3, + 'unflagId': 4, # 未挂国旗船只 + 'uncoverId': 5, # 未封仓 + 'unflagAndcoverId': 6, # 未挂国旗且未封仓 + 'recScale':1.2, + 'target_cls': 3, # 船只目标种类 + 'filter_cls': 4 # 被过滤的种类,模型文件中未封仓实际index + }}, 'models':[ { - #'weight':'../AIlib2/weights/conf/channel2/yolov5.pt', - 'weight':'../AIlib2/weights/channel2/yolov5_%s_fp16.engine'%(gpuName), + #'weight':'../weights/pth/AIlib2/channel2/yolov5.pt', + 'weight':'../weights/trt/AIlib2/channel2/yolov5_%s_fp16.engine'%(gpuName), 'name':'yolov5', 'model':yolov5Model, 'par':{ 'half':True,'device':'cuda:0' ,'conf_thres':0.1,'iou_thres':0.45,'allowedList':list(range(20)),'segRegionCnt':1, 'trtFlag_det':False,'trtFlag_seg':False, "score_byClass":{"0":0.7,"1":0.7,"2":0.8,"3":0.6} } }, { - # 'weight' : '../AIlib2/weights/ocr2/crnn_ch_4090_fp16_192X32.engine', - 'weight' : '../AIlib2/weights/conf/ocr2/crnn_ch.pth', + # 'weight' : '../weights/trt/AIlib2/ocr2/crnn_ch_4090_fp16_192X32.engine', + 'weight' : '../weights/pth/AIlib2/ocr2/crnn_ch.pth', 'name':'ocr', 'model':ocrModel, 'par':{ - 'char_file':'../AIlib2/weights/conf/ocr2/benchmark.txt', + 'char_file':'../AIlib2/conf/ocr2/benchmark.txt', 'mode':'ch', 'nc':3, 'imgH':32, @@ -584,7 +598,7 @@ class ModelType(Enum): }, } ], - 'detModelpara':[{"id":str(x),"config":{"k1":"v1","k2":"v2"}} for x in [0,1,2,3]], + 'detModelpara':[{"id":str(x),"config":{"k1":"v1","k2":"v2"}} for x in [0,1,2,3,4,5,6]], 'segPar': None, 'postFile': { "name": "post_process", @@ -626,10 +640,10 @@ class ModelType(Enum): "classes": 5, "rainbows": COLOR }, - # "../AIlib2/weights/conf/%s/yolov5.pt" % modeType.value[3] - 'Detweights': "../AIlib2/weights/riverT/yolov5_%s_fp16.engine" % gpuName, - # '../AIlib2/weights/conf/%s/stdc_360X640.pth' % modeType.value[3] - 'Segweights': '../AIlib2/weights/riverT/stdc_360X640_%s_fp16.engine' % gpuName + # "../weights/pth/AIlib2/%s/yolov5.pt" % modeType.value[3] + 'Detweights': "../weights/trt/AIlib2/riverT/yolov5_%s_fp16.engine" % gpuName, + # '../weights/pth/AIlib2/%s/stdc_360X640.pth' % modeType.value[3] + 'Segweights': '../weights/trt/AIlib2/riverT/stdc_360X640_%s_fp16.engine' % gpuName }) @@ -640,7 +654,7 @@ class ModelType(Enum): 'models': [ { - 'weight':"../AIlib2/weights/forestCrowd/yolov5_%s_fp16.engine"%(gpuName),###检测模型路径 + 'weight':"../weights/trt/AIlib2/forestCrowd/yolov5_%s_fp16.engine"%(gpuName),###检测模型路径 'name':'yolov5', 'model':yolov5Model, 'par':{ 'half':True,'device':'cuda:0' ,'conf_thres':0.25,'iou_thres':0.45,'allowedList':[0,1,2,3],'segRegionCnt':1, 'trtFlag_det':False,'trtFlag_seg':False, "score_byClass":{ "0":0.25,"1":0.25,"2":0.6,"3":0.6,'4':0.6 ,'5':0.6 } }, @@ -685,7 +699,7 @@ class ModelType(Enum): 'roadVehicleAngle': 15, 'speedRoadVehicleAngleMax': 75, 'roundness': 1.0, - 'cls': 9, + 'cls': 10, 'vehicleFactor': 0.1, 'confThres': 0.25, 'roadIou': 0.6, @@ -702,8 +716,8 @@ class ModelType(Enum): "classes": 10, "rainbows": COLOR }, - 'Detweights': "../AIlib2/weights/highWay2/yolov5_%s_fp16.engine" % gpuName, - 'Segweights': '../AIlib2/weights/highWay2/stdc_360X640_%s_fp16.engine' % gpuName + 'Detweights': "../weights/trt/AIlib2/highWay2T/yolov5_%s_fp16.engine" % gpuName, + 'Segweights': '../weights/trt/AIlib2/highWay2T/stdc_360X640_%s_fp16.engine' % gpuName }) SMARTSITE_MODEL = ("28", "028", "智慧工地模型", 'smartSite', lambda device, gpuName: { @@ -712,7 +726,7 @@ class ModelType(Enum): 'models': [ { - 'weight':"../AIlib2/weights/smartSite/yolov5_%s_fp16.engine"%(gpuName),###检测模型路径 + 'weight':"../weights/trt/AIlib2/smartSite/yolov5_%s_fp16.engine"%(gpuName),###检测模型路径 'name':'yolov5', 'model':yolov5Model, 'par':{ 'half':True,'device':'cuda:0' ,'conf_thres':0.25,'iou_thres':0.45,'allowedList':list(range(20)),'segRegionCnt':1, 'trtFlag_det':True,'trtFlag_seg':False, "score_byClass":{"0":0.25,"1":0.3,"2":0.3,"3":0.3 } }, @@ -732,7 +746,7 @@ class ModelType(Enum): 'models': [ { - 'weight':"../AIlib2/weights/rubbish/yolov5_%s_fp16.engine"%(gpuName),###检测模型路径 + 'weight':"../weights/trt/AIlib2/rubbish/yolov5_%s_fp16.engine"%(gpuName),###检测模型路径 'name':'yolov5', 'model':yolov5Model, 'par':{ 'half':True,'device':'cuda:0' ,'conf_thres':0.25,'iou_thres':0.45,'allowedList':list(range(20)),'segRegionCnt':1, 'trtFlag_det':True,'trtFlag_seg':False, "score_byClass":{"0":0.25,"1":0.3,"2":0.3,"3":0.3 } }, @@ -752,7 +766,7 @@ class ModelType(Enum): 'models': [ { - 'weight':"../AIlib2/weights/firework/yolov5_%s_fp16.engine"%(gpuName),###检测模型路径 + 'weight':"../weights/trt/AIlib2/firework/yolov5_%s_fp16.engine"%(gpuName),###检测模型路径 'name':'yolov5', 'model':yolov5Model, 'par':{ 'half':True,'device':'cuda:0' ,'conf_thres':0.25,'iou_thres':0.45,'allowedList':list(range(20)),'segRegionCnt':1, 'trtFlag_det':True,'trtFlag_seg':False, "score_byClass":{"0":0.25,"1":0.3,"2":0.3,"3":0.3 } }, @@ -765,7 +779,191 @@ class ModelType(Enum): }, }) - + + TRAFFIC_SPILL_MODEL = ("50", "501", "高速公路抛洒物模型", 'highWaySpill', lambda device, gpuName: { + 'device': str(device), + 'labelnames': ["抛洒物","车辆"], + 'trtFlag_seg': True, + 'trtFlag_det': True, + 'seg_nclass': 2, + 'segRegionCnt': 2, + 'segPar': { + #'modelSize': (640, 360), + 'modelSize': (1920, 1080), + 'mean': (0.485, 0.456, 0.406), + 'std': (0.229, 0.224, 0.225), + 'predResize': True, + 'numpy': False, + 'RGB_convert_first': True, + 'mixFunction': { + 'function': mixSpillage_postprocess, + 'pars': { + #'modelSize': (640, 360), + 'modelSize': (1920,1080), + 'RoadArea': 16000, + 'roadVehicleAngle': 15, + 'speedRoadVehicleAngleMax': 75, + 'roundness': 1.0, + 'cls': 1, + 'vehicleFactor': 0.1, + 'confThres': 0.25, + 'roadIou': 0.6, + 'radius': 50, + 'vehicleFlag': False, + 'distanceFlag': False + } + } + }, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.25, + "classes": 2, + "rainbows": COLOR + }, + 'detModelpara': [{"id": str(x), "config": {"k1": "v1", "k2": "v2"}} for x in [0]], + ###控制哪些检测类别显示、输出 + 'Detweights': "../weights/trt/AIlib2/highWaySpill/yolov5_%s_fp16.engine" % gpuName, + 'Segweights': '../weights/trt/AIlib2/highWaySpill/stdc_360X640_%s_fp16.engine' % gpuName + }) + + TRAFFIC_CTHC_MODEL = ("50", "502", "高速公路危化品模型", 'highWayCthc', lambda device, gpuName: { + 'device': str(device), + 'labelnames': ["危化品","罐体","危险标识","普通车"], + 'trtFlag_seg': True, + 'trtFlag_det': True, + 'seg_nclass': 2, + 'segRegionCnt': 2, + 'segPar': { + #'modelSize': (640, 360), + 'modelSize': (1920, 1080), + 'mean': (0.485, 0.456, 0.406), + 'std': (0.229, 0.224, 0.225), + 'predResize': True, + 'numpy': False, + 'RGB_convert_first': True, + 'mixFunction': { + 'function': mixCthc_postprocess, + 'pars': { + #'modelSize': (640, 360), + 'modelSize': (1920,1080), + 'RoadArea': 16000, + 'roadVehicleAngle': 15, + 'speedRoadVehicleAngleMax': 75, + 'roundness': 1.0, + 'cls': 4, + 'vehicleFactor': 0.1, + 'confThres': 0.25, + 'roadIou': 0.6, + 'radius': 50, + 'vehicleFlag': False, + 'distanceFlag': False + } + } + }, + 'postFile': { + "name": "post_process", + "conf_thres": 0.25, + "iou_thres": 0.25, + "classes": 1, + "rainbows": COLOR + }, + 'detModelpara': [{"id": str(x), "config": {"k1": "v1", "k2": "v2"}} for x in [0]], + ###控制哪些检测类别显示、输出 + 'Detweights': "../weights/trt/AIlib2/highWayCthc/yolov5_%s_fp16.engine" % gpuName, + 'Segweights': '../weights/trt/AIlib2/highWayCthc/stdc_360X640_%s_fp16.engine' % gpuName + }) + + TRAFFIC_PANNEL_MODEL = ("50", "503", "光伏板模型", 'pannel', lambda device, gpuName: { + 'labelnames': ["光伏板","覆盖物","裂缝"], + 'postProcess': {'function': pannel_post_process, 'pars': {'objs': [0]}}, + 'models': + [ + { + 'weight': "../weights/trt/AIlib2/pannel/yolov5_%s_fp16.engine" % (gpuName), ###检测模型路径 + 'name': 'yolov5', + 'model': yolov5Model, + 'par': {'half': True, 'device': 'cuda:0', 'conf_thres': 0.25, 'iou_thres': 0.45, + 'allowedList': [0,1,2], 'segRegionCnt': 1, 'trtFlag_det': True, + 'trtFlag_seg': False, "score_byClass": {"0": 0.25, "1": 0.3, "2": 0.3, "3": 0.3}}, + } + + ], + 'postFile': { + "rainbows": COLOR + }, + + }) + + CITY_CARPLATE_MODEL = ("30", "301", "自研车牌检测", 'carplate', lambda device, gpuName: { + 'device': str(device), + 'models':{ + { + 'weights': '../AIlib2/weights/conf/jkm/plate_yolov5s_v3.jit', + 'conf_thres': 0.4, + 'iou_thres': 0.45, + 'nc':1, + }, + { + 'weight' : '../weights/pth/AIlib2/ocr2/crnn_ch.pth', + 'name':'ocr', + 'model':ocrModel, + 'par':{ + 'char_file':'../AIlib2/conf/ocr2/benchmark.txt', + 'mode':'ch', + 'nc':3, + 'imgH':32, + 'imgW':192, + 'hidden':256, + 'mean':[0.5,0.5,0.5], + 'std':[0.5,0.5,0.5], + 'dynamic':False, + } + }, + } + }) + + CITY_INFRAREDPERSON_MODEL = ("30", "302", "红外行人模型", 'infraredperson', lambda device, gpuName: { + 'labelnames': ["行人"], + 'postProcess': {'function': default_mix, 'pars': {}}, + 'models': + [ + { + 'weight': "../weights/trt/AIlib2/infraredPerson/yolov5_%s_fp16.engine" % (gpuName), ###检测模型路径 + 'name': 'yolov5', + 'model': yolov5Model, + 'par': {'half': True, 'device': 'cuda:0', 'conf_thres': 0.50, 'iou_thres': 0.45, + 'allowedList': list(range(20)), 'segRegionCnt': 1, 'trtFlag_det': True, + 'trtFlag_seg': False, "score_byClass": {"0": 0.50, "1": 0.3, "2": 0.3, "3": 0.3}}, + } + + ], + 'postFile': { + "rainbows": COLOR + }, + + }) + + CITY_NIGHTFIRESMOKE_MODEL = ("30", "303", "夜间烟火模型", 'nightFireSmoke', lambda device, gpuName: { + 'labelnames': ["火","烟雾"], + 'postProcess': {'function': default_mix, 'pars': {}}, + 'models': + [ + { + 'weight': "../weights/trt/AIlib2/nightFireSmoke/yolov5_%s_fp16.engine" % (gpuName), ###检测模型路径 + 'name': 'yolov5', + 'model': yolov5Model, + 'par': {'half': True, 'device': 'cuda:0', 'conf_thres': 0.50, 'iou_thres': 0.45, + 'allowedList': list(range(20)), 'segRegionCnt': 1, 'trtFlag_det': True, + 'trtFlag_seg': False, "score_byClass": {"0": 0.50, "1": 0.3, "2": 0.3, "3": 0.3}}, + } + + ], + 'postFile': { + "rainbows": COLOR + }, + + }) @staticmethod def checkCode(code): diff --git a/enums/__pycache__/AnalysisStatusEnum.cpython-38.pyc b/enums/__pycache__/AnalysisStatusEnum.cpython-38.pyc deleted file mode 100644 index f571b45..0000000 Binary files a/enums/__pycache__/AnalysisStatusEnum.cpython-38.pyc and /dev/null differ diff --git a/enums/__pycache__/AnalysisTypeEnum.cpython-38.pyc b/enums/__pycache__/AnalysisTypeEnum.cpython-38.pyc deleted file mode 100644 index 2e06f47..0000000 Binary files a/enums/__pycache__/AnalysisTypeEnum.cpython-38.pyc and /dev/null differ diff --git a/enums/__pycache__/BaiduSdkEnum.cpython-310.pyc b/enums/__pycache__/BaiduSdkEnum.cpython-310.pyc deleted file mode 100644 index d3391b0..0000000 Binary files a/enums/__pycache__/BaiduSdkEnum.cpython-310.pyc and /dev/null differ diff --git a/enums/__pycache__/BaiduSdkEnum.cpython-38.pyc b/enums/__pycache__/BaiduSdkEnum.cpython-38.pyc deleted file mode 100644 index e79c754..0000000 Binary files a/enums/__pycache__/BaiduSdkEnum.cpython-38.pyc and /dev/null differ diff --git a/enums/__pycache__/ExceptionEnum.cpython-310.pyc b/enums/__pycache__/ExceptionEnum.cpython-310.pyc deleted file mode 100644 index f05bf3b..0000000 Binary files a/enums/__pycache__/ExceptionEnum.cpython-310.pyc and /dev/null differ diff --git a/enums/__pycache__/ExceptionEnum.cpython-38.pyc b/enums/__pycache__/ExceptionEnum.cpython-38.pyc deleted file mode 100644 index e2126d1..0000000 Binary files a/enums/__pycache__/ExceptionEnum.cpython-38.pyc and /dev/null differ diff --git a/enums/__pycache__/ModelTypeEnum.cpython-38.pyc b/enums/__pycache__/ModelTypeEnum.cpython-38.pyc deleted file mode 100644 index 9dd09f3..0000000 Binary files a/enums/__pycache__/ModelTypeEnum.cpython-38.pyc and /dev/null differ diff --git a/enums/__pycache__/ModelTypeEnum2.cpython-38.pyc b/enums/__pycache__/ModelTypeEnum2.cpython-38.pyc deleted file mode 100644 index b4815eb..0000000 Binary files a/enums/__pycache__/ModelTypeEnum2.cpython-38.pyc and /dev/null differ diff --git a/enums/__pycache__/RecordingStatusEnum.cpython-38.pyc b/enums/__pycache__/RecordingStatusEnum.cpython-38.pyc deleted file mode 100644 index b7c0f70..0000000 Binary files a/enums/__pycache__/RecordingStatusEnum.cpython-38.pyc and /dev/null differ diff --git a/enums/__pycache__/StatusEnum.cpython-38.pyc b/enums/__pycache__/StatusEnum.cpython-38.pyc deleted file mode 100644 index ec5fb91..0000000 Binary files a/enums/__pycache__/StatusEnum.cpython-38.pyc and /dev/null differ diff --git a/enums/__pycache__/__init__.cpython-310.pyc b/enums/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index d0c53ad..0000000 Binary files a/enums/__pycache__/__init__.cpython-310.pyc and /dev/null differ diff --git a/enums/__pycache__/__init__.cpython-38.pyc b/enums/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 17fbca0..0000000 Binary files a/enums/__pycache__/__init__.cpython-38.pyc and /dev/null differ diff --git a/exception/__pycache__/CustomerException.cpython-310.pyc b/exception/__pycache__/CustomerException.cpython-310.pyc deleted file mode 100644 index b3b91b5..0000000 Binary files a/exception/__pycache__/CustomerException.cpython-310.pyc and /dev/null differ diff --git a/exception/__pycache__/CustomerException.cpython-38.pyc b/exception/__pycache__/CustomerException.cpython-38.pyc deleted file mode 100644 index 473fc42..0000000 Binary files a/exception/__pycache__/CustomerException.cpython-38.pyc and /dev/null differ diff --git a/exception/__pycache__/__init__.cpython-310.pyc b/exception/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 80858e8..0000000 Binary files a/exception/__pycache__/__init__.cpython-310.pyc and /dev/null differ diff --git a/exception/__pycache__/__init__.cpython-38.pyc b/exception/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 5fb7efd..0000000 Binary files a/exception/__pycache__/__init__.cpython-38.pyc and /dev/null differ diff --git a/readme.md b/readme.md index 9e16291..d29501a 100644 --- a/readme.md +++ b/readme.md @@ -6,7 +6,3 @@ (2)修改了minio情况下的,文件名命名方式。 3.2025.02.12 (1)增加了对alg算法开发的代码。可以通过配置文件config/service/dsp_test_service.yml中algSwitch: true,决定是否启用。 -4.2025.04.26 - (1)代码更新路径到gitadmin - - 5.updata-jcq diff --git a/service/Dispatcher-raw.py b/service/Dispatcher-raw.py new file mode 100644 index 0000000..013952c --- /dev/null +++ b/service/Dispatcher-raw.py @@ -0,0 +1,507 @@ +# -*- coding: utf-8 -*- +import time,os +from os.path import join +from traceback import format_exc +import json +from cerberus import Validator + +from common.Constant import ONLINE_START_SCHEMA, ONLINE_STOP_SCHEMA, OFFLINE_START_SCHEMA, OFFLINE_STOP_SCHEMA, \ + IMAGE_SCHEMA, RECORDING_START_SCHEMA, RECORDING_STOP_SCHEMA, PULL2PUSH_START_SCHEMA, PULL2PUSH_STOP_SCHEMA +from common.YmlConstant import service_yml_path, kafka_yml_path +from concurrency.FeedbackThread import FeedbackThread +from concurrency.uploadGPU import uploadGPUinfos +from concurrency.IntelligentRecognitionProcess2 import OnlineIntelligentRecognitionProcess2, \ + OfflineIntelligentRecognitionProcess2, PhotosIntelligentRecognitionProcess2 +from concurrency.Pull2PushStreamProcess import PushStreamProcess +from entity.FeedBack import message_feedback, recording_feedback, pull_stream_feedback +from enums.AnalysisStatusEnum import AnalysisStatus +from enums.AnalysisTypeEnum import AnalysisType +from enums.ExceptionEnum import ExceptionType +from enums.ModelTypeEnum import ModelMethodTypeEnum, ModelType +from enums.RecordingStatusEnum import RecordingStatus +from enums.StatusEnum import PushStreamStatus, ExecuteStatus +from exception.CustomerException import ServiceException +from loguru import logger +from multiprocessing import Queue +from concurrency.IntelligentRecognitionProcess import OnlineIntelligentRecognitionProcess, \ + OfflineIntelligentRecognitionProcess, PhotosIntelligentRecognitionProcess, ScreenRecordingProcess +from util.CpuUtils import print_cpu_ex_status +from util.FileUtils import create_dir_not_exist +from util.GPUtils import get_first_gpu_name, print_gpu_ex_status, check_cude_is_available,select_best_server +from util.KafkaUtils import CustomerKafkaConsumer +from util.QueUtil import put_queue +from util.RWUtils import getConfigs +from kafka import KafkaProducer, KafkaConsumer +''' + 分发服务 +''' + + +class DispatcherService: + __slots__ = ('__context', '__feedbackThread', '__listeningProcesses', '__fbQueue', '__topics','__taskType', '__task_type', + '__kafka_config', '__recordingProcesses', '__pull2PushProcesses','__topicsPort','__gpuTopic','__role','__uploadGPUThread','__gpuDics','__producer') + + def __init__(self, base_dir, env): + # 检测cuda是否活动 + check_cude_is_available() + # 获取全局上下文配置 + self.__context = getConfigs(join(base_dir, service_yml_path % env)) + # 创建任务执行, 视频保存路径 + create_dir_not_exist(join(base_dir, self.__context["video"]["file_path"])) + # 将根路径和环境设置到上下文中 + self.__context["base_dir"], self.__context["env"] = base_dir, env + + # 问题反馈线程 + self.__feedbackThread,self.__uploadGPUThread, self.__fbQueue = None,None, Queue() + # 实时、离线、图片任务进程字典 + self.__listeningProcesses = {} + # 录屏任务进程字典 + self.__recordingProcesses = {} + # 转推流任务进程字典 + self.__pull2PushProcesses = {} + self.__kafka_config = getConfigs(join(base_dir, kafka_yml_path % env)) + + self.__producer = KafkaProducer( + bootstrap_servers=self.__kafka_config['bootstrap_servers'],#tencent yun + value_serializer=lambda v: v.encode('utf-8')) + + self.__gpuDics = { }#用于存储gpu信息的字典 + self.__role = self.__context["role"] + self.__topics = [ + self.__kafka_config["topic"]["dsp-alg-online-tasks-topic"], # 实时监听topic + self.__kafka_config["topic"]["dsp-alg-offline-tasks-topic"], # 离线监听topic + self.__kafka_config["topic"]["dsp-alg-image-tasks-topic"], # 图片监听topic + self.__kafka_config["topic"]["dsp-recording-task-topic"], # 录屏监听topic + self.__kafka_config["topic"]["dsp-push-stream-task-topic"] # 推流监听topic + ] + + self.__topicsPort = [ + self.__kafka_config["topicPort"]["dsp-alg-online-tasks-topic"], # 实时监听topic + self.__kafka_config["topicPort"]["dsp-alg-offline-tasks-topic"], # 离线监听topic + self.__kafka_config["topicPort"]["dsp-alg-image-tasks-topic"], # 图片监听topic + self.__kafka_config["topicPort"]["dsp-recording-task-topic"], # 录屏监听topic + self.__kafka_config["topicPort"]["dsp-push-stream-task-topic"] # 推流监听topic + ] + self.__gpuTopic = [self.__kafka_config["topicGPU"]] + + if self.__role==1: + self.__topics = self.__topics + self.__topicsPort + self.__gpuTopic + + + # 对应topic的各个lambda表达式 + self.__task_type = { + self.__topics[0]: (AnalysisType.ONLINE.value, lambda x, y: self.online(x, y), + lambda x, y, z: self.identify_method(x, y, z)), + self.__topics[1]: (AnalysisType.OFFLINE.value, lambda x, y: self.offline(x, y), + lambda x, y, z: self.identify_method(x, y, z)), + self.__topics[2]: (AnalysisType.IMAGE.value, lambda x, y: self.image(x, y), + lambda x, y, z: self.identify_method(x, y, z)), + self.__topics[3]: (AnalysisType.RECORDING.value, lambda x, y: self.recording(x, y), + lambda x, y, z: self.recording_method(x, y, z)), + self.__topics[4]: (AnalysisType.PULLTOPUSH.value, lambda x, y: self.pullStream(x, y), + lambda x, y, z: self.push_stream_method(x, y, z)) + + } + self.__taskType={ + self.__kafka_config["topic"]["dsp-alg-online-tasks-topic"]:0, # 实时监听topic + self.__kafka_config["topic"]["dsp-alg-offline-tasks-topic"]:1, # 离线监听topic + self.__kafka_config["topic"]["dsp-alg-image-tasks-topic"]:2, # 图片监听topic + self.__kafka_config["topic"]["dsp-recording-task-topic"]:3, # 录屏监听topic + self.__kafka_config["topic"]["dsp-push-stream-task-topic"]:4 # 推流监听topic + } + gpu_name_array = get_first_gpu_name() + gpu_array = [g for g in ('3090', '2080', '4090', 'A10') if g in gpu_name_array] + gpu_name = '2080Ti' + if len(gpu_array) > 0: + if gpu_array[0] != '2080': + gpu_name = gpu_array[0] + else: + raise Exception("GPU资源不在提供的模型所支持的范围内!请先提供对应的GPU模型!") + logger.info("当前服务环境为: {}, 服务器GPU使用型号: {}", env, gpu_name) + self.__context["gpu_name"] = gpu_name + self.start_service() + + # 服务调用启动方法 + def start_service(self): + # 初始化kafka监听者 + customerKafkaConsumer = CustomerKafkaConsumer(self.__kafka_config, topics=self.__topics) + ####增加一个线程,用于试试监控和发送gpu状态#### + #### + logger.info("(♥◠‿◠)ノ゙ DSP【算法调度服务】启动成功 服务器IP:{}".format(self.__kafka_config['bootstrap_servers'] )) + while True: + try: + # 检查任务进程运行情况,去除结束的任务 + self.check_process_task() + # 启动反馈线程 + self.start_feedback_thread() + self.start_uploadGPU_thread() + msg = customerKafkaConsumer.poll() + if msg is not None and len(msg) > 0: + for k, v in msg.items(): + for m in v: + message = m.value + #如果收到的信息是gpu状态的话,收到信息后,更新自己的gpu服务器状态,下面不再执行 + if m.topic in self.__gpuTopic: + customerKafkaConsumer.commit_offset(m,'x'*16,False) + #更新机器资源现状 + ip = message['System']['Local IP Address'] + self.__gpuDics[ip]=message + continue + #如果收到的信息是门户消息,收到信息后,要根据Gpu状态,转发到对应的机器。 + elif m.topic in self.__topicsPort: + customerKafkaConsumer.commit_offset(m, 'y'*16) + #状态分析 + #recondGpu={'hostname':'thsw2','IP':'192.168.10.66','gpuId':0} + recondGpu= select_best_server(self.__gpuDics) + if recondGpu is None: + print( 'recondGpu:',recondGpu, ' self.__gpuDics: ',self.__gpuDics,' topic:',m.topic, ' message:',message ) + continue + #转发消息 + message['transmit_topic'] = m.topic + '-' + recondGpu['IP'] + transmitMsg={'transmit':message} + msg_json = json.dumps( message ) + future = self.__producer.send( message['transmit_topic'] ,msg_json) + try: + future.get(timeout=2) + logger.info( "转发消息成功,消息topic:{},消息内容:{}",message['transmit_topic'],message ) + except kafka_errors as e: + print('------transmitted error:',e) + logger.info("转发消息失败") + traceback.format_exc() + else: + requestId = message.get("request_id") + if requestId is None: + logger.error("请求参数格式错误, 请检查请求体格式是否正确!message:%s"%(message)) + continue + customerKafkaConsumer.commit_offset(m, requestId) + logger.info("当前拉取到的消息, topic:{}, offset:{}, partition: {}, body: {}, requestId:{}", + m.topic, m.offset, m.partition, message, requestId) + + message['taskType']=self.__taskType[m.topic] + topic_method = self.__task_type[m.topic] + topic_method[2](topic_method[1], message, topic_method[0]) + else: + print_gpu_ex_status() + print_cpu_ex_status(self.__context["base_dir"]) + time.sleep(1) + except Exception: + logger.error("主线程异常:{}", format_exc()) + + def identify_method(self, handle_method, message, analysisType): + try: + check_cude_is_available() + handle_method(message, analysisType) + except ServiceException as s: + logger.error("消息监听异常:{}, requestId: {}", s.msg, message["request_id"]) + put_queue(self.__fbQueue, message_feedback(message["request_id"], AnalysisStatus.FAILED.value, analysisType, + s.code, s.msg), timeout=1) + except Exception: + logger.error("消息监听异常:{}, requestId: {}", format_exc(), message["request_id"]) + put_queue(self.__fbQueue, message_feedback(message["request_id"], AnalysisStatus.FAILED.value, analysisType, + ExceptionType.SERVICE_INNER_EXCEPTION.value[0], + ExceptionType.SERVICE_INNER_EXCEPTION.value[1]), timeout=1) + finally: + del message + + def push_stream_method(self, handle_method, message, analysisType): + try: + check_cude_is_available() + handle_method(message, analysisType) + except ServiceException as s: + logger.error("消息监听异常:{}, requestId: {}", s.msg, message['request_id']) + videoInfo = [{"id": url.get("id"), "status": PushStreamStatus.FAILED.value[0]} for url in + message.get("video_urls", []) if url.get("id") is not None] + put_queue(self.__fbQueue, pull_stream_feedback(message['request_id'], ExecuteStatus.FAILED.value[0], + s.code, s.msg, videoInfo), timeout=1) + except Exception: + logger.error("消息监听异常:{}, requestId: {}", format_exc(), message['request_id']) + videoInfo = [{"id": url.get("id"), "status": PushStreamStatus.FAILED.value[0]} for url in + message.get("video_urls", []) if url.get("id") is not None] + put_queue(self.__fbQueue, pull_stream_feedback(message.get("request_id"), ExecuteStatus.FAILED.value[0], + ExceptionType.SERVICE_INNER_EXCEPTION.value[0], + ExceptionType.SERVICE_INNER_EXCEPTION.value[1], videoInfo), + timeout=1) + finally: + del message + + def recording_method(self, handle_method, message, analysisType): + try: + check_cude_is_available() + handle_method(message, analysisType) + except ServiceException as s: + logger.error("消息监听异常:{}, requestId: {}", s.msg, message["request_id"]) + put_queue(self.__fbQueue, + recording_feedback(message["request_id"], RecordingStatus.RECORDING_FAILED.value[0], + error_code=s.code, error_msg=s.msg), timeout=1) + except Exception: + logger.error("消息监听异常:{}, requestId: {}", format_exc(), message["request_id"]) + put_queue(self.__fbQueue, + recording_feedback(message["request_id"], RecordingStatus.RECORDING_FAILED.value[0], + ExceptionType.SERVICE_INNER_EXCEPTION.value[0], + ExceptionType.SERVICE_INNER_EXCEPTION.value[1]), timeout=1) + finally: + del message + + # 开启实时进程 + def startOnlineProcess(self, msg, analysisType): + if self.__listeningProcesses.get(msg["request_id"]): + logger.warning("实时重复任务,请稍后再试!requestId:{}", msg["request_id"]) + return + model_type = self.__context["service"]["model"]["model_type"] + codes = [model.get("code") for model in msg["models"] if model.get("code")] + if ModelMethodTypeEnum.NORMAL.value == model_type or ModelType.ILLPARKING_MODEL.value[1] in codes: + coir = OnlineIntelligentRecognitionProcess(self.__fbQueue, msg, analysisType, self.__context) + else: + coir = OnlineIntelligentRecognitionProcess2(self.__fbQueue, msg, analysisType, self.__context) + coir.start() + logger.info("开始实时进程!requestId:{},pid:{}, ppid:{}", msg["request_id"],os.getpid(),os.getppid()) + self.__listeningProcesses[msg["request_id"]] = coir + + # 结束实时进程 + def stopOnlineProcess(self, msg): + ps = self.__listeningProcesses.get(msg["request_id"]) + if ps is None: + logger.warning("未查询到该任务,无法停止任务!requestId:{}", msg["request_id"]) + return + ps.sendEvent({"command": "stop"}) + + # 新增该函数用于,向子任务发送命令(algStart,algStop) + def sendCmdToChildProcess(self, msg,cmd="algStart"): + ps = self.__listeningProcesses.get(msg["request_id"]) + if ps is None: + logger.warning("未查询到该任务,无法停止任务!requestId:{}", msg["request_id"]) + return + ps.sendEvent({"command": cmd}) + + @staticmethod + def check_process(listeningProcess): + for requestId in list(listeningProcess.keys()): + if not listeningProcess[requestId].is_alive(): + del listeningProcess[requestId] + + def check_process_task(self): + self.check_process(self.__listeningProcesses) + self.check_process(self.__recordingProcesses) + self.check_process(self.__pull2PushProcesses) + + # 开启离线进程 + def startOfflineProcess(self, msg, analysisType): + if self.__listeningProcesses.get(msg["request_id"]): + logger.warning("离线重复任务,请稍后再试!requestId:{}", msg["request_id"]) + return + model_type = self.__context["service"]["model"]["model_type"] + codes = [model.get("code") for model in msg["models"] if model.get("code")] + if ModelMethodTypeEnum.NORMAL.value == model_type: + first = OfflineIntelligentRecognitionProcess(self.__fbQueue, msg, analysisType, self.__context) + else: + first = OfflineIntelligentRecognitionProcess2(self.__fbQueue, msg, analysisType, self.__context) + first.start() + self.__listeningProcesses[msg["request_id"]] = first + + # 结束离线进程 + def stopOfflineProcess(self, msg): + ps = self.__listeningProcesses.get(msg["request_id"]) + if ps is None: + logger.warning("未查询到该任务,无法停止任务!requestId:{}", msg["request_id"]) + return + ps.sendEvent({"command": "stop"}) + + # 开启图片分析进程 + def startImageProcess(self, msg, analysisType): + pp = self.__listeningProcesses.get(msg["request_id"]) + if pp is not None: + logger.warning("重复任务,请稍后再试!requestId:{}", msg["request_id"]) + return + model_type = self.__context["service"]["model"]["model_type"] + codes = [model.get("code") for model in msg["models"] if model.get("code")] + if ModelMethodTypeEnum.NORMAL.value == model_type or ModelType.ILLPARKING_MODEL.value[1] in codes: + imaged = PhotosIntelligentRecognitionProcess(self.__fbQueue, msg, analysisType, self.__context) + else: + imaged = PhotosIntelligentRecognitionProcess2(self.__fbQueue, msg, analysisType, self.__context) + # 创建在线识别进程并启动 + imaged.start() + self.__listeningProcesses[msg["request_id"]] = imaged + + ''' + 校验kafka消息 + ''' + + @staticmethod + def check_msg(msg, schema): + try: + v = Validator(schema, allow_unknown=True) + result = v.validate(msg) + if not result: + logger.error("参数校验异常: {}, requestId: {}", v.errors, msg["request_id"]) + raise ServiceException(ExceptionType.ILLEGAL_PARAMETER_FORMAT.value[0], + ExceptionType.ILLEGAL_PARAMETER_FORMAT.value[1]) + except ServiceException as s: + raise s + except Exception: + logger.error("参数校验异常: {}, requestId: {}", format_exc(), msg["request_id"]) + raise ServiceException(ExceptionType.ILLEGAL_PARAMETER_FORMAT.value[0], + ExceptionType.ILLEGAL_PARAMETER_FORMAT.value[1]) + + ''' + 开启反馈线程,用于发送消息 + ''' + + def start_feedback_thread(self): + if self.__feedbackThread is None: + self.__feedbackThread = FeedbackThread(self.__fbQueue, self.__kafka_config) + self.__feedbackThread.setDaemon(True) + self.__feedbackThread.start() + time.sleep(1) + if self.__feedbackThread and not self.__feedbackThread.is_alive(): + logger.error("反馈线程异常停止, 开始重新启动反馈线程!!!!!") + self.__feedbackThread = FeedbackThread(self.__fbQueue, self.__kafka_config) + self.__feedbackThread.setDaemon(True) + self.__feedbackThread.start() + time.sleep(1) + + def start_uploadGPU_thread(self): + if self.__uploadGPUThread is None: + self.__uploadGPUThread = uploadGPUinfos(self.__context, self.__kafka_config) + self.__uploadGPUThread.setDaemon(True) + self.__uploadGPUThread.start() + time.sleep(1) + if self.__uploadGPUThread and not self.__uploadGPUThread.is_alive(): + logger.error("反馈线程异常停止, 开始重新启动反馈线程!!!!!") + self.__uploadGPUThread = uploadGPUinfos(self.__context, self.__kafka_config) + self.__uploadGPUThread.setDaemon(True) + self.__uploadGPUThread.start() + time.sleep(1) + + ''' + 在线分析逻辑 + ''' + + def online0(self, message, analysisType): + if "start" == message.get("command"): + self.check_msg(message, ONLINE_START_SCHEMA) + if len(self.__listeningProcesses) >= int(self.__context['service']["task"]["limit"]): + raise ServiceException(ExceptionType.NO_RESOURCES.value[0], + ExceptionType.NO_RESOURCES.value[1]) + self.startOnlineProcess(message, analysisType) + elif message.get("command") in ["algStart","algStop"]: + self.sendCmdToChildProcess(message,cmd=message.get("command")) + elif "stop" == message.get("command"): + self.check_msg(message, ONLINE_STOP_SCHEMA) + self.stopOnlineProcess(message) + else: + raise ServiceException(ExceptionType.ILLEGAL_PARAMETER_FORMAT.value[0], + ExceptionType.ILLEGAL_PARAMETER_FORMAT.value[1]) + + + def online(self, message, analysisType): + if "start" == message.get("command"): + self.check_msg(message, ONLINE_START_SCHEMA) + if len(self.__listeningProcesses) >= int(self.__context['service']["task"]["limit"]): + raise ServiceException(ExceptionType.NO_RESOURCES.value[0], + ExceptionType.NO_RESOURCES.value[1]) + self.startOnlineProcess(message, analysisType) + + elif message.get("command") in ["algStart","algStop"]: + + if message.get("defaultEnabled",True): + self.sendCmdToChildProcess(message,cmd=message.get("command")) + + + elif "stop" == message.get("command"): + self.check_msg(message, ONLINE_STOP_SCHEMA) + self.stopOnlineProcess(message) + else: + raise ServiceException(ExceptionType.ILLEGAL_PARAMETER_FORMAT.value[0], + ExceptionType.ILLEGAL_PARAMETER_FORMAT.value[1]) + + + + + def offline(self, message, analysisType): + if "start" == message.get("command"): + self.check_msg(message, OFFLINE_START_SCHEMA) + if len(self.__listeningProcesses) >= int(self.__context['service']["task"]["limit"]): + raise ServiceException(ExceptionType.NO_RESOURCES.value[0], + ExceptionType.NO_RESOURCES.value[1]) + self.startOfflineProcess(message, analysisType) + elif message.get("command") in ["algStart","algStop"]: + self.sendCmdToChildProcess( message,cmd=message.get("command")) + elif "stop" == message.get("command"): + self.check_msg(message, OFFLINE_STOP_SCHEMA) + self.stopOfflineProcess(message) + else: + raise ServiceException(ExceptionType.ILLEGAL_PARAMETER_FORMAT.value[0], + ExceptionType.ILLEGAL_PARAMETER_FORMAT.value[1]) + + def image(self, message, analysisType): + if "start" == message.get("command"): + self.check_msg(message, IMAGE_SCHEMA) + if len(self.__listeningProcesses) >= int(self.__context['service']["task"]["image"]["limit"]): + raise ServiceException(ExceptionType.NO_RESOURCES.value[0], + ExceptionType.NO_RESOURCES.value[1]) + self.startImageProcess(message, analysisType) + else: + raise ServiceException(ExceptionType.ILLEGAL_PARAMETER_FORMAT.value[0], + ExceptionType.ILLEGAL_PARAMETER_FORMAT.value[1]) + + def recording(self, message, analysisType): + if "start" == message.get("command"): + self.check_msg(message, RECORDING_START_SCHEMA) + if len(self.__recordingProcesses) >= int(self.__context['service']["task"]["limit"]): + raise ServiceException(ExceptionType.NO_RESOURCES.value[0], + ExceptionType.NO_RESOURCES.value[1]) + self.startRecordingProcess(message, analysisType) + elif "stop" == message.get("command"): + self.check_msg(message, RECORDING_STOP_SCHEMA) + self.stopRecordingProcess(message) + else: + raise ServiceException(ExceptionType.ILLEGAL_PARAMETER_FORMAT.value[0], + ExceptionType.ILLEGAL_PARAMETER_FORMAT.value[1]) + + # 开启录屏进程 + def startRecordingProcess(self, msg, analysisType): + if self.__listeningProcesses.get(msg["request_id"]): + logger.warning("重复任务,请稍后再试!requestId:{}", msg["request_id"]) + return + srp = ScreenRecordingProcess(self.__fbQueue, self.__context, msg, analysisType) + srp.start() + self.__recordingProcesses[msg["request_id"]] = srp + + # 结束录屏进程 + def stopRecordingProcess(self, msg): + rdp = self.__recordingProcesses.get(msg["request_id"]) + if rdp is None: + logger.warning("未查询到该任务,无法停止任务!requestId:{}", msg["request_id"]) + return + rdp.sendEvent({"command": "stop"}) + + def pullStream(self, message, analysisType): + if "start" == message.get("command"): + self.check_msg(message, PULL2PUSH_START_SCHEMA) + if len(self.__pull2PushProcesses) >= int(self.__context['service']["task"]["limit"]): + raise ServiceException(ExceptionType.NO_RESOURCES.value[0], + ExceptionType.NO_RESOURCES.value[1]) + + self.startPushStreamProcess(message, analysisType) + elif "stop" == message.get("command"): + self.check_msg(message, PULL2PUSH_STOP_SCHEMA) + self.stopPushStreamProcess(message) + else: + raise ServiceException(ExceptionType.ILLEGAL_PARAMETER_FORMAT.value[0], + ExceptionType.ILLEGAL_PARAMETER_FORMAT.value[1]) + + def startPushStreamProcess(self, msg, analysisType): + if self.__pull2PushProcesses.get(msg["request_id"]): + logger.warning("重复任务,请稍后再试!requestId:{}", msg["request_id"]) + return + srp = PushStreamProcess(self.__fbQueue, self.__context, msg, analysisType) + srp.start() + self.__pull2PushProcesses[msg["request_id"]] = srp + + # 结束录屏进程 + def stopPushStreamProcess(self, msg): + srp = self.__pull2PushProcesses.get(msg["request_id"]) + if srp is None: + logger.warning("未查询到该任务,无法停止任务!requestId:{}", msg["request_id"]) + return + srp.sendEvent({"command": "stop", "videoIds": msg.get("video_ids", [])}) diff --git a/service/Dispatcher.py b/service/Dispatcher.py index 25c3c7f..a815e7c 100644 --- a/service/Dispatcher.py +++ b/service/Dispatcher.py @@ -187,6 +187,9 @@ class DispatcherService: except Exception: logger.error("主线程异常:{}", format_exc()) + + + def identify_method(self, handle_method, message, analysisType): try: check_cude_is_available() @@ -244,20 +247,30 @@ class DispatcherService: # 开启实时进程 def startOnlineProcess(self, msg, analysisType): - - - # for algswitch flag: - default_enabled = str(msg.get("defaultEnabled","True")).lower() == "true" - - if default_enabled: - self.__context['service']['algSwitch'] = True - else: - self.__context['service']['algSwitch'] = False - + #0521: + default_enabled = str(msg.get("defaultEnabled", "True")).lower() == "true" + + if default_enabled: + print("执行默认程序(defaultEnabled=True)") + self.__context['service']['algSwitch'] = True + # 这里放默认逻辑的代码 + else: + print("执行替代程序(defaultEnabled=False)") + # 这里放非默认逻辑的代码 + self.__context['service']['algSwitch'] = False + + + print("---line264-Dispatcher.py---",self.__context) + + + + + if self.__listeningProcesses.get(msg["request_id"]): logger.warning("实时重复任务,请稍后再试!requestId:{}", msg["request_id"]) return + model_type = self.__context["service"]["model"]["model_type"] codes = [model.get("code") for model in msg["models"] if model.get("code")] if ModelMethodTypeEnum.NORMAL.value == model_type or ModelType.ILLPARKING_MODEL.value[1] in codes: @@ -337,8 +350,23 @@ class DispatcherService: 校验kafka消息 ''' + + @staticmethod def check_msg(msg, schema): + + + # #0521 + # # 检查 defaultEnabled 是否为 True(兼容字符串和布尔值) + # default_enabled = str(msg1.get("defaultEnabled", "True")).lower() == "true" + + # # 如果不是 True,强制设置 command 为 'algStop' + # if not default_enabled and msg1["command"] == "algStart" : + # msg1["command"] = "algStop" + + # msg = msg1 + + try: v = Validator(schema, allow_unknown=True) result = v.validate(msg) @@ -387,23 +415,104 @@ class DispatcherService: 在线分析逻辑 ''' + #0520:主要是在线分析 -- "algStart","algStop" 外部多增加一层逻辑 + + # def online(self, message, analysisType): + # if "start" == message.get("command"): + # self.check_msg(message, ONLINE_START_SCHEMA) + # if len(self.__listeningProcesses) >= int(self.__context['service']["task"]["limit"]): + # raise ServiceException(ExceptionType.NO_RESOURCES.value[0], + # ExceptionType.NO_RESOURCES.value[1]) + # self.startOnlineProcess(message, analysisType) + # elif message.get("command") in ["algStart","algStop"]: + # self.sendCmdToChildProcess(message,cmd=message.get("command")) + # elif "stop" == message.get("command"): + # self.check_msg(message, ONLINE_STOP_SCHEMA) + # self.stopOnlineProcess(message) + # else: + # raise ServiceException(ExceptionType.ILLEGAL_PARAMETER_FORMAT.value[0], + # ExceptionType.ILLEGAL_PARAMETER_FORMAT.value[1]) + + def online(self, message, analysisType): + + + + # #0521 + # # 检查 defaultEnabled 是否为 True(兼容字符串和布尔值) + + # #逻辑还是有问题 - 肯定是先判断是否为 true + # default_enabled = str(message1.get("defaultEnabled", "True")).lower() == "True" + + # # 如果不是 True,强制设置 command 为 'algStop' + # if not default_enabled : + + # message.get("command") + # message = message1 + + + + + # message = message + # print("line429",message) + + + + + + + if "start" == message.get("command"): self.check_msg(message, ONLINE_START_SCHEMA) if len(self.__listeningProcesses) >= int(self.__context['service']["task"]["limit"]): raise ServiceException(ExceptionType.NO_RESOURCES.value[0], ExceptionType.NO_RESOURCES.value[1]) self.startOnlineProcess(message, analysisType) - elif message.get("command") in ["algStart","algStop"]: - self.sendCmdToChildProcess(message,cmd=message.get("command")) + + # elif (message.get("command") in ["algStart","algStop"] ) and (message.get("defaultEnabled",True)): + # self.sendCmdToChildProcess(message,cmd=message.get("command")) + + + elif ( + message is not None # 防止 message 为 None + and isinstance(message, dict) # 确保 message 是字典 + and (command := message.get("command")) in ["algStart", "algStop"] # Python 3.8+ 海象运算符 + and message.get("defaultEnabled", True) is not False # 显式排除 False + ): + self.sendCmdToChildProcess(message, cmd=command) + + + + elif "stop" == message.get("command"): self.check_msg(message, ONLINE_STOP_SCHEMA) self.stopOnlineProcess(message) else: raise ServiceException(ExceptionType.ILLEGAL_PARAMETER_FORMAT.value[0], ExceptionType.ILLEGAL_PARAMETER_FORMAT.value[1]) + + + def offline(self, message, analysisType): + + + # #0521 + # # 检查 defaultEnabled 是否为 True(兼容字符串和布尔值) + # default_enabled = str(message.get("defaultEnabled", "True")).lower() == "true" + + # # 如果不是 True,强制设置 command 为 'algStop' + # if not default_enabled and message["command"] == "algStart" : + # message["command"] = "algStop" + + # message = message + # print("line429",message) + + + + + + if "start" == message.get("command"): self.check_msg(message, OFFLINE_START_SCHEMA) if len(self.__listeningProcesses) >= int(self.__context['service']["task"]["limit"]): diff --git a/service/__pycache__/Dispatcher.cpython-310.pyc b/service/__pycache__/Dispatcher.cpython-310.pyc deleted file mode 100644 index 060bc19..0000000 Binary files a/service/__pycache__/Dispatcher.cpython-310.pyc and /dev/null differ diff --git a/service/__pycache__/Dispatcher.cpython-38.pyc b/service/__pycache__/Dispatcher.cpython-38.pyc deleted file mode 100644 index 1919f51..0000000 Binary files a/service/__pycache__/Dispatcher.cpython-38.pyc and /dev/null differ diff --git a/service/__pycache__/__init__.cpython-310.pyc b/service/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index d0d3a66..0000000 Binary files a/service/__pycache__/__init__.cpython-310.pyc and /dev/null differ diff --git a/service/__pycache__/__init__.cpython-38.pyc b/service/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index a52c2a3..0000000 Binary files a/service/__pycache__/__init__.cpython-38.pyc and /dev/null differ diff --git a/util/Cv2Utils.py b/util/Cv2Utils.py index af2800c..833992c 100644 --- a/util/Cv2Utils.py +++ b/util/Cv2Utils.py @@ -456,8 +456,8 @@ class Cv2Util: # '-sc_threshold', '0', '-pix_fmt', 'yuv420p', # '-flvflags', 'no_duration_filesize', - # '-preset', 'fast', # 指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, - '-preset', 'p6', # 指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, + '-preset', 'fast', # 指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, + # '-preset', 'p6', # 指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, '-tune', 'll', '-f', 'flv', self.pushUrl] @@ -876,8 +876,8 @@ def build_push_p(push_url, width, height, requestId): # '-zerolatency', '1', '-pix_fmt', 'yuv420p', # '-flvflags', 'no_duration_filesize', - # '-preset', 'fast', # 指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, - '-preset', 'p6', # 指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, + '-preset', 'fast', # 指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, + # '-preset', 'p6', # 指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, '-tune', 'll', '-f', 'flv', push_url] diff --git a/util/MinioSdk.py b/util/MinioSdk.py index 9cd17ff..591532b 100644 --- a/util/MinioSdk.py +++ b/util/MinioSdk.py @@ -57,8 +57,8 @@ class MinioSdk: self.create_bucknet(bucketName) if '/' not in remotePath: - remoteUrl=join( self.__config["file_dir"] , request_id,remotePath ) - else: remoteUrl = join(self.__config["file_dir"] , remotePath) + remoteUrl=join(request_id,remotePath ) + else: remoteUrl = remotePath max_retries = 3 retry_count = 0 while True: diff --git a/util/ModelUtils.py b/util/ModelUtils.py index 26c7086..49478f1 100644 --- a/util/ModelUtils.py +++ b/util/ModelUtils.py @@ -63,7 +63,8 @@ class OneModel: 'conf_thres': postFile["conf_thres"], 'ovlap_thres_crossCategory': postFile.get("ovlap_thres_crossCategory"), 'iou_thres': postFile["iou_thres"], - 'allowedList': [], + # 对高速模型进行过滤 + 'allowedList': par['allowedList'] if modeType.value[0] == '3' else [], 'segRegionCnt': par['segRegionCnt'], 'trtFlag_det': par['trtFlag_det'], 'trtFlag_seg': par['trtFlag_seg'] @@ -81,7 +82,7 @@ class OneModel: logger.error("模型加载异常:{}, requestId:{}", format_exc(), requestId) raise ServiceException(ExceptionType.MODEL_LOADING_EXCEPTION.value[0], ExceptionType.MODEL_LOADING_EXCEPTION.value[1]) - +# 纯分类模型 class cityManagementModel: __slots__ = "model_conf" @@ -104,7 +105,6 @@ class cityManagementModel: logger.error("模型加载异常:{}, requestId:{}", format_exc(), requestId) raise ServiceException(ExceptionType.MODEL_LOADING_EXCEPTION.value[0], ExceptionType.MODEL_LOADING_EXCEPTION.value[1]) - def detSeg_demo2(args): model_conf, frame, request_id = args modelList, postProcess = model_conf[1]['modelList'], model_conf[1]['postProcess'] @@ -119,8 +119,7 @@ def detSeg_demo2(args): logger.error("算法模型分析异常:{}, requestId:{}", format_exc(), request_id) raise ServiceException(ExceptionType.MODEL_ANALYSE_EXCEPTION.value[0], ExceptionType.MODEL_ANALYSE_EXCEPTION.value[1]) - - + def model_process(args): model_conf, frame, request_id = args model_param, names, rainbows = model_conf[1], model_conf[3], model_conf[4] @@ -307,7 +306,6 @@ def obb_process(args): raise ServiceException(ExceptionType.MODEL_ANALYSE_EXCEPTION.value[0], ExceptionType.MODEL_ANALYSE_EXCEPTION.value[1]) - # 车牌分割模型、健康码、行程码分割模型 class IMModel: __slots__ = "model_conf" @@ -321,8 +319,8 @@ class IMModel: if ModelType.PLATE_MODEL == modeType: img_type = 'plate' par = { - 'code': {'weights': '../AIlib2/weights/conf/jkm/health_yolov5s_v3.jit', 'img_type': 'code', 'nc': 10}, - 'plate': {'weights': '../AIlib2/weights/conf/jkm/plate_yolov5s_v3.jit', 'img_type': 'plate', 'nc': 1}, + 'code': {'weights': '../weights/pth/AIlib2/jkm/health_yolov5s_v3.jit', 'img_type': 'code', 'nc': 10}, + 'plate': {'weights': '../weights/pth/AIlib2/jkm/plate_yolov5s_v3.jit', 'img_type': 'plate', 'nc': 1}, 'conf_thres': 0.4, 'iou_thres': 0.45, 'device': 'cuda:%s' % device, @@ -331,7 +329,7 @@ class IMModel: new_device = torch.device(par['device']) model = torch.jit.load(par[img_type]['weights']) - logger.info("########################加载 ../AIlib2/weights/conf/jkm/plate_yolov5s_v3.jit 成功 ########################, requestId:{}", + logger.info("########################加载 jit 模型成功 成功 ########################, requestId:{}", requestId) self.model_conf = (modeType, allowedList, new_device, model, par, img_type) except Exception: @@ -339,7 +337,6 @@ class IMModel: raise ServiceException(ExceptionType.MODEL_LOADING_EXCEPTION.value[0], ExceptionType.MODEL_LOADING_EXCEPTION.value[1]) - def im_process(args): frame, device, model, par, img_type, requestId = args try: @@ -639,6 +636,39 @@ MODEL_CONFIG = { lambda x, y, z: one_label(x, y, z), lambda x: detSeg_demo2(x) ), - - + # 加载高速公路抛撒物模型 + ModelType.TRAFFIC_SPILL_MODEL.value[1]: ( + lambda x, y, r, t, z, h: OneModel(x, y, r, ModelType.TRAFFIC_SPILL_MODEL, t, z, h), + ModelType.TRAFFIC_SPILL_MODEL, + lambda x, y, z: one_label(x, y, z), + lambda x: model_process(x) + ), + # 加载高速公路危化品模型 + ModelType.TRAFFIC_CTHC_MODEL.value[1]: ( + lambda x, y, r, t, z, h: OneModel(x, y, r, ModelType.TRAFFIC_CTHC_MODEL, t, z, h), + ModelType.TRAFFIC_CTHC_MODEL, + lambda x, y, z: one_label(x, y, z), + lambda x: model_process(x) + ), + # 加载光伏板异常检测模型 + ModelType.TRAFFIC_PANNEL_MODEL.value[1]: ( + lambda x, y, r, t, z, h: cityManagementModel(x, y, r, ModelType.TRAFFIC_PANNEL_MODEL, t, z, h), + ModelType.TRAFFIC_PANNEL_MODEL, + lambda x, y, z: one_label(x, y, z), + lambda x: detSeg_demo2(x) + ), + # 加载红外行人检测模型 + ModelType.CITY_INFRAREDPERSON_MODEL.value[1]: ( + lambda x, y, r, t, z, h: cityManagementModel(x, y, r, ModelType.CITY_INFRAREDPERSON_MODEL, t, z, h), + ModelType.CITY_INFRAREDPERSON_MODEL, + lambda x, y, z: one_label(x, y, z), + lambda x: detSeg_demo2(x) + ), + # 加载夜间烟火检测模型 + ModelType.CITY_NIGHTFIRESMOKE_MODEL.value[1]: ( + lambda x, y, r, t, z, h: cityManagementModel(x, y, r, ModelType.CITY_NIGHTFIRESMOKE_MODEL, t, z, h), + ModelType.CITY_NIGHTFIRESMOKE_MODEL, + lambda x, y, z: one_label(x, y, z), + lambda x: detSeg_demo2(x) + ), } diff --git a/util/__pycache__/AliyunSdk.cpython-38.pyc b/util/__pycache__/AliyunSdk.cpython-38.pyc deleted file mode 100644 index ff407b8..0000000 Binary files a/util/__pycache__/AliyunSdk.cpython-38.pyc and /dev/null differ diff --git a/util/__pycache__/CpuUtils.cpython-38.pyc b/util/__pycache__/CpuUtils.cpython-38.pyc deleted file mode 100644 index 8380bad..0000000 Binary files a/util/__pycache__/CpuUtils.cpython-38.pyc and /dev/null differ diff --git a/util/__pycache__/Cv2Utils.cpython-38.pyc b/util/__pycache__/Cv2Utils.cpython-38.pyc deleted file mode 100644 index e879d50..0000000 Binary files a/util/__pycache__/Cv2Utils.cpython-38.pyc and /dev/null differ diff --git a/util/__pycache__/FileUtils.cpython-38.pyc b/util/__pycache__/FileUtils.cpython-38.pyc deleted file mode 100644 index 0fe7fa8..0000000 Binary files a/util/__pycache__/FileUtils.cpython-38.pyc and /dev/null differ diff --git a/util/__pycache__/GPUtils.cpython-38.pyc b/util/__pycache__/GPUtils.cpython-38.pyc deleted file mode 100644 index 46b5a42..0000000 Binary files a/util/__pycache__/GPUtils.cpython-38.pyc and /dev/null differ diff --git a/util/__pycache__/ImageUtils.cpython-310.pyc b/util/__pycache__/ImageUtils.cpython-310.pyc deleted file mode 100644 index 74f8546..0000000 Binary files a/util/__pycache__/ImageUtils.cpython-310.pyc and /dev/null differ diff --git a/util/__pycache__/ImageUtils.cpython-38.pyc b/util/__pycache__/ImageUtils.cpython-38.pyc deleted file mode 100644 index 44a32f2..0000000 Binary files a/util/__pycache__/ImageUtils.cpython-38.pyc and /dev/null differ diff --git a/util/__pycache__/ImgBaiduSdk.cpython-38.pyc b/util/__pycache__/ImgBaiduSdk.cpython-38.pyc deleted file mode 100644 index 99f5be9..0000000 Binary files a/util/__pycache__/ImgBaiduSdk.cpython-38.pyc and /dev/null differ diff --git a/util/__pycache__/KafkaUtils.cpython-38.pyc b/util/__pycache__/KafkaUtils.cpython-38.pyc deleted file mode 100644 index 96daf51..0000000 Binary files a/util/__pycache__/KafkaUtils.cpython-38.pyc and /dev/null differ diff --git a/util/__pycache__/LocationUtils.cpython-38.pyc b/util/__pycache__/LocationUtils.cpython-38.pyc deleted file mode 100644 index e1d16ee..0000000 Binary files a/util/__pycache__/LocationUtils.cpython-38.pyc and /dev/null differ diff --git a/util/__pycache__/LogUtils.cpython-38.pyc b/util/__pycache__/LogUtils.cpython-38.pyc deleted file mode 100644 index d6eeb6e..0000000 Binary files a/util/__pycache__/LogUtils.cpython-38.pyc and /dev/null differ diff --git a/util/__pycache__/MinioSdk.cpython-38.pyc b/util/__pycache__/MinioSdk.cpython-38.pyc deleted file mode 100644 index 1d3dd41..0000000 Binary files a/util/__pycache__/MinioSdk.cpython-38.pyc and /dev/null differ diff --git a/util/__pycache__/ModelUtils.cpython-38.pyc b/util/__pycache__/ModelUtils.cpython-38.pyc deleted file mode 100644 index 2381de6..0000000 Binary files a/util/__pycache__/ModelUtils.cpython-38.pyc and /dev/null differ diff --git a/util/__pycache__/ModelUtils2.cpython-38.pyc b/util/__pycache__/ModelUtils2.cpython-38.pyc deleted file mode 100644 index 29b6a09..0000000 Binary files a/util/__pycache__/ModelUtils2.cpython-38.pyc and /dev/null differ diff --git a/util/__pycache__/OcrBaiduSdk.cpython-38.pyc b/util/__pycache__/OcrBaiduSdk.cpython-38.pyc deleted file mode 100644 index e8af1ec..0000000 Binary files a/util/__pycache__/OcrBaiduSdk.cpython-38.pyc and /dev/null differ diff --git a/util/__pycache__/PlotsUtils.cpython-38.pyc b/util/__pycache__/PlotsUtils.cpython-38.pyc deleted file mode 100644 index db14438..0000000 Binary files a/util/__pycache__/PlotsUtils.cpython-38.pyc and /dev/null differ diff --git a/util/__pycache__/PushStreamUtils.cpython-38.pyc b/util/__pycache__/PushStreamUtils.cpython-38.pyc deleted file mode 100644 index 1d96aec..0000000 Binary files a/util/__pycache__/PushStreamUtils.cpython-38.pyc and /dev/null differ diff --git a/util/__pycache__/QueUtil.cpython-38.pyc b/util/__pycache__/QueUtil.cpython-38.pyc deleted file mode 100644 index dec6224..0000000 Binary files a/util/__pycache__/QueUtil.cpython-38.pyc and /dev/null differ diff --git a/util/__pycache__/RWUtils.cpython-38.pyc b/util/__pycache__/RWUtils.cpython-38.pyc deleted file mode 100644 index 28455a7..0000000 Binary files a/util/__pycache__/RWUtils.cpython-38.pyc and /dev/null differ diff --git a/util/__pycache__/TimeUtils.cpython-38.pyc b/util/__pycache__/TimeUtils.cpython-38.pyc deleted file mode 100644 index 1a50bb9..0000000 Binary files a/util/__pycache__/TimeUtils.cpython-38.pyc and /dev/null differ diff --git a/util/__pycache__/TorchUtils.cpython-38.pyc b/util/__pycache__/TorchUtils.cpython-38.pyc deleted file mode 100644 index fedd5ab..0000000 Binary files a/util/__pycache__/TorchUtils.cpython-38.pyc and /dev/null differ diff --git a/util/__pycache__/__init__.cpython-310.pyc b/util/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 20efd09..0000000 Binary files a/util/__pycache__/__init__.cpython-310.pyc and /dev/null differ diff --git a/util/__pycache__/__init__.cpython-38.pyc b/util/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index bf6d77c..0000000 Binary files a/util/__pycache__/__init__.cpython-38.pyc and /dev/null differ diff --git a/vodsdk/__init__.py b/vodsdk/__init__.py index e69de29..7bd766b 100644 --- a/vodsdk/__init__.py +++ b/vodsdk/__init__.py @@ -0,0 +1,3 @@ +__version__ = '1.3.1' + + diff --git a/vodsdk/__pycache__/AliyunVodUploader.cpython-38.pyc b/vodsdk/__pycache__/AliyunVodUploader.cpython-38.pyc deleted file mode 100644 index 167880d..0000000 Binary files a/vodsdk/__pycache__/AliyunVodUploader.cpython-38.pyc and /dev/null differ diff --git a/vodsdk/__pycache__/AliyunVodUtils.cpython-38.pyc b/vodsdk/__pycache__/AliyunVodUtils.cpython-38.pyc deleted file mode 100644 index b78b4d4..0000000 Binary files a/vodsdk/__pycache__/AliyunVodUtils.cpython-38.pyc and /dev/null differ diff --git a/vodsdk/__pycache__/UploadVideoRequest.cpython-38.pyc b/vodsdk/__pycache__/UploadVideoRequest.cpython-38.pyc deleted file mode 100644 index 2cdc099..0000000 Binary files a/vodsdk/__pycache__/UploadVideoRequest.cpython-38.pyc and /dev/null differ diff --git a/vodsdk/__pycache__/__init__.cpython-38.pyc b/vodsdk/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index c7b9f43..0000000 Binary files a/vodsdk/__pycache__/__init__.cpython-38.pyc and /dev/null differ diff --git a/vodsdk/__pycache__/dsp_master.cpython-38.pyc b/vodsdk/__pycache__/dsp_master.cpython-38.pyc deleted file mode 100644 index ae39e3b..0000000 Binary files a/vodsdk/__pycache__/dsp_master.cpython-38.pyc and /dev/null differ