昨今はJavaScript版で書かれたprocessing*1が流行の様ですが、私は先日以来入れて触っている元祖processingでありまして。
今日はいろいろ上に書いた様なもやもや感を解消すべく、MacBookAirについてるカメラで撮った画像をリアルタイムで処理させてみようと試みてみました。
あれこれ見たところ、JMyronというライブラリを取り込めばやりたいことはできる様なので早速導入。
Downloadのリンクから"Processing Library (Popular)"と書かれているリンクからzipファイルを落として解凍*2すると
- JMyronフォルダ
- JMyron Exampleフォルダ
- Extra DLLsフォルダ
- HowToInstall.txt
なる4つが得られので、JMyronフォルダをprocessingのlibrariesフォルダへ。
プログラム例もあると便利なので、JMyron Exampleフォルダをprocessingのexamplesフォルダの中へとそれぞれ投げ込みます。
(HowToInstall.txtの説明のまんまですな。)
ただ、Intel Macの場合は、そのままではNGでJMyronフォルダの中にあるlibJMyron.jnilibをhttp://www.jibberia.com/projects/で配布されているバイナリに差し替えないとNGの様だ。
http://www.jibberia.com/projects/ の "libJMyron.jnilib compiled for intel macs"というリンクをクリックしてIntel Mac用のバイナリを取得する。
(赤い矢印の先がリンク)
ファイルをダウンロードしたら解凍の後、"libJMyron.jnilib"を、(processingのインストール位置)//libraries/JMyron/libraryへ上書きコピー。
ファイル*.jnilibという拡張子からして、Java Native Interface用のライブラリなのだろう。
これで動くはずなので、さきほどコピーしたサンプルを試してみる。
JMyron Examplesの中の"Myron_simpleCamera"なる名前のサンプルがいかにもシンプルそうなので試してみる。
えいやと実行すると…。MacBookのカメラが起動して…。
おお、カメラで撮られているのが動く!
ソースを見ると結構シンプルなのでわかりやすい。実質35行くらい。
少し加工してみる。
画像を上下左右反転させて、モノクロ化をしようと思ったら*3次の様に書き換えればよい。
サンプルを多少書き換えて下の様にしてみる。
void draw(){ m.update(); int[] img = m.image(); float r,g,b,ave; loadPixels(); for(int i=0;i<width*height;i++){ r = red(img[i]); g = green(img[i]); b = blue(img[i]); ave = (r+g+b)/3.0; pixels[width*height-1-i] = color(ave,ave,ave); } updatePixels(); }
んでもって実行。
ココで見るとすべて静止画ですが、きちんと動画として表示されています。
なんか結構楽しいなぁ。と、楽しんでいるといい時間になったので、とりあえず今日はここまで。
学生の頃に勉強した画像処理のフィルタを試してみたりとか、最近のデジカメでよく付いてる顔検出の勉強とかできそうですね。
動き検出して画像を動かしたり音とかならせたら、テルミンの様な不思議なこともできたりして。