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

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

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

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

Q&A

解決済

2回答

20029閲覧

複数のUSBカメラの論理番号の固定化について

MasahikoHirata

総合スコア3747

OpenCV

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

0グッド

2クリップ

投稿2017/06/23 13:15

OpenCVとDirectXにて画像の認識ソフトを作成しています。
今までは1台のカメラにて様々な開発、検証が出来ています。

今回、3台のUSBカメラでメーカーが同じ、型番が同じものを使用して、ソフトの作成を行っていますが、OpenCvやDirectXではオープン時に認識順で論理番号の割り当てを行うため、何度か起動すると設計時のカメラでなく異なったカメラのオープンを行ってしまいます。

製造番号による認識も検討しましたが、トラブルの際のオペレーションでエンドユーザーのオペレーションに負荷が掛かる可能性も危惧しています。

環境としてWindows10にOpenCVを使用したVC++でのアプリケーションで、入力はカメラの性能(1920x1080の画素数を30fpsで)を考慮してDirectXにアクセスしています。

類似の環境で各カメラのオープン時に各々のカメラの論理番号が再起動に関係なく固定する事が可能な方法をご存じの方、きっと複数の同仕様のカメラを使用される方のヒントになると考えの質問です。

現在は起動時に事前に撮影した映像と各カメラからの映像との特定形状のパターンマッチによるカメラの割り振りで取り合えず回避しています。

何か名案があれば幸いです。

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

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

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

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

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

guest

回答2

0

自己解決

Chironian殿の回答がヒントになり、USBをアプリ側の指令で1つずつ接続するハードを急遽作成し、各カメラをハード的に接続し、当該カメラが認識されたのを確認した後にオープンする。これをカメラ台数分繰り返し固定化に成功しました。

追記。
実際に作成したハードと考え方を。
作製ハード
要は、カメラを順に確実に認識させればよい訳で、USBの+5V給電ラインをリレーでON/OFFする回路を作成してその制御には手持ちの’Arduino UNO'を使用しただけで。Opencv側はVC++環境だったので仮想シリアルポートで'Arduino UNO'を制御しました。

投稿2017/06/25 01:13

編集2017/06/30 15:02
MasahikoHirata

総合スコア3747

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

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

SHOMI

2020/05/26 04:32

デバイスに給電されていない状態で信号ライン(3.3V)をつないで問題ないんだろうか… USBコネクタは挿入時に電源ラインがつながってから信号線がつながるように設計されています。
MasahikoHirata

2020/05/27 00:10

回答ありがとうございます。 現在、特に問題は発生していません。 貴殿の指摘から各ラインの電圧などを4chのオシロで確認。たしかに電源ライン(ここでは5V)が接続されるまでは信号線はHi-Z状態で、通電後に信号が。 なので先に電気的に接続しても問題は無いようです。
guest

0

こんにちは。

製造番号による認識も検討しましたが、トラブルの際のオペレーションでエンドユーザーのオペレーションに負荷が掛かる可能性も危惧しています。

ということは、USBカメラが故障した時に交換する等を想定しているのですね?
確実に元のポートと同じポートに挿入できれば、全てのポートを枚挙してUSBカメラを特定できる可能性はあると思いますが、なかなか同じポートに指すことを強制するのは難しいと思います。(ポートが故障することもありますし。)

この場合は、これは難問です。USBはデバイスを特定する仕組みがないのです。
アドレスは接続時にホスト側が勝手に振り、それを固定する仕組みがありません。

ですので、USB機器側にディップ・スイッチ等で識別番号を設定し、それをホスト側で読み出す等の仕組みをアプリケーション・システム側で用意する必要があります。

現在は起動時に事前に撮影した映像と各カメラからの映像との特定形状のパターンマッチによるカメラの割り振りで取り合えず回避しています。

なので、上記方法はかなり良い方法と思います。
レンズの4角に何かマーカーを貼り、それを検出する等でディップスイッチ代わりにすることができれば比較的確実にできないでしょうか?
視野をそこそこ阻害するし、レンズにサイズによっては貼るのもなかなか難しいですが。

投稿2017/06/23 13:47

Chironian

総合スコア23272

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

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

MasahikoHirata

2017/06/25 01:09 編集

的確なご意見ありがとうございます。 とても良い指摘から自己解決できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問