Попытка отобразить запись с веб-камеры на веб-странице с помощью OpenCV (Django) при использовании docker
Я пытаюсь создать систему распознавания лиц - мой проект - DJango, и я развернул его на docker, однако я сталкиваюсь с проблемами при попытке получить доступ к веб-камере через docker.
Вот мой код:
views.py:
class mycamera(object):
def __init__(self):
self.frames = cv2.VideoCapture(0)
def __del__(self):
self.frames.release()
def get_jpg_frame(self):
is_captured, frame = self.frames.read()
retval, jframe = cv2.imencode('.jpg', frame)
return jframe.tobytes()
def livefeed():
camera_object = mycamera()
while True:
jframe_bytes = camera_object.get_jpg_frame()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + jframe_bytes + b'\r\n\r\n')
@condition(etag_func=None)
def display_livefeed(self):
return StreamingHttpResponse(
livefeed(),
content_type='multipart/x-mixed-replace; boundary=frame'
)
urls.py:
from users import views as user_views
path('vidstream/', user_views.display_livefeed, name='vidStream')
Код ошибки при доступе к 0.0.0.0:8000/vidstream/:
web_1 | [04/Jan/2022 17:47:16] "GET /vidstream/ HTTP/1.1" 500 59
web_1 | [ WARN:0@3.508] global /io/opencv/modules/videoio/src/cap_v4l.cpp (889) open VIDEOIO(V4L2:/dev/video0): can't open camera by index
web_1 | Traceback (most recent call last):
web_1 | File "/usr/local/lib/python3.10/wsgiref/handlers.py", line 138, in run
web_1 | self.finish_response()
web_1 | File "/usr/local/lib/python3.10/wsgiref/handlers.py", line 183, in finish_response
web_1 | for data in self.result:
web_1 | File "/code/users/views.py", line 81, in livefeed
web_1 | jframe_bytes = camera_object.get_jpg_frame()
web_1 | File "/code/users/views.py", line 75, in get_jpg_frame
web_1 | retval, jframe = cv2.imencode('.jpg', frame)
web_1 | cv2.error: OpenCV(4.5.5) /io/opencv/modules/imgcodecs/src/loadsave.cpp:976: error: (-215:Assertion failed) !image.empty() in function 'imencode'
web_1 |
web_1 | [04/Jan/2022 17:47:17] "GET /vidstream/ HTTP/1.1" 500 59
Я протестировал этот код на проекте Django, который не развернут на Docker, и я получаю видеоматериалы на UI, поэтому я знаю, что проблема кроется в docker.
Любая помощь будет очень признательна - спасибо!
Могли бы вы также предоставить ваш Dockerfile, и команду, как вы создали этот образ (или docker-compose)?