2010年12月28日火曜日

インタラクション2011論文投稿完了。

はい。何とか間に合いました。
デモ部門なんで査読は無いという話ではありんしたが、まあ1/10の結果待ちです。
いやあ、あせったね。
締め切りが11:59で投稿完了したの11:57だったのよ。
まじギリヒヤ。
てか最初動画が送信できなくってさ。
それでもたついてたんだけど、まあJavaサーブレット版のアップローダから無事上げられましたよ。
んでもなぜか「web公開しない」になってんだよね。
してほしいのに。
まあそれは通知後に直接メールで連絡すれば良いかなー、みたいな。
時は3/10-12、ところは科学未来館。
最終日に一般公開もやるみたい。
関東在住でお暇な方はどうぞいらっしゃい。
ああ、先輩呼んでみようかな。横浜に居るんだよな。

しかしまあ、M1なのによう頑張ってると思いますよ、我ながら。
この時期にひいこら言ってんのって普通はM2だけだもん。
良い研究室なんだけどね、B4あんま来ないんだよね。
自分でやりたいこと勝手にやれるような奴じゃないと来ちゃだめな研究室なんだと常々思うわ。
たしかに放置研ではあるけれどもこっちからアイデア出せば先生ちゃんとフォローしてくれるからなあ。
欲しいもんなんでも買ってくれるし。
向き不向きがある場所なのはわかるけど、俺には最高の居場所なのは間違いない。
放置研だから楽ができると勘違いしてる奴が来ると就職できなくて泣きを見る、そんなところ。
B4M2含めてここまで就職率が悪い研究室ってのも珍しいよ。
起業家タイプ向きなのかも。
俺も起業してえわ。
起業して、出来る奴雇って、仕事は全部そいつに任せちゃうの。
で、俺は好き勝手なことやって甘い汁吸って過ごすの。
いいわ、マジあこがれる。
だから就職も給料とかどうでもいいから休み多くて自分の時間が取れて好き勝手やらせてくれる会社に行きたい。
むしろ、そんな会社あったら教えてください。
わあ、腐ってんな。社会なめすぎだろこれ。さすがゆとり。

2010年12月20日月曜日

processingのCaptureライブラリ代替ライブラリCaptureDSでカメラを2つ使う。てかマルチカメラ。

processingでwebカメラを使う場合、普通は標準のCaptureクラスを使ってることと思う。
QTJava使って動いてるあれだ。
WinVDIGがないと動かないというあれだ。
こんなん遅すぎやわ、絵面汚いわで使ってられへんわ―て人は多いみたいで、JMyronだのOpenCVだのと色々と代替キャプチャークラスは提供されている。
今回表題にしているCaptureDSもその一つである。
JavaでDirectShowを使うという目的で開発されたDirectShowJavaというのがあるのだが、これはそれをベースにprocessing用に仕上げられたものである。
その特徴は絵面が奇麗で動作が軽い、ということ。これに尽きる。
NyAR4psgでもこいつの利用が推奨されている。

だいぶ前に私も実際に使ってみた。
その感想は単体で使う分にはこれ以上はないというぐらい申し分ない性能だな、ということ。
単体で使う分には、ね。
なにが不満かといえば、複数では使えないということだった。
複数のカメラを同時に使おうとするとなにやらエラーが出て止まる。
解決策をググってみたり色々と試してみたりするもしおしおのパーで、当時は一旦あきらめたのであった。
なんでそんなことにこだわったかってそういう研究だったからね。カメラ複数台使う必要があったのよ。
結局標準のCaptureクラスをcam.settings()を挟むという旧バージョンでは定石の手法でもってその場は乗り切った。

で、ここまでが1年くらい前の話で、今に至る。
そんときがXPで今は7だって言うのはまあおいとこう。
今しがたなんとはなしにもっかい使ってみたのよ、CaptureDS。
まああいかわらず単体ではきれいだしはやいわな、2つ繋いでみるとやっぱエラー出るな、あはは。
でそこで出たエラーがなんやら、Audio device is busy RealtekHD****だかそんなんですよ。
ここで俺はふと思ったんだ。

そういやこのカメラ(ロジクールのやつ。内蔵マイク付き。QCam Pro for notebooksだかそんなん。それとQCam fusionだかってやつの2つでね。←ここ重要。後述する。)マイク付いてたなあ、案外無効にしたら動いたりして(笑)

でまあ、スタートメニューのデバイスとプリンターのところから当該カメラのサウンドの設定ってのを押してだな、録音タブのところそれっぽいマイクを右クリで無効にしてやったのよ。

そしたらなんとね、動いたの。2つ。同時に。
なんか、人ってすごいなあって思ったね。

あ、ちなみにこれ全部2008年版のCaptureDSでの話ね。
2010年版ではなんか知らんけど動作が変だから。単体でも。
あえてリンクは載せてないけど使いたい人は適当にぐぐってゲットしてチョ。
使い方も本家に書いてあるから分かるはず。
ああ、そういうわけで旧版を使うのをお勧めする。
その場合dsj.jarとdsj.dllも古いバージョンを用意しないと動かないから注意ね。
2008年リリースぐらいの版を使えば動くと思うよ。
スクショ乗せたいけどめんどいンでそれはまあいいや。

__________________________________

あああああああああああああああああ
くそったれ。
たしかにに問題なく使えたよ。
2つのカメラが異なる製品の場合はな!
使用するカメラの区別はカメラに付与されたデバイス名で指定できるんだけどさ、同じカメラ2つ使った場合これが区別されないのな。どっちとも”QcamPro for notebooks”の場合、CaptureDS.list[0]もCaptureDS.list[1]も区別されないのな。結局コンストラクタに渡される引数は同じってことになって衝突、device is busyでエラー。
さてどうしたもんか。
デバイス名いじれれば手っ取り早いんですけどね。
__________________________________

ひとつ考えたのが”QcamPro for notebooks”みたいなストリング型じゃなくてDSFilter型の何かを突っ込んでやれば案外区別できるんじゃね?って話。
CaptureDSの中身をeclipseで見てみりゃわかるんだけど、当該の引数をObject型で受け取った後にDSFilter型かそれ以外か、で処理を分けてるからね。
どうすりゃいいのかはわからん。忙しいんで試してない。

とりあえずせっかくなんで2台以上のカメラをつなぐプログラムのソースでものっけちゃおうかな。
processingIDE上にそんまま張っ付けりゃ動きます。上述のとおりCaptureDSとdsjが導入してあるならね。

使い方:
2つ以上のカメラをPCに繋ぐ。つなぐカメラは、異なるデバイス名でPCに認識される組み合わせとなる物であることが動作条件。マイク内蔵型の場合は、windows7なら「デバイスとプリンター」から当該カメラのプロパティの録音タブを開いてマイク機能を無効にしておくこと。 
うまく起動した場合は、↑↓キーでカメラの切り替えができるはず。
繋げるカメラの台数は無制限。






import processing.video.*;

//デバイス名が同じになる場合は複数同時使用不可
int CAMS_NUM = CaptureDS.list().length - 1;
CaptureDS[] caps = new CaptureDS[CAMS_NUM];
int CAP_WIDTH = 640;
int CAP_HEIGHT = 480;
int EXPECTED_FRAMERATE = 60;

int focused_cam = 0;

void setup() {
  size(CAP_WIDTH, CAP_HEIGHT);
  println(CaptureDS.list());
  for(int i=0; i < CAMS_NUM; i++) caps[i] = new CaptureDS(this, CAP_WIDTH, CAP_HEIGHT, CaptureDS.list()[i], EXPECTED_FRAMERATE);
  frameRate(EXPECTED_FRAMERATE);
}

void draw() {
  caps[focused_cam].read();
  image(caps[focused_cam], 0, 0);
  println(nfc(frameRate, 2));
}

void keyPressed(){
  if(keyCode==UP){
    focused_cam++;
    if(focused_cam==CAMS_NUM) focused_cam=0;
  }
  if(keyCode==DOWN){
    focused_cam--;
    if(focused_cam==-1) focused_cam=CAMS_NUM-1;
  }
}


______________________________

追記: 2011/02/06

processingで複数のカメラを高速に使いたいんならPlayStationEye (PS3Eye)を使うべき。それが今の俺の結論。あとeclipse使うべき。標準IDEは糞。

理由:60fps動作可能。安い。ライブラリも高速。

詳細:  http://0ba38758174010h.blogspot.com/2011/01/playstationeye-ps3eye-processing.html
______________________________

2010年12月18日土曜日

processing with eclipse な環境での”data”フォルダの取り扱い。

processingに慣れた諸氏ならばご存知であろうdataフォルダ。
言うまでもなく、processingスケッチ内で呼び出したいフォントデータ、画像データなどのファイルを格納しておくための場所である。スケッチフォルダ内の同名pdeファイルと同階層に置いてあるdataの名を持つディレクトリがそれである。
さて、ここはprocessingIDEに疲れたものが行き着く地獄の3丁目、eclipseである。
百戦錬磨の諸氏も勝手知ったる自分の家、とはいかない。
先までにも色々とeclipseでの立ち居振る舞いについては伝えてきたが、例によってまたである。
そうだなあ、例えば次のようなコードをeclipseで実行してみてほしい。
 
import processing.core.*;

public class testProcessing extends PApplet {

    public void setup() {
          size(200, 200);
     PFont font = loadFont("muktinarrowbold-14.vlw");
     textFont(font, 14);

     text("processing & eclipse\nthe dynamic duo", 30, 30);
    }
}
 
 
分かると思うが、ここではmuktinarrowbold-14.vlwというフォントファイルが必要となる。
別にこれじゃなくて何でもいいけど。
さて、どこに格納すればいいだろう。
普通eclipseプロジェクトとして考えればプロジェクトフォルダ直下で良いんじゃないか?と思うだろう。
私もそう考えた。だが駄目だった。
結論から言おう。フォントファイルを入れるべき場所は、
プロジェクトフォルダ/src/data/muktinarrowbold-14.vlw
である。
 
ただし!
 
直接エクスプローラからフォルダを作成してファイルを入れる、というのでは駄目だ。
eclipse上からインポートする必要がある。
インポートでmuktinarrowbold-14.vlwを選んで、インポート先のフォルダとして
プロジェクト名/srcを指定する。
この段階でsrcの中にdataができてるのが分かるだろう。
さて、今一度実行してみてほしい。
きちんと実行されてなにか文字が表示されているだろうか。 
いるはずである。
今日はここまで。おしまい。ちゃんちゃん。

今日参考にしたところ:http://go.yuri.at/?p=51
中程の data folder for external resources のところ。
 

eclipseで”○○はファイルシステムと同期が取れていません”と出てフォルダが削除できない。

っていうメッセージが出てプロジェクトパースペクティブからフォルダが消せなくなった。
何したかって、別フォルダからインポートしたうえでプロジェクトフォルダ内に生成されたフォルダの名前変えたりしてたらこうなった。
これホントはパースペクティブ上の当該フォルダ上で右クリック、リファクタリング→名前変更ってやらなきゃだめなのね。
で、どうやって消すか。
方法は二つある。
まずはプロジェクトごと消して作り直す方法。
うん、ごめんなさい。
いくらなんでもこれはないよね。
俺も分かってる。
次に、消せないフォルダの名前を変更して消す方法。
まんまです。
さっき言ったようにまずは消したいフォルダの名前をリファクタリングから変更する。
何でもいい。
で、名前を変更したら改めて消してみる。
どうだい?すんなり消せただろう?

めでたしめでたし。

2010年12月17日金曜日

eclipseでJMFとかQTJavaとか使う。「アクセス制限: 型 ちょめちょめ は必須ライブラリー QTJava.zip で制限されているためアクセスできません」とかまじかんべん。の巻。

・JMFの場合。

1.jmf-2_1_1e-windows-i586.exeを落とす。
2.インストールする。
3.eclipse立ち上げてなんかプロジェクト作る。
4.JMFが入ってるフォルダ(~/program files/JMF/lib/jmf.jar)の中のjmf.jarをビルドパスに追加。
5.これで使えるはず。

・QTJava

1.quick timeインスコ。
2.このままで使えるかと思いきや、この段階ではeclipseだと「アクセス制限: 型 ちょめちょめ は必須ライブラリー QTJava.zip で制限されているためアクセスできません」とか出る。どうしたものかと思いググる。
3.ここを参照する:http://blog.bitmeister.jp/?p=1486
4.というわけでアクセスパーミッションを追加する。
5.JREシステムライブラリー上で右乳首クリック→ビルドパス構成→JREシステムライブラリのアクセスルールを編集→追加を押して「quicktime/**」と入力してOK→おわり。
6.これでめでたくQTJavaの全実績が解除されてるはずだ。

ついでに。5.のとこでquicktime/**てしてるけど、これの意味はquicktime以下のサブドメイン内のクラスも含めた全クラスの実績解除、というもの。quicktime/*ともできるけど、この場合はquicktime直下のクラスのみの解除で、サブドメイン内のクラスについてはパーミッションを追加しない、という意味になる。eclipseは高機能過ぎてついていけないことがままあるから困る。でもnetbeansとか使ったことないし新しい環境に移行とかだるいしなんだかんだでeclipse使いやすいしってことでeclipseを使い続けりるれろ~、の巻。

2010年12月9日木曜日

『史上最強の都市国家ニッポン』を読む。

というわけでみんな大好き三橋さんの本です。
はいそうですわたし三橋信者ですごめんなさい。
まだ読んでる途中だけど思ったことなんかをつらつらと。

p.47
増田先生がそれとなく話をそらそうとしたところで、三橋さんがそのそれた話題に乗りつつ肯定する方向で最終的にはきちんと自分の意見でまとめたところに、ちょっと感心した。対談本ってこういうところがあるから面白いよね。

p.102, p.110
アダムスミスの話を見ていて、粘菌の経路探索、あるいはDNAコンピュータのアルゴリズムとの共通点に気付く。すなわち、いづれも「放っておけば勝手に最適解を導き出す」ものであるということ。
迷路に放り込まれた粘菌も市場に放り込まれた人間もマクロでみればその振る舞いには大差ないのだと。
そんなふうに考えるとデフレを克服する方法として増田先生の言っている「放っておけ。市場に任せてりゃ勝手に解決する。」なんて論にもちょっと納得してしまう。
______________________________

あああああレビューとかめんどくさいなこれ。やめだやめ。
こう言うの向いてねーわ俺。
いやね、読みましたよ、読みましたとも。全部。
やっぱ三橋さん最高です。読んでたら元気が出てきます。
気がついたら氏の著作2冊買ってたんだけど忙しくて読めてねえ。
明日読もう。
中国本と経済本ね。
でももうこう言うの書くのはやめとこう。だるい。
でもこの人の本自体は最高。
洗脳されちゃうといいよ。俺はされた。みんなされちまえば日本はきっと良くなる気がしてくる、そんな本。
てか最近この人露出多いよなあ。
テレビ以外の媒体に、だけど。
やっぱこういう人のほうが受けるんだろうな。世相的に。
なんか元気が出てくるもん。明るい話題のほうが。

このオブジェクトのアクセス許可の設定を表示または編集するアクセス許可がありません。

こないだうちパソのOSをXPから7に入れ替えたんよ。
んでXPん時に使ってた「_Documents」ってフォルダを開こうとしたらね、なんかアクセスがどうのーいうて開かせてくれへんの。
ええやん、そんなん。ちょっとくらい開かせてくれたかってええやん。
じゃあまあしゃあないなあおもてさ、パーミッション変えようと思うてセキュリティタブ開いてん。
そしたらあんた。

「このオブジェクトのアクセス許可の設定を表示または編集するアクセス許可がありません」

これですよ。
どないせえっちゅうねん。
そんなんあんた、変えられませんやん。どうしようもありまへんやん。開けへんやん。

でな、 まあしゃあないいうて、ぐぐってみてん。
そんだらまあな。これや。
http://d.hatena.ne.jp/psquare/20100330/p1
ようはパーミッションユーザにもっぺん自分のアカウントを追加せえっちゅう話でな。
Administrator権限もってようが関係あらへん。追加せえって。
まあ、とりあえず開けましてん。えがったのう。

なんでこんなややこしいパーミッションにしてんだか。
もっと単純で良いと思うんだがな。
どうせ親ユーザーにはこんな風にして見られちまうんだから手間かけさせずに最初から全部開示してりゃあ良いじゃんって言う。

ちなみに俺台湾人だから。大阪弁とかしゃべんないから。
あ、これ秘密な。