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 VitisVitis 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 形式画像をホストに渡す配列データに変換する
Array2xfMat、
xfMat2Array
- 2020年03月21日 05:08 |
- Vitis_Vision
-
| トラックバック:0
-
| コメント:0