[表紙頁]へ  関連記事の目次へ

[2017年6月14日]
USBカメラ4台切替プログラムを、作成
現状の「3画面のタイマー切替看視方式」が、なかなか具合が良いので、以前は3カメラでも様々な問題があって、あまり調子が良くなかった「多カメラ切替方式」に再び挑戦してみた。

因みに、現行の「3画面の切り替え方式」は、安定して3画面が出せる状態にある中の一画面を“最大表示”させるだけなので、難点は少ないのだが、「複数台のカメラを切り替える方式」は、カメラの応答特性が悪いと、“なかなか表示が出ない”、“切り替わりが遅い”などの問題が出て来る。例えば、垂れ流し5秒間隔方式だと、時々1〜2秒しか表示が出ない画面もある、といった状況にもなる。(動画1<クリック>
これは、きちんと“表示時間の管理”をするようにプログラムを修正すれば、何とかなりそうだ。

今回は、映像を出す“”をひとつだけに限定して、極力プログラムを“単純化”した。
それに伴って、カメラの台数制限が無くなり、USBポートの数だけカメラを働かせるようになった。実験的には、6台まで可能だった。(今は、仮にmax5台に設定してある)
切替のタイミングは、やはり約3〜4秒が最短のようだ。これより短いと、静止画モドキしか看られないのが辛いところ。(苦笑)

また、加工した映像(二値化差分)なども取り出し易くなった。
それに、応答特性が良くないカメラ(例えば、こいつらの中の不良品など)は、こうした“切り替えカメラ群”の中には入れない方が良いようだ。
他方、3D WEBカメラ「CS-3DW300K」(¥108税込み)の多くは、思っていたほど鈍くはなかった。
なので、このプログラムを、もう少し改良して、現行の看視系に使えないかな?と考えている。
...残念ながら、後日この方式も長時間運用では不調になることが判明。orz

−−−−−−−−−−−−−−−−−−−−−−−−−
プログラム骨子

プログラムの中味だが、図2のルーチン/関数(void cam_view(int cam_no))は、VC++2008Express版とOpenCV2.0を使うことを前提としたプログラムで、極く単純で標準的なもの。
これの特長は、カメラ(チャネル)をオープン出来なければ、直ぐにルーチンを抜けるようにしてあるので、カメラが1台しか無い場合でも、プログラムが暴走することはない。
(また、動作中に、USBプラグを抜いても、また差し直しても、それに応じた映像表示が出て来る)

図3<クリック>は主ルーチン(void button1_Click(...))で、Form1メニューの[開始]ボタン(button1)を押せば、これを起動出来る。
現在は、カメラ5台分の映像(cam_no=1〜4;cam_view(cam_no))と、加工した映像(cam_no=2;cam_mdview(cam_no) これは未掲載)を表示させるように設定してある。

試してみた処、USBポートの数:6台まで切り替えて働かせられた。
今は、最大カメラ5台までにしてある。

「タイマー」で、SWの値を0から1に切り替えて、このwhileループ(SW==0))/“映像表示”を抜け出すようにしている。(手動で「タイマー」を留めれば、その時点での映像を表示し続ける)

カメラ番号の代わり

このプログラムでは、映像表示用の“窓”はひとつだけなので、“カメラの番号(cam_no)”をどのように表示するか?が問題だった。
数値表示をしたかったのだが、なかなか思い通りに行かなくて、此処に掲載してある動画では、未だそれが出来ていなかった。

色々考えた末に、番号表示そのものは諦めて、主メニュー上に5個のラジオ・ボタンを設けて、現在どのカメラの映像を表示中かが分かるようにした。(図4、図5<クリック>は、その制御プログラム)
現在は、これで上手く働いている。

蛇足だが、[終了]ボタンの処理が、一番難しかった!
下手にプログラムを終了すると、“映像表示ループ”が残ってしまい、勝手にそれだけが廻り続けるのだ。
これは、電源を落とさないと停止させられず、どうやらWindows OSの制御外になっているらしい。
なので、“映像表示ループ”を抜け出した後で、“終了処理”をすることが必要不可欠なようだ。

画面の縮小・拡大

OpenCV 2.0には画面の拡大・縮小・移動機能などがあるが、今回はそれを(蛇足的に)組み込んでみた。(図6、動画2<クリック>
手動で、拡大・縮小が出来るようにしてある。
それの処理ルーチン名は、switch_mado(cam_no)。(中味は、非掲載)

今は手動だが、自動化も出来る(はずな)ので、カメラ毎に“映像表示の大きさ”を変えることも出来よう。
ただ、組み込んではみたものの、これの上手い使い道は...特に思い浮かばないが、まぁ、こんなことも簡単に、リアルタイムで出来るってことで。

現在は、共用の「窓」("Mado")を1枚だけしか使っていないので、複数枚の「窓」を出して、そこら中にばらまいて置くことは出来ないが、これは“仕様”だ。(笑)


[表紙頁]へ  関連記事の目次へ