Lab元シリコンバレー在住のおっさん技術者、モバイルVRアプリ開発に挑戦中この広告は、90日以上更新していないブログに表示しています。Liteがリリースされました。Liteは、フル機能のTensorflowと異なり、iOS/Androidデバイスにて、学習済みのモデルを高速・高性能で動作させるための仕組みであり、学習や、任意のモデルの構築(MobileNetsなどの一部のモデルしか利用できません)はできません。Googleが提供する学習済みのMobileNetsなどを転移学習することで、任意の対象画像の分類が可能ですので、色々な用途に応用できそうです。Liteのサンプルを実行してみます。Liteは、Githubより入手できます。clone、もしくはzipで適当なフォルダにダウンロード・任意のフォルダへ展開します(以下、tfフォルダとします)。8とビルド用のコマンドラインツールをインストールコマンドラインツールは、コンソールより以下のコマンドによりインストールできます。Liteライブラリのビルドコンソールにて、tfフォルダへ移動し、以下をタイプします。tensorflow/contrib/lite/download_dependencies.shtensorflow/contrib/lite/build_ios_universal_lib.shこれで、tensorflow/contrib/lite/gen/lib/libtensorflow-lite.aが生成されます。cameraの2種類あります。simpleは本当にシンプルでつまらないので、ここではcameraを紹介します。cameraサンプルのプロジェクトを開く前に、以下を実行します。installなお、cocoapodsが未導入の場合は、こちらを参考に、cocoapodsを導入ください。次に、/tensorflow/tensorflow/contrib/lite/examples/ios/camera/tflite_camera_example.xcodeprojをクリックして、XCodeを起動し、以下の操作を行います。Librariesより、libPods-tflite_camera_example.aを削除Product->Cleanでクリーンするビルド→実行すると、以下のように、カメラを向けたものの分類がリアルタイムに行われます。X)では、30fps以上の性能が出ていました。身の回りのもので試しただけなのでまだなんとも、ですが、なかなかの精度で分類できていたように思います。Lite(+MobileNet)による分類は、かなり快適に動作するようです。Liteを利用し、簡単なアプリを作成してみようと思います。Box」が来ました!ポジショントラッキングのためのマーカも、ハンドトラッキングのためのスティックもすべて紙でできています。この円形のマーカを部屋のあちこちに設置することで、モバイルデバイスのポジショントラッキングが可能となり、例えばARKitやARCore対応のアプリケーション相当のアプリが動きます。ARKit/ARCoreは、特別なマーカ無しでポジショントラッキングができてしまっているので、Kickstarterでの応募当時はモバイルでMR!すごい、という感じでしたが、今となっては少し時代遅れ感は否めません・・ハンドトラッキング用のデバイスにはトリガーがついています。操作感はViveと同じ感じですが、少しオーバー気味に手を動かすとすぐにトラッキングをロストしてしまいます。スマホカメラでマーカを認識するという制約上しかたがないのですが、カメラの視野角から外れるとトラッキング不能となります。デバイスをゆっくり動かさないとトラッキング不能となります。専用のレンズを付けることで、視野角の問題はある程度解消されるようです(私は試せていません)。トリガーを引くと、マーカの一部が動きます。これを認識してアクションが起こるようです。betaのみのようです。本アプリには、ミニゴルフ等のゲームが同梱されております。左上のCardboardアイコンをタップするとVRモードとなります。立体視には対応していません。文句を書きましたが、コンソール型のVR的なポジショントラッキング・ハンドトラッキングのUXを$30という低価格でモバイルに持ち込んだ、というのはすごいと思います。現状SDKは公開されていないようですが、SDKが公開されれば、対応アプリも増え、低価格帯のモバイルVR市場の一角を担えるかもしれません。SDKが公開されたら、色々と試してみたいと思います。ARCore過去、Vuforia、Kudan、ARKitにてモバイルVR向けのポジショントラッキングを実現する方法を書いてきました。今回は、先日Googleより発表されたARCoreを利用したポジショントラッキングを実現します。ARCoreのインストールARCoreを利用するためには、以下が必要です。XLの三種類のみです。これら端末でARCoreを利用するためには、arcore-preview.apkをダウンロードし、adbで端末に書き込む必要があります。Unityに付属のサンプルシーン(HelloAR.unity)を動かしてみます。surfaces...」と表示され、その通り平面を探します。平面が見つかると、平面上にメッシュが表示されます。メッシュの上をタップすると、そこにドロイドくんが配置されます。技術的にはARKitと同様の感じです。Cardboardにてポジショントラッキングを実現します。以下のスクリプトを作成します。}}ARCoreには、カメラ位置・回転を取得するためのPoseクラスが用意されているため、非常に簡単にポジショントラッキングが実現できます。次に、以下の通り、シーンを編集します。Device.prefabをシーンに配置。Cardboardアプリで実現できます!・・が、対応機種が少なすぎます・・ARCoreを活用したVRアプリが量産される、ためには、ARCoreの対応機種がもっともっと増える必要がありそうです。Realityヘッドセットが、本日届きましたので、さっそく試してみました。セットアップハードウェアのセットアップは非常にシンプルです。他のコンソール型のVRヘッドセットのようなたくさんのデバイス群は存在せず、上記写真のヘッドセットのみ、です。これをPCにHDMI、USB接続するだけで、デバイスのセットアップは完了です。すばらしい!!次にソフトウェアのセットアップです。ハードウェアのセットアップが完了すると、以下のウィンドウが現れます。セットアップも非常にシンプルで、身長入力→フロアの認識(腰の高さでヘッドセットを持つだけ)→ガーディアンを設定して終了です。ガーディアン設定時に体験できますが、OculusやViveのような外部デバイスがないにも関わらず、正確にポジショントラッキングが行われています。その後、以下のような空間が表示されます。動かしてみるヘッドセットは、Oculus等と比較して非常に軽く、装着感がよいです。ヘッドセットをつけて部屋を歩き回ることで、空間内を自由に歩き回ることができます。若干のラグや、実モーションに対する空間内での動きの違和感を感じましたが、それでも外部デバイスなしでここまでのポジショントラッキングができていることに感動しました。本製品には(開発者用ということもありますが)一切の入力デバイスが同梱していません。HoloLensのようなジェスチャによる入力(タップ、ブルーム)もありません。マウスを使って、テレポート(右クリックで写真の青カーソールを出し、離して移動)や、マウスを空間内で動かしてポインティング・クリックが可能です。このため、机に座ってVRするなら、まぁ問題ありません。ヘッドセットの前方左右にカメラがついているため、てっきりこれで外部映像を入力し、立体視表示して、ホロレンズ的な体験ができる!と思っていたのですが、これは単にポジショントラッキング用のセンサーのようです。TokyoにVRコンテンツを出展しました。Touchを活用したVR料理ゲーム(?)です。食材をナイフでカットし、焼き色を付けて、皿に盛りつけます。盛り付けが完成すると、AIがその料理に名前をつけてくれます。youtu.beMeshRendererをもつオブジェクトに、Sliceableコンポーネントをセットするだけで、そのメッシュをスライスすることができます。何点か、使用上の注意点ですが、Sliceableのエディタ拡張のバグ?により、断面部分のテクスチャ領域の設定がうまくいきません(設定が無視され、デフォルト値となる)手のちょっとしたブレなどで、大量に細かくスライスされてしまいます。何十・何百の細かなオブジェクトが生成されてしまい、処理がものすごく重くなります。私は、スライス後のオブジェクトの体積が一定以下の場合は、そのオブジェクトを削除するようにしました。IKのVRIKを使用しました。Touch用が見つからず・・ただ、OVRCameraRigに簡単に設定できました。IKを設定しないと、足が思うように動いてくれません(上記チュートリアルにはでてこない)。IKについては、_Demo/VRIK/VRIK(Grounder).unityが参考になります(というか、コピペ)キャラクタの手の動きOculusFingerを利用させていただきました。ColliderはConvexにしなければならなくなり、お皿のように真ん中がくぼんた形状のMeshの当たり判定が、想定通りとなりません。Colliderを利用しました。Edgeを適当な数字として、Calculateボタンを押すだけです。Edgeを大きくすると、より細かなBoxColliderでエミュレートされますが、処理が重くなります。Objectのチェックを外すと、NonConvexMeshColliderがセットされたオブジェクトに多量のBoxColliderがセットされます。Objectのチェックをチェックした場合は、子オブジェクトが生成され、そこにBoxColliderがセットされます。修正(GetComponent→GetComponentInChildren)が必要かもしれません。Translateを使用しました。Cardboard向けのホラーVRゲーム(?)です。ライド型のお化け屋敷アトラクションであり、プレーヤは歩いたりしなくても、乗り物が動いて勝手に進んでいきます。特段のゲーム性はなく、ひたすら怖いモンスターや超常現象を見て楽しむ、コンテンツです。Hospitalを使用しました。youtu.be・・何も出てこなくても十分に怖いです・・なお、モバイル向けのアセットではないので、そのまま使用すると、GearVR等では全然性能が出ません。Store等に載せたいな、と画策中です。w前回は、苦戦しながらもラズパイ3にUbuntuをインストールし、Movidiusを動かしました。Wで、Movidiusを動かしてみます。W向けのUbuntuイメージは提供されておりません。以下のサイトに記載の通り、Movidius向けのモデル生成にはUbuntuが必要だが、生成したモデルを利用してMovidiusを動かすだけであればRaspbianで問題ないとのこと。Wでも大差ないだろうと考え、試してみました。サイトに記載の通りです。LITEを使用した今回はUSBカメラを接続できなかったため、前回参考した手順サイトの「ねこの認識」で動作確認をしたことくらいです。一度Movidiusのデバイスが認識されず、ncs-fullcheckが失敗したことがあったのですが、その後なぜか、ncs-fullcheckを実行しても何も起こらなくなってしまいました。再度makeすることで治りましたが、原因はよくわかりません。NCSを入手しました。NCSを接続すると色々面白いことができそう。NCSについては、以下に手順が詳細記載されております。qiita.com基本「上記の手順の通り」なのですが、色々と苦戦・・ちゃっちゃと環境を作って色々試したいと思っていたのですが、「まずは動かす」ことで精いっぱいでした。以下、はまった点などの備忘録です。PPAをインストールすると、Ubuntuが起動不能になってしまいました。途方にくれていたところ、以下のサイトを発見。tiryoh.com本サイトの「初期設定済み版」を利用させていただきました。Imager等で、SDカードに書き込めばOKです。Killed」でエラー終了・・UbuntuをGUI版にしたせいでしょうか?どうやらメモリー不足によるエラーのようです。/var/swap.imgとしてスワップ領域を追加して再度インストールしました。Errorが表示されますが、パスの問題のようで、再度bash立ち上げれば消えます。failed」が表示されます。Terminal)では表示されないし、とりあえずよしとしました。その後の手順その後の手順は、手順サイトに記載のとおりうまくいきました。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。