[二〇一七年二月四日]
USBカメラ3台の映像表示プログラムを、改良中−其の5
フリーで提供されている「OpenCVライブラリ」を使うだけでは、USBカメラ映像の安定な収集とその高速化は、相当難しそうだと思っていたのだが、ギリギリ追い込めれば、“約1秒間隔の切り替え”で映像が拾えそうだ♪(図1、動画1<クリック>)
プログラムを、ギリギリまで詰められた理由は、waitKey(30)を決められたようにきちっと使ったからだ。
これなら、人が歩く様などは、ギクシャクながらでも、ちゃんと捕捉出来る。
走り抜ける車などは、一寸苦しいが、1画面に1、2回は目視出来るはず。
キョロキョロする怪しい人物ならバッチリ!(笑)
ただ、早く切り替えると、カメラの感度が適正値に立ち上がるまでの時間が短いため、画面が薄暗い状態で留まってしまう欠点がある。
夕暮れ時には、早く見苦しくなるかもしれないが、昼間は、まったく問題無し。
−−−−−−−−−−−−−−−−−−−−−−−−−
カメラ壊れ?
今日、試験運用を始めたが、間の悪いことに、カメラ1台が劣化(極端に感度が低下)したらしく、殆ど見えなく/映らなくなってしまった。(図2)
このカメラは、太陽の直射光が入る時間帯があるので、その光でやられたのかもしれない。
まぁ、カメラ3台の“映像取り込み”は、確認出来ているので、「プログラム」の方の問題ではないと思う。
その「プラグラム」の方だが、素人にしては、割合早く出来たのではないかと思う。
ただ、その作り方に関しては、大いに邪道?で、分からないことが出て来ると、すぐネット検索して例題を探す。
それを参考に、打ち込むのだが、その中味の意味や適不適に関しては、殆ど考慮せず状態で。
(尤も、VCとVBの区別くらいは付くから、意訳・翻訳して使うことはある)
それで、動かない/エラーだらけになると、即座に別の例題を探して来て試して見るって手法。(謂わば、“叩き大工”のようなもんだ)
だから、「クラス」の意味も、その使い方もよく分からず、未だにメインルーチンを、Form1.hの中にしか書けない始末。
だけど、押しボタンの一つを指し示すのに、「this->button1・・・」で済むのだから、便利で離れがたいわけだ。(苦笑)
まぁ、追い々々、「クラス」などにも、トライしてみようとは思っているが...時々、思うように逝かなくて発狂しそうになるからなぁ。(笑)
高速化の試み
当初、USBカメラ2台なら、比較的問題無く映像が映せたのだが、“兎に角3台!計6台”という目標で、「切り替え方式」で強引に試して来たのだが、画が飛ぶのを我慢すれば、何とか使える状態に出来そうだ。
カメラ映像の取り込みに、「OpenCV」というライブラリ(?)を使わせて貰っているのだが、そのコマンドの一つに、「waitKey(msec単位)」がある。
これは、一見“キー待ち”にしか見えないのだが、実は、“映像が取り込まれ、それを画面に描画するまでの時間待ち”という重要な働きをしているらしい。
これを削って凌いでいたのだが、そのために反って、プログラムが落ちる/暴走することが多かった。(図3)
むしろ、それをきちっと入れておくと、2カメと3カメの切り替え間隔を極端に縮めても、殆ど落ちなくなった。(図4<クリック>)
ただ、実験に使っているUSBカメラの特性なんだろうが、切り替えてから最初の数秒間は、画面が暗い。
そのため、早く切り替えていると、ずっと暗いままなのだ。
屋外の風景を映し始めたら、殆ど気にならなくなったが、こんな高速の切り替えは、カメラ側にしてみれば欲求不満になるかもな、と思う。(笑)
基本は、ほぼ固まったので、後は、様々なエラー発生の時はどうするかなど、使い勝手の方をもう少し考えて見たい。