概要

この資料では、xfOpenCV ライブラリを FPGA デバイス用に最適化したザイリンクス xfOpenCV ライブラリについて説明します。Zynq®-7000 SoCZynq® UltraScale+™ MPSoC、および PCIe ベース デバイス (Virtex、U200 など) を使用するアプリケーション開発者向けに記述されています。xfOpenCV ライブラリは、SDx™ 開発環境で使用するために設計されており、FPGA デバイス上でアクセラレーションされるコンピューター ビジョン関数用のソフトウェア インターフェイスを提供します。xfOpenCV ライブラリ関数の機能は、OpenCV の等価関数とほぼ同じです。違いがある場合は、このユーザー ガイドに記述されています。

注記: xfOpenCV ライブラリの使用要件は、使用要件を参照してください。xfOpenCV ライブラリ関数を使用するための手順の詳細は、xfOpenCV ライブラリの使用を参照してください。

基本的な機能

xfOpenCV ライブラリ関数は、すべて一般的なフォーマットに従っています。すべての関数に次の特徴があります。

  • すべての関数はテンプレートとして設計されており、画像である引数はすべて xf::Mat として供給する必要があります。
  • すべての関数は xf 名前空間で定義されています。
  • 主なテンプレート引数は次のとおりです。
    • 処理する画像の最大サイズ
    • 各ピクセルのプロパティを定義するデータ型
    • 1 クロック サイクルごとに処理されるピクセル数
    • 機能に関連するその他のコンパイル時引数

xfOpenCV ライブラリには列挙データ型が含まれており、ユーザーが xf::Mat を設定できます。xf::Mat の詳細は、xf::Mat 画像コンテナー クラスを参照してください。

reVISION プラットフォーム上の xfOpenCV カーネル

xfOpenCV ライブラリは、SDx 開発環境で使用できるように設計されています。xfOpenCV カーネルは、reVISION プラットフォームで評価されています。

入力と出力の両方が画像ファイルであるサンプル デザインの一般的なフローは、次のとおりです。

  1. cv::imread() を使用して画像を読み込みます。
  2. データを xf::Mat にコピーします。
  3. xfOpenCV で処理関数を呼び出します。
  4. データを xf::Mat から cv::Mat にコピーします。
  5. cv::imwrite() を使用して出力を画像に書き出します。

コード全体がパイプラインのホスト コードとして書き出され、そこから xfOpenCV 関数へのすべての呼び出しがハードウェアに移動されます。xfOpenCV からの関数は、メモリ内の画像の読み出しおよび書き込みに使用されます。xfOpenCV ライブラリ関数の画像コンテナーは、xf::Mat オブジェクトです。詳細は、xf::Mat 画像コンテナー クラス を参照してください。

reVISION プラットフォームでは、ライブおよびファイル入力/出力 (I/O) モードがサポートされます。詳細は、「reVISION 入門ガイド」を参照してください。
  • ファイル I/O モードでは、コントローラーで画像が SD カードからハードウェア カーネルに転送されます。ファイル I/O モードの手順は、次のとおりです。
    1. プロセッシング システム (PS) で SD カードから画像フレームを読み出し、DRAM に格納します。
    2. xfOpenCV カーネルで DRAM から画像を読み出して処理し、出力を DRAM メモリに戻します。
    3. PS で DRAM から出力画像フレームを読み出し、SD カードに戻します。
  • ライブ I/O モードでは、フレームをプラットフォームにストリーミングし、xfOpenCV カーネルでフレームを処理して、適切なインターフェイスを介してフレームをストリーミング出力します。ライブ I/O モードの手順は、次のとおりです。
    1. ビデオ キャプチャ IP でフレームを受信し、DRAM に格納します。
    2. xfOpenCV カーネルで DRAM から画像をフェッチして処理し、出力を DRAM に格納します。
    3. 表示 IP で DRAM から出力フレームを読み出し、画像インターフェイスを介してフレームを出力します。

次の図に、xfOpenCV ブロックを含む reVISION プラットフォームを示します。

図: reVISION プラットフォーム上の xfOpenCV カーネル



注記: PS-PL インターフェイスおよび PL-DDR インターフェイスの詳細は、『Zynq UltraScale+ デバイス テクニカル リファレンス マニュアル』 (UG1085: 英語版日本語版) を参照してください。

xfOpenCV ライブラリの内容

次の表に、xfOpenCV ライブラリの内容を示します。

表 1. xfOpenCV ライブラリの内容
フォルダー 詳細
include ライブラリで必要なヘッダー ファイルが含まれます。
include/common ライブラリ特有のタイプなど、共通するライブラリの構造ヘッダーが含まれます。
include/core math 関数などのコア ライブラリの機能ヘッダーが含まれます。
include/features 特徴抽出カーネル関数定義が含まれます (例: Harris)。
include/imgproc features フォルダーで提供されるものを除くすべてのカーネル関数定義が含まれます。
include/video features and imgproc フォルダーで提供されるものを除くすべてのカーネル関数定義が含まれます。
examples ユニット テストを実行するサンプル テストベンチ コードが含まれます。examples/ フォルダーには、アルゴリズム名のフォルダーが含まれます。各アルゴリズム フォルダーには、ホスト ファイル、.json ファイル、および data フォルダーが含まれます。xfOpenCV ライブラリの使用方法の詳細は、reVISION プラットフォーム上の xfOpenCV カーネルを詳細してください。
examples SDAccel™ 環境で xfOpenCV ライブラリを使用する方法を示す 24 個の関数のサンプル テストベンチ コードが含まれます。
HLS_Use_Model スタンドアロン Vivado HLS で 2 つの異なるモードで xfOpenCV 関数を使用する例が含まれます。
HLS_Use_Model/Standalone_HLS_Example スタンドアロン Vivado HLS ツールで xfOpenCV 関数をそのまま合成するためのサンプル コードと Tcl スクリプトが含まれます。
HLS_Use_Model/Standalone_HLS_AXI_Example スタンドアロン Vivado HLS ツールで AXI インターフェイスを使用する関数を合成するためのサンプル コードと Tcl スクリプトが含まれます。