Browse Source

更新代码,加入摔倒逻辑

xtj 2 months ago
parent
commit
69c5f55ff6
1 changed files with 405 additions and 1669 deletions
  1. 405 1669
      detectopencvmut0113auta.py

+ 405 - 1669
detectopencvmut0113auta.py

@@ -1,2154 +1,890 @@
 # YOLOv5 �� by Ultralytics, AGPL-3.0 license
-
 """
-
 Run YOLOv5 detection inference on images, videos, directories, globs, YouTube, webcam, streams, etc.
-
-
-
 Usage - sources:
-
     $ python detect.py --weights yolov5s.pt --source 0                               # webcam
-
                                                      img.jpg                         # image
-
                                                      vid.mp4                         # video
-
                                                      screen                          # screenshot
-
                                                      path/                           # directory
-
                                                      list.txt                        # list of images
-
                                                      list.streams                    # list of streams
-
                                                      'path/*.jpg'                    # glob
-
                                                      'https://youtu.be/Zgi9g1ksQHc'  # YouTube
-
                                                      'rtsp://example.com/media.mp4'  # RTSP, RTMP, HTTP stream
-
-
-
 Usage - formats:
-
     $ python detect.py --weights yolov5s.pt                 # PyTorch
-
                                  yolov5s.torchscript        # TorchScript
-
                                  yolov5s.onnx               # ONNX Runtime or OpenCV DNN with --dnn
-
                                  yolov5s_openvino_model     # OpenVINO
-
                                  yolov5s.engine             # TensorRT
-
                                  yolov5s.mlmodel            # CoreML (macOS-only)
-
                                  yolov5s_saved_model        # TensorFlow SavedModel
-
                                  yolov5s.pb                 # TensorFlow GraphDef
-
                                  yolov5s.tflite             # TensorFlow Lite
-
                                  yolov5s_edgetpu.tflite     # TensorFlow Edge TPU
-
                                  yolov5s_paddle_model       # PaddlePaddle
-
 """
-
 import matplotlib.path as mat
-
 import requests
-
 import argparse
-
 import os
-
 import platform
-
 import sqlite3
-
 import sys
-
 import threading
-
 import time
-
 from pathlib import Path
-
 import signal
-
 import torch
-
 from concurrent.futures import ThreadPoolExecutor
-
 from concurrent.futures import ProcessPoolExecutor
-
-from multiprocessing import Process,Manager,Value
-
+from multiprocessing import Process, Manager, Value
 from multiprocessing import Queue
-
 from multiprocessing import set_start_method
-
 import multiprocessing
-
 import multiprocessing as mp
-
 import numpy as np
-
 from torchvision import transforms
-
 FILE = Path(__file__).resolve()
-
 ROOT = FILE.parents[0]  # YOLOv5 root directory
-
 if str(ROOT) not in sys.path:
-
     sys.path.append(str(ROOT))  # add ROOT to PATH
-
 ROOT = Path(os.path.relpath(ROOT, Path.cwd()))  # relative
-
-
-
 from models.common import DetectMultiBackend
-
-from utils.dataloaders import IMG_FORMATS, VID_FORMATS, LoadImages,LoadStreams, LoadStreamsSQLNEWN,LoadStreamsSQL,LoadStreamsSQLNRERT,LoadStreamsVEight,LoadStreamsSQLT,LoadStreamsSQLTN
-
+from utils.dataloaders import IMG_FORMATS, VID_FORMATS, LoadImages, LoadStreams, LoadStreamsSQLNEWN, LoadStreamsSQL, \
+    LoadStreamsSQLNRERT, LoadStreamsVEight, LoadStreamsSQLT, LoadStreamsSQLTN
 from utils.general import (LOGGER, Profile, check_file, check_img_size, check_imshow, check_requirements, colorstr, cv2,
-
-                           increment_path, non_max_suppression, print_args, scale_boxes, strip_optimizer, xyxy2xywh,strtolst,apply_classifier1,apply_classifieruniform,compute_IOU,task,apply_classifierarm)
-
+                           increment_path, non_max_suppression, print_args, scale_boxes, strip_optimizer, xyxy2xywh,
+                           strtolst, apply_classifier1, apply_classifieruniform, compute_IOU, task, apply_classifierarm)
 from utils.plots import Annotator, colors, save_one_box
-
 from utils.torch_utils import select_device, smart_inference_mode
-
-from utils.renwu import newHelmet,newUniform,Fall,Personcount,Arm,Bag,Cross,Extinguisher,Persontre,Bag,Danager
-
-#from testpool import func1,TestA
-
-
-
+from utils.renwu import newHelmet, newUniform, Fall, Personcount, Arm, Bag, Cross, Extinguisher, Persontre, Bag, Danager
+# from testpool import func1,TestA
 # def my_handler(signum, frame):
-
 #     exit(0)
-
-#url = "http://36.7.84.146:18802/ai-service/open/api/operate/upload"
-
+# url = "http://36.7.84.146:18802/ai-service/open/api/operate/upload"
 url = "http://172.19.152.231/open/api/operate/upload"
-
 urlrtsp = "http://172.19.152.231/open/api/operate/previewURLs"
-
 urlt = "http://172.19.152.231/open/api/operate/taskList"
-
 urla = "http://172.19.152.231/open/api/operate/algorithmList"
-
 urlele = "http://172.19.152.231/open/api/operate/fence"
-
 urltime = "http://172.19.152.231/open/api/operate/getTime"
-
 urlperson = "http://172.19.152.231/open/api/operate/getPersonLimitNum"
-
-#modellabeldir = {'0':'head','8':'person','10':'other','14':'smoke','16':'fire','21':'cross','25':'fall','29':'car','30':'liquid','31':'pressure','32':'sleep','33':'conveyor','34':'personcount','35':'gloves','36':'sit','37':'other','38':'person','98':'face','51':'person'}
-
-#algmodel = {'helmet': '0','danager': '8','uniform': '10','smoke': '14','fire': '16','cross': '21','fall': '25','occupancy': '29','liquid': '30','pressure': '31','sleep': '32','conveyor': '33','personcount': '34','gloves': '35','sit': '36','other': '37','duty': '38','face': '98','run': '51'}
-
-modelnamedir = {'0':'helmet','8':'danager','10':'uniform','14':'smoke','16':'fire','21':'cross','25':'fall','29':'occupancy','30':'liquid','31':'pressure','32':'sleep','34':'personcount','37':'other','38':'duty','98':'face','55':'oil','52':'jingdian','53':'rope','54':'personcar','39':'inspection','11':'reflective','12':'phone','66':'extinguisher','67':'tizi','68':'menjin','35':'arm','36':'persontre','33':'bag'}
-
-modellabeldir = {'0':'head,person','8':'person','10':'black_work_clothes,blue_work_clothes,person','14':'smoke','16':'fire','21':'cross','25':'fall','29':'car','30':'liquid','31':'pressure','32':'sleep','34':'personcount','37':'other','38':'person','98':'face','55':'oil','52':'person,hand,ball','53':'rope','54':'person','39':'person','11':'blue,greent,whitet,bluecoat,whitebarcoat,graycoat,baoan,chenyi,other','12':'phone','66':'extinguisher','67':'person,tizi','68':'person','35':'barearm,arm','36':'person,foot,cart,bag,box','33':'handbox,handbag'}
-
+# modellabeldir = {'0':'head','8':'person','10':'other','14':'smoke','16':'fire','21':'cross','25':'fall','29':'car','30':'liquid','31':'pressure','32':'sleep','33':'conveyor','34':'personcount','35':'gloves','36':'sit','37':'other','38':'person','98':'face','51':'person'}
+# algmodel = {'helmet': '0','danager': '8','uniform': '10','smoke': '14','fire': '16','cross': '21','fall': '25','occupancy': '29','liquid': '30','pressure': '31','sleep': '32','conveyor': '33','personcount': '34','gloves': '35','sit': '36','other': '37','duty': '38','face': '98','run': '51'}
+modelnamedir = {'0': 'helmet', '8': 'danager', '10': 'uniform', '14': 'smoke', '16': 'fire', '21': 'cross',
+                '25': 'fall', '29': 'occupancy', '30': 'liquid', '31': 'pressure', '32': 'sleep', '34': 'personcount',
+                '37': 'other', '38': 'duty', '98': 'face', '55': 'oil', '52': 'jingdian', '53': 'rope',
+                '54': 'personcar', '39': 'inspection', '11': 'reflective', '12': 'phone', '66': 'extinguisher',
+                '67': 'tizi', '68': 'menjin', '35': 'arm', '36': 'persontre', '33': 'bag'}
+modellabeldir = {'0': 'head,person', '8': 'person', '10': 'black_work_clothes,blue_work_clothes,person', '14': 'smoke',
+                 '16': 'fire', '21': 'cross', '25': 'fall', '29': 'car', '30': 'liquid', '31': 'pressure',
+                 '32': 'sleep', '34': 'personcount', '37': 'other', '38': 'person', '98': 'face', '55': 'oil',
+                 '52': 'person,hand,ball', '53': 'rope', '54': 'person', '39': 'person',
+                 '11': 'blue,greent,whitet,bluecoat,whitebarcoat,graycoat,baoan,chenyi,other', '12': 'phone',
+                 '66': 'extinguisher', '67': 'person,tizi', '68': 'person', '35': 'barearm,arm',
+                 '36': 'person,foot,cart,bag,box', '33': 'handbox,handbag'}
 modelalgdir = {}
-
 personcountdir = {}
-
-for key,value in modelnamedir.items():
-
+for key, value in modelnamedir.items():
     modelalgdir[value] = key
-
-taskmap = {'helmet':newHelmet,'uniform':newUniform,'fall':Fall,'personcount':Personcount,'arm':Arm,'bag':Bag,'cross':Cross,'extinguisher':Extinguisher,'persontre':Persontre,'bag':Bag,'danager':Danager}
-
+taskmap = {'helmet': newHelmet, 'uniform': newUniform, 'fall': Fall, 'personcount': Personcount, 'arm': Arm, 'bag': Bag,
+           'cross': Cross, 'extinguisher': Extinguisher, 'persontre': Persontre, 'bag': Bag, 'danager': Danager}
 mean, std = [0.485, 0.456, 0.406], [0.229, 0.224, 0.225]
-
-test = transforms.Compose([transforms.Resize((224,224)),
-
-        #transforms.CenterCrop(224),
-
-        transforms.ToTensor(),
-
-        transforms.Normalize(mean=mean, std=std)
-
+test = transforms.Compose([transforms.Resize((224, 224)),
+                           # transforms.CenterCrop(224),
+                           transforms.ToTensor(),
+                           transforms.Normalize(mean=mean, std=std)
                            ])
-
-def clapre(modelcla,claimg,clapoint):
-
-    imgten = torch.stack(claimg,dim=0)
-
-    clapoint = torch.stack(clapoint,dim=0)
-
+def clapre(modelcla, claimg, clapoint):
+    imgten = torch.stack(claimg, dim=0)
+    clapoint = torch.stack(clapoint, dim=0)
     imgten = imgten.to(0)
-
     result = modelcla(imgten)
-
     result = F.softmax(result)
-
     print(result)
-
     index = result.argmax(1)
-
     index = index.cpu().numpy()
-
-    index = np.argwhere(index<5)
-
+    index = np.argwhere(index < 5)
     index = index.reshape(-1)
-
     print(index)
-
-    if len(index)>0:
-
+    if len(index) > 0:
         print(clapoint[index])
-
         return clapoint[index]
-
     else:
-
         return None
-
-
-
 class YoloOpt:
-
-    def __init__(self, weights=ROOT / 'yolov5s.pt',source=ROOT / 'data/images',data=ROOT / 'data/coco128.yaml',
-
-                 imgsz=(640,640),
-
+    def __init__(self, weights=ROOT / 'yolov5s.pt', source=ROOT / 'data/images', data=ROOT / 'data/coco128.yaml',
+                 imgsz=(640, 640),
                  conf_thres=0.25,
-
                  iou_thres=0.45,
-
                  max_det=1000,
-
                  device='',
-
                  view_img=False,
-
                  save_txt=False,
-
                  save_conf=False,
-
                  save_crop=False,
-
                  nosave=True,
-
                  classes=None,
-
                  agnostic_nms=False,
-
                  augment=False,
-
                  visualize=False,
-
                  update=False,
-
                  project=ROOT / 'runs/detect',
-
                  name='exp',
-
                  exist_ok=False,
-
                  line_thickness=1,
-
                  hide_labels=False,
-
                  hide_conf=False,
-
                  half=False,
-
                  dnn=False,
-
                  vid_stride=10,
-
                  classify=False,
-
                  v8=False):
-
-
-
         self.weights = weights  # 权重文件地址
-
         self.source = source  # 待识别的图像
-
         self.data = data
-
         if imgsz is None:
-
             self.imgsz = (640, 640)
-
         self.imgsz = imgsz  # 输入图片的大小,默认 (640,640)
-
         self.conf_thres = conf_thres  # object置信度阈值 默认0.25  用在nms中
-
         self.iou_thres = iou_thres  # 做nms的iou阈值 默认0.45   用在nms中
-
         self.device = device  # 执行代码的设备,由于项目只能用 CPU,这里只封装了 CPU 的方法
-
         self.view_img = view_img  # 是否展示预测之后的图片或视频 默认False
-
         self.classes = classes  # 只保留一部分的类别,默认是全部保留
-
         self.agnostic_nms = agnostic_nms  # 进行NMS去除不同类别之间的框, 默认False
-
         self.augment = augment  # augmented inference TTA测试时增强/多尺度预测,可以提分
-
         self.update = update  # 如果为True,则对所有模型进行strip_optimizer操作,去除pt文件中的优化器等信息,默认为False
-
         self.exist_ok = exist_ok  # 如果为True,则对所有模型进行strip_optimizer操作,去除pt文件中的优化器等信息,默认为False
-
         self.project = project  # 保存测试日志的参数,本程序没有用到
-
         self.name = name  # 每次实验的名称,本程序也没有用到
-
         self.max_det = max_det
-
         self.save_txt = save_txt
-
-        self.save_conf= save_conf
-
-        self.save_crop= save_crop
-
+        self.save_conf = save_conf
+        self.save_crop = save_crop
         self.nosave = nosave
-
         self.visualize = visualize
-
         self.line_thickness = line_thickness
-
         self.hide_labels = hide_labels
-
         self.hide_conf = hide_conf
-
         self.half = half
-
         self.dnn = dnn
-
         self.vid_stride = vid_stride
-
         self.classify = classify
-
         self.v8 = v8
-
 class Detect:
-
-    def __init__(self, weights = ROOT / 'yolov5s.pt' , imgsz=(640,640),source="changshusql1103.db",classes=None,device=None,classify=False,conf_thres=0.25,v8=False):
-
+    def __init__(self, weights=ROOT / 'yolov5s.pt', imgsz=(640, 640), source="changshusql1103.db", classes=None,
+                 device=None, classify=False, conf_thres=0.25, v8=False):
         print(f'detectweights = {weights}')
-
         if v8:
-
             from ultralytics.nn.autobackend import AutoBackend
-
             from ultralytics.utils.ops import non_max_suppression
-
         else:
-
             from utils.general import non_max_suppression
-
-        self.opt = YoloOpt(weights=weights, imgsz=imgsz,source=source,classes=classes,device=device,classify=classify,conf_thres=conf_thres,v8=v8)
-
+        self.opt = YoloOpt(weights=weights, imgsz=imgsz, source=source, classes=classes, device=device,
+                           classify=classify, conf_thres=conf_thres, v8=v8)
         self.source = str(self.opt.source)
-
         self.save_img = not self.opt.nosave and not source.endswith('.txt')  # save inference images
-
         is_file = Path(self.source).suffix[1:] in (IMG_FORMATS + VID_FORMATS)
-
         is_url = self.source.lower().startswith(('rtsp://', 'rtmp://', 'http://', 'https://'))
-
         self.webcam = self.source.isnumeric() or source.endswith('.db') or (is_url and not is_file)
-
         screenshot = self.source.lower().startswith('screen')
-
         if is_url and is_file:
-
             self.source = check_file(self.source)  # download
-
-        self.save_dir = increment_path(Path(self.opt.project) / self.opt.name, exist_ok=self.opt.exist_ok)  # increment run
-
-        #self.save_dir = self.save_dir / Path(self.opt.weights).stem
-
-        #self.save_dir.mkdir(parents=True, exist_ok=True)
-
-        (self.save_dir / 'labels' if self.opt.save_txt else self.save_dir).mkdir(parents=True, exist_ok=True)  # make dir
-
+        self.save_dir = increment_path(Path(self.opt.project) / self.opt.name,
+                                       exist_ok=self.opt.exist_ok)  # increment run
+        # self.save_dir = self.save_dir / Path(self.opt.weights).stem
+        # self.save_dir.mkdir(parents=True, exist_ok=True)
+        (self.save_dir / 'labels' if self.opt.save_txt else self.save_dir).mkdir(parents=True,
+                                                                                 exist_ok=True)  # make dir
         print(f'device = {self.opt.device}')
-
         device = select_device(self.opt.device)
-
         if v8:
-
-            self.model = AutoBackend(self.opt.weights, device=device, dnn=self.opt.dnn, data=self.opt.data, fp16=self.opt.half)
-
+            self.model = AutoBackend(self.opt.weights, device=device, dnn=self.opt.dnn, data=self.opt.data,
+                                     fp16=self.opt.half)
             if Path(weights).stem in ['arm', 'uniform']:
-
                 if Path(weights).stem == 'arm':
-
-                    self.personmodel = AutoBackend('yolov8m.pt', device=device, dnn=self.opt.dnn, data=self.opt.data, fp16=self.opt.half)
-
+                    self.personmodel = AutoBackend('yolov8m.pt', device=device, dnn=self.opt.dnn, data=self.opt.data,
+                                                   fp16=self.opt.half)
                 elif Path(weights).stem == 'uniform':
-
-                    self.personmodel = AutoBackend('yolo11m.pt', device=device, dnn=self.opt.dnn, data=self.opt.data, fp16=self.opt.half)
-
+                    self.personmodel = AutoBackend('yolo11m.pt', device=device, dnn=self.opt.dnn, data=self.opt.data,
+                                                   fp16=self.opt.half)
         else:
-
-            self.model = DetectMultiBackend(self.opt.weights, device=device, dnn=self.opt.dnn, data=self.opt.data, fp16=self.opt.half)
-
-            if Path(weights).stem in ['helmet','arm']:
-
-                self.personmodel = DetectMultiBackend('personcount.pt', device=device, dnn=self.opt.dnn, data=self.opt.data, fp16=self.opt.half)        
-
+            self.model = DetectMultiBackend(self.opt.weights, device=device, dnn=self.opt.dnn, data=self.opt.data,
+                                            fp16=self.opt.half)
+            if Path(weights).stem in ['helmet', 'arm']:
+                self.personmodel = DetectMultiBackend('personcount.pt', device=device, dnn=self.opt.dnn,
+                                                      data=self.opt.data, fp16=self.opt.half)
         self.stride, self.names, self.pt = self.model.stride, self.model.names, self.model.pt
-
         self.classify = classify
-
         if self.classify:
-
-            #if Path(weights).stem =='uniform':
-
-            #    self.classifier_model = AutoBackend(f"{Path(weights).stem}cls.pt",device=device, dnn=self.opt.dnn, data=self.opt.data, fp16=self.opt.half)
-
-            #else:
             if Path(weights).stem != "arm":
                 classifier_model = torch.load(f"{Path(weights).stem}cls.pt")
-
                 self.classifier_model = classifier_model.to(device)
-
                 self.classifier_model.eval()
             else:
-                self.classifier_model = AutoBackend(f"{Path(weights).stem}cls.pt",device=device, dnn=self.opt.dnn, data=self.opt.data, fp16=self.opt.half)
-
+                self.classifier_model = AutoBackend(f"{Path(weights).stem}cls.pt", device=device, dnn=self.opt.dnn,
+                                                    data=self.opt.data, fp16=self.opt.half)
         self.imgsz = check_img_size(self.opt.imgsz, s=self.stride)
-
-        self.model.warmup(imgsz=(1 , 3, *self.imgsz))
-
+        self.model.warmup(imgsz=(1, 3, *self.imgsz))
         self.readpoint()
-
         print(self.imgsz)
-
         self.updatetime = time.time()
-
         self.updatemtime = time.time()
-
         self.filetime = os.path.getmtime(self.opt.weights)
-
         self.taskname = taskmap[Path(self.opt.weights).stem]()
-
-        bs = 1  # batch_size
-
-        if self.webcam:
-
-            #self.view_img = check_imshow(warn=True)
-
-            self.view_img = False
-
-            # dataset = LoadStreams(source, img_size=imgsz, stride=stride, auto=pt, vid_stride=vid_stride)
-
-            # bs = len(dataset)
-
-        elif screenshot:
-
-            dataset = LoadScreenshots(self.source, img_size=self.imgsz, stride=self.stride, auto=self.pt)
-
-        else:
-
-            dataset = LoadImages(self.source, img_size=self.imgsz, stride=self.stride, auto=self.pt, vid_stride=self.opt.vid_stride)
-
-        t1 = threading.Thread(target=self.load,daemon=True)
-
+        t1 = threading.Thread(target=self.load, daemon=True)
         t1.start()
 
     @smart_inference_mode()
+    def infer(self, queue, runmodel):
+        pretime = time.time()
+        seen, windows, self.dt = 0, [], (Profile(), Profile(), Profile())
+        #
+        # print ("数据库打开成功")
+        while True:
+            if time.localtime().tm_hour not in range(7, 20):
+                time.sleep(30)
+                continue
+            # print('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')
+            if time.time() - pretime > 300:
+                ret = self.readpoint()
+                pretime = time.time()
+                if not ret:
+                    print(f'{Path(self.opt.weights).stem} {runmodel}')
+                    runmodel.pop(Path(self.opt.weights).stem)
+                    print(f'{Path(self.opt.weights).stem} {runmodel}')
+                    break
+            print(f'queuelen = {len(queue)}')
+            for que in queue:
+                if que.qsize() == 0:
+                    print('queuezero')
+                    time.sleep(0.01)
+                if que.qsize() > 0:
+                    # if time.time()-pretime>300:
+                    #    ret = self.readpoint()
+                    #    pretime = time.time()
+                    #    if not ret:
+                    #        print(f'{Path(self.opt.weights).stem} {runmodel}')
+                    #        runmodel.pop(Path(self.opt.weights).stem)
+                    #        print(f'{Path(self.opt.weights).stem} {runmodel}')
+                    #        break
+                    setframe = que.get()
+                    # print('bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb')
+                    # if setframe is not None
+                    path, im, im0s, vid_cap, s, videotime, channels = setframe
+                    algchannel = list(self.dirmodel.keys())
+                    print(algchannel)
+                    print(path)
+                    algchannel = np.array(algchannel)
+                    channelsnp = np.array(channels)
+                    algindex = np.where(np.in1d(channelsnp, algchannel))[0]
+                    algindex = list(algindex)
+                    path = np.array(path)
+                    path = path[algindex]
+                    path = path.tolist()
+                    channels = np.array(channels)
+                    channels = channels[algindex]
+                    channels = channels.tolist()
+                    # print(algindex)
+                    if len(algindex) == 0:
+                        continue
+                    # for ia in algindex:
+                    #    print(type(im0s[ia]))
+                    #    print(im0s[ia].shape)
+                    im = im[algindex]
+                    # for ia in algindex:
+                    #    print(type(ia))
+                    try:
+                        im0s = np.asarray(im0s)
+                    except Exception:
+                        im0s = np.asarray(im0s, dtype=object)
+                    print(im0s.shape)
+                    im0s = im0s[algindex]
+                    # im0s = im0s.tolist()
+                    print(f'algindex = {algindex}')
+                    print(f'im0s ={im0s[0].shape}')
+                    videotime = np.array(videotime)
+                    videotime = videotime[algindex]
+                    videotime = tuple(map(tuple, videotime))
+
+                    with self.dt[0]:
+                        im = torch.from_numpy(im).to(self.model.device)
+                        im = im.half() if self.model.fp16 else im.float()  # uint8 to fp16/32
+                        im /= 255  # 0 - 255 to 0.0 - 1.0
+                        if len(im.shape) == 3:
+                            im = im[None]  # expand for batch dim
+                    # Inference
+                    with self.dt[1]:
+                        visualize = increment_path(self.save_dir / Path(path).stem,
+                                                   mkdir=True) if self.opt.visualize else False
+                        # print('error')
+                        # print(self.model)
+                        pred = self.model(im, augment=self.opt.augment, visualize=visualize)
+                    self.postprocess(pred, path, im0s, im, s, videotime, channels)
 
-    def infer(self,queue,runmodel):
-
-            pretime = time.time()
-
-            seen, windows, self.dt = 0, [], (Profile(), Profile(), Profile())
-
-            #
-
-            # print ("数据库打开成功")
-
-            while True:
-
-                if time.localtime().tm_hour not in range(7,20):
-
-                    time.sleep(30)
-
-                    continue
-
-                #print('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')
-
-                if time.time()-pretime>300:
-
-                    ret = self.readpoint()
-
-                    pretime = time.time()
-
-                    if not ret:
-
-                        print(f'{Path(self.opt.weights).stem} {runmodel}')
-
-                        runmodel.pop(Path(self.opt.weights).stem)
-
-                        print(f'{Path(self.opt.weights).stem} {runmodel}')
-
-                        break
-
-                print(f'queuelen = {len(queue)}')
-
-                for que in queue:
-
-                    if que.qsize() == 0:
-
-                        print('queuezero')
-
-                        time.sleep(0.01)
-
-                    if que.qsize() > 0:
-
-                        #if time.time()-pretime>300:
-
-                        #    ret = self.readpoint()
-
-                        #    pretime = time.time()
-
-                        #    if not ret:
-
-                        #        print(f'{Path(self.opt.weights).stem} {runmodel}')
-
-                        #        runmodel.pop(Path(self.opt.weights).stem)
-
-                        #        print(f'{Path(self.opt.weights).stem} {runmodel}')
-
-                        #        break
-
-                        setframe = que.get()
-
-                    # print('bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb')
-
-                    #if setframe is not None
-
-                        path, im, im0s, vid_cap, s, videotime ,channels = setframe
-
-                        algchannel = list(self.dirmodel.keys())
-
-                        print(algchannel)
-
-                        print(path)
-
-                        algchannel = np.array(algchannel)
-
-                        channelsnp = np.array(channels)
-
-                        algindex = np.where(np.in1d(channelsnp, algchannel))[0]
-
-                        algindex = list(algindex)
-
-
-
-                        path = np.array(path)
-
-                        path = path[algindex]
-
-                        path = path.tolist()
-
-                        channels = np.array(channels)
-
-                        channels = channels[algindex]
-
-                        channels = channels.tolist()
-
-                   # print(algindex)
-
-                        if len(algindex)==0:
-
-                            continue
-
-                    #for ia in algindex:
-
-                    #    print(type(im0s[ia]))
-
-                    #    print(im0s[ia].shape)
-
-                        im = im[algindex]
-
-                    #for ia in algindex:
-
-                    #    print(type(ia))
-
-                        try: 
-
-                            im0s = np.asarray(im0s)
-
-                        except Exception:
-
-                            im0s = np.asarray(im0s,dtype=object)
-
-                        print(im0s.shape)
-
-                        im0s = im0s[algindex]
-
-                    # im0s = im0s.tolist()
-
-                        print(f'algindex = {algindex}')
-
-                        print(f'im0s ={im0s[0].shape}')
-
-                        videotime = np.array(videotime)
-
-                        videotime = videotime[algindex]
-
-                        videotime = tuple(map(tuple, videotime))
-
-                    # global tag
-
-                    # if self.contentid[0][3] == 1 :
-
-                    #    dataset.close()
-
-                    #    print('newstreaming=', self.contentid[0][3])
-
-                    #    conn = sqlite3.connect(self.source)
-
-                    #    c = conn.cursor()
-
-                    #    c.execute("UPDATE CHANGESTREAM set streamimg = 0 , addstream=0,delstream=0 where modelname= (?)",(Path(self.opt.weights).stem,))
-
-                    #    print(123)
-
-                    #    conn.commit()
-
-                    #    c.close()
-
-                    #    conn.close()
-
-                    #    print('opencv1')
-
-                    # cv2.destroyAllWindows()
-
-                    #    print('opencv')
-
-                    #    break
-
-                    # else:
-
-                    #    print('nonewstreaming=', self.contentid[0][3])
-
-                        with self.dt[0]:
-
-                            im = torch.from_numpy(im).to(self.model.device)
-
-                            im = im.half() if self.model.fp16 else im.float()  # uint8 to fp16/32
-
-                            im /= 255  # 0 - 255 to 0.0 - 1.0
-
-                            if len(im.shape) == 3:
-
-                                im = im[None]  # expand for batch dim
-
-
-
-                    # Inference
-
-                        with self.dt[1]:
-
-                            visualize = increment_path(self.save_dir / Path(path).stem,
-
-                                                   mkdir=True) if self.opt.visualize else False
-
-                        #print('error')
-
-                        # print(self.model)
-
-                            pred = self.model(im, augment=self.opt.augment, visualize=visualize)
-
-                        self.postprocess(pred, path, im0s, im, s, videotime,channels)
-
-               # print(f'predshape= {')
-
-
-
-            # NMS
-
-                #processlist = []
-
-            #for i in range(3):
-
-            #    process = Process(target=self.postprocess,args=(pred[i::3],path[i::3],im0s[i::3],dataset,im[i::3],s))
-
-            #    process = Process(target=self.preprocess)
-
-            #    process.start()
-
-            #    processlist.append(process)
-
-            #for j in processlist:
-
-            #    j.join()
-
-            #with ProcessPoolExecutor(3) as ppool:
-
-                #for i in range(3):
-
-            #        print('hello')
-
-                    #ppool.submit(self.postprocess,pred[i::3],path[i::3],im0s[i::3],dataset,im[i::3],s)
-
-                    #ppool.submit(func1, '张三', i)
-
-                    #ppool.submit(self.preprocess)
-
-            #self.postprocess(pred, path, im0s, dataset, im, s)
-
-            #process = Process(target=self.postprocess, args=(pred, path, im0s, dataset, im, s))
-
-                #self.postprocess(pred, path, im0s, im, s,videotime)
-
-                #process.start()
-
-    #def preprocess(self):
-
-    #    print('preprocess-----------------------------------------------')
-
-    def postprocess(self, pred, path, im0s,  im, s,videotime,channels):
-
-        
-
-        if time.time()-self.updatemtime>300:
-
-            if self.filetime !=os.path.getmtime(self.opt.weights):
-
+    def postprocess(self, pred, path, im0s, im, s, videotime, channels):
+        if time.time() - self.updatemtime > 300:
+            if self.filetime != os.path.getmtime(self.opt.weights):
                 device = select_device(self.opt.device)
-
                 print("load new load")
-
-                self.model = DetectMultiBackend(self.opt.weights, device=device, dnn=self.opt.dnn, data=self.opt.data, fp16=self.opt.half)
-
+                self.model = DetectMultiBackend(self.opt.weights, device=device, dnn=self.opt.dnn, data=self.opt.data,
+                                                fp16=self.opt.half)
                 self.stride, self.names, self.pt = self.model.stride, self.model.names, self.model.pt
-
                 self.filetime = os.path.getmtime(self.opt.weights)
-
-            #try:
-
-            #if  modelalgdir[Path(self.opt.weights).stem]!='0':
-
+            # try:
+            # if  modelalgdir[Path(self.opt.weights).stem]!='0':
             print(modelalgdir[Path(self.opt.weights).stem])
-
             try:
-
-                rea = requests.post(url=urla,data={'algorithmCode':modelalgdir[Path(self.opt.weights).stem]}).json()['data']
-
+                rea = requests.post(url=urla, data={'algorithmCode': modelalgdir[Path(self.opt.weights).stem]}).json()[
+                    'data']
                 con = rea[0]['confidence']
-
                 self.opt.conf_thres = con
-
             except Exception:
-
                 print('error')
 
-            #else:
-
-            #    self.opt.conf_thres = 0.25
-
-            #except Exception:
-
-                #print('posturlaerror')
-
             self.updatemtime = time.time()
-
-
-
         seen = 0
-
         # dt = (Profile(), Profile(), Profile())
-
         print(f'senn = {seen}')
-
         windows = []
-
         if Path(self.opt.weights).stem:
-
             labelnamelist = []
-
         with self.dt[2]:
-
-            #print(f'cropshape={pred.shape}')
-
+            # print(f'cropshape={pred.shape}')
             if self.opt.v8:
-
                 from ultralytics.utils.ops import non_max_suppression
-
             else:
-
                 from utils.general import non_max_suppression
-
-            pred = non_max_suppression(pred, self.opt.conf_thres, self.opt.iou_thres, self.opt.classes,
-
+            if Path(self.opt.weights).stem == "fall":
+                pred = non_max_suppression(pred, self.opt.conf_thres, self.opt.iou_thres, self.opt.classes,
+                                           self.opt.agnostic_nms, max_det=1)
+            else:
+                pred = non_max_suppression(pred, self.opt.conf_thres, self.opt.iou_thres, self.opt.classes,
                                        self.opt.agnostic_nms, max_det=self.opt.max_det)
-
-
-
             # Second-stage classifier (optional)
-
             # pred = utils.general.apply_classifier(pred, classifier_model, im, im0s)
-
-            if self.classify and Path(self.opt.weights).stem!='persontre':
-
+            if self.classify and Path(self.opt.weights).stem != 'persontre':
                 if Path(self.opt.weights).stem == 'arm':
-
-                    pred = apply_classifierarm(pred,self.classifier_model,im,im0s,Path(self.opt.weights).stem)
-
+                    pred = apply_classifierarm(pred, self.classifier_model, im, im0s, Path(self.opt.weights).stem)
                 else:
-
-                    pred = apply_classifier1(pred,self.classifier_model,im,im0s,Path(self.opt.weights).stem)
-
+                    pred = apply_classifier1(pred, self.classifier_model, im, im0s, Path(self.opt.weights).stem)
             # Process predictions
-
-            #print(f'predshape={pred.shape}')
-
+            # print(f'predshape={pred.shape}')
         for i, det in enumerate(pred):  # per image
-
-            if time.time()-self.updatetime>300:
-
+            if time.time() - self.updatetime > 300:
                 dataele = {
-
                     "algorithmCode": self.dirmodel[channels[i]]['classindex'],
-
-                    "algorithmIp":self.dirmodel[channels[i]]['algip'],
-
-                    "channel":self.dirmodel[channels[i]]['channel']
-
+                    "algorithmIp": self.dirmodel[channels[i]]['algip'],
+                    "channel": self.dirmodel[channels[i]]['channel']
                 }
-
                 try:
-
-                    resultele = requests.post(url=urlele,data=dataele).json()['data']['pointCollections']
-
+                    resultele = requests.post(url=urlele, data=dataele).json()['data']['pointCollections']
                     resultele = resultele.split(',||')
-
                     resultele = tuple(resultele)
-
-                    point = '%s:'*len(resultele) %resultele
-
-                    if len(point[:-2])>1:
-
+                    point = '%s:' * len(resultele) % resultele
+                    if len(point[:-2]) > 1:
                         self.dirmodel[channels[i]]['point'] = point[:-2]
-
                 except Exception:
-
                     print('post error')
-
                 if Path(self.opt.weights).stem == 'personcount':
-
                     try:
-
-                        resultper = requests.post(url=urlperson,data=dataele).json()['data']
-
+                        resultper = requests.post(url=urlperson, data=dataele).json()['data']
                         personcountdir[channels[i]] = int(resultper)
-
                     except Exception:
-
                         print('urlpersonerror')
-
-                if Path(self.opt.weights).stem == 'sleep' or Path(self.opt.weights).stem == 'duty' :
-
-                    datatime= {
-
-                                    "algorithmCode": self.dirmodel[channels[i]]['classindex'],
-
-                                    "algorithmIp":self.dirmodel[channels[i]]['algip'],
-
-                                    "channel":self.dirmodel[channels[i]]['channel']
-
-                                }
-
+                if Path(self.opt.weights).stem == 'sleep' or Path(self.opt.weights).stem == 'duty':
+                    datatime = {
+                        "algorithmCode": self.dirmodel[channels[i]]['classindex'],
+                        "algorithmIp": self.dirmodel[channels[i]]['algip'],
+                        "channel": self.dirmodel[channels[i]]['channel']
+                    }
                     try:
-
-                        resulttime = requests.post(url=urltime,data=dataele).json()['data']
-
+                        resulttime = requests.post(url=urltime, data=dataele).json()['data']
                         self.dirmodel[channel]['durtime'] = int(resulttime)
-
                     except Exception:
-
                         print('posttime error')
-
                 self.updatetime = time.time()
-
             seen += 1
-
             if self.webcam:  # batch_size >= 1
-
                 p, im0 = path[i], im0s[i].copy()
-
                 s += f'{i}: '
-
             else:
-
                 p, im0, frame = path, im0s.copy(), getattr(dataset, 'frame', 0)
-
-
-
             p = Path(p)  # to Path
-
-
-
             save_path = str(self.save_dir / p.name)  # im.jpg
-
-            #txt_path = str(self.save_dir / 'labels' / p.stem) + (
-
-               # '' #if dataset.mode == 'image' else f'_{frame}')  # im.txt
-
+            # txt_path = str(self.save_dir / 'labels' / p.stem) + (
+            # '' #if dataset.mode == 'image' else f'_{frame}')  # im.txt
             s += '%gx%g ' % im.shape[2:]  # print string
-
             gn = torch.tensor(im0.shape)[[1, 0, 1, 0]]  # normalization gain whwh
-
             imc = im0.copy()  # for save_crop
-
             annotator = Annotator(im0, line_width=self.opt.line_thickness, example=str(self.names))
-
             flag = False
-
             if len(det) and Path(self.opt.weights).stem != 'duty':
-
-                #flag = True
-
+                # flag = True
                 # Rescale boxes from img_size to im0 size
-
                 det[:, :4] = scale_boxes(im.shape[2:], det[:, :4], im0.shape).round()
-
-
-
                 # Print results
-
                 for c in det[:, 5].unique():
-
                     n = (det[:, 5] == c).sum()  # detections per class
-
                     s += f"{n} {self.names[int(c)]}{'s' * (n > 1)}, "  # add to string
-
-
-
                 # Write results
-
-                if Path(self.opt.weights).stem in ['arm', 'uniform']:
-
+                if Path(self.opt.weights).stem in ['arm', 'uniform','fall']:
                     personpred = self.personmodel(im[i][None], None, None)
-
                     personpred = non_max_suppression(personpred, 0.7, self.opt.iou_thres, 0,
-
                                                      self.opt.agnostic_nms, max_det=self.opt.max_det)
-
-                    if len(personpred[0])==0:
-
-                       flag = False
-
+                    if len(personpred[0]) == 0:
+                        flag = False
                     elif Path(self.opt.weights).stem == 'other':
-
                         persondet = []
-
-                        personpred =  personpred[0]
-
+                        personpred = personpred[0]
                         personpred[:, :4] = scale_boxes(im.shape[2:], personpred[:, :4], im0.shape).round()
-
-                        for *perxyxy,conf,cls in reversed(personpred):
-
+                        for *perxyxy, conf, cls in reversed(personpred):
                             print(perxyxy)
-
-                            x1,y1,x3,y3 = perxyxy
-
-                            x1,y1,x3,y3 = int(x1),int(y1),int(x3),int(y3)
-
-                            x2,y2 = x3,y1
-
-                            x4,y4 = x1,y3
-
-                        flag = self.taskname.getflag(det, persondet,annotator, self.dirmodel[channels[i]]['fence'],
-
-                                                 self.dirmodel[channels[i]]['point'], self.names,
-
-                                                 self.dirmodel[channels[i]]['label'])
-
-    
-
+                            x1, y1, x3, y3 = perxyxy
+                            x1, y1, x3, y3 = int(x1), int(y1), int(x3), int(y3)
+                            x2, y2 = x3, y1
+                            x4, y4 = x1, y3
+                        flag = self.taskname.getflag(det, persondet, annotator, self.dirmodel[channels[i]]['fence'],
+                                                     self.dirmodel[channels[i]]['point'], self.names,
+                                                     self.dirmodel[channels[i]]['label'])
                     else:
-
                         persondet = []
-
-                        personpred =  personpred[0]
-
+                        personpred = personpred[0]
                         personpred[:, :4] = scale_boxes(im.shape[2:], personpred[:, :4], im0.shape).round()
-
-                        for *perxyxy,conf,cls in reversed(personpred):
-
+                        for *perxyxy, conf, cls in reversed(personpred):
                             print(perxyxy)
-
-                            if conf<0.8:
-
+                            if conf < 0.8:
                                 continue
-
-                            x1,y1,x3,y3 = perxyxy
-
-                            x1,y1,x3,y3 = int(x1),int(y1),int(x3),int(y3)
-
-                            x2,y2 = x3,y1
-
-                            x4,y4 = x1,y3
-
-                            persondet.append([x1,y1,x2,y2,x3,y3,x4,y4])
-
-                        flag = self.taskname.getflag(det,persondet,annotator,self.dirmodel[channels[i]]['fence'],self.dirmodel[channels[i]]['point'],self.names,self.dirmodel[channels[i]]['label'])
-
+                            x1, y1, x3, y3 = perxyxy
+                            x1, y1, x3, y3 = int(x1), int(y1), int(x3), int(y3)
+                            x2, y2 = x3, y1
+                            x4, y4 = x1, y3
+                            persondet.append([x1, y1, x2, y2, x3, y3, x4, y4])
+                        if Path(self.opt.weights).stem == "fall":
+                            flag = self.taskname.getflag(det, persondet, annotator, self.dirmodel[channels[i]]['fence'],
+                                                         self.dirmodel[channels[i]]['point'], self.names,
+                                                         self.dirmodel[channels[i]]['label'])
+                        else:
+                            flag = self.taskname.getflag(det, persondet, annotator, self.dirmodel[channels[i]]['fence'],
+                                                         self.dirmodel[channels[i]]['point'], self.names,
+                                                         self.dirmodel[channels[i]]['label'],imshape=im.shape[2:])
                 else:
-
                     if Path(self.opt.weights).stem in ['personcount']:
-
-                        flag = self.taskname.getflag(det, None,annotator, self.dirmodel[channels[i]]['fence'],
-
-                                                 self.dirmodel[channels[i]]['point'], self.names,
-
-                                                 self.dirmodel[channels[i]]['label'],personcountdir[channels[i]])
-
+                        flag = self.taskname.getflag(det, None, annotator, self.dirmodel[channels[i]]['fence'],
+                                                     self.dirmodel[channels[i]]['point'], self.names,
+                                                     self.dirmodel[channels[i]]['label'], personcountdir[channels[i]])
                     elif Path(self.opt.weights).stem in ['persontre']:
-
-                        flag = self.taskname.getflag(det, None,annotator, self.dirmodel[channels[i]]['fence'],
-
-                                                 self.dirmodel[channels[i]]['point'], self.names,
-
-                                                 self.dirmodel[channels[i]]['label'],1,imc)
-
+                        flag = self.taskname.getflag(det, None, annotator, self.dirmodel[channels[i]]['fence'],
+                                                     self.dirmodel[channels[i]]['point'], self.names,
+                                                     self.dirmodel[channels[i]]['label'], 1, imc)
                     else:
-
-                        flag = self.taskname.getflag(det, None,annotator, self.dirmodel[channels[i]]['fence'],
-
-                                                 self.dirmodel[channels[i]]['point'], self.names,
-
-                                                 self.dirmodel[channels[i]]['label'])
-
+                        flag = self.taskname.getflag(det, None, annotator, self.dirmodel[channels[i]]['fence'],
+                                                     self.dirmodel[channels[i]]['point'], self.names,
+                                                     self.dirmodel[channels[i]]['label'])
             if flag:
-
-                #if self.dirmodel[channels[i]]['imgtime'] != videotime[i]:
-
+                # if self.dirmodel[channels[i]]['imgtime'] != videotime[i]:
                 self.dirmodel[channels[i]]['detframe'].pop(0)
-
                 self.dirmodel[channels[i]]['detframe'].append(1)
-
                 self.dirmodel[channels[i]]['preim'] = annotator.result()
-
                 self.dirmodel[channels[i]]['oripreim'] = imc
-
                 self.dirmodel[channels[i]]['posttime'] = videotime[i]
-
                 print(self.dirmodel[channels[i]]['detframe'])
-
-                #self.dirmodel[channels[i]]['imgtime'] = videotime[i]
-
+                # self.dirmodel[channels[i]]['imgtime'] = videotime[i]
             else:
-
-                #print(f'deti= {i}')
-
-                #print(detframe[i])
-
-                #if self.dirmodel[channels[i]]['imgtime'] != videotime[i]:
-
+                # print(f'deti= {i}')
+                # print(detframe[i])
+                # if self.dirmodel[channels[i]]['imgtime'] != videotime[i]:
                 self.dirmodel[channels[i]]['detframe'].pop(0)
-
                 self.dirmodel[channels[i]]['detframe'].append(0)
-
                 print(self.dirmodel[channels[i]]['detframe'])
 
-                #self.dirmodel[channels[i]]['imgtime'] = videotime[i]
-
-                #print(detframe[i])
-
-            # Stream results
-
-            #im0 = annotator.result()
-
-            #print(f'i = {i}')
-
-            #print(channels[i])
-
-            #print(postpretime[i])
-
-            #print(detframe[i])
-
-            if not self.dirmodel[channels[i]]['detflag'] and self.dirmodel[channels[i]]['detframe'].count(1)>=1:
-
+            if not self.dirmodel[channels[i]]['detflag'] and self.dirmodel[channels[i]]['detframe'].count(1) >= 1:
                 self.dirmodel[channels[i]]['detflag'] = True
-
                 self.dirmodel[channels[i]]['detpretime'] = time.time()
-
-            elif self.dirmodel[channels[i]]['detframe'].count(1)==0 :
-
+            elif self.dirmodel[channels[i]]['detframe'].count(1) == 0:
                 self.dirmodel[channels[i]]['detflag'] = False
-
                 self.dirmodel[channels[i]]['detpretime'] = float('inf')
-
             # Stream results
-
-            #im0 = annotator.result()
-
-            if time.time() - self.dirmodel[channels[i]]['postpretime'] >30 and time.time() - self.dirmodel[channels[i]]['detpretime'] > self.dirmodel[channels[i]]['durtime']  and self.dirmodel[channels[i]]['detflag']:
-
-            #print()
-
-            #if time.time() - self.dirmodel[channels[i]]['postpretime'] >30 and self.dirmodel[channels[i]]['detflag']:
-
-                #print(time.time() - self.dirmodel[channels[i]]['detpretime'])
-
-                #print(self.dirmodel[channels[i]]['detflag'])
+            # im0 = annotator.result()
+            if time.time() - self.dirmodel[channels[i]]['postpretime'] > 30 and time.time() - \
+                    self.dirmodel[channels[i]]['detpretime'] > self.dirmodel[channels[i]]['durtime'] and \
+                    self.dirmodel[channels[i]]['detflag']:
 
                 print('post-------------------------------------------------------------------------')
-
-                #time.sleep(30)
-
-             #print(time.time() - postpretime[i])
-
-                #print('111111111111111111111111111111111111111111111111')
-
-                #print(dirmodel[channels[i]]['preim'].shape)
-
+                # time.sleep(30)
+                # print(time.time() - postpretime[i])
+                # print('111111111111111111111111111111111111111111111111')
+                # print(dirmodel[channels[i]]['preim'].shape)
                 success, encoded_image = cv2.imencode('.jpg', self.dirmodel[channels[i]]['preim'])
-
                 content = encoded_image.tobytes()
-
                 successori, encoded_imageori = cv2.imencode('.jpg', self.dirmodel[channels[i]]['oripreim'])
-
                 contentori = encoded_imageori.tobytes()
-
                 filename = f'{p.stem}_{int(time.time())}.jpg'
-
                 filenameori = f'ori{p.stem}_{int(time.time())}.jpg'
-
                 print(f'str(p) {p.name}')
-
                 print(channels[i])
-
                 payload = {'channel': self.dirmodel[channels[i]]['channel'],
-
-                                   'classIndex': self.dirmodel[channels[i]]['classindex'],
-
-                                   'ip': self.dirmodel[channels[i]]['algip'],
-
-                                   'videoTime': time.strftime('%Y-%m-%d %H:%M:%S', self.dirmodel[channels[i]]['posttime']),
-
-                                   'videoUrl': channels[i]}
-
+                           'classIndex': self.dirmodel[channels[i]]['classindex'],
+                           'ip': self.dirmodel[channels[i]]['algip'],
+                           'videoTime': time.strftime('%Y-%m-%d %H:%M:%S', self.dirmodel[channels[i]]['posttime']),
+                           'videoUrl': channels[i]}
                 files = [
-
-                            ('file', (filename, content, 'image/jpeg')),
-
-                            ('oldFile', (filenameori, contentori, 'image/jpeg')),
-
-                        ]
-
+                    ('file', (filename, content, 'image/jpeg')),
+                    ('oldFile', (filenameori, contentori, 'image/jpeg')),
+                ]
                 try:
-
                     result = requests.post(url, data=payload, files=files)
-
                     print(result)
-
                 except Exception:
-
                     print('posterror')
-
-                #time.sleep(3000)
-
+                # time.sleep(3000)
                 self.dirmodel[channels[i]]['postpretime'] = time.time()
-
                 self.dirmodel[channels[i]]['detflag'] = False
-
                 timesave = time.strftime('%Y-%m-%d-%H:%M:%S', self.dirmodel[channels[i]]['posttime'])
-
-                year = time.strftime('%Y',time.localtime(time.time()))
-
-                month = time.strftime('%m',time.localtime(time.time()))
-
-                day = time.strftime('%d',time.localtime(time.time()))
-
+                year = time.strftime('%Y', time.localtime(time.time()))
+                month = time.strftime('%m', time.localtime(time.time()))
+                day = time.strftime('%d', time.localtime(time.time()))
                 savefold = f'/mnt/project/images/{Path(self.opt.weights).stem}/{year}/{month}/{day}'
-
                 savefold = Path(savefold)
-
-                savefold.mkdir(parents=True,exist_ok=True)
-
+                savefold.mkdir(parents=True, exist_ok=True)
                 detsavefold = f'/mnt/project/detimages/{Path(self.opt.weights).stem}/{year}/{month}/{day}'
-
                 detsavefold = Path(detsavefold)
-
-                detsavefold.mkdir(parents=True,exist_ok=True)
-
-                cv2.imwrite(f'{savefold}/{timesave}.jpg',self.dirmodel[channels[i]]['oripreim'])
-
-                cv2.imwrite(f'{detsavefold}/{timesave}det.jpg',self.dirmodel[channels[i]]['preim'])
-
-            #if self.dirmodel[channels[i]]['detframe'].count(1)==0:
-
+                detsavefold.mkdir(parents=True, exist_ok=True)
+                cv2.imwrite(f'{savefold}/{timesave}.jpg', self.dirmodel[channels[i]]['oripreim'])
+                cv2.imwrite(f'{detsavefold}/{timesave}det.jpg', self.dirmodel[channels[i]]['preim'])
+            # if self.dirmodel[channels[i]]['detframe'].count(1)==0:
             #    self.dirmodel[channels[i]]['detflag'] = False
-
-                #time.sleep(1)
-
-
-
+            # time.sleep(1)
             self.view_img = False
-
             if self.view_img:
-
                 if platform.system() == 'Linux' and p not in windows:
-
                     windows.append(p)
-
                     cv2.namedWindow(f'{str(p)}-{Path(self.opt.weights).stem}',
-
                                     cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)  # allow window resize (Linux)
-
                     cv2.resizeWindow(f'{str(p)}-{Path(self.opt.weights).stem}', im0.shape[1], im0.shape[0])
-
                 im1 = cv2.resize(im0, (1280, 720))
-
                 cv2.imshow(f'{str(p)}-{Path(self.opt.weights).stem}', im1)
-
                 cv2.waitKey(1)  # 1 millisecond
-
-
-
             # Save results (image with detections)
-
-
-
             # Print time (inference-only)
-
             print(f'channels[i]={channels[i]}')
-
-            LOGGER.info(f"{s}{'' if len(det) else '(no detections), '}{self.dt[1].dt * 1E3:.1f}ms {str(p)}-{Path(self.opt.weights).stem}")
-
-
-
+            LOGGER.info(
+                f"{s}{'' if len(det) else '(no detections), '}{self.dt[1].dt * 1E3:.1f}ms {str(p)}-{Path(self.opt.weights).stem}")
     def load(self):
-
         conn = sqlite3.connect(self.source)
-
         c = conn.cursor()
-
         while True:
-
             #
-
             # print ("数据库打开成功")
-
-
-
             cursor = c.execute(
-
-                "SELECT modelname, addstream,delstream,streaming  from CHANGESTREAM WHERE modelname= (?)",(Path(self.opt.weights).stem,))
-
-            # content = cursor.fetchall()
-
-            # if content[0][1] ==1 or content[0][2] ==1:
-
-            #     c.execute("UPDATE CHANGESTREAM set streamimg = 1 where modelname='yolov5s'")
-
-            #     print("updata changestream")
-
-            #     conn.commit()
-
-            # cursor = c.execute(
-
-            # "SELECT modelname, addstream,delstream,streamimg  from CHANGESTREAM WHERE modelname='yolov5s'")
+                "SELECT modelname, addstream,delstream,streaming  from CHANGESTREAM WHERE modelname= (?)",
+                (Path(self.opt.weights).stem,))
 
             self.contentid = cursor.fetchall()
-
-            #global tag
-
-            #tag = Value('i', self.contentid[0][3])
-
-            #print(tag.value==1)
-
+            # global tag
+            # tag = Value('i', self.contentid[0][3])
+            # print(tag.value==1)
             print(f'loadcontent={self.contentid[0][3]}')
-
             time.sleep(3)
-
         c.close()
-
         conn.close()
 
     def readpoint(self):
-
         data = {
-
-                    "algorithmCode": modelalgdir[Path(self.opt.weights).stem],
-
-                    "deviceIp":None,
-
-                    'fwqCode':None
-
-                }
-
+            "algorithmCode": modelalgdir[Path(self.opt.weights).stem],
+            "deviceIp": None,
+            'fwqCode': None
+        }
         self.dirmodel = {}
-
-        result = requests.post(url=urlt,data=data).json()['data']
-
-        channell=[]
-
-        for info in result: 
-
-        #content = cursor.fetchall()
-
-        #self.dirmodel = {}
-
-        #for address,fence,point,channel,classindex,ip ,algip,label,durtime in content:
-
-            #address = f'{address[:-1]}0'
-
+        result = requests.post(url=urlt, data=data).json()['data']
+        channell = []
+        for info in result:
+            # content = cursor.fetchall()
+            # self.dirmodel = {}
+            # for address,fence,point,channel,classindex,ip ,algip,label,durtime in content:
+            # address = f'{address[:-1]}0'
             channel = info["deviceChannel"]
-
-            if Path(self.opt.weights).stem == "danager" and channel =='45':
-
+            if Path(self.opt.weights).stem == "danager" and channel == '45':
                 continue
-
             channell.append(channel)
-
             self.dirmodel[channel] = {}
-
-            self.dirmodel[channel]['fence'] = 1 if len(info["electricFence"])>0 else 0
-
+            self.dirmodel[channel]['fence'] = 1 if len(info["electricFence"]) > 0 else 0
             if Path(self.opt.weights).stem == "uniform":
-
                 self.dirmodel[channel]['fence'] = 1
-
-            #self.dirmodel[channel]['point'] = point
-
+            # self.dirmodel[channel]['point'] = point
             self.dirmodel[channel]['channel'] = info['deviceChannel']
-
             self.dirmodel[channel]['classindex'] = info['algorithmCode']
-
             self.dirmodel[channel]['ip'] = info['deviceIp']
-
             self.dirmodel[channel]['algip'] = info['deviceAlgorithmIp']
-
             dataele = {
-
-                    "algorithmCode": self.dirmodel[channel]['classindex'],
-
-                    "algorithmIp":self.dirmodel[channel]['algip'],
-
-                    "channel":self.dirmodel[channel]['channel']
-
-                }
-
-            resultele = requests.post(url=urlele,data=dataele).json()['data']['pointCollections']
-
+                "algorithmCode": self.dirmodel[channel]['classindex'],
+                "algorithmIp": self.dirmodel[channel]['algip'],
+                "channel": self.dirmodel[channel]['channel']
+            }
+            resultele = requests.post(url=urlele, data=dataele).json()['data']['pointCollections']
             resultele = resultele.split(',||')
-
             resultele = tuple(resultele)
-
-            point = '%s:'*len(resultele) %resultele
-
+            point = '%s:' * len(resultele) % resultele
             if Path(self.opt.weights).stem == 'personcount':
-
-                resultper = requests.post(url=urlperson,data=dataele).json()['data']
-
+                resultper = requests.post(url=urlperson, data=dataele).json()['data']
                 personcountdir[channel] = int(resultper)
-
-            if (Path(self.opt.weights).stem == "uniform" or Path(self.opt.weights).stem == "fall") and len(point[:-2])<=1:
-
+            if (Path(self.opt.weights).stem == "uniform" or Path(self.opt.weights).stem == "fall") and len(
+                    point[:-2]) <= 1:
                 self.dirmodel[channel]['point'] = "150#144,1100#144,1100#550,150#550"
-
             else:
-
                 self.dirmodel[channel]['point'] = point[:-2]
-
             self.dirmodel[channel]['preim'] = None
-
             self.dirmodel[channel]['oripreim'] = None
-
             self.dirmodel[channel]['detframe'] = [0 for _ in range(2)]
-
             self.dirmodel[channel]['postpretime'] = 0
-
             self.dirmodel[channel]['detflag'] = False
-
             self.dirmodel[channel]['detpretime'] = float('inf')
-
             self.dirmodel[channel]['label'] = modellabeldir[data['algorithmCode']]
-
-            if Path(self.opt.weights).stem == 'sleep' or Path(self.opt.weights).stem == 'duty' :
-
-                datatime= {
-
-                        "algorithmCode": self.dirmodel[channel]['classindex'],
-
-                        "algorithmIp":self.dirmodel[channel]['algip'],
-
-                        "channel":self.dirmodel[channel]['channel']
-
-                        }
-
-                resulttime = requests.post(url=urltime,data=dataele).json()['data']
-
+            if Path(self.opt.weights).stem == 'sleep' or Path(self.opt.weights).stem == 'duty':
+                datatime = {
+                    "algorithmCode": self.dirmodel[channel]['classindex'],
+                    "algorithmIp": self.dirmodel[channel]['algip'],
+                    "channel": self.dirmodel[channel]['channel']
+                }
+                resulttime = requests.post(url=urltime, data=dataele).json()['data']
                 self.dirmodel[channel]['durtime'] = int(resulttime)
-
             else:
-
                 self.dirmodel[channel]['durtime'] = 0
-
             self.dirmodel[channel]['posttime'] = 0
-
-        print(self.dirmodel)
-
         return sorted(channell)
 
-    #    str = str.split(":")
-
-    #    lista = []
-
-    #    for liststr in str:
-
-    #        if len(liststr) > 0:
-
-    #            li = liststr.split(',')
-
-    #            listpoint = []
-
-    #            for i, j in zip(li[::2], li[1::2]):
-
-    #                listpoint.append((i, j))
-
-    #            lista.append(listpoint)
-
-    #    return listpoint
-
-
-
-
-
-#def preprocess():
-
-#        print('preprocess-----------------------------------------------')
-
-
-
-def getframe(queuelist,channelsl,source,tt,numworks,lock,numworkv):
-
+def getframe(queuelist, channelsl, source, tt, numworks, lock, numworkv):
     while True:
-
         print("dataloader")
-
         imgsz = [768, 768]
-
         print(f'source = {source}')
-
-        dataset = LoadStreamsSQLTN(channelsl,source, img_size=832,
-
-                                      auto=True, vid_stride=20, tt=tt,numworks = numworks)
-
+        dataset = LoadStreamsSQLTN(channelsl, source, img_size=832,
+                                   auto=True, vid_stride=20, tt=tt, numworks=numworks)
         bs = len(dataset)
-
         vid_path, vid_writer = [None] * bs, [None] * bs
-
         # self.detframe = [[0 for _ in range(8)] for i in range(bs)]
-
         # self.postpretime = [0]*bs
-
         # Run inference
-
-
-
-        #imgsz = (1 , 3, *self.imgsz)
-
+        # imgsz = (1 , 3, *self.imgsz)
         print(imgsz)
-
-        #self.model.warmup(imgsz=(1 , 3, *imgsz))  # warmup
-
+        # self.model.warmup(imgsz=(1 , 3, *imgsz))  # warmup
         seen, windows, dt = 0, [], (Profile(), Profile(), Profile())
-
-
-
         #
-
         # print ("数据库打开成功")
-
         pretime = time.time()
-
         tag = 0
-
         sourcebase = 'project0117.db'
-
-        for path, im, im0s, vid_cap, s, videotime,channels in dataset:
-
-            # print('*'*21)
-
-            # global tag
-
-            # print('datasetvideo')
-
-            # if time.time()-pretime > 300:
-
-            #     pretime = time.time()
-
-
-
-            #     conn = sqlite3.connect(sourcebase)
-
-            #     c = conn.cursor()
-
-            #     cursor = c.execute("SELECT modelname, addstream,delstream,streaming  from CHANGESTREAM WHERE modelname= 'helmet'")
-
-            #     contentid = cursor.fetchall()
-
-            #     tag = contentid[0][3]
-
-            # if tag == 1:
-
-            #     lock.acquire()
-
-            #     numworkv.value += 1
-
-            #     dataset.close()
-
-            #     if numworkv.value==3:
-
-            #         print('newstreaming=', tag)
-
-            #         conn = sqlite3.connect(source)
-
-            #         c = conn.cursor()
-
-            #         c.execute("UPDATE CHANGESTREAM set streaming = 0 , addstream=0,delstream=0 where modelname='helmet'")
-
-            #         print(123)
-
-            #         conn.commit()
-
-            #         c.close()
-
-            #         conn.close()
-
-            #     lock.release()
-
-            #     print('opencv1')
-
-            #     # cv2.destroyAllWindows()
-
-            #     print('opencv')
-
-            #     break
-
-            # else:
-
-            #     print('nonewstreaming=', tag)
-
-            if time.time()-pretime > 300:
-
+        for path, im, im0s, vid_cap, s, videotime, channels in dataset:
+            if time.time() - pretime > 300:
                 channellist = []
-
                 pretime = time.time()
+                data = {
+                    "algorithmCode": None,
+                    "deviceIp": None,
+                    "fwqCode": None
+                }
+                try:
+                    result = requests.post(url=urlt, data=data).json()['data']
+                except Exception:
+                    result = []
+                for info in result:
+                    data = {
+                        "channel": info["deviceChannel"],
+                        "ip": info["deviceAlgorithmIp"]
+                    }
+                    chaflag = any(info["deviceChannel"] in t for t in channellist)
+                    # personcountdir[channel] = num
+                    if not chaflag:
+                        address = requests.post(url=urlrtsp, data=data).json()['msg']
+                        channellist.append((info['deviceChannel'], address))
+                channelsa = []
+                sourcea = []
+                channellist = set(channellist)
+                channellist = sorted(channellist, key=lambda x: x[0])
+                # channellist = set(channellist)
+                for cha, add in channellist:
+                    channelsa.append(cha)
+                    sourcea.append(add)
+                channelsl = sorted(channelsl)
+                # channelsa = sorted(channelsa)
+                if channelsa != channelsl and len(channelsa) > 0:
+                    print(f'channelsa = {channelsa}')
+                    print(f'channelsl = {channelsl}')
+                    dataset.close()
+                    channelsl = channelsa
+                    source = sourcea
+                    break;
+            for key, value in queuelist.items():
+                hour = time.localtime(time.time()).tm_hour
+                if hour in range(7, 18):
+                    value[-1].put((path, im, im0s, vid_cap, s, videotime, channels))
+                    value[-1].get() if value[-1].qsize() == 10 else time.sleep(0.001)
 
-                data = {
-
-                    "algorithmCode": None,
-
-                    "deviceIp":None,
-
-                    "fwqCode":None
-
-
-
-                }
-
-                try:
-
-                    result = requests.post(url=urlt,data=data).json()['data']
-
-                except Exception:
-
-                    result = []
-
-                for info in result:
-
-                    data = {
-
-                        "channel": info["deviceChannel"],
-
-                    "ip": info["deviceAlgorithmIp"]
-
-                    }
-
-                    chaflag = any(info["deviceChannel"] in t for t in channellist)
-
-        #personcountdir[channel] = num
-
-                    if not chaflag:
-
-                        address = requests.post(url=urlrtsp,data=data).json()['msg']
-
-                        channellist.append((info['deviceChannel'],address))
-
-                channelsa  = []
-
-                sourcea = []
-
-                channellist = set(channellist)
-
-                channellist = sorted(channellist,key=lambda x:x[0])
-
-                #channellist = set(channellist)
-
-                for cha,add in channellist:
-
-                    channelsa.append(cha)
-
-                    sourcea.append(add)
-
-                channelsl = sorted(channelsl)
-
-                #channelsa = sorted(channelsa)
-
-                if channelsa!=channelsl and len(channelsa)>0:
-
-                    print(f'channelsa = {channelsa}')
-
-                    print(f'channelsl = {channelsl}')
-
-                    dataset.close()
-
-                    channelsl = channelsa
-
-                    source = sourcea
-
-                    break;
-
-            for key,value in queuelist.items():
-                hour = time.localtime(time.time()).tm_hour
-                if hour in range(7,18):
-                    value[-1].put((path, im, im0s, vid_cap, s, videotime,channels))
-
-                    value[-1].get() if value[-1].qsize() == 10 else time.sleep(0.001)
-
-
-
-def getmutpro(channels,source,streamlist,numworkv,lock,numworks=1,modellen=None):
-
-    processlist = []
-
-    queuelist = {}
-
-    for i in range(numworks):
-
-        for model in modellen:    
-
-            queue = Queue(maxsize=10)
-
-            queuelist.setdefault(model,[])
-
-            queuelist[model].append(queue)
-
-        process = Process(target=getframe,
-
-                        args=(queuelist, channels,source, i,numworks,lock,numworkv))
-
-        processlist.append(process)
-
-        process.start()
-
-        #queuelist.append(queue)
-
-    return queuelist
-
-
-
-#    path = []
-
-#    im0s = []
-
-#    vid_cap = None
-
-#    s = ''
-
-#    videotime = []
-
-#    while True:
-
-#        imlist = []
-
-#        pathlist = []
-
-#        im0slist = []
-
-#        channelslist = []
-
-#        vid_cap = None
-
-#        s = ''
-
-#        videotimelist = []
-
-#        for q in queuelist:
-
-#            if q.qsize()>0:
-
-#                setframe = q.get()
-
-#                path, im, im0s, vid_cap, s, videotime ,channels = setframe
-
-#                pathlist += path
-
-#                channelslist +=channels 
-
-#                im0slist += im0s
-
-#                videotimelist += videotime
-
-#                imlist.append(im)
-
-#        if len(imlist)>0:
-
-#            im = np.concatenate(imlist)
-
-#        if len(pathlist)>0:
-
-#            print(len(path),im.shape,len(im0s))
-
-#            streamlist.append((pathlist, im, im0slist, vid_cap, s, videotimelist,channelslist))
-
-            #print(f'streamlist = {len(streamlist)}')
-
-#        streamlist.pop(0) if len(streamlist) > 3 else time.sleep(0.001)
-
-
-
-def modelfun(queue,weights,sourcedb,classes,device,classify,conf_thres,runmodel,v8=False):
+def getmutpro(channels, source, streamlist, numworkv, lock, numworks=1, modellen=None):
+    processlist = []
+    queuelist = {}
+    for i in range(numworks):
+        for model in modellen:
+            queue = Queue(maxsize=10)
+            queuelist.setdefault(model, [])
+            queuelist[model].append(queue)
+        process = Process(target=getframe,
+                          args=(queuelist, channels, source, i, numworks, lock, numworkv))
+        processlist.append(process)
+        process.start()
+        # queuelist.append(queue)
+    return queuelist
 
+def modelfun(queue, weights, sourcedb, classes, device, classify, conf_thres, runmodel, v8=False):
     print(weights)
-
-    detectdemo=Detect(weights=weights,source=sourcedb,classes=classes,device=device,classify=classify,conf_thres=conf_thres,v8=v8)
-
-    detectdemo.infer(queue,runmodel)
-
-
+    detectdemo = Detect(weights=weights, source=sourcedb, classes=classes, device=device, classify=classify,
+                        conf_thres=conf_thres, v8=v8)
+    detectdemo.infer(queue, runmodel)
 
 def parse_opt():
-
     parser = argparse.ArgumentParser()
-
     parser.add_argument('--weights', nargs='+', type=str, default=ROOT / 'yolov5s.pt', help='model path or triton URL')
-
     opt = parser.parse_args()
-
     return opt
 
-
-
-
-
 def main(opt):
-
     check_requirements(ROOT / 'requirements.txt', exclude=('tensorboard', 'thop'))
-
     run(**vars(opt))
 
-
-
-
-
 if __name__ == '__main__':
-
-    #torch.multiprocessing.set_start_method('spawn')
-
-    #set_start_method('spawn')
-
+    # torch.multiprocessing.set_start_method('spawn')
+    # set_start_method('spawn')
     opt = parse_opt()
-
     dbpath = 'projectnew.db'
-
-    
-
     conn = sqlite3.connect(dbpath)
-
-#
-
-# print ("数据库打开成功")
-
+    #
+    # print ("数据库打开成功")
     c = conn.cursor()
-
-    task(c,conn,urlt,urla)
-
+    task(c, conn, urlt, urla)
     cursor = c.execute('select channel,algip  from stream ')
-
     result = cursor.fetchall()
-
-    for channel ,algip in result:
-
+    for channel, algip in result:
         data = {
-
-        "channel": channel,
-
-        "ip":algip
-
+            "channel": channel,
+            "ip": algip
         }
-
-        #personcountdir[channel] = num
-
-        address = requests.post(url=urlrtsp,data=data).json()['msg']
-
-        c.execute('UPDATE STREAM set address= (?) where channel =(?)',(address,channel))
-
+        # personcountdir[channel] = num
+        address = requests.post(url=urlrtsp, data=data).json()['msg']
+        c.execute('UPDATE STREAM set address= (?) where channel =(?)', (address, channel))
     conn.commit()
-
-    cursor = c.execute("SELECT modelname from CHANGESTREAM where modelname = 'helmet' or modelname = 'smoke' or modelname = 'uniform' or modelname = 'fire' or modelname ='duty'  or modelname = 'sleep' or modelname='occupancy' or modelname = 'personcar' or modelname = 'phone' or modelname = 'reflective' or modelname = 'extinguisher' or modelname = 'danager' or modelname = 'inspection' or modelname = 'cross' or modelname = 'personcount' or modelname= 'arm' or modelname = 'persontre' or modelname = 'bag'")
-
-    #cursor = c.execute("SELECT modelname from CHANGESTREAM where modelname = 'helmet'")
-
+    cursor = c.execute(
+        "SELECT modelname from CHANGESTREAM where modelname = 'helmet' or modelname = 'smoke' or modelname = 'uniform' or modelname = 'fire' or modelname ='duty'  or modelname = 'sleep' or modelname='occupancy' or modelname = 'personcar' or modelname = 'phone' or modelname = 'reflective' or modelname = 'extinguisher' or modelname = 'danager' or modelname = 'inspection' or modelname = 'cross' or modelname = 'personcount' or modelname= 'arm' or modelname = 'persontre' or modelname = 'bag'")
+    # cursor = c.execute("SELECT modelname from CHANGESTREAM where modelname = 'helmet'")
     content = cursor.fetchall()
-
     cursor = c.execute("SELECT address,channel from STREAM ")
-
-    #cursor = c.execute("SELECT address from STREAM where modelname = 'helmet'")
-
+    # cursor = c.execute("SELECT address from STREAM where modelname = 'helmet'")
     contenta = cursor.fetchall()
-
     source = []
-
     modellist = []
-
     addcha = []
-
     channellist = []
-
     for i in contenta:
-
-        addcha.append((i[0],i[1]))
-
-        #modellist.append(i[1])
-
+        addcha.append((i[0], i[1]))
+        # modellist.append(i[1])
     addcha = set(addcha)
-
-    addcha = sorted(addcha,key=lambda x:x[1])
-
-    for add,cha in addcha:
-
+    addcha = sorted(addcha, key=lambda x: x[1])
+    for add, cha in addcha:
         source.append(add)
-
         channellist.append(cha)
-
-    #source = set(source)
-
+    # source = set(source)
     print(addcha)
-
     source = list(source)
-
-    cursor = c.execute("SELECT modelname from STREAM where (modelname ='helmet' or modelname = 'smoke' or modelname = 'uniform' or modelname = 'fire' or modelname = 'duty'  or modelname = 'sleep'  or modelname='occupancy' or modelname = 'personcar' or modelname = 'phone' or modelname = 'reflective' or modelname = 'extinguisher' or modelname = 'danager' or modelname = 'inspection' or modelname = 'cross' or modelname = 'personcount' or modelname = 'arm' or modelname = 'persontre' or modelname = 'bag')")
-
+    cursor = c.execute(
+        "SELECT modelname from STREAM where (modelname ='helmet' or modelname = 'smoke' or modelname = 'uniform' or modelname = 'fire' or modelname = 'duty'  or modelname = 'sleep'  or modelname='occupancy' or modelname = 'personcar' or modelname = 'phone' or modelname = 'reflective' or modelname = 'extinguisher' or modelname = 'danager' or modelname = 'inspection' or modelname = 'cross' or modelname = 'personcount' or modelname = 'arm' or modelname = 'persontre' or modelname = 'bag')")
     contentm = cursor.fetchall()
-
     for m in contentm:
-
         modellist.append(m[0])
-
     modellist = set(modellist)
-
     modellist = list(modellist)
-
     contentlist = []
-
     for i in content:
-
         contentlist.append(i[0])
-
-    #source.sort()
-
+    # source.sort()
     n = len(content)
-
     print(f'modelname={n}')
-
     print(content)
-
-    #content.reverse()
-
+    # content.reverse()
     print(content)
-
     print(source)
-
     # main(opt)
-
-    #processes = []
-
+    # processes = []
     streamqueue = Queue(maxsize=4)
-
     numworkv = Value('i', 0)
-
     manager = Manager()
-
     lock = multiprocessing.Lock()
-
     streamlist = manager.list()
-
     numworks = 7
-
     modellen = []
-
     for i in modellist:
-
         if i in contentlist:
-
             modellen.append(i)
-
-    queuelist = getmutpro(channellist,source, streamlist, numworkv, lock, numworks,modellen)
-
+    queuelist = getmutpro(channellist, source, streamlist, numworkv, lock, numworks, modellen)
     deid = 0
-
-    #pool = ThreadPoolExecutor(max_workers=n)
-
+    # pool = ThreadPoolExecutor(max_workers=n)
     runmodel = manager.dict()
-
     while True:
-
         for i in modellist:
-
             if i in contentlist:
-
                 if i not in runmodel:
-
-            #print(i)
-
-            #detectdemo=Detect(weights=f'/mnt/project/yolodemo/yolov5-master/{i[0]}.pt')
-
-                    c.execute('select conf,cla from changestream where modelname = (?)',(i,))
-
+                    # print(i)
+                    # detectdemo=Detect(weights=f'/mnt/project/yolodemo/yolov5-master/{i[0]}.pt')
+                    c.execute('select conf,cla from changestream where modelname = (?)', (i,))
                     rea = c.fetchall()
-
                     print(f'weights ={i[0]}.pt')
-
-                    if i in ['duty','danager','inspection','cross','personcount']:
-
-                        process = Process(target=modelfun,args=(queuelist[i],f'{i}.pt',dbpath,[0],0,rea[0][1],rea[0][0],runmodel,True))
-
+                    if i in ['duty', 'danager', 'inspection', 'cross', 'personcount']:
+                        process = Process(target=modelfun, args=(
+                            queuelist[i], f'{i}.pt', dbpath, [0], 0, rea[0][1], rea[0][0], runmodel, True))
                     else:
-
-                        if i in ['fall','extinguisher']:
-
-                            process = Process(target=modelfun,args=(queuelist[i],f'{i}.pt',dbpath,None,0,rea[0][1],rea[0][0],runmodel))
-
+                        if i in ['fall', 'extinguisher']:
+                            process = Process(target=modelfun, args=(
+                                queuelist[i], f'{i}.pt', dbpath, None, 0, rea[0][1], rea[0][0], runmodel))
                         else:
-
-                            process = Process(target=modelfun,args=(queuelist[i],f'{i}.pt',dbpath,None,0,rea[0][1],rea[0][0],runmodel,True))
-
-
-
-                #elif i in ['helmet','fire','smoke','fall']:
-
-                #process = Process(target=modelfun,args=(queuelist,f'{i}.pt',dbpath,None,deid%2,True))
-
-                #else:
-
-                #process = Process(target=modelfun,args=(queuelist,f'{i}.pt',dbpath,None,deid%2,False))
-
-
-
-                #processes.append(process)
-
-                #process.start()
-
-                #detectobj = Process(target=detectdemo.infer,args=(queue,))
-
-                # Detect(weights=f'{i[0]}.pt')
-
-
-
+                            process = Process(target=modelfun, args=(
+                                queuelist[i], f'{i}.pt', dbpath, None, 0, rea[0][1], rea[0][0], runmodel, True))
                     time.sleep(3)
-
                     process.start()
-
-                    deid = deid+1
-
+                    deid = deid + 1
                     runmodel[i] = 1
-
         time.sleep(600)
-
-        task(c,conn,urlt,urla)
-
-        #cursor = c.execute("SELECT modelname from CHANGESTREAM where modelname = 'helmet' or modelname = 'fall' or modelname = 'uniform' or modelname = 'personcount' or modelname = 'arm' or modelname = 'bag'")
-
-        #cursor = c.execute("SELECT modelname from CHANGESTREAM where modelname = 'helmet'")
-
-        cursor = c.execute("SELECT modelname from CHANGESTREAM where modelname = 'helmet' or modelname = 'smoke' or modelname = 'uniform' or modelname = 'fire' or modelname ='duty'  or modelname = 'sleep' or modelname='occupancy' or modelname = 'personcar' or modelname = 'phone' or modelname = 'reflective' or modelname = 'extinguisher' or modelname = 'danager' or modelname = 'inspection' or modelname = 'cross' or modelname = 'personcount' or modelname = 'arm' or modelname = 'persontre' or modelname = 'bag'")
-
+        task(c, conn, urlt, urla)
+        cursor = c.execute(
+            "SELECT modelname from CHANGESTREAM where modelname = 'helmet' or modelname = 'smoke' or modelname = 'uniform' or modelname = 'fire' or modelname ='duty'  or modelname = 'sleep' or modelname='occupancy' or modelname = 'personcar' or modelname = 'phone' or modelname = 'reflective' or modelname = 'extinguisher' or modelname = 'danager' or modelname = 'inspection' or modelname = 'cross' or modelname = 'personcount' or modelname = 'arm' or modelname = 'persontre' or modelname = 'bag'")
         content = cursor.fetchall()
-
         contentlist = []
-
         for con in content:
-
             contentlist.append(con[0])
-
-        #cursor = c.execute("SELECT address,modelname,channel from STREAM where modelname='helmet' or modelname = 'sleep' or modelname = 'smoke' or modelname = 'danager'or modelname = 'gloves' or modelname = 'other'")
-
         cursor = c.execute("SELECT address,channel from STREAM ")
-
         contenta = cursor.fetchall()
-
         source = []
-
         modellist = []
-
         addcha = []
-
         channellist = []
-
         for i in contenta:
-
-            addcha.append((i[0],i[1]))
-
-            #modellist.append(i[1])
-
+            addcha.append((i[0], i[1]))
+            # modellist.append(i[1])
         addcha = set(addcha)
-
         addcha = sorted(addcha)
-
-        for a,cha in addcha:
-
+        for a, cha in addcha:
             source.append(a)
-
             channellist.append(cha)
-
         print(addcha)
-
-        #source = set(source)
-
         source = list(source)
-
-        #source.sort()
-
-        cursor = c.execute("SELECT modelname from STREAM where (modelname = 'helmet' or modelname = 'smoke' or modelname = 'uniform' or modelname = 'fire' or modelname = 'duty'  or modelname = 'sleep' or modelname='occupancy' or modelname = 'personcar' or modelname = 'phone' or modelname = 'reflective' or modelname = 'extinguisher' or modelname = 'danager' or modelname = 'inspection' or modelname = 'cross' or modelname = 'personcount' or modelname = 'arm' or modelname = 'persontre' or modelname = 'bag')")
-
+        # source.sort()
+        cursor = c.execute(
+            "SELECT modelname from STREAM where (modelname = 'helmet' or modelname = 'smoke' or modelname = 'uniform' or modelname = 'fire' or modelname = 'duty'  or modelname = 'sleep' or modelname='occupancy' or modelname = 'personcar' or modelname = 'phone' or modelname = 'reflective' or modelname = 'extinguisher' or modelname = 'danager' or modelname = 'inspection' or modelname = 'cross' or modelname = 'personcount' or modelname = 'arm' or modelname = 'persontre' or modelname = 'bag')")
         contentm = cursor.fetchall()
-
         for m in contentm:
-
             modellist.append(m[0])
-
         modellist = set(modellist)
-
         n = len(content)
-
         print(f'modelname={n}')
-
         print(content)
-
-        #content.reverse()
-
+        # content.reverse()
         print(content)
-
-        #pool.submit(detectobj.infer)
-
-
-
-    #cursor = c.execute("SELECT modelname from CHANGESTREAM where modelname = 'fall'")
-
-    #content = cursor.fetchall()
-
-    #n = len(content)
-
-    #print(f'modelname={n}')
-
-    #print(content)
-
-    #content.reverse()
-
-    #print(content)
-
-    # main(opt)
-
-    #processes = []
-
-    #pool = ProcessPoolExecutor(max_workers=n)
-
-    #for i in content:
-
-        #print(i)
-
-        #detectdemo=Detect(weights=f'{i[0]}.pt')
-
-        #process = Process(target=detectdemo.infer)
-
-        #processes.append(process)
-
-        #process.start()
-
-        #detectobj = Detect(weights=f'{i[0]}.pt')
-
-    #    time.sleep(3)
-
-        #pool.submit(detectobj.infer)
-
-    #    print('111111111111111111111111111111111111111111111111111111111')
-
-        #pool.submit(TestA().func1, '张三', i)
-
-        #print('----------------------------------------------------------------')
-
-    #time.sleep(3000)
-
-    # 等待所有进程执行完毕
-
-    #for process in processes:
-
-    #    process.join()
-
-
-
-        #pool.submit(Detect(weights=f'{i[0]}.pt').infer)
-
-    # if isinstance(opt.weights,list):
-
-    #     opt.weights = opt.weights[0]
-
-    #signal.signal(signal.SIGINT, my_handler)
-
-    #detectdemo1 = Detect(weights=f'{content[0][0]}.pt')
-
-    #detectdemo1.infer()
-
-    #a = Test
-
-    #with ProcessPoolExecutor(3) as ppool:
-
-        #for i in range(3):
-
-    #        print('hello')
-
-                        #ppool.submit(self.postprocess,pred[i::3],path[i::3],im0s[i::3],dataset,im[i::3],s)
-
-            #ppool.submit(TestA().func1, '张三', i)
-
-    #ta = TestA()
-
-    #with ProcessPoolExecutor(5) as ppool: # 创建一个5个进程的进程池
-
-    #    for i in range(1, 4):
-
-    #        ppool.submit(func1, '张三', i)
-
-    #f1= pool.submit(detectdemo1.infer)
-
-    # print("线程1-----------------------------------------------------------------------------------")
-
-    #detectdemo2 = Detect(weights=r"helmet.pt")
-
-    #f2=pool.submit(detectdemo2.infer)
-
-    # print("线程2-------------------------------------------------------------------------------------")
-
-    #detectdemo3 = threading.Thread(target=detectdemo3.infer)
-
-    #detectdemo3 = Detect(weights=r"fall.pt")
-
-    #f3=pool.submit(detectdemo3.infer)
-
-