OpenCVでWebカメラの解像度を変更すると落ちる不具合の対処方法

所有しているPCを買い替えたところ、OpenCVを利用したアプリが動かなくなった。

 

■アプリ(OpenCV)から見た症状

・動作環境はWindows10、OpenCVのバージョンは3.4.5
・RealSense D435カメラだとOpenCVの機能は正常に稼働する
・新しいPCに内蔵されたWebカメラだと、OpenCVからカメラを呼び出した瞬間に例外終了する
・Webカメラ単体であれば問題なく動作する(OpenCVから呼び出さなければ正常動作)
・OpenCVは最新版3.4.5をリファレンス通りにビルドして利用している

 

■原因の推測

OpenCVからWebカメラを呼び出すときに、カメラ解像度を設定変更するためにWITH_V4Lを参照するが、WITH_V4Lを参照できずに落ちてしまう。

 

■対策

ビルドオプションのWITH_V4LをONにすればカメラ解像度の変更でWITH_V4Lを参照したときの不具合が解消するらしい。
該当するOpenCVのソースコード、platforms/js/build_js.py 107行に定義されている値を変更。

変更前
"-DWITH_V4L=OFF",

変更後
"-DWITH_V4L=ON",

 

■結果

WITH_V4Lオプションを変更してcmakeを実行し、VisualStudioでリビルド、OpenCVライブラリを差し替えると新しいWebカメラでも正常にOpenCVが作動した。

 

the notebook PC

Windows10でVirtualBoxとVagrantをインストールする 【トラップが多すぎる】

今回やりたいこと
Windows10環境へ、Oracle VirtualBoxとVagrantをインストールしたい。

■障害となる課題

どちらもインストールは成功したのだが、VirtualBoxで仮想CPU(VT-x)が認識せず、ゲストOSが起動できない。原因を調査したところ、Windows環境のHyper-Vが稼働しているとVirtualBoxの仮想環境が正常に機能しないらしい。

 

■具体的解決策(ソリューション)

・対策1
Qiitaに参考になる解決方法があったので試してみる
http://qiita.com/hiroyasu55/items/11a4c996b0c62450940f

この手順だと2番めのコマンドが正しく登録されずエラーになった。

bcdedit /copy {current} /d "Disable Hyper-V"
bcdedit /set {ea37cfa1-ecb8-11e3-bec0-78dd08b0ae41} hypervisorlaunchtype off

・対策2
海外のブログに、コマンドオプションを調整した記事があったので、こちらも試してみた。
http://www.hanselman.com/blog/SwitchEasilyBetweenVirtualBoxAndHyperVWithABCDEditBootEntryInWindows81.aspx

bcdedit /copy {current} /d "No Hyper-V"
bcdedit /set {ff-23-113-824e-5c5144ea} hypervisorlaunchtype off

こちらは2つのコマンドが正しく登録された。結論としては、Windows10再起動後、対策1,2どちらもHyper-Vの無効化のメニューが表示されたので問題がないらしい。

※VT-x関連のエラーは解消されず
http://qiita.com/keiichiroy/items/481f83db66c892e443cf

またしてもQiitaを参考に、今度はVirtualBox側でVT-xを要求しないように設定する。

VBoxManage modifyvm (VM名) –hwvirtex off
VBoxManage modifyvm (VM名) –vtxvpid off

 

※ssh接続の問題

ちょうどWindows版のOpenSSH(β版)がリリースされたので、これを流用、

https://github.com/PowerShell/Win32-OpenSSH/releases

zipから実行ファイルとdllを取り出し、PATHの通ったディレクトリに置いておけばvagrantにも対応できる。

もしくはprivate keyをputty用に変換すれば、使いなれたputtyでもOK。

 

とりあえず、VirtualBoxとVagrantのインストールは完了しました。

Vagrant環境を利用して、Ruby + Rails, Rake自動テスト, Java, ASP.net mono, 等の環境構築と、DevOpsの手順化等、試してみたいと思います。