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

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

新規登録して質問してみよう
ただいま回答率
85.47%
Raspberry Pi

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

Python

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

Q&A

解決済

2回答

751閲覧

Python_USBカメラ2台使用し静止画を撮影・保存したいです。

bend

総合スコア3

Raspberry Pi

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

Python

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

0グッド

0クリップ

投稿2023/02/10 02:43

Python初心者です。説明の分かりずらい・不足している箇所があるかもしれませんが宜しくお願い致します。

■ラズパイ1つとUSBカメラを2台使用し、対象物を上からと横からを静止画で撮影し、保存したいです。(各1枚ずつ保存したいです)

USBカメラ1台では撮影で、その際に使用したプログラムは下記の内容です。

import cv2
camera = cv2.VideoCapture(1) #カメラ1でインスタンス作成
while True:
ret, frame = camera.read() #1コマ分のカメラ画像の読み込み
if ret == 0 : #正常に読めない場合は繰り返し処理から抜ける
break
cv2.imshow("カメラ画像",frame) #画像表示
key = cv2.waitKey(1) #キー入力確認
if key == 97: #小文字のaが押されたら繰り返し処理から抜ける
break
camera.release() #キャプチャー終了
cv2.destroyAllWindows() #フレーム表示の終了

USBカメラ2台verのプログラムが分からず教えて頂きたいです。
ちなみに、1台で撮影している際、定期的に[cv2.imshow("カメラ画像",frame]でエラーになり、2行目のカメラ1を2に変えて撮影し対応していません。(原因はいまいちわかっていません)

分かりずらい所があるかと思いますが、宜しくお願い致します。

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

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

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

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

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

y_waiwai

2023/02/10 02:51

エラーが出たなら、エラーメッセージを提示しましょう エラーメッセージは、よけいな省略翻訳しないで出たそのママをコピペで提示してください
guest

回答2

0

Python側から正しくUSBカメラを調べる

確かPython単体だと(USBカメラを抜き差しするたびに番号が不定になるような具合で)「どのパスのカメラが生きているか(正確に接続されてデバイスとして認識しているか)」をスマートに探る方法はなかったように思います。
なので、

のようにするのが良いと思います。またこれらのように、Pythonから外部のコマンドを走らせるにはsubprocessから行けます。
作例を公開している人のURLを見つけました。対象ファイルは「cam_list_test.py」です。(さかじさん@classmethod.jp )

※ただし、単にパスが分かればいいという話では済まないこともあります。というのも、REALSENSEのような変態カメラをOpenCV経由でアクセスすると、一台のカメラに3つのデバイス(BGRカメラ...OpenCVからはBGRのため、赤外線カメラ、LiDARの深度)のようになっていることがあるためです。こういう時には、パスの情報を元にカメラがどういう素性のカメラか調べるコマンドも併せて走らせて確認する必要があります。例えば、 v4l2-ctl --device=/dev/video0 --allのようにすると、カメラの詳しい素性を知ることができるため、この素性を元に狙ったカメラ情報が得られた場合にはBGRカメラとしてOpenCVからアクセスできます。

正しくUSBカメラから画像を取得する(転ばぬ先の杖)

使っている/使っていないを問わず、USBデバイスは接続するだけでCPUの負荷が上がります。さらに、OpenCVでcap = cv2.VideoCapture(0)のような処理をしているかどうかを問わず接続中のカメラの解像度が高ければ高いだけUSBの帯域を食いつぶします。何が起きるかというと、カメラの解像度にも寄りますが、複数のUSBカメラを接続すると画像が乱れることが、最悪の場合USBカメラから画像を取得することが原因でフリーズすることがあります。

こういう時には、USBカメラの解像度を落とす対応をしてください。

投稿2023/02/10 23:56

編集2023/02/11 00:37
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

調べてみると、

カメラの番号は、内蔵カメラが0、さらにUSBで追加のカメラを接続すると1のように基本的には0から順番に割り当てられているはず(公式ドキュメントのチュートリアルによると-1の場合もあるとのこと)。とりあえず順番に試してみればよい。

ということらしいので、カメラを2台接続した状態で何番なのか調査して、1と2であれば、以下のようにデバイス2台のカメラのインスタンスを別々に作って、それぞれで画像をキャプチャすればよいのではないかと思います。

python

1camera1 = cv2.VideoCapture(1) 2camera2 = cv2.VideoCapture(2)

投稿2023/02/10 04:36

TakaiY

総合スコア12779

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問