質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

8332閲覧

Raspberry Piにウェブカメラを4つ接続させて、画面上に映し出したい

hekatonkeiru

総合スコア9

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/07/28 04:41

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決できました。
フレームレートを30⇒10に変更したらうまく映りました。

change frame rate in opencv 3.4.2
を参考にして下記のコードしました。

captureMultiCamera

1import numpy as np 2import cv2 3 4video_capture_0 = cv2.VideoCapture(0) 5video_capture_0.set(cv2.CAP_PROP_FPS, 10) 6 7video_capture_2 = cv2.VideoCapture(2) 8video_capture_2.set(cv2.CAP_PROP_FPS, 10) 9 10video_capture_4 = cv2.VideoCapture(4) 11video_capture_4.set(cv2.CAP_PROP_FPS, 10) 12 13video_capture_6 = cv2.VideoCapture(6) 14video_capture_6.set(cv2.CAP_PROP_FPS, 10) 15 16while True: 17 # Capture frame-by-frame 18 ret0, frame0 = video_capture_0.read() 19 ret2, frame2 = video_capture_2.read() 20 ret4, frame4 = video_capture_4.read() 21 ret6, frame6 = video_capture_6.read() 22 23 im_v1 = cv2.vconcat([frame0, frame2]) 24 im_v2 = cv2.vconcat([frame4, frame6]) 25 26 im_v3 = cv2.hconcat([im_v1, im_v2]) 27 cv2.imshow('concat', im_v3) 28 29 if cv2.waitKey(1) & 0xFF == ord('q'): 30 cv2.imwrite('photo.jpg', frame0) 31 break 32 33# When everything is done, release the capture 34video_capture_0.release() 35video_capture_2.release() 36video_capture_4.release() 37video_capture_6.release() 38 39cv2.destroyAllWindows()

イメージ説明

投稿2021/07/29 00:26

編集2021/07/29 00:28
hekatonkeiru

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問