ビジュアル・コンピューティング 2017: OpenCV* について

同カテゴリーの次の記事

データ圧縮の向上: "シャノン・エントロピー" の並列アルゴリズム

この記事は、Go Parallel に公開されている「Visual Computing 2017: A Look At OpenCV」 (https://goparallel.sourceforge.net/visual-computing-2017-look-opencv/) の日本語参考訳です。


この記事の PDF 版はこちらからご利用になれます。

OpenCV* について
出典: インテル

広範な言語とプラットフォームにおいて画像操作を単純化

OpenCV* (Open Computer Vision の略) バージョン 1.0 のリリースから 10 年が経ちました。リアルタイム・コンピューター・ビジョンを利用してソフトウェアを作成できる C++ ライブラリーとして、元々インテル向けにロシアで開発された OpenCV* は、完全にオープンソースで、マシンラーニングも含みます。OpenCV* は BSD ライセンスの下に提供されるため、無料で使用できます。さまざまな DLL で構成される非常に大きなライブラリーで 200MB を超えます。必要に応じて、スタティックにリンクすることもできます。C/C++、Python*、Java*、MATLAB* インターフェイスを備えた数百のアルゴリズムがあり、Windows*、Linux*、Android*、iOS*、および macOS* で動作します。バージョン 1.0 は C ベースでしたが、バージョン 2.0 以降は C++ ベースになりました。最新のバージョンは 3.2 (英語) で、2016 年 12 月にリリースされました。

OpenCV* に含まれるものは?

OpenCV* には、(ストリームまたはディスクからロードされた) 画像やビデオをキャプチャーし、メモリーに格納して、操作するために必要なすべてのものがまとめられています。操作には、個々のピクセルの変更、ヒストグラムの計算、顔認識、動作追跡、拡張現実、ジェスチャー認識などが含まれます。ウィキペディアに OpenCV* ライブラリーで可能な操作の詳しいリストがあります。

OpenCV* のユーザー (https://www.safaribooksonline.com/library/view/learning-opencv/9780596516130/ch01s02.html (英語)) には、主要企業 (IBM*、Microsoft*、インテル、SONY*、Siemens*、および Google*) および研究機関 (スタンフォード大学、マサチューセッツ工科大学、カーネギーメロン大学、ケンブリッジ大学、フランス国立情報学自動制御研究所など) が含まれます。

OpenCV* のインストール

Windows*/macOS* 向けにはバイナリーが提供されています。Linux* では、tar ファイルをダウンロード後展開して、make を実行してから、sudo make でインストールする必要があります。手順については、さまざまな資料で紹介されていますが、OpenCV* チュートリアル (英語) が特に役立つでしょう。インストールには、コーヒーブレイクに十分な時間がかかるでしょう。私の PC (Ubuntu* 16.04 LTS) では、問題なくインストールできました。

また、無料で利用可能なインテル® インテグレーテッド・パフォーマンス・プリミティブ (インテル® IPP) もインストールすべきです。インテル® IPP は OpenCV* と統合され、多くの操作をスピードアップします。次の関数を呼び出します。

cvGetModuleInfo( 0, &libraries, &modules );

この関数は、インストールされているライブラリーとモジュールの説明を返します。OpenCV* アプリケーションを記述する場合、この情報を使用してターゲット PC にインテル® IPP がインストールされていることを確認し、インストールされていない場合はダウンロードしてインストールするように促します。

OpenCV* での作業

インテル® IPP は非常に大きなライブラリーです。使用する前に、いくつかの基本を理解する必要があります。

メインデータ構造の Mat クラス (OpenCV* 1.0 では cvMAT 型) は、メモリーにある画像を管理し、ヘッダーと画像データの両方を含みます。データバッファーを共有していない限り、メモリーの割り当て/解除を自動で行います。これは強力なクラスで、vector<>、Mat<>、またはスカラー値のような異なるデータ型を使用できます。

インテル® IPP には多数のメソッドがあり、HighGui モジュール (英語) は画像の表示・保存用のウィンドウを作成し使用できるようにします (OS の描画コールバックは不要です)。簡単なマウスイベントを処理するトラックバーを追加して、画像をディスクやメモリーに読み書きし、ビデオをカメラから読み取ってファイルへ書き込みます。

GPU の使用

OpenCL* は、NVidia* の GPU テクノロジーである CUDA* とうまく統合できます。別の GPU テクノロジーである OpenCL* 用の OCL モジュールもあるようですが、StackOverflow に関する答え (英語) が示すように、OpenCV* 3 ではこのモジュールは不要です。

マシンラーニング

OpenCV* は、ベイズ分類器、K 近傍、SVM、決定木、ブースティング、ランダムフォレスト、ニューラル・ネットワーク、ロジスティック回帰を含む、独自のマシンラーニング・ライブラリーを備えています。ディープ・ニューラル・ネットワーク用のモジュール dnn (追加モジュールとしてリストされています) もあります。ただし、フォワードパスの計算 (つまり、ネットワーク・テスト) のみ対応しています。ネットワークの訓練はサポートされません。

まとめ

コンピューター・ビジョン・アプリケーションの開発に興味がある方は、最初に OpenCV* を試してみるべきです。OpenCV* は C++ でプログラムされていますが、大部分はテンプレートを使用せず、代わりに多相性とランタイム・ディスパッチを使用しています。ピクセルアクセスなどの一部の操作は、小さなテンプレート・クラスと関数を使用しています。
OpenCV* アプリケーションの開発は主に C++ で行われていますが、Python* の人気の高まりを受けて、OpenCV* 3.2 のドキュメントには Python* 向けのチュートリアル (英語) もいくつか追加されています。インテル® Ditribution for Python* の NumPy* (OpenCV* に必要) による高速化を考慮すると、Python* の使用は理想的に見えます。

関連記事

  • インテル Parallel Universe 26 号日本語版の公開インテル Parallel Universe 26 号日本語版の公開 インテル Parallel Universe マガジンの最新号が公開されました。この号では、インテル® Xeon Phi™ プロセッサー向けのコードの現代化について説明します。また、インテル® Parallel Studio XE 2017 […]
  • インテル® コンピューター・ビジョン SDK – 概要インテル® コンピューター・ビジョン SDK – 概要 この記事は、インテル® デベロッパー・ゾーンに公開されている「Intel® Computer Vision SDK - A Brief Overview」の日本語参考訳です。 インテル® コンピューター・ビジョン SDK Beta がリリースされました。この SDK […]
  • AI によるコンピューター・ビジョンの可能性の拡大AI によるコンピューター・ビジョンの可能性の拡大 この記事は、インテル® デベロッパー・ゾーンに公開されている「Expand the Possibilities of Computer Vision with AI」の日本語参考訳です。 この記事の PDF 版はこちらからご利用になれます。 コンピューター・ビジョンの長所と可能性は、AI と IoT […]
  • Python* プロファイルPython* プロファイル この記事は、インテル® デベロッパー・ゾーンに公開されている「Python* Profiling (https://software.intel.com/en-us/python-profiling)」の日本語参考訳です。 Python*/C/C++ が混在したコードのパフォーマンス解析機能 - […]
  • OpenCV とは?OpenCV とは? この記事は、インテル® デベロッパー・ゾーンに公開されている「What is OpenCV?」の日本語参考訳です。 インテル® コンピューター・ビジョン SDK は現在、OpenVINO™ ツールキットとして提供されています。日本語の製品概要はこちらを参照してください。 目次 開発の利点 […]