前提・実現したいこと
Raspberry Piにwebカメラを4つ接続させて下記のように映し出したいですが、うまくいきません。
方法やライブラリは特に問いません。
知っている方がおられるなら教えていただいてもよろしいでしょうか?
発生している問題
下記のようなエラーメッセージが表示されます。
error
1select timeout 2VIDIOC_DQBUF: Resource temporarily unavailable 3Traceback (most recent call last): 4 File "capture.py", line 27, in <module> 5 im_v3 = cv2.hconcat([im_v1, im_v2]) 6cv2.error: OpenCV(4.1.0) /home/pi/opencv-python/opencv/modules/core/src/matrix_operations.cpp:68: error: (-215:Assertion failed) src[i].dims <= 2 && src[i].rows == src[0].rows && src[i].type() == src[0].type() in function 'hconcat'
現状のソースコード
Using Multiple Cameras with OpenCV
Python, OpenCVで画像を縦・横に連結 (hconcat, vconcat, np.tile)
を参考にして下記のようなプログラムにしました。
capture
1import numpy as np 2import cv2 3 4video_capture_0 = cv2.VideoCapture(0) 5video_capture_2 = cv2.VideoCapture(2) 6video_capture_4 = cv2.VideoCapture(4) 7video_capture_6 = cv2.VideoCapture(6) 8 9while True: 10 # Capture frame-by-frame 11 ret0, frame0 = video_capture_0.read() 12 ret2, frame2 = video_capture_2.read() 13 ret4, frame4 = video_capture_4.read() 14 ret6, frame6 = video_capture_6.read() 15 16 im_v1 = cv2.vconcat([frame0, frame2]) 17 im_v2 = cv2.vconcat([frame4, frame6]) 18 19 im_v3 = cv2.hconcat([im_v1, im_v2]) 20 cv2.imshow('concat', im_v3) 21 22 if cv2.waitKey(1) & 0xFF == ord('q'): 23 cv2.imwrite('photo.jpg', frame0) 24 break 25 26# When everything is done, release the capture 27video_capture_0.release() 28video_capture_2.release() 29video_capture_4.release() 30video_capture_6.release() 31 32cv2.destroyAllWindows()
試したこと
下のようなソースコードを実行したところ、問題なく動作しました。
カメラが2つまでなら問題はないようです。
cap2ver1
1import numpy as np 2import cv2 3 4video_capture_4 = cv2.VideoCapture(4) 5video_capture_6 = cv2.VideoCapture(6) 6 7while True: 8 # Capture frame-by-frame 9 ret4, frame4 = video_capture_4.read() 10 ret6, frame6 = video_capture_6.read() 11 12 im_v2 = cv2.vconcat([frame4, frame6]) 13 cv2.imshow('4&6', im_v2) 14 15 if cv2.waitKey(1) & 0xFF == ord('q'): 16 cv2.imwrite('photo.jpg', frame0) 17 break 18 19# When everything is done, release the capture 20video_capture_4.release() 21video_capture_6.release() 22 23cv2.destroyAllWindows()
cap2ver2
1import numpy as np 2import cv2 3 4video_capture_0 = cv2.VideoCapture(0) 5video_capture_2 = cv2.VideoCapture(2) 6 7while True: 8 # Capture frame-by-frame 9 ret0, frame0 = video_capture_0.read() 10 ret2, frame2 = video_capture_2.read() 11 12 im_v1 = cv2.vconcat([frame0, frame2]) 13 cv2.imshow('0&2', im_v1) 14 15 if cv2.waitKey(1) & 0xFF == ord('q'): 16 cv2.imwrite('photo.jpg', frame0) 17 break 18 19# When everything is done, release the capture 20video_capture_0.release() 21video_capture_2.release() 22 23 24cv2.destroyAllWindows()
現状の設定
ターミナル上で「v4l2-ctl --list-devices」と実行したところ下記のようになりました。
result
1bcm2835-codec-decode (platform:bcm2835-codec): 2 /dev/video10 3 /dev/video11 4 /dev/video12 5 6bcm2835-isp (platform:bcm2835-isp): 7 /dev/video13 8 /dev/video14 9 /dev/video15 10 /dev/video16 11 12HD Pro Webcam C920 (usb-0000:01:00.0-1.1): 13 /dev/video0 14 /dev/video1 15 16HD Pro Webcam C920 (usb-0000:01:00.0-1.2): 17 /dev/video2 18 /dev/video3 19 20HD Pro Webcam C920 (usb-0000:01:00.0-1.3): 21 /dev/video4 22 /dev/video5 23 24HD Pro Webcam C920 (usb-0000:01:00.0-1.4): 25 /dev/video6 26 /dev/video7
補足情報
使用機器:
Raspberry Pi 4 Computer Model B
Logitech C920 HD Pro × 4台
OS情報:
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 10 (buster)
Release: 10
Codename: buster
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。