Android x OpenCV2.3.1 on Beagleboard-xM Rev.B な教材

�USBCameraつなげたBeagleboard-xMにAndroidOpenCVな記事です。


今日、教育機関主催のAndroidフォーラムに参加してきたんですが、その帰りに教育テーマでぼんやりと
USBカメラ x OpenCV x Beagleboard-xMをAndroid教材にするとわりと短時間でKernelの深いところからアプリまでカバーして体験できるんじゃないかなーと
考えていたりなんだり。ポーティング教材的な。


バイナリ用意されてるから、スムーズに行けば1時間もかからないうちにAndroid環境構築を一通り体験できちゃうし、
USBCamera使うためにUVC有効にしてKernelリビルド体験もできるし。
視覚に訴える題材でもあるよね。
座学6時間+実習2時間の1日コースくらいでできるんじゃなかろうか。
体験だけなら2時間か。


以下、妄想教材の流れ。

1.AndroidBeagleboard-xMにのせる(10分)
2.Androidが起動するかチェック(5分)
3.USBカメラを使うためKernelのコンフィグを変更しリビルド(30分)
4.KernelをSDへコピーして起動(5分)
5.OpenCVデモ実行(10分)


以下ざっと作業手順。


0. 準備
http://software-dl.ti.com/dsps/dsps_public_sw/sdo_tii/TI_Android_DevKit/TI_Android_GingerBread_2_3_4_DevKit_2_1/index_FDS.html
にある
beagleboard-xm.tar.gzとTI_Android_GingerBread_2_3_4Sources.tar.gzをダウンロードしておく。
これが一番時間かかったりする。


1.AndroidBeagleboard-xMにのせる(10分)
beagleboard-xm.tar.gzを展開して移動

$ tar zxvf beagleboard-xm.tar.gz
$ cd beagleboard-xm

展開後できたmkmmc-android.shを実行。microSDへイメージを流し込む。ちなみにexport LANG=Cしないと不幸せになる。

(SDをPCへぶっ刺す)
$ dmesg
(SDのマウントポイント確認。/dev/sdf など出てるのを2行後で使う)
$ export LANG=C
$ sudo mkmmc-android.sh /dev/sdf

完了。


2.Androidが起動するかチェック(5分)

microSDをPCからBeagleboard-xMに挿し替えて電源ON。
無事起動おめでとう。
でもUSBカメラはまだ認識されない。


3.USBカメラを使うためKernelのコンフィグを変更しリビルド(30分)
TI_Android_GingerBread_2_3_4Sources.tar.gz を展開して移動

$ tar zxvf TI_Android_GingerBread_2_3_4Sources.tar.gz
$ cd TI_Android_GingerBread_2_3_4Sources

ツールチェインのパス通してdefconfig

$ export PATH=$PATH:`pwd`/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin
$ cd kernel
$ make ARCH=arm CROSS_COMPILE=arm-eabi- distclean
$ make ARCH=arm CROSS_COMPILE=arm-eabi- omap3_evm_android_defconfig

menuconfigでKernelコンフィグをGUIでいじる。

$ make ARCH=arm CROSS_COMPILE=arm-eabi- menuconfig

Device Drivers -> Multimedia Support -> Video capture adapters -> V4L USB devices -> USB Video Class と UVC input events device supportにチェック

これでUSBカメラが認識されるようになる。


んでカーネルビルド

$ make ARCH=arm CROSS_COMPILE=arm-eabi- uImage

20分くらいご歓談。


4.KernelをSDへコピーして起動(5分)
できたKernelをSDへコピー

$ sudo mount /dev/sdf1 /mnt
$ sudo cp arch/arm/boot/uImage /mnt/uImage
$ sync
$ sudo umount /mnt
$ sync

また、SDをPCからBeagleboard-xMへ挿し替えて起動。
起動後、プリインストールのカメラアプリを起動。
きっと写る。


5.OpenCVデモ実行(10分)

http://sourceforge.net/projects/opencvlibrary/files/opencv-android/2.3/

にある

OpenCV-2.3.1-beta1-android-bin.tar.bz2

をダウンロードして展開。

$ tar jxvf OpenCV-2.3.1-beta1-android-bin.tar.bz2


PCのUSBとBeagleboard-xMのmini-B USBを繋いだ状態で
eclipseOpenCVのプロジェクトを開いて
sampleディレクトリ内のプロジェクトを開いて
実行。
わーい。


以上。

あとはbusybox入れるもよし、GPIO叩くもよし、カメラアプリつくるもよしでいろんな方向へ展開できそうな。


参考:

基礎から学ぶ 組み込みAndroid

組み込みAndroid本といったらこれ。Beagleboard-xM rev.B を使用。



OpenCV 2 Computer Vision Application Programming Cookbook: Over 50 Recipes to Master This Library of Programming Functions for Real-time Computer Vision [ペーパーバック]

サンプルコードが直感的でわかりやすい。もやもやしてたところがスッキリ。