Ошибка assertion fctx при использовании Django & Opencv

У меня есть приложение на python с фреймворком Django. Я отображаю видео поток с обнаружением, используя yolov5, иногда поток падает и отображается вот такая ошибка Assertion fctx->async_lock failed at libavcodec/pthread_frame.c:167 Я думаю, что это происходит из-за моей функции detection(). Цель функции detection() заключается в том, чтобы посылать клиенту процент обнаружения в любое время, когда я обнаруживаю появление моего пользовательского объекта в видео.

cap = cv2.VideoCapture("video.mp4")


def stream():
    model.iou=0.5
    while (cap.isOpened()):
        ret, frame = cap.read()
        if not ret:
            print("Error: failed to capture image")
            break
        results = model(frame,augment=False)
        for i in results.render():
            data=im.fromarray(i)
            data.save('demo.jpg')
        annotator = Annotator(frame, line_width=2, pil=not ascii)

        im0 = annotator.result()
        image_bytes = cv2.imencode('.jpg', im0)[1].tobytes()
        yield (b'--frame\r\n'
               b'Content-Type: image/jpeg\r\n\r\n' + image_bytes + b'\r\n')
    cap.release()
    cv2.destroyAllWindows()



def detection():
        if(cap.isOpened()):
            ret,frame = cap.read()
            if not ret:
                print("Erorr:faild to capture image")
                data={"isRunning":False} 
                dataJson=json.dumps(data)
                return dataJson
            results = model(frame, augment=False)  
            pred = results.pandas().xyxy[0]
            for index, row in pred.iterrows():
                if float(row['confidence']) > 0.15:
                    detection=float(row['confidence'])
                    det = '%.2f' % detection
                    data={"det":det,"isRunning":cap.isOpened()}
                    dataJson=json.dumps(data)
                    return dataJson
            data={"isRunning":cap.isOpened()}
            dataJson=json.dumps(data)               
            return dataJson
        data={"isRunning":False}
        dataJson=json.dumps(data)               
        return dataJson

def video_feed(request):
    return StreamingHttpResponse(stream(), content_type='multipart/x-mixed-replace; boundary=frame')   

def detection_percentage(request):
    return HttpResponse(detection())

Я думаю, что мне нужно считывать кадр из видео с помощью другого подхода, но я не уверен, что проблема действительно в этом. Я буду благодарен за помощь в решении этой проблемы.

Вернуться на верх