簡體   English   中英

在 Docker 中使用 OpenCV (Python) 訪問網絡攝像頭?

[英]Access webcam using OpenCV (Python) in 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 ,我做錯了什么?

您提供的鏈接中的 Dockerfile 沒有指定 opencv 是如何安裝的,您能提供您使用的 Dockerfile 嗎? 或者你是怎么安裝opencv的?

如果您通過 pip 安裝 opencv,則 VideoCapture(0) 將無法工作。

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

嘗試使用這個:

-v /dev/video0:/dev/video0

代替

--device=/dev/video0 

並執行:

$ xhost + 

docker 運行之前

我發現讓 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()

我在使用非特權 Dockerfile(即使用 USER 行)時遇到問題:

容器必須以--user {UID}開頭; NOT --user {UID}:{GID} (與user: docker-compose.yml 中的行,如果設置了 gid。奇怪的是,這不會繼承訪問網絡攝像頭文件(/dev/video0 等)所需的視頻組權限.), 另外; 必須將內部 Dockerfile 用戶添加到視頻組中:在 USER 行之后添加它(並且在安裝 sudo 並將用戶添加到 sudoers 之后):

RUN sudo usermod -a -G video <InternalUsername>

在你嘗試這些步驟之前:在特權模式下運行所有的東西來測試你的問題是否真的出在這里。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM