×

らずらいと姫の挑戦日記(第24回)

2016-09-27

CEATECのデモ機を製作するシリーズの最後、今回はRaspberry Piのカメラを利用して顔認識を行い、認識した顔の数に応じてモーターの強弱を制御するにチャレンジです。とはいっても今回は、Lazuriteの開発者1号が自分のRaspberry Piを使用してソフトウエアを開発したので、自分に渡されたRaspberry Piでも動くようにするのが今回のテーマです。今回はRaspberry Pi3を使用しました。
また、全て終わるのに2-3時間かかりますし、待ち時間も長いので何かしながら作業したほうが良いです。

raspi3

Raspberry Piを立ち上げる

Raspberry Piを立ち上げるところは、こちらを参照してください。

Raspberry Piを最新の状態にする

Raspberry Piを最新の状態にします。最後のrebootを実行すると、Raspberry Piが再起動します。

sudo apt-get update
sudo apt-get upgrade
cd ~/linux
make dtbs
sudo cp arch/arm/boot/dts/*.dtb /boot/
sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
sudo cp arch/arm/boot/dts/overlays/README /boot/overlays/
sudo reboot

画像ライブラリ OpenCVのダウンロードとビルド

画像ライブラリ OpenCVをダウンロードします。
また、今回はバージョン 2.4を使用したので、そのバージョンに変更します。

git clone git://github.com/opencv/opencv
cd opencv
git checkout 2.4

opencvのビルドに必要なパッケージをインストールします。

sudo apt-get install build-essential cmake pkg-config

opencvの実行に必要なライブラリをインストールします。

sudo apt-get -y install libpng12-0 libpng12-dev libpng++-dev libpng3 libpnglite-dev zliblg-dbg zliblg zliblg-dev pngtools libtiff4 libtiffxx0c2 libtiff-tools
sudo apt-get -y install libjpeg8 libjpeg8-dev libjpeg8-dbg libjpeg-progs libavcodec-dev libavcodec56 libavformat56 libavformat-dev libgstreamer0.10-0-dbg libgstreamer0.10-0 libgstreamer0.10-dev libxine2-ffmpeg libine2-dev libxine2-bin libunicap2 libunicap2-dev libdc1394-22-dev libdc1394-22 libdc1394-utils swig libv4l-0 libv4l-dev python-numpy libbython2.7 libx11-dev libxext-devsudo
apt-get install libswscale-dev
sudo apt-get install libswscale-dev

opencvのライブラリのビルド環境を作成します。

mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_NEW_PYTHON_SUPPORT=ON -D BUILD_EXAMPLES=ON..

opencvをビルドします。1-2時間かかるので気長に行ってください…

make -j 4
sudo make install
sudo ldconfig

ラズベリーパイカメラ用ライブラリのダウンロードとビルド

Raspberry Piで動かすためのライブラリをインストールします。配置するフォルダの場所を変えるとbuildが動かないので注意してください。

cd ~
mkdir git
cd git
mkdir raspberrypi
cd raspberrypi
git clone http://github.com/raspberrypi/userland.git
cd userland
./bundleme

Raspberry Piカメラを使用するサンプルプログラムをインストールして動かしてみます。

cd../
git clone http://github.com/robidouille/robidouille.git
cd robidouille/raspicam_cv

Makefileの変更

ダウンロードしたソフトウエアのbuild環境は、一部変更する必要があります。以下のように変更を行ってください。

オリジナル   CFLAGS_OPENCV = -I/usr/include/opencv
変更後         CFLAGS_OPENCV = -I/usr/local/include/opencv

アプリケーションのビルドと実行

make
./raspicamtest

実行するとこのように動きました。

2016-09-27-110100_1280x1024_scrot

フォルダの中身を参照するとこのようになっています。

pi@raspberrypi:~/git/raspberrypi/robidouille/raspicam_cv $ ls
Makefile RaspiCamCV.c RaspiCamTest.c libraspicamcv.so raspicamtest
README.md RaspiCamCV.h libraspicamcv.a objs

RaspiCamTest.c      カメラを表示するプログラムのソースコード
libraspicamcv.a      カメラを使用するためのライブラリ
RaspiCamCV.h        ライブラリのヘッダファイル

となっているそうです。

検出した顔の数を無線で送信する

さて、ようやく最後になりました。検出した顔の数を無線で送信するにチャレンジしたいと思います。

任意のフォルダにこちらのファイルを展開します。

先ほどのファイルからRaspiCamCV.hとlibraspicamcv.aを、driver/LazDriverからliblazurite.hをコピーし、次のようなフォルダの中身にしました。

作成したのはfacedetect_demo.cppです。


pi@raspberrypi:~/facedetect $ ls
Makefile RaspiCamCV.h facedetect_demo.cpp liblazurite.h libraspicamcv.a

ここでbuildを行うとfacedetect_demoが完成しました。これでデモ機が完成です。

facedetect_demo.cppの中身はこのような内容だそうです。

  • 53~75行目:Lazuriteの初期設定です。
  • 30~44行目:opencvの顔検出プログラムを呼びだしている関数にになります。
  • 124~138行目:検出した顔の数の数に合わせてモーター回す強さを計算して送信している所です。

今回はただ作業していくだけになってしまいましたが、非常に難しそうな顔検出が簡単にできるようになっているんですね。ぜひ、みなさんもチャレンジしてみてください。

次週、「らずらいと姫の挑戦日記」はお休みとさせていただきますが、CEATEC特集ということで、1号によるCEATEC2016にやってくるORIZURUの特集の記事をアップします。昨年から進化したORIZURUがやってくるので、ぜひCEATEC会場へお越しの際はお立ち寄り下さい!!

Laz-princess_footer