ブログ

Armadillo-X1でOpenCVを使って見る

at_takuya.sasaki
2016年12月4日 20時18分

2016.9に発売したArmadillo-X1で、OpenCVを使った画像処理を試してみました。

1. 構成

今回はArmadillo-X1にUSBカメラを接続して評価してみます。 今回利用したUSBカメラは家電量販店などで購入した以下の製品になります。

BSWHD06Mシリーズ

2. OpenCVのライブラリをインストール

Armadillo-X1の標準のユーザーランドには、OpenCVのライブラリがインストールされていません。 今回は、サンプルソースコードのビルドもArmadillo-X1上で行うこととしますので、開発用パッケージを以下のようにインストールします。

root@armadillo:~#  apt-get install libopencv-dev

なお、Armadillo-X1のユーザーランドであるDebian GNU/Linux 8(jessie)で用意されているOpenCVのパッケージは、2.4.9になります。

3. サンプルソースコードをビルド

サンプルとして使ったソースコードは、過去に公開したArmadillo-810の以下のHowToのソースコードに、OpenCVの各APIの処理速度の計測できるようにしたものを使うことにします。

Howto : Armadillo-810でOpenCVを用いた画像処理
サンプルソース

ネットワーク/USBメモリ経由などで上記サンプルソースをArmadillo-X1上にコピーしたあと、以下のようにビルドしてください。

root@armadillo:~# ls
edge-detection-yuyv-v4l2.tar.gz
root@armadillo:~# tar zxvf edge-detection-yuyv-v4l2.tar.gz
edge-detection-yuyv-v4l2/
edge-detection-yuyv-v4l2/edge-detection.o
edge-detection-yuyv-v4l2/Makefile
edge-detection-yuyv-v4l2/edge-detection.c
edge-detection-yuyv-v4l2/edge-detection
root@armadillo:~# cd edge-detection-yuyv-v4l2/
root@armadillo:~/edge-detection-yuyv-v4l2# make
cc    -c -o edge-detection.o edge-detection.c
cc  -o edge-detection edge-detection.o -lopencv_core -lopencv_highgui -lopencv_imgproc -lm

4. サンプルを実行

今回のサンプルはキャプチャを20回連続で繰り返した後、最後にキャプチャした画像を、グレースケール→エッジ検出するというものです。 また最後のキャプチャの処理時間と、グレースケール変換、エッジ検出の処理時間を標準出力に表示し、以下の画像をbmp形式で保存します。

  • 元画像
  • グレースケース画像
  • エッジ画像

サンプルは以下の様に、第一パラメータにUSBカメラのデバイス番号を指定します。

root@armadillo:~/edge-detection-yuyv-opencv# ./edge-detection 0
capture time :  48.3950 msec
color conversion time:   7.4749 msec
edge-detection time:  48.7759 msec

5. 性能比較

同じサンプルアプリを、Armadillo-840+USBカメラの構成で動かしてみて、性能比較をしてみました。 以下は、10回サンプルアプリを実行した平均値になります。

Armadillo-840Armadillo-X1
キャプチャ(cvQueryFrame)47.6204 ms48.3312 ms
グレースケール変換(cvCvtColor)14.64647 ms7.4383 ms
エッジ検出(cvCanny)49.36608 ms46.194 ms

キャプチャ/エッジ検出はほぼ差がありませんでしたが、グレースケール変換は、X1が840の約半分になっています。 ただ、Armadillo-840のOpenCVライブラリは2.3.1なので、もしかするとOpenCVのライブラリが2.4.9で最適化されている影響かも知れません。

そのうち、また他の比較も試してみたいと思います。

以上