NyARToolkit for Javaインストールメモ
Ubuntu 8.04にNyARToolkitをインストールして、サンプルを動かしたときのメモです。
Javaの切り替え
sun-java, openjdk, gcjなどいくつかJavaが入っていたので、sun-javaかopenjdkに切り替える。
$ update-java-alternatives -l
で入っているJavaを確認して、
$ sudo update-java-alternatives -s java-6-sun
で切り替え。
依存ライブラリのインストール
JMF, JOGL, Java3Dをインストールする。
ちなみにreadmeには「JMFとJOGLかJava3Dをインストールしてください」と書いてあるのだけど、これだと「(JMF)と(JOGLかJava3D)」なのか「(JMFとJOGL)か(Java3D)」なのか分かりにくいと思った。で、前者が正しい。細かいことだけどちょっと迷ったので一応メモ。
JMFをインストール
Oracle Technology Network for Java Developers | Oracle Technology Network | Oracleからjmf-2_1_1e-linux-i586.bin をダウンロードして、インストールしたい場所に置いて実行。今回は ~/lib/ に置いた。
$ cd ~/lib
$ /bin/sh ./jmf-2_1_1e-linux-i586.bin
==> エラー出た
tail: `+309' を 読み込み用でオープンできません: No such file or directory
http://semanticlog.blogspot.com/2008/05/ubuntu-ubuntu-804-hardyjmf.htmlによるとバグがあるらしいので直す。
tail +309 $0 > $outname の行を tail -n +309 $0 > $outname に直す。
あと一度実行してエラーが出るとファイルが0バイトになって動かなくなるので注意。
再度実行。今度はうまくいった。
java.lang.Error: Can't open video card 0
というエラーが出るけど気にしない。
環境変数を設定。.zshrc (or .bashrc)に以下を追記する。
export JMFHOME=/home/kambara/lib/JMF-2.1.1e export CLASSPATH=.:$JMFHOME/lib/jmf.jar:${CLASSPATH} export LD_LIBRARY_PATH=$JMFHOME/lib:${LD_LIBRARY_PATH}
JOGLをインストール
JOGLはOpenGLのJavaバインディング。
https://jogl.dev.java.net/のCurrent release buildからダウンロードして、インストールしたい場所に解凍。
今回はjogl-1.1.1-linux-i586.zipを~/lib/に解凍した。
環境変数を設定。クラスパスにはjogl.jarとgluegen-rt.jarを追加する。
export JOGL_HOME=/home/kambara/lib/jogl-1.1.1-linux-i586 export CLASSPATH=$JOGL_HOME/lib/jogl.jar:$JOGL_HOME/lib/gluegen-rt.jar:${CLASSPATH} export LD_LIBRARY_PATH=$JOGL_HOME/lib:${LD_LIBRARY_PATH}
Java3Dをインストール
https://java3d.dev.java.net/binary-builds.htmlからj3d-1_5_2-linux-i586.binをダウンロードして、インストールしたい場所に置いて実行。今回は ~/lib/j3d-1_5_2/ に置いた。
$ ~/lib/j3d-1_5_2 $ /sh/bin j3d-1_5_2-linux-i586.bin
環境変数を設定。クラスパスにj3dcore.jar, j3dutils.jar, vecmath.jarの3つを追加する。
export J3D_HOME=/home/kambara/lib/j3d-1_5_2 export CLASSPATH=$J3D_HOME/lib/ext/j3dcore.jar:$J3D_HOME/lib/ext/j3dutils.jar:$J3D_HOME/lib/ext/vecmath.jar:${CLASSPATH} export LD_LIBRARY_PATH=$J3D_HOME/lib/i386:${LD_LIBRARY_PATH}
Webカメラの設定
http://www.geocities.jp/lg3d_lgscope/lgcam/lgcam.htmlの下の方を見つつ、JMFでWebカメラの設定をした。
ちなみにエレコムわけありショップで500円ぐらいで買ったグネグネ曲がるWebカメラを使っている。こういう古くて安いWebカメラならUbuntuは大抵認識してくれる。
上でインストールしたJMFのbinの中にあるツールを使ってカメラの設定をする。
USBにWebカメラをつないだあと
$ cd JMF-2.1.1e/bin
$ ./jmfinit
でカメラを認識する(はず)。
カメラを使えるか確認するにはjmstudioを使う。
$ ./jmstudio
jmstudioを起動して、「File > Preference」の「Capture Devices」タブのリストにカメラがあればOKを押す。無ければリストの下の「Detect Capture Devices」で検出する。
「File > Capture」で「Use video device」にチェックを入れ、カメラを選んで適当に値を入れる。
ちなみに今回の設定値はこう。
- カメラ: v4l:Pixart PAC207-BCA:0
- Encoding: RGB
- Video Size 320x240
- Frame Rate: 15.0
- Bits per Pixel: 24
OKを押せば映像が映るはず。もし「Couldn't initialize the Capture Device!」と怒られても、jmstudioを再起動すると問題なく動いたりする。
NyARToolkitのサンプルを動かす
ダウンロードファイル一覧 - NyARToolKit - OSDNからNyARToolkit for Javaをダウンロードして解凍。今回はNyARToolkit-2.1.0を使った。
jmfのサンプル
sample/jmfの中のNyarToolkitLinkTestを動かしてみる。
$ cd NyARToolkit-2.1.0/sample/jmf コンパイル $ javac -sourcepath .:../../src:../../src.utils/jmf jp/nyatla/nyartoolkit/jmf/sample/NyarToolkitLinkTest.java 実行 $ java -classpath .:../../src:../../src.utils/jmf:${CLASSPATH} jp/nyatla/nyartoolkit/jmf/sample/NyarToolkitLinkTest
実行する時の-classpathオプションで ${CLASSPASS} が必要というところでつまずいた。環境変数のCLASSPASSに追加されるんじゃなくて上書きされるんですね。(Javaは初心者)
Data/の中に入っている「Hiro」と書かれたマーカー (Data/pattHiro.pdf) を印刷して、カメラにかざして認識すればOK。
joglのサンプル(動かず)
$ cd sample/jogl コンパイル $ javac -sourcepath .:../../src:../../src.utils/jogl:../../src.utils/jmf jp/nyatla/nyartoolkit/jogl/sample/JavaSimpleLite.java 実行 $ java -classpath .:../../src:../../src.utils/jmf:../../src.utils/jogl:${CLASSPATH} jp/nyatla/nyartoolkit/jogl/sample/JavaSimpleLite
==> ウィンドウが開いたところでクラッシュ。まだ原因分からず。
An irrecoverable stack overflow has occurred. # # An unexpected error has been detected by Java Runtime Environment: # # SIGSEGV (0xb) at pc=0xb7e584e7, pid=22675, tid=2987015056 # # Java VM: Java HotSpot(TM) Client VM (10.0-b23 mixed mode, sharing linux-x86) # Problematic frame: # C [libc.so.6+0x734e7] memset+0x37
java3dのサンプル
$ cd sample/java3d コンパイル $ javac -sourcepath .:../../src:../../src.utils/jmf:../../src.utils/java3d jp/nyatla/nyartoolkit/java3d/sample/NyARJava3D.java 実行 $ java -classpath .:../../src:../../src.utils/jmf:../../src.utils/java3d:${CLASSPATH} jp/nyatla/nyartoolkit/java3d/sample/NyARJava3D
一応動いた。けど映像が上下逆さまだったり、いまいちマーカーをうまく認識しない。これは安物カメラの問題かもしれない。
あとGLXのバージョンを上げろというwarningが出ているがとりあえず放置。
GLX version 1.3 or higher is required Java 3D WARNING : reported GLX version = 1.2 GLX version 1.3 or higher is required The reported version number may be incorrect. There is a known ATI driver bug in glXQueryVersion that incorrectly reports the GLX version as 1.2 when it really is 1.3, so Java 3D will attempt to run anyway.
今のところのまとめ
まだうまくいかないところもあるけどUbuntuでも使えそうです。
joglのサンプルでクラッシュする問題を解決したい。