Installation of lihgt 終了


ふえー
怒濤の1週間でした。
このマルチタッチモニタのお披露目に向けて、プログラムの擦り合わせのラストスパートかけなきゃいけないとき、親が救急車で運ばれて入院。
80km先の病院まで毎日往復。帰ったら仕事の残務とマルチタッチのプログラミング。
さすがに疲れたー。
思えば以前ネタナイト(12/26 ひさびさ開催!@札幌)やったときも親が脳梗塞になって欠席したっけなー。今回も残念ながら欠席なんですけども。。。
イベント近くなると親が病気するのはもう様式美の域かもしれないす・

それでもなんとか終了。
むりやり間に合わせた状態なので要改善点もりもりです。
とはいえ、初見の人がみるとやっぱり驚きみたいですねー
一般公開するにはこの驚きを持続できるようになるまで高めないといけないんでしょうね。

あーでもほっとした、、
のもつかの間、友人のmoskitooさんからコラボ制作話が来てさっそく取りかかり中
納期が短いので集中してやりますよ〜。これは楽しみだで。

当日写真&動画

セッティング風景
Installation of light

Installation of light

Installation of light

Installation of light

Installation of light

Installation of light

Installation of light

当日動画


Installation of lihgt 終了


ふえー
怒濤の1週間でした。
このマルチタッチモニタのお披露目に向けて、プログラムの擦り合わせのラストスパートかけなきゃいけないとき親が救急車で運ばれて入院。
80km先の病院まで毎日往復。帰ったら仕事の残務とマルチタッチのプログラミング。
さすがに疲れたー。
思えば以前ネタナイトやったときも親が脳梗塞になって欠席したっけなー
イベント近くなると病気するのはもう様式美の域か・

それでもなんとか終了。
むりやり間に合わせた状態なので要改善点もりもりです。
とはいえ、初見の人がみるとやっぱり驚きみたいですねー
一般公開するにはこの驚きを持続できるようになるまで高めないといけないんでしょうね。

あーでもほっとした、、
のもつかの間、友人からコラボ制作ネタが来てさっそく取りかかり中
納期が短いので集中してやりますよ〜

当日写真&動画

セッティング風景
Installation of light

Installation of light

Installation of light

Installation of light

Installation of light

Installation of light

Installation of light

当日動画


よせてはかえす


って入ってる歌詞あったっけなー
と思い出そうとしても思い出せない。。
そうだ元気が出るテレビのオープニング曲だった。(結局ググった)
昨日も「水琴窟」の名前がなっかなか出てこなくてもんもんもん
記憶力は返す一方だわあ・カンバックサーモン!

昨日の風景。うよんうよん


opentouchの改造


このマルチタッチってノイズ対策も重要でして、赤外線LEDから漏れる赤外線光やそのほかのライト、ランプからの赤外線を認識しちゃったりで結構環境に左右されやすいんです。
LEDから漏れる光はハード的に遮光してある程度は抑えることができるんですが、プロジェクターのスクリーン(トレーシングペーパー)などを添えるとどうしても全体がぼんやり光ったりするので完全に取り除くことは不可能なんす。
本家TouchLibはこれの対策として、いろんな画像処理(フィルターなどなど)してからタッチ認識をおこなっているようです。
Macなので使いたくても使えずなのでないものは実装すべし(出来る範囲で)とOpenTouchでも実験してみました。
やってることはOpenCVのサイト(日本)にある背景除去のサンプルをほぼそのまま移植
なんとかできたー。
ただ、背景マスクとの差分とってるので、トレーシングペーパーがちょいとズレちゃったりすると、がっつし認識しちゃう。。。
そりゃそーなんだけど、TouchLibではrectifyとかってフィルタあるけど、これの防止なのかなあ
なんかよくわからんけど。

これは背景除去前。
ヒルマのカーテン締めた部屋で外光結構入ってます。
新聞紙全開です(笑)
background1

この状態で指のっけてます。
こりゃタッチ認識はむりだー
background+touch

背景除去してタッチ認識したところ
下の方でまだノイズ拾ってる
強くタッチすると、ミニタッチ筐体自体がうごいちゃうみたいで
背景マスクがズレる感じでタッチ誤認識がワラワラと。。
まだまだイマイチだなあ
background remove


LAN経由でMIDIの送受信(OSX)


そういえば、複数台のマルチタッチモニタから、別のMac(Ableton Live)へMIDIメッセージを送るにはどうしたらいいもんかと考えてたんですけど、場所がちょっと離れてるしMIDIケーブルってどんくらい伸ばせるのか?みたいな疑問がわいてきましたわ。
ProcessingでMIDIメッセージを送るプログラム試しに作ってテストしようとOSXのAudioMIDI設定見ると、「ネットワーク」ってのがあるんだった。普段は眼中にも無かったんだけど。
MIDI over LAN (OSX)

これ改めてヘルプ見てみるとLAN経由でMIDIメッセージが送れるようになってるし!しかもBonjur対応だからIP設定も必要なし。

適当に設定してみると、
MIDI over LAN (OSX)

送信側、受信側お互いに仮想MIDIインターフェースが認識されちゃった。すげー、OSの機能で標準で備わってたとは知らなかった。。MIDIインターフェース追加で買わなくて済んだ。というよりも使わなくていイくなった。

そんなんでProcessingから別MacのAbletonLiveへLAN経由でMIDIメッセージ送信もばっちし。しかも無線で。無線LANってことで、信号の遅延が怪しさ満点ですけど、、、

ルーターの設定によってはインターネット経由でMIDI送信できちゃうよね。遅くて使い物にならんかな?ちょっとしたトリガに使うなら面白いことに使えるかも。プログラムいらずのMIDI機器だけでネット越しで遠隔制御できてしまう。


やっとこ実用的になったか


FTIRマルチタッチは
赤外線LED、赤外線カメラとこのカメラのタッチ画像を
座標へと変換するソフトが要なのですが、これってやっぱしwinが主でして
macでもあるにはあるんですけど、まともに動くのが無い!

TouchLibはmacだとなんだか相性が悪く、OpenCVのキー取得を呼び出すと落ちゃう。
OpenTouchは、なんとかメモリリーク箇所も発見解消してやっと動いたけど、
CPU負荷が140%となかなか贅沢な処理でファン全開。連続稼働はちょっとなーと。
でも、OpenTouchのexampleにあるcvBlobDetectionはかなり負荷が軽くていいんだけど
Blob認識のみでBlobトラッキング、TUIO送信が実装されていない。

もーmacだとすべてが惜しいんです。
「YOU winでやっちゃいなYO」ってなるんでしょうけど、やっぱしmacでやりたいんです。
なので、まともに動くものプリーズ!
と、欲しがってばかりだと進歩も無いので、どーせなら自前で改造してみました。
すんごい軽いcvBlobDetecionとめちゃ重portBlobDetectionのBlobTracker、TUIOsenderをニコイチに。

C++わっかんねーと悩みつつもなんとかあなたと合体(LeopardでもOK)
するとどうしたことでしょう、、CPU負荷が140%→6%!!
昔のあんたはなんだったの??
何を一所懸命やってたの???
激減にもほどがあります。
画面キャプチャソフトに負荷とられてるので、ほんとは15%くらいですけどね。

元の作者さんに許可とりたいけど、外人さんなので気後れしてしちゃってまだ聞いてない、、
でもま、もしかしたら今のMacでまともに動く唯一のTouch認識(TUIO付き)だったりなんかしてー(広川太一郎)
とりあえず2日くらい起動させっぱなしにして落ちないか検証中ですよ。


動画追加


いっこ前に張った動画は、自分のデジカメで録画したものだったけど
このマルチタッチプロジェクトのバンマスがDVカメラでも録画してました
ちゃんと音も合わせて編集しています。
さすがにキレイ・ちゃんとしてるので断然かっちょE!

ちなみにこれオケのBGMっぽいけど
エレピ&タッチしたときに出る音だけの即興です


お仲間が増えました


マルチタッチモニタが1台増えましたよ。
(出来たてなのでまだ不安定ですけど)
そしてこのプロジェクトにももうおひと方加わり
実際に2台でデモしました。
幻想的でなかなかイイかんじ・
これからネタを増やしたり
どんな構成にするのか課題はもりもり
touch認識はOpenTouchのportVideoBlobDetecioon
映像はProcessing
音はMax/MSP(maxLink)


インタラクションデモ2


準備中
準備中
モニター台新調しました。
機能性高くてナイスです・

flickr.com/photos/recotana/1781160985/" title="Photo Sharing">カメラとプロジェクタ
カメラとプロジェクター
まだ台は無いです。


タッチすると煙のような像がでます
でも血どばーみたい。


EclipseでProcessingでマルチクラス


マルチクラスってのもおかしなアレなんですけど
EclipseでProcessingをプログラミングする場合、Processingはタブでクラスを分けて書けるけど、生成されたjavaファイル見てみると、分けて書いたクラスは実はメインのクラスでだらだらーっと組み込まれてるんです。
Eclipseでクラスを分けて書いても、単純にメインのクラスへは組み込むことはできないのでどーしたもんかと悩んでました。
Cみたいな#includeプリプロセッサがあればなんてことはないんだけどなあ

で、ちょっとこんな風にして、マルチクラス(なんか抵抗あるな、この呼び名)やってみました。
インスタンスを作って呼び出す方法と、staticにして呼び出す方法
ちなみにEclipseがインストールされてるとゆー前提で。(ちなみにMacBook Eclipse3.3で日本語化のPleiadesプラグイン入れてます)
No1
まずは新規にプロジェクト作ります。

No2
プロジェクト名を入れて、JREをJVM1.4.2にしして(Processingは1.4じゃないとだめだったよーな)
「次へ>」を押す

No3

No4
ライブラリタグで外部jarを押して、processingのcore.jarを選択
(他に使用するライブラリがあれば適宜選択)
ここまでで下準備は完了

No5
新規にクラスを作ります。

No6
まず、パッケージ名を入力。これは適宜ですけど、
このプロジェクト内全てのクラスに共通な名前にするべきだろか。とりあえず。
名前はこのクラスの名前。
これら頭文字の大文字小文字で注意されるはず。Javaの命名規則で。

No7
最初に作ったのはsetup()やdraw()を入れておくメインのクラスで、
次にprocessingでの他のタブのクラスを
(写真のMultiClass1の1は間違いでMultiClassにしてました)
あともういっこクラスを作ってこんな感じにしてみました。

No8

Mainは

package multiclassTest;

import processing.core.PApplet;

public class Main extends PApplet{

int i=0;

//呼び出したいメソッドのあるクラスのインスタンスを作っとく
//このMainのオブジェクトを渡す(アプレット描画に必要)
MultiClass drawTest = new MultiClass(this);

 public void setup(){

  size(300,300);

  smooth();

 }

 public void draw(){

   background(100);

   if(++i > 200) i=0;

//上で作ったインスタンスでメソッド呼出
   drawTest.drawCircle(50+i,50+i,20,20);

//もういっこのクラスのstaticメソッドを呼出。
//Main(this)=PAppletオブジェクトを渡すのを忘れずに。
//こっちのほうがProcessingぽい気がする。。。
   MultiClassLine.lineTest(this,i,0,200-i,300);

 }

}

次のクラス。
これはインスタンスを作って呼び出す方法
コンストラクタのPApplet _pがキモです。
これ渡しとかないとアプレット内で描画できないんです。

package multiclassTest;

import processing.core.PApplet;

public class MultiClass {

 PApplet parent;

//コンストラクタ 
 public MultiClass(PApplet _p) {

  parent = _p;

 }

  void drawCircle(int _x , int _y , int _a ,int _b){

   parent.ellipse( _x , _y , _a , _b );

  }

}

さらに次のクラス。
いっこめと同じ理由でPApplet _pを渡して描画させてます。
こちらはstaticなやり方

package multiclassTest;

import processing.core.PApplet;

public class MultiClassLine extends Main{

  static void lineTest(PApplet _p, int _x1 , int _y1 , int _x2 , int _y2){

    _p.line(_x1, _y1, _x2, _y2);
  }
}

No9
こんな感じで描画してます

processing使い始めて1ヶ月くらいなので正直これでいいの??って感じで怪しさ満点ですが
なんかここまでやるとさくっと書けるProcessingの良さが薄れまくりです。。。
javaにしたほうがいいんでねの?ってかんじかも???
でもデバッガがあると楽なんですよね〜〜