MacでKinect v2を使うlibfreenect2 (OpenGL編)
2ヶ月以上前に書いた日記ではOpenGLを使った場合、IRとDepthが正しく表示されなかった。
MacBook Pro Retina で Kinect for Windows v2 を認識させる - hcrescの日記
PRでOpenGLを使って画像を表示できるようになったようなので、試してみる
手順
2ヶ月で色々と変更されているので、手順をやり直す。
git clone git@github.com:OpenKinect/libfreenect2.git cd ./libfreenect2 sh ./depends/install_mac.sh
sh ./depends/install_mac.sh
でエラーが出た場合は内容に応じて修正してインストールやり直す。
うちの場合は下記を修正した。
+#./configure --disable-dependency-tracking --host x86_64-apple-darwin --with-jpeg8 --prefix=$LIBJPEG_INSTALL_DIR +./configure --disable-dependency-tracking --host x86_64-apple-darwin NASM=/usr/local/Cellar/nasm/`brew info --json=v1 nasm | jq -r '.[0]["installed"][0]["version"]'`/bin/nasm --with-jpeg8 --prefix=$LIBJPEG_INSTALL_DIR
PRにあるとおり修正する
cd ./examples/protonect/ vi src/opengl_depth_packet_processor.cpp
makeして実行
cmake CMakeLists.txt make && make install ./bin/Protonect
結果
$ bin/Protonect [Freenect2Impl] enumerating devices... <snip> [OpenGLDepthPacketProcessor] avg. time: 14.0433ms -> ~71.2083Hz [TurboJpegRgbPacketProcessor] avg. time: 18.4621ms -> ~54.1649Hz [OpenGLDepthPacketProcessor] avg. time: 12.8123ms -> ~78.0501Hz [TurboJpegRgbPacketProcessor] avg. time: 18.2471ms -> ~54.8032Hz [OpenGLDepthPacketProcessor] avg. time: 12.9174ms -> ~77.4152Hz [TurboJpegRgbPacketProcessor] avg. time: 18.06ms -> ~55.371Hz [OpenGLDepthPacketProcessor] avg. time: 13.578ms -> ~73.6486Hz
RGB,IR,Depthすべて表示OK!
CPU負荷はOpenCLと同じくらい。。
OpenCVの描画が重いのかな
それと、EscキーでProtonectを終了するときにSegFaultがでるようになった。。
メンドクサイネ
OpenGLのTutorialまとめ
#OpenGL(ES)のTutorial集
All about OpenGL ES 2.x - (part 1/3)
Displaying Graphics with OpenGL ES | Android Developers
- Android公式
OpenGL ES 2.0 Tutorial for Android - Part I - Getting started - Jayway
- Android向けの説明
Android Lesson One: Getting Started | Learn OpenGL ES
- こちらもAndroid向け。
- iOS Developer Library
OpenGL Tutorial for iOS: OpenGL ES 2.0 - Ray Wenderlich
- iOS向け
TutorialはES2.0系を扱ったものが多いようですね。
GL 3.0(Not ES)対応のページも探してみました。
opengl-tutorial.org | Tutorials for modern OpenGL (3.3+)
- 3.3対応のTutorial。
opengl-tutorial.org | Tutorials for modern OpenGL (3.3+)
- 日本語版もある!
An intro to modern OpenGL. Table of Contents
Learning Modern 3D Graphics Programming
- この2つも3.x系対応(らしい)
- iOS上でShaderLanguageの開発ができるアプリ(有料。。)
- OpenGL Tutorial。最新かどうかは不明な感じ。。Lightingが図で説明されているのでわかりやすいかも
- ここは古いようだ
Go
http://go-tour-jp.appspot.com/#57
熱が出たので1回休み;)
RGB,IR,Depth画像を保存する
libfreenect2検証その2
前回の日記で検証したlibfreenect2の続き。
filterはenable?
https://gist.github.com/treaded/0aa817cd9194561178e6
でfilter切ったけど、切らなくてもよくね?ってことで再検証
OpenCL
https://gist.github.com/treaded/0aa817cd9194561178e6#file-opencl_depth_packet_processor-cpp-diff
をenableに戻す
- 結果
CPU負荷はほとんど変わらず(どちらも200%)
Filterなし
Filterあり
左の山がFilterなし、右がFilterあり
ただ、Filterありの場合のほうが、コンソールに出力される
[RgbPacketStreamParser::handleNewData] skipping rgb packet!
が多い気がする。。
CPU
割愛
MacBook Pro Retina で Kinect for Windows v2 を認識させる
開発環境
開発マシン
- MacBook Pro Retina 13" (2013)
- Core i5
- 8GB MEM
- OS X Mavericks
- Intel Iris
センサーデバイス
事前準備
C++でコンパイルできる環境を準備しておく(その他開発に必要なものもインストール)
インストール
OpenKinect/libfreenect2 · GitHub
READMEにある通りに依存パッケージをインストール。
brew update
brew tap homebrew/science
brew install opencv git nasm wget
git clone した後、いくつかファイルを修正する。
./depends/install_mac.sh
ディレクトリ名がおかしいので修正する。
./examples/protonect/
includeを修正
ここまででコンパイルまでは通るはず
sh ./depends/install_mac.sh
cd ./examples/protonect/
cmake CMakeLists.txt
make && make install
実行してみる
./bin/Protonect
RGB画像は取得できるが、IRとDepth(深度)画像は真っ黒。。。
Intel Iris でOpenGLDepthPacketProcessorがうまく動いていない様子・・
CPUかOpenCLであれば認識できるようなので、そちらを試してみる。
DepthPacketProcessorの変更
OpenGLDepthPacketProcessor から CpuDepthPacketProcessor または OpenCLDepthPacketProcessor に変更する(packet_pipeline.h)
ついでに処理の重いFilterを切っておく ({opencl,cpu}_depth_packet_processor.cpp)
再び実行する
CPUだと15Hzくらい@フル回転
OpenCLであれば他の処理もできそうかな、という感じ
init
test