memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

kinect&processingで遊んでみた

個人的にあまり興味がなかったKinectだったのですが、PCに接続できると聞き俄然興味がわきました。発売前日にamazonで注文、本日、大学に届きました。

Link: Xbox 360 Kinect センサー(amazon)

あれこれ雑務があり帰宅したのは夜11時。家族が寝静まってからごそごそ作り始めました。とりあえず時間も時間だったので簡単に作れそうなもの。。。考えたのですがアイデアが浮かばなかったので、とりあえずOliver Kreylosさんのマネ(3Dビデオカメラ)をすることにしました。

ちなみに使用機材はmacbookです。ちなみに準備が2つ必要です。KinectをPCに認識させるためのドライバとProcessing用のKinectライブラリです。手順は以下に書かれています。なぜかドライバをインストールするときにエラーがいくつか表示されますが問題なく動作します。気持ち悪いですけどね。。。

Link: ドライバ
Link: Kinectライブラリ

で、とりあえず動いたので動画にしたのが以下。ううーーん、キビシいですね。かなり間引いているのですが、openframeworksで作らないとリアルタイム処理は追いつかないような気がします。

daniel shiffmanさんのサンプルベースですが、プログラムは以下の通りです。参考まで。

import shiffman.kinect.*;

color[] colors;
color[] depths;
float angle = 0.0;
boolean flag = true;

final int SIZE = 10;

void setup()
{
  size(640, 480, P3D);
  NativeKinect.init();
  camera(0, 0, 1600.0, 0, 0, 0, 0.0, 1.0, 0.0);
  noStroke();
}

void draw()
{
  NativeKinect.update();
  colors = NativeKinect.getPixels();
  depths = NativeKinect.getDepthMap();
  
  if (flag) angle += 0.05;

  rotateY(sin(angle)*1.2);  
  scale(2.0);
  background(0);
  for (int i = 0; i < height; i += SIZE) {
    for (int j = 0; j < width; j += SIZE) {
      pushMatrix();
      color c = colors[j + i * width];
      fill(c);
      translate(j - width / 2, i - height / 2, brightness(depths[j + i * width]) * 2); 
      box(SIZE);
      popMatrix();
    }
  }
}

void keyPressed()
{
  flag = ! flag;  
}