gpt4 book ai didi

python - cv2.VideoCapture 无法在 mac 主机上的 docker 容器中工作

转载 作者:太空宇宙 更新时间:2023-11-03 22:46:47 27 4
gpt4 key购买 nike

我无法在 Mac OS Sierra 10.12.6 主机上的 Ubuntu 16.04 docker 容器中打开网络摄像头或捕获视频。

vid = cv2.VideoCapture(0)

其中 vid.isOpened() 返回 Falseret, img = vid.read() 返回 False, None

我不只是使用 pip 中的 opencv。我从源代码编译了cv2。应安装 ffmpeg。容器是否无法连接到网络摄像头设备?

我尝试运行 docker:

docker run -it --privileged --device=/dev/video0:/dev/video0 --entrypoint /bin/bash <ImageID>

我的 dockerfile 如下:

#
# Ubuntu Dockerfile
#
# https://github.com/dockerfile/ubuntu
#

# Pull base image.
FROM ubuntu:16.04

# Install.
RUN \
sed -i 's/# \(.*multiverse$\)/\1/g' /etc/apt/sources.list && \
apt-get update && \
apt-get -y upgrade && \
apt-get install -y build-essential && \
apt-get install -y software-properties-common && \
apt-get install -y byobu curl git htop man unzip vim wget && \
apt-get install -y cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libv4l-dev && \
apt-get install -y python-dev python-numpy libtbb2 libtbb-dev libjpeg8-dev libpng12-dev libtiff5-dev libjasper-dev libdc1394-22-dev && \
apt-get install -y libxvidcore-dev libx264-dev && \
apt-get install -y libgtk-3-dev && \
apt-get install -y libatlas-base-dev gfortran && \
apt-get install -y libopencv-dev && \
rm -rf /var/lib/apt/lists/*


RUN apt-get update && apt-get install python2.7-dev python3.5-dev

# Set environment variables.
ENV HOME /root

# Define working directory.
WORKDIR /root

# Get OpenCV
RUN wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip
RUN unzip opencv.zip
RUN wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip
RUN unzip opencv_contrib.zip

# GET PIP
RUN apt-get update && apt-get install -y python3-pip
RUN pip3 install numpy

# Build OpenCV
## NOTE: cd wont work by itself, need to be with the actual command to be performed
WORKDIR /root/opencv-3.1.0
RUN mkdir build
WORKDIR /root/opencv-3.1.0/build
RUN cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.1.0/modules \
-D BUILD_EXAMPLES=ON \
-D PYTHON_EXECUTABLE=/usr/bin/python3.5 \
-D PYTHON_PACKAGES_PATH=/usr/local/lib/python3.5/site-packages \
-D PYTHON_NUMPY_INCLUDE_DIR=/usr/local/lib/python3.5/dist-packages/numpy/core/include ..

RUN make -j4
RUN make install
RUN ldconfig

## RENAME BUILT cv2.so
WORKDIR /usr/local/lib/python3.5/dist-packages
RUN mv cv2.cpython-35m-x86_64-linux-gnu.so cv2.so
WORKDIR /usr/local/lib/python3.5/site-packages
RUN ln -s /usr/local/lib/python3.5/dist-packages/cv2.so cv2.so

## DELETE DIRECTORIES
# WORKDIR /root
# RUN rm -rf opencv-3.1.0 opencv_contrib-3.1.0 opencv.zip opencv_contrib.zip

# Define default command.
CMD ["bash"]

最佳答案

您不能使用 Docker for Mac 执行此操作。问题是 Docker 运行 Hyperkit这又基于 Xhyve

如果你阅读了xhyve的自述文件

Notably absent are sound, USB, HID and any kind of graphics support. With a focus on server virtualization this is not strictly a requirement. bhyve may gain desktop virtualization capabilities in the future but this doesn't seem to be a priority.

因此,在 Hyperkit VM 中运行的 docker 容器将永远无法访问该设备。

您的 --device=/dev/video0:/dev/video0 只是从容器内部映射一个设备,它可能根本不在 VM 中。

那么你有什么选择呢?不要使用 Docker for Mac,而是使用 VirtualBox 或 VMWare fusion。在其中创建一个 Ubuntu 16.04 或任何其他受支持的操作系统 VM。使用 VM 的设置与 VM 共享网络摄像头设备。现在您的 VM 操作系统将拥有该设备。

在您的 VM 中安装 docker 并访问设备。

关于python - cv2.VideoCapture 无法在 mac 主机上的 docker 容器中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45843284/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com