MacでKinectサンプルを動かす

MacでKinectサンプルを動かす

  今日は、表題の通りKinectについてのお話です。そもそもなぜKinectかというと、前職で画像処理&機械学習みたいなことをやっていた時期があり、プライベートでも遊び感覚で楽しみつつ、ちゃっかりこれらのスキルを向上できたらいいなぁと思って、一年ほど前に購入していたのがきっかけです。ただ、その時はセットアップで挫折してすぐに放置していたので、時間に余裕のある今、改めて遊んでみようかなぁと。ご存知の方は多いと思いますがそもそもKinectはマイクロソフトの商品のため、Windowsへのサポートは手厚く(公式SDKが存在する等)、参考サイトもWindowsユーザのものが圧倒的に多いです。Macで使用している記事もありましたが情報が古かったり不足していたりで、記載の通り勧めてもうまくいかない、といった状況だったのでここで記載しておきます。少しでも参考になれば幸いです。
※上記と重複しますが、Windowsをお使いの方は公式のSDKを使用した方が簡単だと思うので、公式のSDKが対応していないMac、Linuxを使われている方が対象です。

Kinectとは?

  マイクロソフトが発売した、ジェスチャー・音声で操作可能なデバイスです。当初はXbox360用としての位置づけでしたが、RGBカメラ、深度センサ、モーションキャプチャ機能を搭載し一万円台と安価であったため、それに注目した世界中の技術者がPCでも使用できるよう躍起になっていたみたいです。今では、PC上の様々なアプリケーションで応用されていますが、調べてみるとKinectは今年に入って生産が終了しているみたいですね。ただ、中古品などは出回っていると思いますのでまだまだ購入するチャンスはあります。ちなみに私も某フリマアプリで5000円くらいで購入したと記憶しています。
Kinectは大きく分けて2種類ありますのでその比較を簡単にまとめておきます。機能的には”Kinect for Windows”が優っているけど、”Kinect for Xbox”でも問題なくSDKが使えるので大抵のことはできる、という感じですかね。ちなみに、私はMacユーザなのでこの辺は関係無いと考え、Kinect for Xboxを購入しました。

Kinect for Windows Kinect for Xbox
商用利用 不可
Kinect for Windows SDK
Kinect for Windows SDK User Runtime 不可
Xbox360での利用 不可

Macでのセットアップ

  下記URLを参考にさせていただきました。
    Mac+Kinect+Processingで遊んでみる
  比較的シンプルに書かれていて、いろいろ漁った中では一番わかりやすく感じました。このサイトをベースに、うまくいかなかった点を補足する形で説明します。尚、参考サイトの上部に2017年度版の記事はありますが、Processingという、Javaライクな言語&統合開発環境前提で記述されており、個人的にはメジャーなC/C++を使ってプログラミングしたいので、2012年に記載されたメインの記事をベースに説明します(環境はMacBookPro、MacOS Sierra)。ちなみに、Processingを使用したセッティングも試しましたが、最新バージョンであるProcessing3は対応しておらず、Processing2を使う必要があるのが注意点です
  ここから本題。Macでは公式のSDKではなく、OpenNIというC/C++で記載されたライブラリを使っていきます。全体の流れは以下の通り。

  1. Xcodeをインストール
  2. MacPortsインストール
  3. libtoolインストール
  4. usbドライバをインストール
  5. OpenNIのインストール
  6. SensorKinectのインストール
  7. NITEのインストール
  8. サンプルプログラムの実行

  参考サイトの通り進めていくと、4まではスムーズにいくのですが、OpenNI、NITEがリンク切れによりダウンロードできません。Appleが開発元のPrimeSenseを買収したことでサイトがCloseしたみたいですね。ということでいろいろ漁っていると、OpenNI、NITEが共に揃っている、下記サイトを発見しました。
    OPENNI SDK HISTORY
  ここで重要なのは、最新版であるv2.xx系ではなく、v1.xx系を使うことです。最新版を使うとSensorKinectのインストールがうまくいかず、私はここでドツボにハマりました。SensorKinectのバージョン次第なのだと思いますが、とりあえず遊びたい場合は最新版でなくても問題無いでしょう。ちなみに、SensorKinectは参考サイトからリンクが貼られているGitHubのページからBinディレクトリにあるv5.1.2.1をダウンロードしました。
  私の場合、それでもまだSensorKinectのインストール時に”creating config dir /usr/etc/primesense…NG”となりましたが、これについては下記サイトの通りSIP機能を無効化することで対応しました。ただ、これはセキュリティを弱めることになるので設定が終わったら元に戻しておいた方が良いかもしれません。
    Mac OS X El CapiptanでSIPを無効化する
  以上で、セッティングは完了です。

サンプル実行

  正しくセッティングできているかを確かめるため、サンプルを実行してみます。ターミナルからOpenNIディレクトリのSamples/Bin/Release/にcdして

./Sample-NiUserTracker

を実行して少し待つと、下記の通りスケルトン(骨格)が意図通り抽出でき、正しく動作していることが確認できました。

おわりに

  今回は、MacでKinectを使用するにあたってつまずいたポイントを記載しましたが、結局、その原因は欲しい情報が見つからないことだったりバージョン違いだったり、後から振り返るとすごく些細なことですね。Kinect&Macの組み合わせの情報量が比較的少ないため、今後も試行錯誤は続きそうですが、めげることなく遊んでいきたいと思います。最終的にはジェスチャ認識で何か動かせればいいなと思っていますのでまた進捗があれば投稿します。
  それから、、自分の記事はほんと前置きが長いですね笑。要点だけ知りたい人をイライラさせそう。この辺も改善しつつ、一方でマイペースに頑張ります。最後まで読んでいただいた方、ありがとうございました。