FC2カウンター FPGAの部屋 Vitis Vision ライブラリの勉強1
fc2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Vitis Vision ライブラリの勉強1

Vitis Vision ライブラリについて勉強してみたいと思う。

資料としては、”Vitis Vision Library User Guide”がある。

Github には、”Xilinx/Vitis_Libraries”がある。

Vitis Vision Library User Guide”を勉強していこう。つまり、適当にGoogle 翻訳して引用する。

Basic Features
・関数は xfOpenCV と一緒で、Mat インターフェースのテンプレートなんだけど、Mat は xf::cv::Mat 形式だそうだ。

・すべての関数は xf::cv namespace で定義される。
 つまり、resize() 使う時は、

xf::cv::resize<INTERPOLATION, TYPE, HEIGHT, WIDTH, NEWHEIGHT, NEWWIDTH, NPC_T, MAXDOWNSCALE>(in_mat, out_mat);

という感じになるということ。(Vitis_Libraries/vision/L2/examples/resize/xf_resize_accel.cppから引用)

・xf::cv::Mat 形式については、xf::Mat Image Container Class を見てほしいそうだ。これは、 xf::Mat の解説なんだけど、 xf::cv::Mat も同じで良いのかな?

Vitis Vision Kernel on Vitis
Vitis Vision カーネルの使い方なんだけど、使い方は xfOpenCV を踏襲しているようだ。同じ感じ。
、”Vitis Vision Library User Guide”では、cv::imread() で

画像を cv::Mat 形式で読み込んで、cv::Mat 形式の画像を xf::cv::Mat 形式に変換する…

とか書いてあるが、実際に”Vitis_Libraries/vision/L2/examples/resize/”で使用されているカーネルとホスト・アプリケーションのやり取り方法を書いておく。

ホスト・アプリケーションの動作Vitis_Libraries/vision/L2/examples/resize/xf_resize_tb.cpp
1. cv::imread() で画像を cv::Mat 形式で読み込む。
2. xcl::get_xil_devices() でデバイスを取得する
3. Context, command queue を作成する
4. カーネルのバイナリをロードする
5. カーネルを生成する(cl::Kernel)
6. 画像入力、画像出力用のバッファを確保する(cl::Buffer)
7. カーネルの引数を設定する(krnl.setArg)
8. 画像入力用バッファに画像のデータを入力する(q.enqueueWriteBuffer)
9. カーネルを実行させる(q.enqueueTask)
10. カーネルの出力画像をホストメモリにコピーする(q.enqueueReadBuffer)
11. 終了(q.finish)

カーネルの動作Vitis_Libraries/vision/L2/examples/resize/xf_resize_accel.cpp
1. xf::cv::Array2xfMat でホストからの配列データを xf::cv::Mat 形式に変換する
2. xf::cv::resize で画像をリサイズする
3. xf::cv::xfMat2Array でリサイズした結果の xf::cv::Mat 形式画像をホストに渡す配列データに変換する

Array2xfMatxfMat2Array
  1. 2020年03月21日 05:08 |
  2. Vitis_Vision
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/4827-311a93d3
この記事にトラックバックする(FC2ブログユーザー)