前提
WSL2のUbuntu上で、OpenCVによるUSB接続されたWebカメラの映像の処理を行いたいのですが、プログラムを実行するとエラーが起きてしまいます。
WSL2にWebカメラを認識させるための環境構築は以下のサイトを参考にしました。
https://zenn.dev/pinto0309/articles/7c7ce81bea8b6c
システム
- Windows11:OS ビルド 22000.318
- WSL2
- Ubuntu:20.04.4 LTS
- Python:3.7.8
- OpenCV:4.6.0
- Webカメラ:Logicool C270n HD WEBCAM
発生している問題・エラーメッセージ
プログラムを実行した結果、以下のようなエラーが出ました。この時、カメラのランプは光っています。
[ WARN:0@10.255] global /io/opencv/modules/videoio/src/cap_v4l.cpp (1013) tryIoctl VIDEOIO(V4L2:/dev/video0): select() timeout. [ WARN:0@20.266] global /io/opencv/modules/videoio/src/cap_v4l.cpp (1013) tryIoctl VIDEOIO(V4L2:/dev/video0): select() timeout. [ WARN:0@30.276] global /io/opencv/modules/videoio/src/cap_v4l.cpp (1013) tryIoctl VIDEOIO(V4L2:/dev/video0): select() timeout. ^CTraceback (most recent call last): File "tools/webcamtest.py", line 29, in <module> ret, frame = cap.read() KeyboardInterrupt
該当のソースコード
以下が実行したプログラムのソースコードです。
Python
1import cv2 2 3W=640 4H=480 5cap = cv2.VideoCapture(0) 6cap.set(cv2.CAP_PROP_FRAME_WIDTH, W) 7cap.set(cv2.CAP_PROP_FRAME_HEIGHT, H) 8 9while True: 10 ret, frame = cap.read() 11 if not ret: 12 continue 13 cv2.imshow('usb cam test', frame) 14 if cv2.waitKey(1) & 0xFF == ord('q'): 15 break 16 17cap.release() 18cv2.destroyAllWindows()
試したこと
上記のソースコードのW(width)を640から160に、H(height)を480から120に設定して実行すると、ちゃんと映像が表示されました。
しかし、それ以上フレームの画面を大きく設定すると上記のエラーコードが出ます。
また、参考サイト(https://github.com/PINTO0309/wsl2_linux_kernel_usbcam_enable_conf) において、上記のエラーコード(select() timeout.
)についての対策が書かれていたので、その通りに進めてみたのですが、同じエラーが吐かれてしまいます。
以下に使用したコマンドとその実行結果を示します。
$ v4l2-ctl -d /dev/video0 --all Driver Info: Driver name : uvcvideo Card type : C270 HD WEBCAM Bus info : usb-vhci_hcd.0-1 Driver version : 5.10.102 Capabilities : 0x84a00001 Video Capture Metadata Capture Streaming Extended Pix Format Device Capabilities Device Caps : 0x04200001 Video Capture Streaming Extended Pix Format Priority: 2 Video input : 0 (Camera 1: ok) Format Video Capture: Width/Height : 640/480 Pixel Format : 'YUYV' (YUYV 4:2:2) Field : None Bytes per Line : 1280 Size Image : 614400 Colorspace : sRGB Transfer Function : Rec. 709 YCbCr/HSV Encoding: ITU-R 601 Quantization : Default (maps to Limited Range) Flags : Crop Capability Video Capture: Bounds : Left 0, Top 0, Width 640, Height 480 Default : Left 0, Top 0, Width 640, Height 480 Pixel Aspect: 1/1 Selection Video Capture: crop_default, Left 0, Top 0, Width 640, Height 480, Flags: Selection Video Capture: crop_bounds, Left 0, Top 0, Width 640, Height 480, Flags: Streaming Parameters Video Capture: Capabilities : timeperframe Frames per second: 30.000 (30/1) Read buffers : 0 brightness 0x00980900 (int) : min=0 max=255 step=1 default=128 value=128 contrast 0x00980901 (int) : min=0 max=255 step=1 default=32 value=32 saturation 0x00980902 (int) : min=0 max=255 step=1 default=32 value=32 white_balance_temperature_auto 0x0098090c (bool) : default=1 value=1 gain 0x00980913 (int) : min=0 max=255 step=1 default=0 value=8 power_line_frequency 0x00980918 (menu) : min=0 max=2 default=2 value=1 0: Disabled 1: 50 Hz 2: 60 Hz white_balance_temperature 0x0098091a (int) : min=0 max=10000 step=10 default=4000 value=4280 flags=inactive sharpness 0x0098091b (int) : min=0 max=255 step=1 default=24 value=24 backlight_compensation 0x0098091c (int) : min=0 max=1 step=1 default=1 value=1 exposure_auto 0x009a0901 (menu) : min=0 max=3 default=3 value=3 1: Manual Mode 3: Aperture Priority Mode exposure_absolute 0x009a0902 (int) : min=1 max=10000 step=1 default=156 value=156 flags=inactive exposure_auto_priority 0x009a0903 (bool) : default=0 value=1 $ v4l2-ctl -d /dev/video0 --list-formats-ext ioctl: VIDIOC_ENUM_FMT Type: Video Capture [0]: 'YUYV' (YUYV 4:2:2) Size: Discrete 640x480 Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.040s (25.000 fps) Interval: Discrete 0.050s (20.000 fps) Interval: Discrete 0.067s (15.000 fps) Interval: Discrete 0.100s (10.000 fps) Interval: Discrete 0.200s (5.000 fps) Size: Discrete 160x120 Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.040s (25.000 fps) Interval: Discrete 0.050s (20.000 fps) Interval: Discrete 0.067s (15.000 fps) Interval: Discrete 0.100s (10.000 fps) Interval: Discrete 0.200s (5.000 fps) Size: Discrete 176x144 Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.040s (25.000 fps) Interval: Discrete 0.050s (20.000 fps) Interval: Discrete 0.067s (15.000 fps) Interval: Discrete 0.100s (10.000 fps) Interval: Discrete 0.200s (5.000 fps) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Size: Discrete 1280x720 Interval: Discrete 0.133s (7.500 fps) Interval: Discrete 0.200s (5.000 fps) Size: Discrete 1280x960 Interval: Discrete 0.133s (7.500 fps) Interval: Discrete 0.200s (5.000 fps) [1]: 'MJPG' (Motion-JPEG, compressed) Size: Discrete 640x480 Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.040s (25.000 fps) Interval: Discrete 0.050s (20.000 fps) Interval: Discrete 0.067s (15.000 fps) Interval: Discrete 0.100s (10.000 fps) Interval: Discrete 0.200s (5.000 fps) Size: Discrete 160x120 Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.040s (25.000 fps) Interval: Discrete 0.050s (20.000 fps) Interval: Discrete 0.067s (15.000 fps) Interval: Discrete 0.100s (10.000 fps) Interval: Discrete 0.200s (5.000 fps) Size: Discrete 176x144 Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.040s (25.000 fps) Interval: Discrete 0.050s (20.000 fps) Interval: Discrete 0.067s (15.000 fps) Interval: Discrete 0.100s (10.000 fps) Interval: Discrete 0.200s (5.000 fps) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Size: Discrete 1280x720 Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.040s (25.000 fps) Interval: Discrete 0.050s (20.000 fps) Interval: Discrete 0.067s (15.000 fps) Interval: Discrete 0.100s (10.000 fps) Interval: Discrete 0.200s (5.000 fps) Size: Discrete 1280x960 Interval: Discrete 0.033s (30.000 fps) Interval: Discrete 0.040s (25.000 fps) Interval: Discrete 0.050s (20.000 fps) Interval: Discrete 0.067s (15.000 fps) Interval: Discrete 0.100s (10.000 fps) Interval: Discrete 0.200s (5.000 fps)
参考サイトによると、この実行結果により映像のフレームをWidth640、Height480とすればいいらしいので、上記に記載したPythonのプログラムのように640と480に設定して実行したのですが、上手くいきません。
Widthを1280、Heightを720などにしても同じエラーが吐かれました。
また、このコマンドの実行結果はこのサイト(https://qiita.com/ghibi/items/50a40a4f56efd0bda767) を参考にして強制的にフォーマットを640x480 YUYVにした後の実行結果となっています。
ただ、これをする前にも上記のコマンドの実行結果にはWidthが640、Heigthが480となっていた(と思う)ので、どちらにしろ結果は変わらなかったと思います。
PCの内臓のWebカメラでも上記と同様の操作をしましたが、同様のエラーが起きました。
どうすれば640×480 かそれ以上の大きさで映像を映せるでしょうか?
以下が参考にしたサイトです。
https://zenn.dev/pinto0309/articles/7c7ce81bea8b6c
https://github.com/PINTO0309/wsl2_linux_kernel_usbcam_enable_conf
https://qiita.com/ghibi/items/50a40a4f56efd0bda767

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。