HoloLensで物体のオフライン検出(環境構築から実行まで)

HoloLensでオフライン検出

HoloLensで物体のオフライン検出を行います。

作成にあたっては @miyaura さんの記事を参考にさせていただきました。(URLは一番下に記載)

環境構築

Windows 10 1809 (17763) 以上

HoloLens OS 1809

Visual Studio 2017

Unity 2017.4.17f1

Custom Visionでのモデル作成(ONNX)

Azureポータルへアクセス

Azureポータルへアクセス

Cognitive Services リソースの作成

名前、サブスクリプション、場所、価格レベル、リソースグループをお好みで指定します。

作成後、すべてのリソースで「名前」、「名前_Prediction」リソースが作成されている事を確認します。

Azure Custom Visionにアクセス

「NEW PROJECT」から新しいプロジェクトを作成します。

「Project Types」はObject Detection

「Domains」はGeneral(Compact)

「Export Capabilities」はBasic platformsに設定します。

プロジェクト作成後は画像をアップロードし、学習を進めていきます。

1タグにつき、少なくとも15枚以上の画像が必要になります。

「Export」をクリックし、ONNX1.2を指定した上でzipファイルをダウンロードします。

ダウンロード後、zipファイルを解凍し、ファイル内の「model.onnx」を「LearningModel.onnx」に書き換えます。

この.onnxファイルが学習させたデータになっており、プロジェクトにインポートする事で利用可能になります。

プロジェクトのダウンロード

こちらのURLからプロジェクトをダウンロードします。

ダウンロード後、Unity 2017.4.17f1を起動しプロジェクトを開きます。

Unityでの作業

プロジェクト設定をHoloLens向けに設定します。

PlatformをUWPに変更します。

Unity C# Projectsにチェックを入れます。

Scripting Backendは.NETにします。

ビルドを行い成功すれば、Unityでの作業は完了です。

Visual Studioでの作業

学習させたデータに合わせてタグの変更を行います。今回の記事では

{“curry”,”gyoza”,”meat”,”pizza”,”sushi”}になっていますが、学習させた内容に合わせて適宜変更してください。

CustomVisionAnalyser.cs
#if UNITY_UWP
Task.Run(async () =>
{
var modelFile = await
StorageFile.GetFileFromApplicationUriAsync(
new Uri("ms-appx:///Assets/LearningModel.onnx"));

_objectDetection = new ObjectDetection(new List<string>(new[] { "curry", "gyoza","meat","pizza","sushi"}), 20, .3f, .45f);
await _objectDetection.Init(modelFile);

IsReady = true;
});
#endif

ターゲットはRelease/X86に変更します。

学習させた.onnxモデルをAssetフォルダ内にインポートします。

「ビルドアクション」はコンテンツ、「出力ディレクトリにコピー」は常にコピーするを選択します。

プロジェクトからNuget管理を開き、System.ValueTuple ライブラリをインポートします。

インポート後、実機にデプロイし、動作を確認します。

実行結果

まとめ

HoloLensでオフライン検出を行うことができました。推論には時間が掛かりますが、

入力-ONNXモデル-出力 のフローを作ることができれば、多くの分野で活用できそうです。

参考

HoloLensでAzure Custom Vision Service – ObjectDetectionをWindows MLを使ってオフライン推論してみた。

この記事を書いた人

azure-recipe-user