Kinectに関するメモとか

これからしばらくKinectをやります。

実際はKinectをやるという表現は正しくなくて、センサーストリームを統合的に制御してインターフェースに反映する何かをやるわけですが、Kinectはほぼマストな要件として入っているので、まあKinectです。

自分が考えている範囲ではなんかサーバーっぽいものがあるといいなあと思っているので、Kinectを使ったストリームサーバーの実装を幾つか調べてみました。

要求としては以下のような感じ

  • いろんな処理系に同じストリームを渡したい
  • ストリームに情報を付加した上で渡したい
  • 複数のストリームを束ねられるとなお良い
  • スケールする
  • シンプルでわかりやすい

MissingLink/KineticSignege

UDP portから同一ネットワーク内にMessagePackのデータをブロードキャストする漢らしいスタイル。シンプルで良い。
MessagePackはまだよくわかんないけど、バイナリっぽい何かにシリアライズすることでJSONより効率的にデータを伝送するための実装…っぽいです。

UDPなので

  • 情報が欠損する可能性がある
  • 受け取り側で欠損や時系列の前後に気づくことはできない

arcatdmz/kinect-thrift-server

作者の解説ブログ
http://junkato.jp/ja/blog/2013/02/22/kinect-for-java-via-thrift/

Thriftというプロセス間通信のためのフレームワークを使ってサーバー・クライアントでデータ通信するスタイルです。知的なかほりが漂う感じ。

ThriftはFacebookが作成したフレームワークで、まさにプロセス間通信のためのブツなので目的にはあってそう。あと、作者の方いわくドキュメントはそれなりに充実してそう。

Thriftの仕様が理解しきれてないレベルではハマると死ぬかもしれない。

AIR SHODOUのエンジン - KINECT開発を加速するライブラリ

(たぶん)TCPソケットサーバーのフレームワークGithubとかでは見つけられなかった。公開されてないっぽい?思想的には近そうだしあれば便利そうだけど無いからどーしよーかなー感が漂うひと品。

Kinect + OpenNIを使用して取得した「空間の使用頻度」をsocket.ioを利用してリアルタイムに確認する

Kinect SDK 1.8 から Webserver for Kinect Data Stream がAPIとして提供されており、WebSocketで簡単にデータをぽんぽん飛ばせるようになっている。

この例はデータ自体はJSONで受け取っていて、クライアントへの描画をWebSocketでやっている感じなので例としては微妙かも。あとでアップデートする。

(追加)Kinect Research Framework

TPC or UDPでデータ転送しているっぽい。
動作するプラットフォームや対応する言語は幅広く定義されている。

転送できるデータは以下の様な感じで

The array holds both the 3d world coordinates and flatten 2d coordinates of all joint positions, internal references, and external references

Internal referencesというのは2つのjoint間の距離および角度、external referencesというのは空間上に定義した点からの距離および角度が格納されているようです。

なんかソースが見当たらない(Downloadsにバイナリらしきブツは存在する)のがちょっと不安。

まとめ

まだよくわからない。

KINECT for Windows SDKプログラミングC#編

KINECT for Windows SDKプログラミングC#編

OpenNI 3Dセンサープログラミング

OpenNI 3Dセンサープログラミング