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

[2018年4月10日]
複数画面 切替表示プログラムのエラー発生を、改善出来ず 


楽勝のつもりで作った“2画面切替4画面表示方式”だが、起動当初は上手く行くように見えていたのに、何時の間にかエラーが発生して、プログラムが停止してしまう。(図1)
その時々で違うが、30分から2時間ほどで落ちる。時間は不定。

“タスクマネジャー”で“プロセス”を追って見ていると、どうも、1周期(4画面表示)毎に「ハンドル数」や「スレッド数」が、増えて行くようだ。
「スレッド数」などは、当初“20”くらいだったのが、どんどん増えて百以上になることもある。(図2<クリック>
それが、エラー発生の直接の原因では無さそうだが、何らかの関係はありそう。
それを抑えようと、プログラムを色々細工(といっても、行の入替くらいだが)をしてみたが、まったく改善出来ず。

多分、仲介役に使っている“OpenCV2.0”の特性にも拠るのだろうと思うが、それの限界なのかもしれない。
大体、“複数台のUSBカメラを切り替えて、その映像を取り出す”なんてことは、元々“想定外”ではなかろうかと。
まぁ、私の方は、そういった“へそ曲がり”なことを、敢えてやろうとしているわけだが、なかなか問屋は卸さないらしい。(苦笑)

で、取り敢えずの便法的対策として、「4カメラ」を決めた状態で、(安定している)「2画面連続表示」の2組を手動で切り替えるだけの方法にしてみた。(勿論、これでも、「ハンドル数」や「スレッド数」は僅かずつ増えて行くが、エラー発生までには至らないようだ)
こんなのって、とても「4画面同時表示」にはならないけど、取り敢えずの目的には使える!(...かな?)
しかし、まだ試してみたいことが残っているから、挑戦を続けるか。

−−−−−−−−−−−−−−−−−−−−−−−−−
+++ 数増加の時間変化 +++

エラー発生までの時間はまちまち/バラバラなので、「ハンドル数」や「スレッド数」の増加が直接エラーに結び付いているようでもないのだが、その増加の様子を、“タスクマネジャー”の“プロセス”で調べて、グラフにしてみた。(図3)
(線がガタガタしているが、これは「数」を見た時間がアバウトだったためで、キッチリ測れば、恐らく、綺麗な直線になると思う)

この増加の原因は、cv::VideoCaputure cam()で、(一度切り離した)カメラを(再び活かして)幾度も繰り返し使おうとするためで、2カメラなら、数は+2ずつ。
望ましいのは、これをcam.release()で一旦終了させて、完全に切り離したいのだが、それが不完全だからでは?!...と思う。(図4<クリック>

けど、カメラ2台以上では、1台でも1度切り離さないと、次の(3台目の)カメラの映像は取り込めないし、この切替には2〜3秒間の遊び時間を取られるしで、(素人プログラマには)踏んだり蹴ったりなんだが。。。
(多分、もっと低レベルのインタフェースが使えるプログラミング技術をマスター出来れば、何とかなるのだろうけど...夢のまた夢!?)

+++ 便法対策 +++

元は、4画面の映像を同時に見たかったのだが、可能なのは、“映像は2画面ずつで、切替に2〜3秒間は掛かるし、切り替えても映像が見られる時間は、僅か数秒間しか無い”し、それも何時、エラーが発生するか分からないという現実!

それなら、思い切り妥協して、兎に角、2画面だけを連続表示させておいて、希望する時に手動で、もう一組の2画面に切り替えるっていう方法にすることを考えた。
これなら、エラー発生に悩まされずに、済みそうだ。(図5、図6<クリック>

切り替えには、キーボード上のキー(任意の文字キー)を使うが、問題は、キーを押してからの反応が酷く鈍いこと。
ヘタをすると、複数回押し過ぎて、偶数回だと元に戻ってしまうことがあるので、押し方のコツを会得しなければいけない。(苦笑)


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