exStickとOpenCV

ちまたには,OpenCVを使って○○しましたというWeb上の記事がたくさんありますね.楽しそうだなあと横目に見る日々を過ごしていたのですが,2015年の締めくくりにexStickとOpenCVで遊んでみる事にしました.

実験環境

実験環境はexStickとOV7670です.exStickのFPGAには,100MbpsのネットワークをつかってVGA画像をPCに送り続ける簡単なハードウェアが実装されています.

extick_ov7670

OpenCVと組み合わせて画像処理

これまでは,「UDPで送られてくるデータを組み立てて動画像として表示する」という簡単なフロントエンドを実装していました.今回は,一歩すすんで,受信したデータをOpenCVのイメージデータとして表示,処理するというのを試してみました.

結果は次のように.順に,”そのまま表示”,”グレースケール化”,”エッジ検出”,”人の顔抽出”です.パソコンの処理性能ってすごいですね.

1db208175ec7e53f52cdb52eb2fa27ce 9769512ddd016f23c0d484695551e548 8ae0b14f985f5c44e190ac82014c5003 2b02f007d71697ffd6e7cd69796f7bd8

ソースコード

ソースコードはこんな感じ.opencv_client.cxx

メインの部分は次の通りです.UDPパケットを組み立てるところ以外は,よくあるOpenCVのサンプルです.顔検出用のデータはOpenCV 2.11に同梱のものを使いました.本当に便利ですね.

今回は手抜き実装で,画像の受信と処理を逐次に行なっているため,取りこぼしは発生するのですが,目をつぶることにします.それでも,カメラの前で手を振ってみてもそう違和感はありませんでした.

まとめ?

やってみましたー,という話で特にまとめというものはないのですが,exStickから受信した動画像をOpenCVを使ってオンタイムで処理するのは,なかなか楽しいものです.次のステップとしては,一部のHW化とか,活用事例とか考えてみたいなと思っています.