拡張現実アプリの作成方法

拡張現実 (AR) は、周囲の現実世界の拡張ビューを提示することができる革新的な技術です。 たとえば、サッカーの実況中継の横に試合のスコアを埋め込んで表示するようなものです。 この埋め込みは、ライブ カメラ画像をレンダリングし、現実世界の画像の上に仮想オブジェクトを拡張し、視覚ベースの認識アルゴリズムを使ってカメラのプレビュー画面に表示する拡張現実アプリケーションを介して行われます。

このブログでは、モバイル デバイスおよびタブレット用の視覚ベースの AR アプリケーションを構築できる最高の SDK の 1 つである Qualcomm Vuforia SDK を使ったサンプル AR アプリの開発プロセスについて説明します。 現在、Android、iOS、Unityで利用可能です。 この SDK は、最も低いレベルの複雑な処理を行うので、開発者はアプリケーションに完全に集中できます。

コンセプトの概要

まず、AR 分野で用いられる主要コンセプトの概要を説明します。 AR アプリの開発を始める前に、これらを理解することが重要です。

  • ターゲット – 現実世界のオブジェクトまたはマーカーです (バーコードや記号のようなもの)。 ターゲットは、Vuforia Target Manager を使用して作成されます。 一度作成されると、オブジェクトを追跡し、その上にコンテンツを表示するために使用することができます。 ターゲットは、イメージ ターゲット、円筒形ターゲット、ユーザー定義ターゲット、ワード ターゲット、2D イメージ フレーム (フレーム マーカー)、仮想ボタン (イベントをトリガー可能)、または Cloud ターゲットにすることができます。 たとえば、ターゲットの上にイメージまたはビデオを表示します。
  • Textures – テクスチャは、同じイメージ形式を持つ 1 つまたは 2 つのイメージによって形成される OpenGL オブジェクトです。 VuforiaのARシステムはコンテンツをテクスチャに変換し、ARシステムはテクスチャをレンダリングしてカメラのプレビュー画面に表示します。
  • Java Native Interface – Vuforia Androidサンプルでは、ライフサイクルイベントはJavaで処理されますが、トラッキングイベントとレンダリングはネイティブC++で記述されています。 JNIはJavaからネイティブメソッドを呼び出すことができるため、JavaとC++間の通信に使用できます。
  • オクルージョン – リアルオブジェクトに隠れた仮想オブジェクトを追跡することを意味します。 オクルージョン管理処理では、透明シェーダを使用して仮想オブジェクトと現実オブジェクトの関係を確立し、その結果、現実世界のオブジェクトの中にあるかのようにグラフィックスを表示します。
  • OpenGL ES – Vuforiaは、グラフィカルプロセッサユニットを使用して2Dおよび3DグラフィックスのレンダリングのためにOpenGL ESを内部に使用しています。 OpenGL ESは特にスマートフォンや組み込みデバイス向けに設計されています。

Vuforia Components

上の図は、Vuforia ARアプリケーションのコアコンポーネントを示しています。

  • Image Converter – ピクセルフォーマットコンバータは、カメラのデフォルトフォーマットをOpenGL ESレンダリングとトラッキングに適したフォーマットに変換します。
  • Tracker – トラッカーは、イメージ認識アルゴリズムを用いてカメラのプレビューフレーム内の現実世界のオブジェクトを検出しトラッキングします。 結果はビデオバックグラウンドレンダラーに渡されるステートオブジェクトに保存されます。
  • ビデオバックグラウンドレンダラー – レンダラーはステートオブジェクトに保存されたカメライメージをレンダリングし、カメラ画面に追加します。
  • デバイスデータベース – デバイスデータベースまたはデータセットにはターゲットマネージャーを使って作成したターゲットが含まれます。
  • Cloud Databases – Target Manager を使用して作成でき、最大 100 万のターゲットのデータベースを含むことができ、ランタイムにクエリできます。
  • 開発を始める

    TargetManager – 最初のステップとして、デバイスデータベースとして使用するターゲットを Vuforia Target Manager で作成します。 このためには、まずVuforia開発者ポータルに無料登録する必要があります。 このアカウントは、Vuforiaからリソースをダウンロードしたり、Vuforiaフォーラムに問題を投稿したりするために使用できます。 ログイン後、

    • 上記のようにVuforia WebサイトでTargetManagerを開き、[Device Databases]タブを開きます。
    • [データベースの作成]、[ターゲットを追加]をクリックします。

    • ローカルシステムからターゲットとして表示したい画像を選択します。 2MB以下のJPGまたはPNG画像(RGBまたはグレースケールのみ)のみがサポートされています。 理想的なイメージターゲットは、細部が豊かで、コントラストがよく、反復パターンがない必要があります。
    • ターゲットタイプを単一イメージとして選択します。 幅に任意の値を入力し、[ターゲット作成]をクリックします。 短い処理時間の後、選択されたターゲットが作成されます。
    • ターゲットの評価が3以上の場合、ターゲットはトラッキングに使用することができます。
    • 同じ方法でターゲットを追加します。
    • ダウンロードするターゲットを選択し、選択したターゲットをダウンロードをクリックします。<データベース名>.xmlと<データベース名>.datファイルがダウンロードされます。

    インストールとサンプルコードのダウンロード

    • すでにVuforiaアカウントにログインしていると仮定して、Vuforia SDK for AndroidとSamples for Androidをダウンロードしてください
    • Vuforia SDKフォルダを展開し、Android-SDKフォルダと同じフォルダに配置してください。 Vuforia SDKフォルダー内の空のsampleディレクトリ内にサンプルをコピーし、VideoPlayBackサンプルをインポートします。
    • EclipseでWindow-PreferencesからJava-Build Path – Class Variablesに移動し、新しい変数を作成します。
    • NameフィールドにQCAR_SDK_ROOTを追加し、folderオプションをクリックしてVuforia SDKフォルダを選択します。
    • プロジェクトのJava Build Pathを確認し、order and Exportsタブでvuforia.jarがエクスポートされます。
    • copyVuforiaFiles.xml を開いて <fileset> で armeabi-v7a へのパスを指定してください。 Vuforia-SDKフォルダのビルドディレクトリでパスを確認できます。 私の場合、Linuxのパスは: “/home/vineet/vuforia-sdk-android-2-8-8/build/lib/armeabi-v7a”
    • アプリをビルドして実行すると、プロジェクトの libs ディレクトリに libVuforia.so ファイルが生成される。
    • デモ アプリにはすでに 2 つのマーカーとテストに使用できる動画ファイルが含まれています。 マーカーはアプリのメディアフォルダ内のPDFファイルから印刷できます。
    • アプリを実行すると、カメラビュー画面が表示されます。 マーカーにカメラを向けると、マーカーに重なるように動画が表示されます。

    開発者の作業の流れ

    ユーザーがサンプル アプリを起動すると、loadTextures を呼んで、テクスチャの作成と読み込みが開始します。 ここで assets フォルダからのビットマップは、Vuforia SDK エンジンが AR ビューでの 3D オブジェクトのレンダリングに必要な Texture に変換されます。

    同時に、アプリは initAR() を呼び出してエンジンを設定する処理を開始します。 ここで、アプリは Vuforia SDK エンジンを非同期で初期化します。 初期化に成功すると、トラッカーデータの読み込みが非同期で開始されます。 TargetManager を使用して作成されたターゲット XML ファイルからデータセットをロードして有効にします。

    エンジン設定後、アプリは initApplicationAR() を呼び出し、OpenGLES ビューを作成して初期化し、レンダラーをそれにアタッチします。 OpenGL ESビューにアタッチされたレンダラーは、VideoPlaybackHelperを通してビデオのロードを要求し、OpenGL DrawFrame()メソッドを呼び出してカメラフレームをトラッキングします。 この過程で、最初に読み込んだtexturesオブジェクトのOpenGLテクスチャとビデオデータのテクスチャも作成されます。

    次に、アプリはstartAR()を呼び出してカメラを起動します。 カメラが起動するとすぐに、レンダラーがフレームの追跡を開始します。 imageTarget が見つかると、アプリはビデオを表示します。

    ユーザーがアプリを閉じたときに onDestroy() を呼び出して、すべてのリソースをアプリでアンロードします。

    まとめ

    このブログで、Vuforia を使用して ImageTarget を追跡し、その上に動画を表示する方法を説明しました。 Vuforiaは、テキスト検出、オクルージョン管理、クラウドからのランタイムターゲット生成など、様々な用途に使用することができます。 Vuforiaについてもっと知りたい方はdeveloper.vuforia.com.

    をご覧ください。

    コメントを残す

    メールアドレスが公開されることはありません。