OpenCV+OpenNI+CUDA

2.3.1を入れたのでついでにOpenNI+CUDA構成でビルドすることに。
CMakeでやろうとしたがPrimeSensorモジュールだけインストールしてもCMakeのmakeファイルに設定されている環境変数ができないので手動で追加。 CUDAだと今のところnVidiaGPUしか対応できないがまぁ切り分ければいいだろう。 nVidiaATIはベース部分でOpenCLを採用していたと思うが、CUDAの仕様らしきものがオープンにされたらしく、そのうちATI製でCUDAが使えるようになる・・・のだろうか?

  • CUDAの仕様オープン化について、CUDAを使えることこそがnVidoa製の強みだったのになんで? というものがある。しかし仕様をオープンにすることは弱みではないだろう。 なぜなら仕様策定は依然としてnVidiaが行うことになるだろうし、そうなればATIビデオカード設計すらCUDA本家としての立場からコントロールできるようになってしまうからだ。 この強みのほうが仕様を公開するに見合うメリットがあると見れるのではないだろうか。

しかしCUDAソースを含んだプロジェクトのビルドは長い。

CUDAを有効にしてビルドしたときのopencv_gpu231.dllのサイズが50MBほどありこのでかさには意表をつかれた。 これ、なんとかならんものか。

次いでOpenMP対応OpenCV2.0をVisualC++2010で使えるようにするためにソースをいじるわけだがこれが微妙。 VC2010で改変無しで用いるとnowaitが効いていないためCPU使用率が一瞬で100%になる処理も多い。 nowaitオプションが適用可能な指定子にはもれなく使わないとバリアー関数が呼ばれまくる件のイミフ挙動になるため基本的に使えない。
nowaitをすべてつけてライブラリを作り直してもdetectMultiScaleなどは相変わらず重いようだ。VS2008のときの処理のほうが速度的に優秀かもしれない。 まぁつまりこれは基本的にVC2010には対応しないということだろう。 リリースもなさそう。

  • VC2010でOpenCV2.0を用いる場合はOpenMPを無効にするほうがはるかに無難な選択なようだ。 nowaitを指定してOpenMP有効版を試したが、CPU使用率100%は回避できるものの遅い。 OpenMP無効版のほうが無難な速度/負荷比で処理してくれる。 VC2008までのOpenMPディレクティブ用のソースをVC2010用に改変するのは極めて困難かつ仕事量大。

ただ2.3.1ではCPUでの処理がなぜか重くなっているものが多く、過去のバージョンのものを使いたいことも少なくない。 CUDAなどGPUに処理を振るのがこれからだよというのはわかるがまだ微妙な点が多い分野でもある。

GPUによるフェイストラックなどを試してみたが、体感ではるかに速いことが実感できた。 フェイストラックのGPU版に関してはサンプルソースがあるのですぐに改変なりを施して試してみることができる。

PFU Happy Hacking Keyboard Lite2 日本語配列かな印字なし USBキーボード ブラック PD-KB220B/U

PFU Happy Hacking Keyboard Lite2 日本語配列かな印字なし USBキーボード ブラック PD-KB220B/U

プログラムを作ろう!  MS VISUAL C++ 2010 入門 (MSDNプログラミングシリーズ)

プログラムを作ろう! MS VISUAL C++ 2010 入門 (MSDNプログラミングシリーズ)

日経ソフトウエア 2010年 09月号 [雑誌]

日経ソフトウエア 2010年 09月号 [雑誌]