[開発メモ] Android向けOpenNI2のビルド方法

仕事の関係でXtionを手に入れました。
http://www.asus.co.jp/Multimedia/Motion_Sensor/Xtion_PRO_LIVE/





言ってしまえばKinectのような、人間の動きなどを感知するセンサーを搭載した機械。

で、これをWindowsやLinuxではなく、Android上で動かす、というのが今取り組んでいること。

参考にしているのはこのページ。
http://www.hirotakaster.com/archives/2013/01/android-42jelly-bean-and-openni-21-beta.php

OpenNIという開発環境(ってことになるのかな?オープンソースのNISDK)の公式サポートOSの中にAndroidが入っているものの、現在のところAndroid端末自体で、開発環境を持っている端末はほとんどないため、Linuxなどの環境を使ってビルドした実行環境をインストールしてやる必要がある。
で、上のページを参考にその処理を実行しようとしたが、なかなかうまくいかなかったのでその対処法をメモ。

ちなみに、先に注意点を言っておくと、現時点でまだビルドが通るところまでが確認できただけで、正常な実行そのものは確認できていませんので、このページを参考にご覧いただく方がいたら、ご了承のうえご覧ください。
うまく動いたらまたブログで報告するとは思います。

このページでは、上のページでうまくいかなかったところ、上のページとは違うやり方をしたところだけを、ポイントを抜粋しながら書いていきます。


まず、AndroidNDKのバージョンが上がっていたので、wgetするファイルを
android-ndk-r8d-linux-x86.tar.bz2
から
android-ndk-r8e-linux-x86.tar.bz2
に変更。

次に、上のページを参考に
- OpenNI2/Source/Core/OniContext.cpp
および
- OpenNI2/Source/Drivers/PS1080/Sensor/XnSensor.cpp
を書き換えようとしたが、どうにもファイルの記述が、ページに書かれているものと微妙に異なっている。
どうやらAndroidに正式対応した際に若干記述が変更されたようだ、という雰囲気を感じたので、上のページで施されていた修正はせずに実行してみる事に。

そしてbuild OpenNIとなっているコマンドを実行する部分で、ディレクトリ名が
OpenNI2/Redist
となっているが、このようなディレクトリは存在せず。
現在は
OpenNI2/Packaging
が対象ディレクトリのようです。

そして一番嵌ったポイントが次。
まず、
python ReleaseVersion.py android
を実行したところ、
import argparse
がmoduleエラーとなり、そのようなモジュールは見つかりません、という主旨のエラー。
pythonはほとんど使ったことが無いため何のことかわからず、とりあえずググってみたところ、argparseというモジュールはどうやら2.7以降に追加されたものらしいというのが判明。
そこで、VineLinux6の環境ではpython3が見つかったのでこれを apt-get install する。

今度はpython3を明示して再度実行。
python3 ReleaseVersion.py android
すると次は、なぜか
print "******"
という構文がSyntaxエラーという表示に。

こちらも訳が分からずググるとこんな情報が。
http://oshiete.goo.ne.jp/qa/4970161.html
要するに、2.x系ではprintする際、""で囲むだけでよかったものが、("")と、3.x以降ではかっこをつける必要が出ているとのこと。
で、当初ReleaseVersion.pyの中身がエラーになったため、律儀にprint文を書き換えていったが、このファイルの修正箇所4か所を直した後で、次のファイルも同じエラーが。
要するに全部のソースコードを修正する羽目になりそうだったのでこの手段はあきらめる。

で、再度apt-cacheでpythonの関連項目を探してみると、python27が。
これをインストールしたうえで、またもこのバージョンを明示して指定することで、ようやくビルドが通りました。
python27 ReleaseVersion.py android

ちなみに、python27はdevelなど、本体だけでなく各種ツール系も入れておかないと、エラーになるようですので重ねてご注意を。

ということで、これで一応、Android用の環境がビルドできたようです。
私の環境では、OpenNIのルートディレクトリ配下に
Final/OpenNI-android-2.2.tar
というファイルが出来上がっていました。
どうやらこのファイルに、実行するのに必要なファイルがすべてまとめられている様子。

[taedoo@localhost Final]$ tar tf OpenNI-android-2.2.tar
OpenNI-android-2.2/
OpenNI-android-2.2/libPS1080.so
OpenNI-android-2.2/PS1080.ini
OpenNI-android-2.2/OpenNI.ini
OpenNI-android-2.2/libOpenNI2.so
OpenNI-android-2.2/EventBasedRead
OpenNI-android-2.2/SimpleRead
OpenNI-android-2.2/libPSLink.so
OpenNI-android-2.2/libusb.so
OpenNI-android-2.2/libOniFile.so
OpenNI-android-2.2/MultipleStreamRead



結論をまとめますと、ポイントは3点。
・Androidに正式対応したことで、余計なソースの編集は不要。
・OpenNI/RedistディレクトリはOpenNI/Packagingに変更。
・pythonは2.7以外はNG(2.6以前でもargparseモジュールをインポートできればOKかも知れないがやり方は不明。また3.x系ではprint構文にエラーが発生するため大量のソースコード修正が必要(地道に編集すれば、3.x以降でもできるかも?))

明日以降、Android端末に入れて試してみようと思います。
============================気になる情報
ペラペラで折り曲げ自在な上に2枚重ねて画面コピーもできる「PaperTab」
http://gigazine.net/news/20130111-papertab/

【訃報】Yum開発者セス・ヴィダル氏がひき逃げによって死亡、容疑者は翌日自首
http://gigazine.net/news/20130711-seth-vidal-passed-away/

クーラにプロジェクションマッピングしてみた
http://www.youtube.com/watch?v=O3X52T7-LjA&feature=share

女性アスリートに「処女性」を望む気配
http://bylines.news.yahoo.co.jp/takedasatetsu/20130715-00026452

2.4/5GHz対応USBスペクトラムアナライザ Wi-Spy DBx
http://www.amazon.co.jp/gp/product/B00AHB10B0/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00AHB10B0&linkCode=as2&tag=taedookim-22

あの名画、燃やしちゃった? 盗難容疑者母、証拠隠滅か
http://www.asahi.com/international/update/0717/TKY201307170051.html

JPEG画像のEXIFヘッダにマルウェアを隠して実行させる新しい手口が登場
http://gigazine.net/news/20130717-malware-hidden-jpeg-exif-header/

この記事へのコメント

hoge
2017年07月29日 17:26
はじめまして。
python27でパッケージをビルドしようとして
windows10のコマンドラインで
python ReleaseVersion.py android
として実行するとUpdateVersion.pycやAndroidBuildというフォルダができるのですがAndroidBuildは空で
Finalフォルダにjarができません
エラーも出ていなくて何が悪いのかもよくわからないのですが、何かわかりますでしょうか。
Kin
2017年07月30日 21:55
>hoge様
初めまして。
この件、正直、もう4年も前のブログで、かつ、どうも当初参考にしたページが削除されたようでリンク切れになっているため自分でもほとんど覚えておりません…。
ただ、エラーと言いますか、おうかがいした状況からすると、Android向けのBuild環境が整っていないのでは無いかと思います。
AndroidNDK回りの何かが用意できていないのではないでしょうか。
Windowsの環境でAndroidNDKを使った開発をやったことがないのでよく分かりませんが、この辺りを確認されてみてはいかがでしょうか。
余り参考にならない情報で申し訳ありません…。
hoge
2017年07月31日 21:12
返信ありがとうございます。
ndk-build自体はできるのですが、パッケージ自体はその後いろいろやってみたのですが、やはりできません。
ndk-buildでできた.soを使ってapkを作るとこまで出来たんですが OpenNI::Initializeでfaildになり、ダメでした。
この時のapkってまだ持ってたりしないでしょうか。
持っていたら、動作するか試させていただけないでしょうか。
Kin
2017年08月01日 20:42
申し訳ありません。
当日つとめていた会社を既に退職していることなどもあり、手元にapkファイルは持っておりません。
お力になれず済みません。
hoge
2017年08月02日 19:58
承知しました。
無理言ってすいません。
ありがとうございました。

この記事へのトラックバック

  • [開発メモ] Android向けOpenNI2のビルド方法2

    Excerpt: 前回のメモから作業を進めたところ、いろいろと環境として整っていないことが判明。 やっぱり、NDKアプリすら作ったことが無いのに、いきなり一足飛びにOpenNIを使ったアプリ作ろうとしたのが無茶だった.. Weblog: ヤメ記者SEの徒然なるままに… racked: 2013-07-19 00:10
  • [メモ] ODROID-X2(Android)+OpenNI2でXtionを動かした

    Excerpt: 前々回、前回と2日間かけて取り組んでいたXtionをAndroid上で動かすことがやっと出来ました。 色々はまって試行錯誤した挙句、OSアップデートしたらすんなり動くという…orzな展開になりました.. Weblog: ヤメ記者SEの徒然なるままに… racked: 2013-07-20 00:35

テーマ別記事