Почему YOLO не работает если я запускаю его в отдельном потоке

У меня есть задача: нужно разработать сервис на Fast API, внутри которого будет запущена фоновая задача с распознаванием YOLO v8. Распознаваться будут изображения полученные с IP-камеры, поэтому нужно чтобы человек один раз запустил сервис, и этот сервис работал неограниченное время в фоновом режиме, пока его не отключат. Для реализации этой задачи я использую библиотеки ultralytics для запуска YOLO и OpenCV для получения изображения с IP-камеры в реальном времени.

Сейчас у меня есть метод detect, в котором работает YOLO.

def detect(source_rtsp):
    vac = cv2.VideoCapture(source_rtsp)
    model = YOLO('yolov8n.pt')
    while vac.isOpened():
        RTSP_STATUS, RTSP_FRAME = vac.read()
        if RTSP_FRAME is None:
            continue

        res_generator = model.track(RTSP_FRAME, conf=0.4, stream=True, persist=True, tracker='bytetrack.yaml', classes=[x for x in range(10)],verbose=False)

Этот метод я запускаю в отдельном потоке.

    detect_thread = Thread(
        target=detect,
        daemon=True,
        kwargs={
                    'source_rtsp': 'rtsp://1.1.1.0',
                }
    )
    detect_thread.start()

Когда я запускаю метод detect в отдельном потоке, то он выполняется до строчки res_generator = model.track(...), после чего происходит очень долгое ожидание. Если не запускать метод detect в отдельном потоке, то всё работает нормально.

Что мне надо?

Мне нужно сделать так, чтобы YOLO без проблем работал в отдельном потоке или найти другой способ запускать YOLO как фоновую задачу.


Ответы (0 шт):