モバイルの悩み

OpenCVを使ったアプリケーション、それもモバイルアプリケーションで一番の悩みはデスクトップ等に比べてリソースの制約が大きいことだ。

モバイルプラットホームはこの2年で飛躍的な進歩を遂げたが、それでも一般的なデスクトップPCに比べると上記のリソースは貧弱であり、とりわけMPUGPUの性能差がOpenCVのようなプログラムには影響が大きい。

OpenCVはオープンソースなのでネットを探すと様々なサンプルコードを見つけることが出来て非常に有り難いのだが、その殆どはデスクトップPC向けのコードであり、それをモバイルにそのまま適用するとそもそも動かなかったり遅くて使い物にならなかったりする。 特にiOSはベースになっているCoreGraphicsがGPUを上手く使えていないらしく、性能への影響はより強くなる。

例えば、注意すべきはフィルタ系のAPIである。

  • cv::GaussianBlur
  • cv::medianBlur
  • cv::Sobel
  • cv::Canny

これらのAPIは対象となるイメージ/マトリクスの大きさにもよるが、モバイルプラットホームのOpenCVにとっては非常に重い処理となるので、できれば使わない方が良いだろう。

といっても使いたい場合は仕方が無いが..その場合は各種プロファイリングにより慎重に性能を計測する必要があるだろう。