在Docker中使用OpenCV(Python)访问网络摄像头?

时间:2017-06-30 18:02:41

标签: python opencv docker

我尝试将Docker用于我们的一个项目,该项目使用OpenCV来处理网络摄像头源(Python)。但我似乎无法访问docker中的网络摄像头,这是我用来测试网络摄像头访问的代码:

python -c "import cv2;print(cv2.VideoCapture(0).isOpened())"

这是我到目前为止所尝试的内容,

 docker run --device=/dev/video0 -it rec bash

 docker run --privileged --device=/dev/video0 -it rec bash

 sudo docker run --privileged --device=/dev/video0:/dev/video0 -it rec bash

所有这些都返回False,我做错了什么?

2 个答案:

答案 0 :(得分:0)

尝试使用此功能:

-v /dev/video0:/dev/video0

代替

--device=/dev/video0 

并执行:

$ xhost + 

docker运行之前

答案 1 :(得分:0)

我发现让 dockerized OpenCV 能够连接到您的网络摄像头的最简单方法是使用以下 Dockerfile :

FROM ubuntu:20.04

ENV TERM=xterm
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y --no-install-recommends \
    libopencv-dev \
    python3-opencv \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

WORKDIR /app
ADD . /app

ENV PYTHONUNBUFFERED=1
ENV PYTHONPATH=/app

然后构建它并以这种方式运行:

docker build -t opencv-webcam .
docker run -it -v $PWD:/app/ --device=/dev/video0:/dev/video0 -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY opencv-webcam bash

并使用 python3 script.py 在容器内运行以下脚本:

import cv2


WINDOW_NAME = "Opencv Webcam"

def run():

    cv2.namedWindow(WINDOW_NAME)

    video_capture = cv2.VideoCapture(0)

    while True:
        ret, frame = video_capture.read()
        print(ret, frame.shape)

        cv2.imshow(WINDOW_NAME, frame)
        cv2.waitKey(1)

if __name__ == "__main__":
    run()