読者です 読者をやめる 読者になる 読者になる

Raspberry PiとProcessingで画像処理入門

電波

f:id:karaage:20151201231827p:plain:w640

Advent Calendar参加記事

 Advent Calendarに関しては下記記事参照ください。

 今年は毎年参加しているProcessingの他、最近色々遊んでいるRaspberry PiのAdvent Calendarにもせっかくなので参加してみました。

 参加したのは良いのですが、書く時間があまりないので一つの記事で両方のAdvent Calendarに参加してみようという大胆な試みをしてみます。ひょっとしたら禁じ手だったかも。

Raspberry PiとProcessing

 Raspberry PiもProcessingも大好き。じゃあRaspberry PiでProcessingすれば良いのじゃないと思うわけです。Processingだと手軽に映像をいじれるので、プロジェクタでちょっとしたインスタレーションしたいけどPCだと大げさという場合や学校での教育用など色々使い道が考えられますね。少し前までRaspberry PiでProcessing動かすのは中々厳しかったようですが、ハードウェアがRaspberry Pi2となり大幅にマシンパワがアップしたのと、ソフトウェアもProcessingがver3.01でRaspberry Piに正式対応したことでそこそこ動くようになってきたようです。

 Make:の以下記事にProcessingのRaspberry Pi対応の紹介とインストール方法書いてあったのですが、ある程度わかっている人向けのざっくりした説明なので、初心者向けの補足や・具体的なコマンドを追加して説明した上で、Raspberry Pi + Processingで簡単な画像処理に挑戦してみようと思います。

 続きは、興味ある方のみご覧下さい。

Raspberry PiとProcessingのセットアップ方法

Raspberry Piセットアップ

 最低限Raspberry Piが必要です。今だとRaspberry Pi2がオススメ。

Raspberry Pi 2 Model B (1)

Raspberry Pi 2 Model B (1)


 他に必要なものや、具体的なセットアップ方法は以下の記事を参照下さい。


f:id:karaage:20151012113508j:plain:w640
 こんな感じで動かしてます

Processingインストール

 セットアップ完了してネットに接続したRaspberry Piを起動。GUI画面(ウィンドウズみたいな画面ね)を起動しましょう。CUI画面(文字だけの画面、MS-DOSみたいなやつね)の場合は、以下コマンドでGUIを起動して下さい。

$ startx

 次にターミナルを起動(上の方にあるテレビみたいなアイコンをクリックね)して以下コマンドでprocessingをダウンロードして解凍。

$ wget https://github.com/processing/processing/releases/download/processing-0247-3.0.1/processing-3.0.1-linux-armv6hf.tgz
$ tar xvzf processing-3.0.1-linux-armv6hf.tgz

 これでインストールは完了。

Processing起動

 そのまま以下コマンドを実行。

$ cd processing-3.0.1/
$ ./processing

 以下のような画面が出たら起動成功
f:id:karaage:20151130222510p:plain:w640

Processingで顔認識してアヘ顔(OpenCV)

 せっかくなので、Processingで昔作った顔認識してアヘ顔になる気の狂ったプログラムを試してみようと思います。下記記事参照。


OpenCVインストール

 まずは画像処理によく使われるOpenCVというライブラリ、processing用のものを以下コマンドでダウンロード+インストール。

$ cd
$ cd sketchbook/libraries
$ wget https://github.com/atduskgreg/opencv-processing/releases/download/latest/opencv_processing.zip
$ unzip opencv_processing.zip

 これで完了。本当は完了じゃないことが後でわかるのですが…

プログラムソースコード

 もともとのプログラムがProcessing1用で、Processing3の対応で色々修正する必要があったので、修正しました。特に説明する必要はないくらいの短いプログラムです。同じフォルダに人の顔の入った画像source.jpgとアヘ顔画像ahegao.pngを入れてこのプログラムを実行すると、source.jpgがアヘ顔画像に早変わりします。

import java.awt.Rectangle;
import gab.opencv.*;

OpenCV opencv;

PImage source_img;
PImage ahegao_img;

void setup() {
  size(640, 480);

  opencv = new OpenCV(this, 640, 480);
  opencv.loadImage("source.jpg");
  opencv.loadCascade(OpenCV.CASCADE_FRONTALFACE);

  ahegao_img = loadImage("ahegao.png");
  imageMode(CORNER);
}

void draw() {
  image( opencv.getInput() , 0, 0 );
  Rectangle[] faces = opencv.detect();

  for(int i=0; i<faces.length; i++){
  image(ahegao_img, faces[i].x, faces[i].y, faces[i].width, faces[i].height );
  }
}

使用画像

 るろうに剣心的画像ないかなと思って探したのですが、著作権的に厳しかったので、変デジ研究所さんからフリー素材をお借りしました。ろんすた (id:lonestartx) さん、いつもありがとうございます!

f:id:karaage:20151201232007j:plain:w640
 かなり剣心っぽい(source.jpg)


f:id:karaage:20151201232016p:plain:w640
 アヘ顔(ahegao.png)

プログラム実行

 同じフォルダに画像入れて意気揚々とプログラム実行、しかし無情にも動かない。
f:id:karaage:20151130230333p:plain:w640

 以下のエラーメッセージ。どうもProcessingのOpenCVライブラリはまだARM系のRaspberry Piには対応していないようです。ショック…

OpenCV for Processing is only compatible with the 64-bit download of Processing.

 仕方ないのでMac上で動かしたところ、無事動作成功。

f:id:karaage:20151201231827p:plain:w640
 アヘ顔になった!

 追記:Raspberry PiでOpen CV動くようになりました!以下参照。

まとめ

 こんなしょうもないオチですみません…Processing用のOpenCVがRaspberry Piに対応したら(きっと)動いてくれるはずなので、プログラムは一応公開しておきます。OpenCVを使わないような簡単な画像処理なら動きますので、Processingのexampleプログラムや、参考サイトのプログラムなど色々試してみて下さい。
 Raspberry PiでOpenCVを使う場合はpythonが良いみたいです。python+OpenCVをやってみたいという人は下記記事参照下さい。

 python+OpenCVでの顔認識はネットを探せば色々出てきますし、そのうち自分もやろうかなと思っていますので、そのときはまた公開します。多分。

参考サイト

関連記事