一覧に戻る

Unity3Dプラグインの画像認識

2017.06.14Unity3Dプラグイン

Unity3Dプラグインの画像認識

この例では、ファインダ内の画像を認識し、画像にオーバーレイする方法を示します。

画像認識

より理解を深めるために、ビジョンベースの拡張現実に関するこのドキュメントの以下のセクション、および他のセクションで使用されるいくつかの用語を説明します。

  • ターゲット:2Dターゲット画像とそれに関連する抽出されたデータ。トラッカーが画像を認識するために使用します。
  • ターゲットコレクション:トラッカーが認識できる2Dターゲットのコレクションを格納するアーカイブ。 ターゲットコレクションには、最大1000個のターゲットを保持できます。 ターゲットコレクションは.wtcファイルとして保存されます
  • ImageTracker:トラッカーは、ライブカメラ画像を分析し、関連付けられたターゲットコレクションに格納された2Dターゲットを検出します。複数のトラッカーを作成できますが、同時に使用できるトラッカーは 1つだけです。

unityでの簡単な画像トラッキング

wikitude unityプラグインは、事前設定されたプレハブに基づいています。使用可能なプレハブには2種類あります。一つはWikitudeCameraプレハブで、もう一つはImageTrackerプレハブです。

WikitudeCamera Prefab

WikitudeCameraプレハブは、すべての機能拡張の後ろにライブカメラストリームをフルスクリーンで表示します。 このプレハブには、あらかじめ入力されていない1つのパラメータを持つスクリプトコンポーネントが添付されています。 このパラメータはWikitude SDKライセンスキー用であり、独自のライセンスキーで埋めなければなりません。商用ライセンスを購入するか、無償トライアルライセンスキーをダウンロードして、Unityと組み合わせてネイティブSDKで試してもかまいません。
 

ImageTracker Prefab

シーンにトラッカープレハブを追加するには、ImageTrackerプレハブをシーン階層にドラッグします。

Trackableプレハブで使用されるtargetNameが、ターゲットコレクション内のターゲット名の1つに対応していることを確認してください。 ワイルドカードを使用して、任意のターゲットに一致させることも、ターゲットの特定のサブセットのみに一致させることもできます。

ImageTracker自体には、参照画像を検出するために必要な情報を含むWikitude Target Collection(.wtcファイル)が必要です。ターゲットコレクションはWikitude Target Manager(無料のWebベースツール)から生成してダウンロードすることができ、開発者アカウントでアクセスできます。また、WTCエディタを使用してUnity内でwtcファイルを生成することもできます。.wtcファイルをStreamingAssetsフォルダに配置して、Wikitude Native SDKが実行時に読み込むことができるようにします。使用する.wtcファイルを指定するには、シーン内のImageTrackerゲームオブジェクトを選択します。 Target SourceがTarget Collection Resourceに設定されていることを確認し、Target Collectionの横にあるドロップダウンを使用して目的のものを選択します。

.wtcファイルを正常に読み込むなどのイベントに反応するには、ImageTrackerのインスペクタにリストされているUnityイベントを使用できます。これらのイベントは2つのグループに分かれています。最初のグループには、エラーがあった場合にwtcファイルがロードされたときにTargetCollectionResourceによってトリガーされたイベントが含まれています。 2番目のグループは、ImageTracker自体が目的の.wtcファイルで正常に初期化されたかどうかによってトリガーされるイベントです。目的のイベントで、プラス記号をクリックして新規加入者を追加し、None(Object)フィールドにイベントを受け取るGameObjectをドラッグし、No Functionドロップダウンから呼び出す関数を選択します。

基本的なパラメータタイプが1つのイベントに登録する場合は、下部の静的バージョンではなく、動的にマークされた最上位リストから機能を選択してください。これにより、パラメータがWikitudeプラグインから正しく渡され、Unityによって上書きされなくなります。

コールバックの設定

Unityイベントの操作の詳細については、Unityマニュアルとイベントチュートリアルを参照してください。

カスタムオーグメンテーションの定義

また、ImageTrackerプレハブの一部はTrackableオブジェクトです。 追跡可能なものは、追跡する対象のコレクションの対象を定義します。 トラッカーがStreamingAssetsフォルダにあるwtcファイルを使用している場合、Trackableインスペクタはwtcファイル内のすべてのターゲットのリストを表示します。 アクティブなボタンを切り替えることで、このトラッキング対象でトラッキングするターゲットを選択するか、上部にある[すべて選択]を選択してすべてのターゲットを含めることができます。 同様に、拡張トラッキングを使用するターゲットを選択することもできます。

プレビューボタンを押すと、シーンの3Dビューにターゲットが表示され、ターゲットに対して拡大表示する便利な方法が提供されます。

 

たとえば、実行時にダウンロードする場合やCloudRecognitionServiceを使用する場合など、wtcファイルが別の場所にある場合でも、ターゲット名をTargetPatternテキストフィールドに入力することで、どのターゲットを含めるかを選択できます。可能な値は、完全なターゲットイメージ名(pageOne、pageTwoなど)またはワイルドカード(page *)です。すべてのターゲットを含める場合は*を使用できます。

参照画像がカメラストリームで見つかった場所に3Dオブジェクトを配置するには、任意のGameObjectを子としてTrackableオブジェクトに追加します。ランタイム中は、カメラの変換のみが変更されるため、Trackable GameObjectとその子供を配置して拡大縮小することができますが、最も便利です。ランタイム中にTrackable GameObjectを動かすと、カメラがそれに追従するため、効果的な変更は見られません。たとえば、ユーザーの入力に基づいて増強をドラッグする場合など、増強をカメラに対して移動する必要がある場合は、追跡可能なGameObjectを移動しないように注意してください。

 「トグル自動表示の切り替え(Auto Toggle Visibility)」トグルは、デフォルトで有効になっています。 これをチェックすると、対象が視界外になると自動的に無効になり、対象が再び追跡されたときに有効になります。

 可視性を手動で処理するには、このトグルをオフにして、追跡可能オブジェクトのOnEnterFieldOfVisionイベントとOnExitFieldOfVisionイベントを登録します。 これは、どのターゲットがトラッキングされたかに基づいて異なる増強を表示する場合に役立ちます。 これらのイベントの文字列パラメータは、どのターゲットが追跡されたか、または失われたかを示します。

 OnEnterFieldOfVisionイベントとOnExitFieldOfVisionイベントは、「トグル自動表示の切り替え(Auto Toggle Visibility)」トグルがオンになっていても呼び出されます。 たとえば、OnExitFieldOfVisionを処理してターゲットが失われたときに、クライアント認識 - 拡張トラッキングがUIを更新します。

拡張トラッキング

拡張トラッキングは、ターゲットごとに個別に設定できるオプションのモードです。 このモードでは、元のターゲットイメージがもう表示されなくても、Wikitude SDKは環境をスキャンし続けます。 したがって、追跡は元のターゲット画像の限界を超えて拡張されます。 この機能のパフォーマンスは、デバイスのコンピューティングパワー、背景テクスチャ、およびオブジェクトなどのさまざまな要因によって異なります。

拡張トラッキングを有効にするには、TrackableオブジェクトでExtended Trackingオプションを選択し、拡張する必要があるターゲットの名前を以下のリストに入力します。 ワイルドカード*として設定すると、すべてのターゲットが拡張モードで追跡されます。

拡張トラッキングが有効になっている場合、ImageTrackerはOnExtendedTrackingQualityChangedEventsを発生させ、上記の要因に基づいて拡張トラッキングがどれくらいうまく機能しているかを知ることができます。

複数のトラッカー

同じシーンに複数のトラッカーを配置できますが、一度に1つのトラッカーしかアクティブにすることはできません。 2番目のプラグインを有効にすると、最初のプラグインはプラグインによって自動的に無効になります。

ランタイムトラッカー

実行時にイメージトラッカーを作成することができ、使用するターゲットコレクションの場所に制限はありません。 これを行うには、単純に新しいGameObjectを作成し、それにImageTrackerコンポーネントを追加し、TargetCollectionResourceをTargetSourceTypeとして選択し、新しいTargetCollectionResourceオブジェクトを作成します。 StreamingAssetsフォルダにあるコレクションを使用している場合、TargetPathプロパティはStreamingAssetsフォルダに対する相対パスであり、UseCustomUrlプロパティはfalseにする必要があります。

デバイスまたはWeb上の別の場所にあるコレクションを使用する場合、TargetPathプロパティには、ターゲットへの絶対パス(必要に応じて、プレフィックスとしてプロトコルを示す、file://、http://、またはhttps://をつけた絶対パス)を設定する必要があります。 この場合のUseCustomUrlはtrueに設定する必要があります。 これを設定する方法の例として、サンプルのクライアントトラッカー - ランタイムトラッカーを参照してください。

また、実行時にTrackableを作成することもできますが、親トラッカーでStart()メソッドが呼び出される前にトラッカーの子として追加することを忘れないでください。追加されてなければ、時間内に登録されません。

GameObject trackerObject = new GameObject("ImageTracker");
ImageTracker imageTracker = trackerObject.AddComponent<ImageTracker>();

imageTracker.TargetSourceType = TargetSourceType.TargetCollectionResource;
imageTracker.TargetCollectionResource = new TargetCollectionResource();
imageTracker.TargetCollectionResource.UseCustomURL = true;
imageTracker.TargetCollectionResource.TargetPath = "https://url.to.your.collection/collection.wtc";

GameObject trackableObject = GameObject.Instantiate(TrackablePrefab);
trackableObject.transform.SetParent(imageTracker.transform, false);

実行時にトラッカーを作成するには、TargetCollectionResourceの代わりにCloudRecognitionServiceを使用することもできます。