OpenCV とは?

マシンラーニング

この記事は、インテル® デベロッパー・ゾーンに公開されている「What is OpenCV?」(https://software.intel.com/en-us/articles/what-is-opencv) の日本語参考訳です。

インテル® コンピューター・ビジョン SDK は現在、OpenVINO™ ツールキットとして提供されています。日本語の製品概要は https://www.intel.co.jp/content/www/jp/ja/internet-of-things/solution-briefs/openvino-toolkit-product-brief.html を参照してください。


目次

開発の利点
強力なビルトインビデオ解析
ハードウェアとソフトウェアの要件
ハードウェアの最適化
OpenCV と IoT
OpenCV の統合
はじめに

OpenCV (英語) は、リアルタイム画像/ビデオ処理、解析、マシンラーニング機能を備えたソフトウェア・ツールキットです。

開発の利点

開発者は、BSD ライセンス (英語) の下に提供される OpenCV ライブラリーを使用して、プログラムの一部として 2D および 3D の画像/ビデオ処理に利用できる、多くの高度なコンピューター・ビジョン・アルゴリズムにアクセスできます。これらのアルゴリズムは通常、ハイエンドの画像/ビデオ処理ソフトウェアに含まれているものです。

強力なビルトインビデオ解析

バックグラウンド除去、フィルター、パターンマッチングおよび分類などの基本的なビルディング・ブロック向けの OpenCV API を使用すると、非常に簡単にビデオ解析を実装できます。

リアルタイム・ビデオ解析機能は、物体、動物、人、固有の特徴 (車のナンバープレート、動物種など)、顔の特徴 (顔、目、唇、顎など) の分類、認識、追跡を含みます。

ハードウェアとソフトウェアの要件

OpenCV は最適化された C/C++ で記述されたクロスプラットフォームのライブラリーで、Intel Atom® プラットフォーム、インテル® Core™ プロセッサー・ファミリー、インテル® Xeon® プロセッサー・ファミリーを含む、広範なハードウェア・プラットフォームで動作します。

開発者は、Windows*、Linux*、macOS*、iOS*、Android* などのオペレーティング・システムで、C++、C、Python*、Java* を使用して OpenCV をプログラムできます。

カメラが使用しているドライバーがオペレーティング・システムに含まれている場合、OpenCV はそのドライバーを使用します。

ハードウェアの最適化

OpenCV はマルチコア処理と OpenCL* を活用します。統合グラフィックが存在する場合、OpenCV はハードウェア・アクセラレーションを活用できます。

OpenCV v3.2.0 リリースでは、アクセラレーションにインテル® マス・カーネル・ライブラリー (インテル® MKL) に含まれているインテルにより最適化された LAPACK/BLAS を使用できます。インテル® プラットフォームで最適なパフォーマンスが得られるように、インテル® スレッディング・ビルディング・ブロック (インテル® TBB) およびインテル® インテグレーテッド・パフォーマンス・プリミティブ (インテル® IPP) も使用できます。

OpenCV は、FFmpeg* (英語) ライブラリーおよびインテル® クイック・シンク・ビデオ・テクノロジーを使用してハードウェア支援によるエンコード/デコードを高速化できます。

OpenCV と IoT

光学式文字認識や医療画像などの従来のコンピューター・ビジョン・アプリケーションの中には、広範囲な OpenCV アプリケーションが含まれています。

例えば、OpenCV は骨折を検出できます1。OpenCV は、皮膚疾患の判別や皮膚悪性黒色腫 (メラノーマ) の早期発見にも役立っています2

OpenCV を適切なプロセッサーおよびカメラと組み合わせることで、IoT センサーが利用可能な、強力な新しいクラスのコンピューター・ビジョンを実現できます。この種の設計は、単純なセンサーからマルチカメラ・ビデオ解析システムまでスケーリング可能です。詳細は、「スケーラブルな IoT アーキテクチャーの設計」3 を参照してください

IoT 開発者は、OpenCV を使用して、動き検出や人検出などの IoT アプリケーション・イベントを検出する、組込みコンピューター・ビジョン・センサーを構築できます。

デザイナーは、OpenCV を使用して、IoT アプリケーション・フローの一部として、顔認識、ジェスチャー認識、感情分析などの高度なセンサーシステムを構築できます。

IoT アプリケーションは、大量のカメラベースのセンサーの解析プラットフォームとして、エッジのフォグノードに OpenCV を配備できます。

カメラセンサーと OpenCV を使用した IoT アプリケーションには、道路交通分析、先進運転支援システム (ADAS)4、ビデオ監視5、ビジュアル小売アプリケーションの高度なデジタルサイネージと解析6 などがあります。

OpenCV の統合

開発者が OpenCV をニューラル・ネットワークのバックエンドに統合すると、コンピューター・ビジョンの本来の力が発揮されます。このアプローチを使用して、OpenCV を畳み込みニューラル・ネットワーク(CNN) や ディープ・ニューラル・ネットワーク(DNN) と統合することで、開発者は革新的で強力な新しいビジョン・アプリケーションを作成できます。

複数のハードウェア・プラットフォームをターゲットにするには、これらの統合がクロスプラットフォームで動作するように設計する必要があります。ディープラーニング・アルゴリズムのハードウェア最適化は、この設計に役立ちます。OpenVX* (英語) 仕様には、リソースと実行の抽象化が含まれています。

ハードウェア・ベンダーは、特定のプラットフォームに特に注目して実装を最適化できます。開発者は、複数のベンダーやプラットフォーム、および複数のハードウェア・タイプでポータブルなコードを記述できます。

インテル® コンピューター・ビジョン SDK (ベータ) は、コンピューター・ビジョンの複雑な問題を解く開発者向けの統合デザイン・フレームワークおよび強力なツールキットです。OpenVX* API のインテルの実装とカスタム拡張機能を含みます。OpenCL* カスタムカーネルをサポートし、CNN または DNN を統合できます。

事前にビルドされインクルードされる OpenCV バイナリーには、インテル® VTune™ Amplifier でビジョン・アプリケーションをプロファイルするための機能が用意されています。

はじめに

基本的な顔認識のチュートリアル (https://software.intel.com/en-us/articles/smarter-security-camera-a-poc-using-the-intel-iot-gateway) を試してみてください。OpenCV 3.2.0 Documentation (英語) のチュートリアルも参照してください。

関連ソフトウェア

インテル® コンピューター・ビジョン SDK – OpenCV とディープラーニング (DL) 配備ツールキットを使用したディープラーニング・サポートを統合して、OpenVX* 仕様に基づくコンピューター・ビジョン・ソリューションを高速化します。

インテル® インテグレーテッド・パフォーマンス・プリミティブ (インテル® IPP) – 画像処理、信号処理、データ処理 (データ圧縮/展開と暗号化) アプリケーション向けの、高品質でプロダクション環境に対応した低レベルのビルディング・ブロックを含むプログラミング・ツールキット。

インテル® マス・カーネル・ライブラリー (インテル® MKL) – 演算処理ルーチンを高速化してアプリケーションのパフォーマンスを向上するライブラリー。

インテル® Media SDK – インテル® クイック・シンク・ビデオ・テクノロジーを使用したメディア・アプリケーション開発向けのクロスプラットフォーム API。

インテル® SDK for OpenCL* Applications – インテル® グラフィックス・テクノロジーへの計算オフロードおよびハイパフォーマンスなメディア・パイプラインによりアプリケーションのパフォーマンスを高速化および最適化します。

インテル® Distribution for Python* – NumPy*/SciPy*/scikit-learn のような計算負荷の高い Python* 計算パッケージを高速化する、ハイパフォーマンス・コンピューティング (HPC) 向けに特別に最適化された Python* ディストリビューション。

インテル® クイック・シンク・ビデオ – インテル® グラフィックス・テクノロジーが提供する専用のメディア処理機能を利用して、エンコード/デコード時間を大幅に短縮します。それと同時に、プロセッサーがほかの処理も並行して実行できるようにすることで、システムの全体的なパフォーマンスと応答性を向上させます。

インテル® スレッディング・ビルディング・ブロック (インテル® TBB) – 共有メモリー並列プログラミングおよびノード内分散メモリー・プログラミング向けのライブラリー。

参考資料 (英語)

  1. OpenCV を使用した骨折の検出
  2. Mole Investigator: コンピューター・ビジョンによる皮膚悪性黒色腫の発見 (https://www.seas.upenn.edu/~cse400/CSE400_2014_2015/reports/20_report.pdf)
  3. スケーラブルな IoT アーキテクチャーの設計
    https://software.intel.com/en-us/articles/designing-scalable-iot-architectures
  4. 先進運転支援システム (ADAS)
    https://www.intel.com/content/dam/www/public/us/en/documents/white-papers/advanced-driver-assistant-system-paper.pdf
  5. スマート・セキュリティー・カメラ: インテル® IoT ゲートウェイを使用した概念実証 (https://software.intel.com/en-us/articles/smarter-security-camera-a-poc-using-the-intel-iot-gateway)
  6. ディスプレイ・テクノロジーの開発と最適化
    https://software.intel.com/en-us/articles/introduction-to-developing-and-optimizing-display-technology

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

タイトルとURLをコピーしました