65516
DockerでPCカメラ撮影のpythonプログラムを実行すると、PCカメラが起動して撮影することが出来ます。  
以下がソースコードです。

```

    import cv2
    import os
    def save_frame_camera_key(device_num=0, dir_path='.', basename = 'camera_capture', ext='jpg', delay=1, window_name='frame'):
        cap = cv2.VideoCapture(device_num)
        if not cap.isOpened():
            return
        os.makedirs(dir_path, exist_ok=True)
        base_path = os.path.join(dir_path, basename)
        n = 0
        while True:
            ret, frame = cap.read()
            cv2.imshow(window_name, frame)
            key = cv2.waitKey(delay) & 0xFF
            if key == ord('c'):
                cv2.imwrite('{}_{}.{}'.format(base_path, n, ext), frame)
                n += 1
            elif key == ord('q'):
                break
        cv2.destroyWindow(window_name)
    save_frame_camera_key(0, 'data/temp', 'camera_capture')
    
```

しかし実行すると以下のエラー文が出てきます。

```

    VIDEOIO ERROR: V4L: can't open camera by index 0
    
```

調べてみると、cap =
cv2.VideoCapture(device_num)の()内を0から-1にすると解決するということをネット記事で見つけたので修正して実行してみたら、

```

    VIDEOIO ERROR: V4L: can't find camera device
    
```

という違うエラーが出てきました。

何か良い解決方法があれば教えていただきたいです。

## Dockerfile

```

    FROM python:3.7.3
    WORKDIR /app
    COPY cam.py /app/
    RUN apt-get update && apt-get install -y vim && apt-get install -y curl
    RUN pip install blockext==0.1.0 opencv-python==4.1.1.26
    EXPOSE 4226
    
```

## 環境

ホストOSはwindows10HomeでDockerToolboxを使っています。  
カメラはノートPCに内蔵されているカメラです。  
コンテナ内のOSはLinuxです。(おそらく)
CC BY-SA 4.0
2020-04-08T10:05:35.657
65466
2020-04-10T10:44:18.753
2020-04-10T10:44:18.753
3060
37702
question
python docker
DockerコンテナからホストPCの内蔵カメラを用いた撮影がしたい
docker for winのissueでは、内蔵カメラをコンテナから使用する事は不可能としています  
<https://github.com/docker/for-win/issues/2201>

コメントにもある通り、usb経由のカメラであればいくつか方法はあると思います。  
例えば：<https://medium.com/@jijupax/connect-the-webcam-to-docker-on-mac-or-
windows-51d894c44468>
CC BY-SA 4.0
2020-04-10T08:01:59.957
65516
2020-04-10T08:01:59.957
39410
65466
answer