Ubuntu12.04 で "Kinict v1" + "OpenKinect" + ( ( "OpenNI1.5.7" + "NITE1.5.4" ) xor ( "PCL" ) ) の環境構築
目次
- 目的
- 環境
- 登場する技術についての概説
- はじめに(インストールのための参考サイトについて)
- 方法
- 付録(失敗手順)
- List.1 ドライバのインストール状態と、各ライブラリ・ミドルウェアの動作関係("Ubuntu12.04"+"Kinect v1")
- 所感
目的
今更ではございますが "Kinect v1" を手に入れたので、表題の環境構築を目的にセットアップを行う。
加えて、この分野の初心者の自分には各ソフトウェアの位置づけが分かりにくかったので、簡単に説明も加える。
環境
$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=12.04 DISTRIB_CODENAME=precise DISTRIB_DESCRIPTION="Ubuntu 12.04.5 LTS" $ $ uname -a Linux calc0 3.13.0-52-generic #86~precise1-Ubuntu SMP Tue May 5 18:08:21 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux $ $ lsusb | grep Xbox Bus 002 Device 006: ID 045e:02ad Microsoft Corp. Xbox NUI Audio Bus 002 Device 005: ID 045e:02b0 Microsoft Corp. Xbox NUI Motor Bus 002 Device 007: ID 045e:02ae Microsoft Corp. Xbox NUI Camera
登場する技術についての概説
- OpenKinect(トラッキングなど複雑なことはできないが Kinect を手っ取り早く使えるライブラリ・ツール郡を提供)
- OpenNI(Kinect の映像をストリーム出力として処理するためのライブラリを提供。後述のNiTE、PCLの利用に必要)
- NITE(OpenNI を通して、骨格の認識や手の追跡などを行うためのミドルウェア)
- Point Cloud Library(OpenNI を通して、特徴推定・平面の認識・物体検知など行う3D点群処理ライブラリ)
ブログをまとめている時に見つけた、下記サイトも分かりやすかったです。
初代Kinectのドライバ関連(「Kinect for Windows SDK」,「OpenNI+NiTE」) 現状まとめ(2014年5月26日現在) - いろりおのメモ帳
はじめに(インストールのための参考サイトについて)
Kinect が初めて発売されてから5年も経ち、今ではそのプログラムについてもあまり話題にならなくなった位なので、情報はたくさんありました。
しかし、Kinect 自体もバージョン1 では Xbox 用、商業利用が可能なもの、そしてバージョン2、と3種類があり、さらに Windows、Mac、Linux といろいろな環境で動作を確認した情報が溢れておりました。
ですので、読者の方でこれから Kinect を試したいという奇特な方に対しては老婆心ながら、「自分の環境に近い人の記事を2,3集めてそれぞれ試してみても、何度も失敗し試行錯誤することになるよ」と、予め警鐘を鳴らしておきますね。
自分が主に参考にしたのは、下記の2つです。あとは失敗のたびに似たようなページを参照し続けました。
九州工業大学トライアスロン部: ubuntu 14.04 LTS で Kinect ver.1 を動作させる(2014.10.24)
Setting up Kinect for programming in Linux (part 1) - KDAB
方法
"Kinect v1" の動作確認を行う
手っ取り早くハードウェアとしての動作確認をしたいので、OpenKinect*1 プロジェクトの成果物を用います。
骨格の認識や、手の追跡など凝ったことはできませんが、カメラとしての簡単な動作確認が行えます。
Install on libtisch PPA
An Ubuntu launchpad ppa for Lucid(10.04), Maverick (10.10), Natty (11.04), Oneiric (11.10) and Pangolin (12.04) is available at:
https://launchpad.net/~floe/+archive/libtisch
to use it, open a console and execute:
Getting Started - OpenKinect
上記記事を参考に、下記コマンドを実行した。
sudo add-apt-repository ppa:floe/libtisch sudo apt-get update sudo apt-get -y install libfreenect libfreenect-dev libfreenect-demos sudo adduser $USER video
"Kinect v1" の動作確認
準備のため、下記パッケージのインストールを実行した。
sudo apt-get install freeglut3 freeglut3-dev sudo apt-get install binutils-gold
そして、動作確認のため "glview" を実行します。
操作方法などは下記の引用内容を参考にしました。
○動作確認
Kinectをつなぐ。
サンプルプログラムで動作を確認
サンプルプログラムは以下の3つ
・glview // 標準のサンプルプログラム
・cppview // glviewのcpp版
・glpclview // 距離画像の3次元表示プログラム> glview, cppviewの操作方法
w : 少し上に向ける
s : 水平に向ける
x : 少し下に向ける
f : カメラ表示切り替え(RGB, 赤外カメラ)
1-3 : LED表示色切り替え
4-6 : LED表示色切り替え(点滅)
0 : LED消灯
ESC : 終了> glpclviewの操作方法
マウスドラッグ:視点移動(回転のみ)
w : 拡大
s : 縮小
ESC : 終了
Kinect ubuntu10.04にlibfreenectをインストールする - TK's HP
コマンド実行によりウインドウが立ち上がり、遅延もなくリアルタイムに描画されていました。
Pic.1 "glview" で "Kinect v1" が動作できていること、深度を計測できていることを確認
骨格の認識や手の追跡など行いたいので、準備として OpenNI をインストールする
OpenNI*2 自体は、Kinect からの映像をストリーム出力として処理するためするためのものらしいです。
現状では OpenNI2*3 が最新ですが、結論を先に言うと自分の環境では "Kinect v1" を認識できなかったため OpenNI をインストールして使いました。(失敗内容は最後の"付録"に記載します。)
オープンソースのKinectドライバOpenNI、提供終了へ。Appleによる買収が影響? | スラド オープンソース
OpenNI のインストール
github の README を参考にしました。
cd ~/git git clone https://github.com/OpenNI/OpenNI openni cd openni/Platform/Linux/CreateRedist/ ./RedistMaker cd ../Redist/OpenNI-Bin-Dev-Linux-x64-v1.5.7.10 sudo ./install.sh
OpenNI の動作確認1 (失敗例のエラー内容を書いたので、ここは飛ばしてください)
$ pwd /home/ito/git/openni/Platform/Linux/Redist/OpenNI-Bin-Dev-Linux-x64-v1.5.7.10 $ cd Samples/Bin/x64-Release/ $ ./NiViewer One or more of the following nodes could not be enumerated:
Kinect のドライバをインストールしないと、上記のようなエラーがでます。
OpenNI が Kinect を扱えるように、ドライバのインストールを行う
下記記事を参考に、"synapticon/SensorKinect" のドライバを用いました。
③についてはパッケージの取得先を以下のように変えました。
旧:https://github.com/avin2/SensorKinect
新:https://github.com/synapticon/SensorKinect
九州工業大学トライアスロン部: ubuntu 14.04 LTS で Kinect ver.1 を動作させる(2014.10.24)
インストールは下記コマンドを実行しました。
cd ~/git git clone https://github.com/synapticon/SensorKinect cd SensorKinect/Platform/Linux/CreateRedist/ ./RedistMaker cd ../Redist/Sensor-Bin-Linux-x64-v5.1.2.1/ sudo ./install.sh
OpenNI の動作確認2 (成功)
$ pwd /home/ito/git/openni/Platform/Linux/Redist/OpenNI-Bin-Dev-Linux-x64-v1.5.7.10 $ cd Samples/Bin/x64-Release/ $ ./NiViewer
下記のようにリアルタイムに映像が出力されれば成功です。
Pic.2 "NiViewer" で "Kinect v1" からの映像を取得できていることを確認
骨格の認識や手の追跡のためのミドルウェア NiTE をインストール
NITE のインストール
kaorun55 / OpenNI 2.2 α / ソース / NITE 2.2 α — Bitbucket
Google Code Archive - Long-term storage for Google Code Project Hosting.
自分は上記サイトより "OpenNI_NITE_Installer-Linux64-0.27.zip" をダウンロードして、下記を実行しました。
unzip OpenNI_NITE_Installer-Linux64-0.27.zip sudo mv OpenNI_NITE_Installer-Linux64-0.27 /usr/local/src/ cd /usr/local/src/OpenNI_NITE_Installer-Linux64-0.27/NITE-Bin-Dev-Linux-x64-v1.5.2.21/
その後インストール前に、フリーで使えるというライセンスキーを下記記事を参考に入力しました。
cd ~/kinect/NITE-Bin-Dev-Linux-x64-v1.5.2.21/Data
Modify the license in the files: Sample-Scene.xml, Sample-Tracking.xml, and Sample-User.xml.
<License vendor=”PrimeSense” key=”0KOIk2JeIBYClPWVnMoRKn5cdY4=”/>
cd ..
sudo ./install.sh
Ethan Lim: Installing OpenNI, NiTE, SensorKinect on Ubuntu 12.04
そしてインストールを行います。
$ pwd /usr/local/src/OpenNI_NITE_Installer-Linux64-0.27/OpenNI-Bin-Dev-Linux-x64-v1.5.4.0/ $ sudo ./install.sh
NITE の動作確認
cd ~/git/openni/Platform/Linux/Redist/OpenNI-Bin-Dev-Linux-x64-v1.5.7.10/Samples/Bin/x64-Release ./Sample-NiSimpleSkeleton cd /usr/local/src/OpenNI_NITE_Installer-Linux64-0.27/NITE-Bin-Dev-Linux-x64-v1.5.2.21/Samples/Bin/x64-Release ./Sample-PointViewer
Pic.3 "Sample-PointViewer" で手のひらをトラッキングできていることを確認
cd /home/ito/git/openni/Platform/Linux/Redist/OpenNI-Bin-Dev-Linux-x64-v1.5.7.10/Samples/Bin/x64-Release
./Sample-NiUserTracker
Pic.4 "Sample-NiUserTracker" で骨格をトラッキングできていることを確認
Point Cloud Library (PCL) のインストール
※注意※
本エントリの方法でPCLをインストールすると、新しく OpenNI がインストールされるようで、先程インストールしたOpenNI(+SensorKinect) が使えなくなるようでした。
ですので私は共存させることを諦め、PCLをアンインストールし、OpenNIとSensorKinectをインストールし直しました。
PCL*4 については下記サイトが一番詳しかったです。
【シリーズ「PCLを触ってみよう!」第一回】3D点群処理ライブラリ「Point Cloud... | DERiVE コンピュータビジョン ブログ
インストール
sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pcl sudo apt-get update sudo apt-get install libpcl-all
動作確認
pcl_openni_viewer pcl_openni_pcd_recorder pcl_viewer usa.pcd
付録(失敗手順)
OpenNI2 のインストール
$ sudo apt-get install -y libcv-dev $ sudo apt-get install -y libudev-dev $ sudo apt-get install -y openjdk-7-jdk $ mkdir ~/git $ cd ~/git $ git clone https://github.com/occipital/openni2 $ cd openni2/Packaging $ python ./ReleaseVersion.py x64 $ cd OpenNI-Linux-x64-2.2/Samples/Bin $ ./SimpleViewer After initialization: SimpleViewer: Device open failed: DeviceOpen using default: no devices found
OpenNI2 が Kinect を扱えるように、ドライバのインストールを行う
OpenNI2-FreenectDriver のインストールで、OpenNI2 から Kinect を認識できるという下記記事を見つけたので、インストールを試みました。
DeviceOpen using default: no devices found · Issue #31 · occipital/OpenNI2
OpenNI2-FreenectDriver のインストール(失敗)
$ cd ~/git $ git clone https://github.com/OpenKinect/libfreenect $ cd libfreenect $ mkdir build $ cd build $ cmake .. -DBUILD_OPENNI2_DRIVER=ON 〜略〜 Undefined reference to libusb_get_parent() 〜略〜
全エラー内容はコピーし忘れたのですが、"libusb >= 1.0.18" で失敗したことが分かりました。
"libusb-1.0.20" のインストール
下記記事を参考に、インストール作業を行いました。
make - Undefined reference to libusb_get_parent() - compiling freenect - Stack Overflow
cd /usr/local/src wget http://sourceforge.net/projects/libusb/files/libusb-1.0/libusb-1.0.20/libusb-1.0.20.tar.bz2 tar -xvf libusb-1.0.20.tar.bz2 cd libusb-1.0.18/ ./configure --prefix=/usr --disable-static make sudo make install sudo ln -s /usr/lib/libusb-1.0.so /usr/lib/x86_64-linux-gnu/libusb-1.0.so
OpenNI2-FreenectDriver のインストール(成功)
sudo apt-get install -y libudev-dev cd ~/git git clone https://github.com/OpenKinect/libfreenect cd libfreenect mkdir build cd build cmake .. -DBUILD_OPENNI2_DRIVER=ON make #Repository="/example/path/to/Samples/Bin/OpenNI2/Drivers/" cp -L lib/OpenNI2-FreenectDriver/libFreenectDriver.so ${Repository} # ln -s lib/OpenNI2-FreenectDriver/libFreenectDriver.{so,dylib} ${Repository}
上記、共有ライブラリの配置やリンクをおいたり試行錯誤したのですが、自分の環境では OpenNI2 を使うことはできませんでした。
(そして諦めて、OpenNi をインストールし始めました、という訳です。)
List.1 ドライバのインストール状態と、各ライブラリ・ミドルウェアの動作関係("Ubuntu12.04"+"Kinect v1")
OpenKinect | OpenNI+NITE | OpenNI2 | PCL | |
---|---|---|---|---|
Kinectドライバ事前インストール無し | o | x | x | o |
avin2/SensorKinect | o | x | x | o |
synapticon/SensorKinect | o | o | x | o |
OpenNI2-FreenectDriver | o | x | x(本来は動く。Kinect v2なら?) | o |
所感
Kinect も値段の割にすごいハードウェアですし、OpenNI も PCL もすごいライブラリですね。
そしてちょっと今回気付いたのは、自分の好みは "hecomi" さんの後追いが多いなーと。
意図してないのですが、何かに熱中して調べだすと "hecomi" さんの 凹みTips に行き着くんですよね(^^;
この予想だと、自分の次の興味は "Oculus Rift" になりそうです。
以上