読者です 読者をやめる 読者になる 読者になる

【2017年度版】MacとProcessingとKinect v1をセットアップして遊ぶ方法

f:id:karaage:20170429234441j:plain:w640

Kinectでまた遊んでみたくなった

 最近3次元の画像処理とかに興味が出てきて、ふとまたKinectで遊びたい熱が再燃してしまいました。といっても随分昔にセットアップしたっきりなので、再度セットアップしなおしてみることにしました。以下の情報もかなり古くなってしまい検索で来てくれる人に申し訳ないという気持ちもちょっとだけ(ほんとにちょっとだけ)あります。

 2017年度版と大げさに銘打ってありますが、過去2,3年くらいは変わってないと思いますし、今後ももう5年くらいは変わらないのじゃないかなと勝手に思っています。もしくは、セットアップすらできなくなる可能性もあるかもしれません。今のうちに必要なソフトと機材はどこかにアーカイブしておくのがよいかもしれませんね(私はしました)。

 ちなみに過去は血反吐を吐きながらセットアップした覚えがあるのですが、今回めちゃめちゃ簡単でした。これが人類の叡智か…(多分違う)。

今回できたこと

 今回セットアップすることで、サンプルアプリを動かすことで以下のような骨格(ボーン)検出とかができるようになりました。

f:id:karaage:20170428163704p:plain:w640

 サンプルアプリを元に、自分でキネクトを使ったソフトを開発することも可能です。興味ある方は続きをご覧ください。

Processing 2とOpenNIでKinectを使うときのセットアップ

 一応最初に書いておきますが、この記事はこうすれば必ず動くという保証をしているわけではないので、その点はご了承下さい。あくまで私の環境でこうセットアップしたら動きましたという参考情報くらいに捉えて下さい。特にメーカも保証している使い方ではないので、あくまで自己責任でお願いします。

Kinect v1とMac購入

 まだ持ってない人は、Kinect v1とMacを買いましょう。v1というのは初代のやつです。v2はセンシング方式からしてv1と違うのと、色々セットアップ大変なのでv1の方がおすすめです。

Xbox 360 Kinect センサー

Xbox 360 Kinect センサー

 Macは適当なMac Book Proとか買って下さい。

 ちなみに私のPC環境は以下です。

  • MacBook Pro (Retina, Mid 2012)
  • MacOS Sierra (10.12.3)

f:id:karaage:20170429234441j:plain:w640
 こんな感じ

Processing2 ダウンロード

 Processing2を使います。Processing 3も試してみましたが動きませんでした。ネットで調べても3には対応していないと買いてあるので多分そうなのでしょう。Processingは公式さいとのDownloadからダウンロードして下さい。

Processing.org

 2.2.1 (19 May 2014)というやつです。

Simple Open NIダウンロード

 以下からダウンロードできます。

Google Code Archive - Long-term storage for Google Code Project Hosting.

 SimpleOpenNI-1.96.zipというやつをダウンロードします。解凍するとSimpleOpenNIというフォルダが生まれます。前はNITEというライブラリもあって、それで骨格(ボーン)検出とかができた気がするのですが、NITEはどうなったんでしょうね?OpenNIはボーン検出もできるので、統合されているのでしょうか?

 Kinectのセンサ作っているPrimeSense社がAppleに買収されてしまったので、ややこしいことになっているのかもしれません。Appleぇー。

Processingの設定

 一回Processingを起動しましょう。すると、/Users/ユーザー名/Documents/Processing/libraries というフォルダが生成されるので、その直下にSimpleOpenNIフォルダをコピーします。

 Processingを終了して起動して、File->Example...を選択しましょう。Contributed Libraryの下にSimpleOpenNIというのが追加されているので面白そうなサンプルを開いて実行してみましょう。Kinect繋ぐの忘れずにね! f:id:karaage:20170428163049p:plain:w640

Kinect OpenNIサンプルアプリ例

DepthImage

f:id:karaage:20170428163529p:plain:w640
 デプスマップの表示

DepthMap3d

f:id:karaage:20170428163930p:plain:w640  3次元表示

User

f:id:karaage:20170428163704p:plain:w640
 ボーン検出

Processing 2とOpenKinectでKinectを使うときのセットアップ

 OpenKinectというライブラリを使ってKinectを使うこともできます。こちらはOpen NIより古いライブラリみたいです。こちらも簡単にセットアップできるのでセットアップ方法を紹介しておきます。

 Sketch -> Import Library -> Add LibraryKinectで検索すると以下のように表示されるのでInstallをクリックするだけです。

f:id:karaage:20170428164313p:plain:w640

 ExampleContributed Libraryの下にOpen Kinect for Processingが追加されているので、Open NIと同様に遊べます。

 AveragePointTrackingというサンプルを実行した例です

f:id:karaage:20170428164545p:plain:w640  近くにある物体をトラッキングするっぽい

 Open NIと随分書き方が違うので、やりたいことに合わせてライブラリを選んだ方が良いです。特別なこだわりないならOpen NIの方がサンプルも多そうなのでおすすめかな?

Kinectの仕組みと注意点

 Kinect V1はStructured Lightと呼ばれる方式で、Kinect V2はToF(Time of Flight)と呼ばれる方式で3次元情報を取得しています。両方とも赤外線を照射する関係で、太陽光には弱く屋外には使えないので注意下さい。特にKinect V1は太陽に弱いです。たまにKinect V1を使ったインスタレーションを半屋外でやっていて残念な結果になっているケースをみかけます。

 それぞれの方式の詳細は、ここでは説明しません。参考になりそうなサイトを以下に貼っておきます。調べればいくらでも出てくるかと思います。

Kinect v2プログラミング(C++) - Depth編 - Build Insider

ToF kinect book(英文)

まとめ

 KinectとProcessingを久しぶりに一通りセットアップしてみました。簡単になっていて良かったです。せっかくなので、昔作ったソフトを動かしてみようと思ったのですが、ProcessingとOpen NIのバージョンが違うせいか、そのままでは全然動きませんでした。残念。お気に入りのソフトはそのうち動くように直してみようかなと思っています。

 しかしこういう機材の販売中止や、ライブラリのバージョン変更とか公開の停止で今まで作ったソフトが無駄になってしまうのは悲しいですね。もうちょっと環境をまるごと手軽に残しておける方法があるとよいのですけれど。あとは、ライブラリが無いと何もできないマンにはならないように、3次元画像処理の基本もきちんと抑えておきたいなと思いました。そちらの方もまたいずれ。

 しかし、前回のセットアップから5年たっているのに個人で購入可能な使い勝手の良い3次元センサのトップは今だにKinect V1だけという状況はちょっとあれですね…次点でIntel Realsense SR300というところでしょうか。あれも、Linuxだとのセットアップは結構大変だったり、電流バカバカ引っ張って落ちたりとかなり癖が強いんですよね…Kinect互換の使い勝手のよいセンサ出てこないかな。もし誰か良いもの知っていたらそっと教えて下さい。

 世の中の技術的には、フィルタを使って単眼カメラで3次元情報を取得する東芝の技術とか、ディープラーニングを使って単眼カメラで人のボーン検出をする技術とか、単眼カメラで出来なかったと思われてたことがどんどんできるようになってきて口あんぐり状態です。凄いですね。

Xbox 360 Kinect センサー

Xbox 360 Kinect センサー

過去作ったキネクトアプリ

 どれも動かなくなってしまいました。ヒューマンシーケンサぐらいは作り直してみようかな…

参考リンク

Simple Open NIをつかって、ProcessingとKinectを接続してみる - また1からこつこつと

OpenNI SDK history | OpenNI

Google Code Archive - Long-term storage for Google Code Project Hosting.

Kinect を使う - Processing 学習ノート