Задать вопрос
@kas1

YOLO модель работает медленно?

Мой код с использованием предобученной моделью yolov8n имеет на обычном запуске в среднем 30 фпс. Я сделал мультипоточность но резудьтат улучшился не сильно. Как увеличить фпс?

import threading
from huggingface_hub import hf_hub_download
from ultralytics import YOLO as yolo
from supervision import Detections
from PyQt5 import *
from PIL import Image
import random
import time
import cv2

model = yolo("yolov3.pt")

frame_count = 0
results = []


videoCap = cv2.VideoCapture(0)
ret, frame = videoCap.read()

train_folder = "dataset_craters/train"
test_folder= "dataset_craters/test"
valid_folder="dataset_craters/valid"
yaml_file= "dataset_craters/data.yaml"


def getColours(cls_num):
    """Generate unique colors for each class ID"""
    random.seed(cls_num)
    return tuple(random.randint(0, 255) for _ in range(3))

def detect():
    global results, frame
    while True:
        output = model(frame)
        results = Detections.from_ultralytics(output[0])
        time.sleep(0.0017)

t1 = threading.Thread(target=detect)
t1.start()

safe = True

while True and safe:
    ret, frame = videoCap.read()
    for result in results:
        class_names = result[5]
        if "person" in class_names['class_name']:
            safe = True
            print("person detected")
        conf = result[2]
        for box in result[0]:
            if conf > 0.6:
                x1, y1, x2, y2 = map(int, result[0])

                # cls = int(box.cls[0])
                class_name = class_names['class_name']

                # conf = float(box.conf[0])

                colour = getColours(class_name)

                cv2.rectangle(frame, (x1, y1), (x2, y2), colour, 2)

                cv2.putText(frame, f"{class_name} {conf:.2f}",
                            (x1, max(y1 - 10, 20)), cv2.FONT_HERSHEY_SIMPLEX,
                            0.6, colour, 2)
                time.sleep(0.025)
    if frame is not None:
        cv2.imshow("Video", frame)
    if cv2.waitKey(1) == ord('q'):
        break
    frame_count += 1

t1.join()
exit()

videoCap.release()
cv2.destroyAllWindows()
  • Вопрос задан
  • 44 просмотра
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы