Попытка отобразить запись с веб-камеры на веб-странице с помощью 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)?

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