Pynqでカメラ画像をリアルタイムfastx コーナー検出

16
1 PYNQ Pmod に搭載したカメラ画像を リアルタイムで FASTX コーナー検出 marseeこと小野雅晃

Transcript of Pynqでカメラ画像をリアルタイムfastx コーナー検出

Page 1: Pynqでカメラ画像をリアルタイムfastx コーナー検出

1

PYNQで Pmodに搭載したカメラ画像をリアルタイムで FASTX コーナー検出

marseeこと小野雅晃

Page 2: Pynqでカメラ画像をリアルタイムfastx コーナー検出

2

自己紹介

● 定年間近の大学の技術職員

● 11年前から「 FPGAの部屋」のブログを書いています– http://marsee101.blog19.fc2.com/

● 今のところ 3735記事

● FPGAやそのツール、日記も書いています● 爺さんなので早起きです

– 午前 3時か 4時ころ起きてブログを書いています

Page 3: Pynqでカメラ画像をリアルタイムfastx コーナー検出

3

今日の発表

● PYNQに CMOSカメラを付けて芸をさせました– FASTX コーナー検出(OpenCV )– ラプラシアンフィルタ

– アンシャープ・マスクキング・フィルタ

● 今のところベアメタル・アプリケーション– Pythonで動かすのに失敗しています

● 誰か教えて。。。

Page 4: Pynqでカメラ画像をリアルタイムfastx コーナー検出

4

CMOSカメラ

● MT9D111(日昇テクノロジー)– 1,600 x 1,200ピクセル(UXGA) 15 fps– preview mode 800 x 600 (SVGA) 30 fps(使用中)– MotionJPEG– パラレル・インターフェース

– レジスタがたくさん、 6万個くらい– NDAがあってレジスタの使い方がよくわからない?

● PMOD x 2とのインターフェース基板は自作– KiCADで基板のデータを作製– 実はZedBoard用

Page 5: Pynqでカメラ画像をリアルタイムfastx コーナー検出

5

写真

Page 6: Pynqでカメラ画像をリアルタイムfastx コーナー検出

6

● USBカメラとの比較

● USBカメラはつなぐの簡単– USBポートにつないでソフトを入れればOK

● PMODにつけるカメラ– つなぐためにはハンダ付けが必要

– インターフェース基板を設計する手間

● 利点– インターフェースを作ればハードウェア処理が簡単にできる

– フィルタをカメラのピクセルデータの取り込みデータパスに入れればメモリ帯域を使用しない

Page 7: Pynqでカメラ画像をリアルタイムfastx コーナー検出

7

PYNQボード用 Vivadoのブロックデザイン

カメラ

DDR

camera interface

switch

switchDMAC

FASTX

laplacian filter

unsharp maskingfilter

Page 8: Pynqでカメラ画像をリアルタイムfastx コーナー検出

8

USBカメラを CPUで使用する場合

USBカメラ

CPUカメラ画像

フィルタ処理後の画像

DDR SDRAM

Page 9: Pynqでカメラ画像をリアルタイムfastx コーナー検出

9

高位合成ツールを使用して各フィルタ IPを作成( Vivado HLS)

● C、 C++、 SystemCから HDLを合成し IPへ● 関数の引数がプラグマ 1つでいろいろなインターフェースを実装– Vivado HLSの独自インターフェース– AXI4-Lite Slave– AXI4 Master– AXI4-Stream

Page 10: Pynqでカメラ画像をリアルタイムfastx コーナー検出

10

Vivado HLSについて

● C, C++で書くと HDLに変換され IP化(無料、ただしデバイス限定)

● pragmaで動作やインターフェースなどを指定する必要がある● 今のところ、ハードウェアを知らないと性能が出ない● 合成済みライブラリ

– hls_mathライブラリ( atan, sin, cos, log, log10, sqrt など)– HLSビデオライブラリ(OpenCVの一部をサポート)– FFTや FIR、線形代数ライブラリ( cholesky)– HLS DSPライブラリ( SDRアプリケーション)

Page 11: Pynqでカメラ画像をリアルタイムfastx コーナー検出

11

Vivado HLSの OpenCV対応ライブラリ関数

AXIvideo2cvMat AXIvideo2CvMat AXIvideo2IplImage cvMat2AXIvideo CvMat2AXIvideocvMat2hlsMat CvMat2hlsMat CvMat2hlsWindow hlsMat2cvMat hlsMat2CvMathlsMat2IplImage hlsWindow2CvMat IplImage2AXIvideo IplImage2hlsMat

AXIvideo2Mat Mat2AXIvideo Array2Mat Array2Matビデオプロセッシング

AbsDiff AddWeighted And Avg AvgSdvCmp CmpS CornerHarris CvtColor DilateDuplicate EqualizeHist Erode FASTX Filter2DGaussianBlur Harris HoughLines2 Integral InitUndistortRectifyMapMax MaxS Mean Merge MinMinMaxLoc MinS Mul Not PaintMaskPyrDown PyrUp Range Remap ReduceResize Set Scale Sobel SplitSubRS SubS Sum Threshold Zero

OpenCVインタフェース

AXIインターフェース

「Vivado Design Suite ユーザー ガイド 高位合成 UG902 (v2016.4) 2016 年 11 月 30 日」参照https://japan.xilinx.com/support/documentation/sw_manuals_j/xilinx2016_4/ug902-vivado-high-level-synthesis.pdf

Page 12: Pynqでカメラ画像をリアルタイムfastx コーナー検出

12

宣伝

● FPGAマガジン No.14, No.15, No.16, … で Vivado HLSの使い方を書いています

● HDLではなく C、 C++でお手軽にフィルタ IPなどを書いてみませんか?

● HDLも必要ですが、 Cで書いた方が 10倍くらい書く時間が短いです

● 皆さんも高位合成ツールを使ってみませんか?

Page 13: Pynqでカメラ画像をリアルタイムfastx コーナー検出

13

デモ

● FASTXコーナー検出● ラプラシアンフィルタ● アンシャープ・マスキング・フィルタ

Page 14: Pynqでカメラ画像をリアルタイムfastx コーナー検出

14

FASTXコーナー検出( theshold = 5)

Page 15: Pynqでカメラ画像をリアルタイムfastx コーナー検出

15

ラプラシアンフィルタ

Page 16: Pynqでカメラ画像をリアルタイムfastx コーナー検出

16

アンシャープ・マスキング・フィルタ