在Docker中使用OpenCV(Python)访问网络摄像头?
我正在尝试将Docker用于我们的一个项目,该项目使用OpenCV处理网络摄像头提要(Python)。但我似乎无法在docker中访问网络摄像头,以下是我用来测试网络摄像头访问的代码:在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
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中