Ошибка 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())
Я думаю, что мне нужно считывать кадр из видео с помощью другого подхода, но я не уверен, что проблема действительно в этом. Я буду благодарен за помощь в решении этой проблемы.