[二〇一七年一月十九日]
USBカメラ3台の映像表示プログラムを、改良中−其の2
先回に引き続いて、“映像表示プログラム”の作成・改良作業が、(しんどいけど)面白くて♪仕方が無い状態。
しかし、ツール類が自分の手に合わないので、ぶつぶつ独り言/文句を垂れながらあれこれ取り替えてみている。
(VS 2015は2度インストールして、どうも肌に合わず、2度アンインストールした)
結局、VC++2015は辞退して、VC++2008 ExpressとOpenCV2.0を使うことにした。
まだ、今回のプログラム(/ボログラムとも?)は、起動してから手操作が必要だったり、各カメラの調節が出来なかったり、動作中に突然終了してしまったりする不具合群があるのだが、一応、3台のUSBカメラの映像を、3画面に映すことが出来るようになったので、現用系の片側に組み込んで試用してみることにした。(図1下側)
これまで、LiveCap2を利用させて貰って、PC2台で4台のUSBカメラの映像表示が出来ていた。(図2<クリック>)
その系でも、動くもの(人や車)は、少しギクシャク/飛び々々に映るのだが、やはりPC1台で“カメラ3台表示”にすると、やたら“画飛び”が酷くなる。これをもう少し改善したい。
ネットで調べている内に、「EWCLIB」(サイト)や「ESPLIB」(サイト)というライブラリが提供されているのを発見!
これは、良さげ!上手く使えれば、高速化などが図れるかもしれないので、検討してみたい!
−−−−−−−−−−−−−−−−−−−−−−−−−
プログラムの移植性
実は、先回作ったプログラムは、そのままでは他のマシンで動作しなかった。(苦)
そこで、バグを探すために、ネット上で紹介されていた「Dependency Walker 2.2」を使わせて貰って(TNX!)、“依存性”を追っ掛けたら、“不足するDLLなど”が分かった。(図4<クリック> 図中のcxcore200d.dllはデバッグ用で、実行にはcxcore200.dllを使う)
素人考えでは、こんなのは全部、実行ファイル(.exe)の中に組み込んでおいて欲しいものだと思うのだが、そのサイズを見ると結構大きい(約2MB)ので、やはり“外置き・呼び込み型のDLL”にせざるを得ないのかな?!と独り納得!もしかして、勘違い?
(これを見ると、本体の「USBCam3_x.exeファイル」が、ほんに可愛らしいこと♪...まぁ、この量からも、その仕事量が、推測出来るというもんだ)
オプションで、「include」や「lib」の「パス指定」などはちゃんと記入してあるし、幾度も確かめた。
更に、“VC++コード生成の時に、マルチスレッド(/MT)にセットすれば、組み込める”というのもやっているが、それでも上手く行かず。
因みに、これより前に、“Visual C++2008 再頒布可能パッケージ”は、ダウンロードして組み込んであったのだが、それでも不足だった。
多分、コンパイル時に、未だ何か設定が不十分なのだろうと思うが、取り敢えず、他マシンを汚さないために、「実行ファイル」の傍に置いて“フォルダごと一緒に移す”ようにしてみた。(図3)
結果、他マシンでも動き出した。 ・・・これにて一件だけ落着!(笑)
課題など
現在のプログラムは、“掘っ立て小屋”状態で、塀は剥き出しだし、雨漏りはするし、風が吹けばトタン屋根が飛んで行きそう。(苦笑)
まず、立ち上がった後、“メインwindow”が居座ったままで、ちゃんと“縮小”も出来ていない。(図5)
当然、追加の“設定変更”なども出来ない。
更に大きな問題は、“映像の更新速度”が遅いことだ。
例えば、時計の秒針が、2秒おきにしか映らない...とか。(図6<クリック> 苦笑)
お蔭で(?)、道路を走る車が、前、横、後ろ姿と3画面に(尾を引いて)映ってしまう。
(面白いといえば面白いが、正しく記録したい場合には、拙いだろうな)
そして、今は、ちゃんとした“エラー処理”をサボっているので、時々「動作を停止しました」とか「この問題に関する詳細情報を送信しますか?」とかのメッセージが出て来る。
これらの問題・課題は、少しずつ片付けて行きたいと思っているが、何せ“亀の歩み”だからなぁ。(苦笑)