Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Docker中使用OpenCV(Python)访问网络摄像头?_Python_Opencv_Docker - Fatal编程技术网

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

在Docker中使用OpenCV(Python)访问网络摄像头?,python,opencv,docker,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=/d

我正在尝试将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
,我做错了什么?

您提供的链接中的Dockerfile没有指定如何安装opencv,您可以提供您使用的Dockerfile吗?或者你是如何安装opencv的

如果通过pip安装opencv,视频捕获(0)将无法工作

您正在正确使用
--device=/dev/video0:/dev/video0

请尝试使用以下方法:

-v /dev/video0:/dev/video0
代替

--device=/dev/video0 
并执行:

$ xhost + 

在docker run(docker运行)之前,我发现最简单的方法是使用以下Dockerfile(docker文件)将docker化的OpenCV连接到您的网络摄像头:

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()

我认为不能保证
cv2.VideoCapture(0)
实际上是
/dev/video0
。你试过video1等吗?这是哪种Linux?@karlphillip是的,我试过了,还有它的Ubuntu 16.04。我知道这可能意味着。。。但是
/dev/video0
真的可以在主机上工作吗?它是否已经过类似VLC(
VLCV4L2:///dev/video0
)的测试?我知道这也可能不重要,但为了完整起见,请谨慎地提及所涉及内容的版本,可能还有用于构建
rec
映像的
Dockerfile
。@AndyShinn我已经尝试在主机上运行过,它可以正常工作。docker图像是基于啊,我确实通过pip安装了opencv。我应该如何安装它?试着用这个代替。它是Ubuntu14.04,包括dlib和opencvI,还为您添加了一些行,以便在dockerfile末尾取消注释,这些行位于面部识别dockerfile中