開発環境
言語
- Processing 3.1.1
eclipseを使用し、core.jarをインポートした環境でコーディングしているため、ProcessingのIDEでは実行できません。
参考URL
http://hiroyukitsuda.com/archives/1721
- java 1.8.0_91
Processingで使用しているバージョン
モーションセンサー
Xbox 360® Kinect
API
SimpleOpenNI 1.96
Processing 3.x.xでSimpleOpenNIを利用する方法
Processing 3.x.xでSimpleOpenNIを利用するとExceptionが発生し利用できません。
対処方法が次のサイトに載っていたので参考し、対応しました。
registerDisposeメソッドの仕様が変わったみたいです。
https://forum.processing.org/two/discussion/13463/simpleopenni-fails-with-processing-3-0
Exception in thread "Animation Thread" java.lang.NoSuchMethodError: processing.core.PApplet.registerDispose(Ljava/lang/Object;)V at SimpleOpenNI.SimpleOpenNI.initEnv(SimpleOpenNI.java:383) at SimpleOpenNI.SimpleOpenNI.(SimpleOpenNI.java:255) at kinnect.sample.Sample.setup(Sample.java:14) at processing.core.PApplet.handleDraw(PApplet.java:2378) at processing.awt.PSurfaceAWT$12.callDraw(PSurfaceAWT.java:1527) at processing.core.PSurfaceNone$AnimationThread.run(PSurfaceNone.java:316)
対応方法
1 - SimpleOpenNIのソースをダウンロード
https://code.google.com/archive/p/simple-openni/source/default/source
2 - SimpleOpenNI.javaを修正
trunk/SimpleOpenNI-2.0/src/p5_src/SimpleOpenNI.javaの
parent.registerDispose(this) -> parent.registerMethod("dispose", this)
に置き換えます。
修正箇所は3箇所です。
3 - SimpleOpenNIMain.iのコメントを削除
trunk/SimpleOpenNI-2.0/src/SimpleOpenNIMain.iで#でコメントされている箇所を削除します。
#includeはコンパイルに必要なため、削除対象外とします。
「#+空白」を「//」に置換し、コメントアウトしました。
例)viで編集
%s/# /\/\//gc
4 - openNIをインストール
http://www.openni.org/downloadfiles/openni-binaries/20-latest-unstable
上記サイトよりopenNIをダウンロードし、任意のディレクトリに解凍しinstall.shを実行します。
/work/kinect/ディレクトリを作成し配置しました。
mkdir /work/kinect/ cd /work/kinect/ sudo ./install.sh
5 - NiTEをダウンロード
上記サイトよりNITEをダウンロードし、任意のディレクトリに解凍します。
/work/kinect/に配置しました。
6 - eigen3をインストール
MacPortでインストールしました。
sudo port install eigen3
7 - buildOsx.shを修正(その1)
trunk/SimpleOpenNI-2.0/buildOsx.sh記載の以下を変更します。
DOPEN_NI_BASE
openNIの配置先を指定
DOPEN_NI_LIBDIR
openNIのLibraryの配置先を指定
DNITE_BASE
NiTEの配置先を指定
DNITE_LIBRARY
NiTEのLibraryの配置先を指定
DEIGEN3D_INCLUDE
eigen3の配置先を指定
DP5_JAR
Processingのcore.jarの配置先を指定
DCMAKE_OSX_ARCHITECTURES
OSのビットを指定
私の環境では次のように修正しています。
echo "--- generate cmake ---" cmake -DCMAKE_BUILD_TYPE=Release \ -DOPEN_NI_BASE=/Users/work/kinect/OpenNI-MacOSX-x64-2.2/ \ -DOPEN_NI_LIBDIR=/work/kinect/OpenNI-MacOSX-x64-2.2/Redisti/ \ -DNITE_BASE=/Users/work/kinect/NiTE-MacOSX-x64-2.2/ \ -DEIGEN3D_INCLUDE=/opt/local/include/eigen3/ \ -DP5_JAR=/work/.m2/repository/org/processing/core/3.1.1/core-3.1.1.jar \ -DCMAKE_OSX_ARCHITECTURES="x86_64" \ ..
8 - buildOsx.shを修正(その2)
後述のjavadoc作成でエラーが発生するため、以下コメントアウトする。
# copy the doc #cp -r ./doc/* ../dist/all/SimpleOpenNI/documentation/
9 - buildOsx.shを修正(その3)
上記対応を行い、ビルドしたがSimpleOpenNI.jarが作成されずエラーとなったため
コンパイルしたクラスファイルをjarファイルで圧縮するコマンドを追加します。
追加したコマンド「jar cvf SimpleOpenNI.jar SimpleOpenNI/」
otool -L libSimpleOpenNI.jnilib echo "---create jar" jar cvf SimpleOpenNI.jar SimpleOpenNI/ echo "--- copy ---" # copy the library
10 - CMakeLists.txtを修正
次のように修正します。
ADD_CUSTOM_COMMAND(TARGET SimpleOpenNI
POST_BUILD
COMMAND cmake -E echo "-----------------------------"
COMMAND cmake -E echo "Compiling Java files..."
COMMAND cmake -E make_directory ./SimpleOpenNI
COMMAND cmake -E make_directory ${CMAKE_SWIG_OUTDIR}
#COMMAND cmake -E copy_directory ${P5_WRAPPER} ${CMAKE_SWIG_OUTDIR}
# cmake copy doesn't support wildcards, otherwise it just copies the hidden folder of svn, etc.
# doesn't works on windows backslash
COMMAND cp "${P5_WRAPPER}*.java" "${CMAKE_SWIG_OUTDIR}"
#COMMAND cmake -E copy ${P5_WRAPPER_FILE} ${CMAKE_SWIG_OUTDIR}
COMMAND ${JAVA_COMPILE2} -classpath ${P5_JAR} ${CMAKE_SWIG_OUTDIR}/*.java -d ./
)
#COMMAND cmake -E echo "-----------------------------"
#COMMAND cmake -E echo "Creating jar file..."
#COMMAND ${JAVA_ARCHIVE2} cvf SimpleOpenNI.jar SimpleOpenNI
#COMMAND cmake -E echo "-----------------------------"
#COMMAND cmake -E echo "Creating doc files..."
#COMMAND cmake -E make_directory ./doc
#COMMAND ${JAVA_DOC} -quiet -author -public -nodeprecated -nohelp -d ./doc -version ${P5_WRAPPER}/*.java -version ${CMAKE_SWIG_OUTDIR}/ContextWrapper.java
#COMMAND ${JAVA_DOC} -classpath ${P5_JAR} -quiet -author -public -nodeprecated -nohelp -d ./doc -version ${CMAKE_SWIG_OUTDIR}/*.java)
11 - ディレクトリを作成
trunk/SimpleOpenNI-2.0/に2つのディレクトリを作成
Redisti
lib
12 - ライブラリの配置
trunk/SimpleOpenNI-2.0/dist/all/SimpleOpenNI/library/osx/以下のファイルを全て
trunk/SimpleOpenNI-2.0/lib/
にコピーする。
13 - ビルド
trunk/SimpleOpenNI-2.0/buildOsx.shを実行すると
trunk/SimpleOpenNI-2.0/dist/all/SimpleOpenNI/libraryに
SimpleOpenNI.jar生成されます。
このSimpleOpenNI.jarに置き換えて使用する事でExceptionが回避されKinectを利用できるようになります。
./buildOsx.sh
補足
自分の環境では以下ライブラリを導入していなかったため
トライ&エラーで以下ライブラリをインストールしています。
1 - cmakeのインストール
sudo port install cmake
2 - Command Line Developer Toolsのインストール
terminalで以下コマンドを実行
xcode-select --install
3 - libtoolをインストール
sudo port install libtool
4 - libusbインストール
sudo port install libusb +universal
5 - pcreのインストール
https://sourceforge.net/projects/pcre/files/pcre/8.39/
./configure make sudo make install
pcre-config --version
7 - boostのインストール
sudo port install boost