Низкий FPS при обнаружении объектов на процессореPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Низкий FPS при обнаружении объектов на процессоре

Сообщение Anonymous »


Я работаю над задачей обнаружения людей на ЦП, мне нужно выполнить эту задачу только на ЦП. Я обучил YOLO v8, но он работает медленно на процессоре. Подскажите, пожалуйста, как повысить FPS, чтобы он работал идеально, или вы можете предложить мне другие алгоритмы, чтобы я тоже мог над этим поработать.

импортировать cv2 импортировать numpy как np от ультралитиков импортных YOLO импорт сокета импорт потоков из concurrent.futures импортировать ThreadPoolExecutor время импорта обнаружение_цветов = [0, 255, 0] classNames = ["человек"] количество = 0 счетчик_офф = 0 count_frame=0 пропустить_frames=4 модель = YOLO("вес/yolov8n.onnx") Frame_wid = 800 Frame_hyt = 480 защита hooter_delay(): время.сон(10) сообщение="ВЫКЛ" threading.Thread(target= data_sender,args=(message,), daemon=True).start() def Making_rect(bb, clsID): глобальный подсчет cv2.rectangle(frame,(int(bb[0]), int(bb[1])),(int(bb[2]), int(bb[3])),[0, 255, 0], 2) шрифт = cv2.FONT_HERSHEY_COMPLEX cv2.putText(frame,classNames[int(clsID)] + "%",(int(bb[0]), int(bb[1]) - 10),font,1,(255, 255, 255), 2,) счет+=1 если счетчик == 1: сообщение="ВКЛ" threading.Thread(target= data_sender,args=(message,), daemon=True).start() threading.Thread(target= hooter_delay, daemon=True).start() защита data_sender (сообщение): с сокетом.socket(socket.AF_INET, сокет.SOCK_STREAM) в качестве data_socket: data_socket.connect(('192.168.1.70', 502)) data_socket.send(message.encode()) распечатать (сообщение) Защиту Process_frame (кадр): глобальный count_frame,skip_frames, count счетчик_кадров +=1 кадр = cv2.resize(frame,(frame_wid,frame_hyt)) если Skip_frames > 0 и count_frame%skip_frames==0: Detect_params = model.predict(source=frame, conf=0.25, save=False, show=False, verbose=False,class=[0], iou=0.7, device="CPU") ДП = обнаружить_параметры[0].numpy() если len(DP) != 0: для i в диапазоне (len(detect_params[0])): box =Detect_params[0].boxes коробка = коробки[я] clsID = box.cls.numpy()[0] конф = box.conf.numpy()[0] bb = box.xyxy.numpy()[0] если classNames[int(clsID)] == 'человек': если конф >= 0,45: threading.Thread(target= Making_rect,args=(bb, clsID,), daemon=True).start() еще: количество = 0 ## count_off += 1 ## если count_off == 1: ## сообщение = 'ВЫКЛ' ## threading.Thread(target= data_sender,args=(message,), daemon=True).start() возвратный кадр video_source = "rtsp://admin:Shiv@[email protected]/cam/realmonitor?channel=1&subtype=0" ##video_source = "rtsp://admin:Pass@[email protected]/H264?ch=1&subtype=0" ##video_source=0 cap = cv2.VideoCapture(video_source) cap.set(cv2.CAP_PROP_FPS, 30) если не cap.isOpened(): print("Невозможно открыть камеру") Выход() с ThreadPoolExecutor(max_workers=2) в качестве исполнителя: в то время как cap.isOpened(): ret, кадр = cap.read() кадр = кадр[:,150:] если не ret или рамка имеет значение None: print("Невозможно получить кадр (конец потока?). Выход...") еще: обработанный_кадр = executor.submit(process_frame,frame).result() если обработанный_фрейм не равен None: cv2.imshow("Обнаружение объекта", обработанный_кадр) если cv2.waitKey(1) == ord("q"): перерыв крышка.релиз() cv2.destroyAllWindows() Применение заключается в том, что всякий раз, когда мой алгоритм видит любого человека как объект, он отправляет сообщение «ВКЛ» на определенный IP-адрес, а затем через 10 секунд на этот конкретный IP-адрес будет отправлено сообщение «ВЫКЛ».

Пожалуйста, помогите мне
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»