Мой код с использованием предобученной моделью 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()