#HoloLensでオフライン検出
HoloLensで物体のオフライン検出を行います。
作成にあたっては@miyauraさんの記事を参考にさせていただきました。(URLを一番下に記載)
#環境構築
Windows 10 1809 (17763) 以上
HoloLens OS 1809
Visual Studio 2017
Unity 2017.4.17f1
#Custom Visionでのモデル作成(ONNX)
Azureポータルへアクセス
https://portal.azure.com
Cognitive Services リソースの作成
名前、サブスクリプション、場所、価格レベル、リソースグループをお好みで指定します。
作成後、すべてのリソースで「名前」、「名前_Prediction」リソースが作成されている事を確認します。
Azure Custom Visionにアクセス
https://www.customvision.ai
「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からプロジェクトをダウンロードします。
https://github.com/namiwavess/ObjDetectionSamplesUsingONNX
ダウンロード後、Unity 2017.4.17f1を起動しプロジェクトを開きます。
#Unityでの作業
プロジェクト設定をHoloLens向けに設定します。
PlatformをUWPに変更します。
Unity C# Projectsにチェックを入れます。
ビルドを行い成功すれば、Unityでの作業は完了です。
#Visual Studioでの作業
学習させたデータに合わせてタグの変更を行います。今回の記事では
{"curry","gyoza","meat","pizza","sushi"}になっていますが、学習させた内容に合わせて適宜変更してください。
#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
学習させた.onnxモデルをAssetフォルダ内にインポートします。
「ビルドアクション」はコンテンツ、「出力ディレクトリにコピー」は常にコピーするを選択します。
プロジェクトからNuget管理を開き、System.ValueTuple ライブラリをインポートします。
インポート後、実機にデプロイし、動作を確認します。
#実行結果
#まとめ
HoloLensでオフライン検出を行うことができました。推論には時間が掛かりますが、
入力-ONNXモデル-出力 のフローを作ることができれば、多くの分野で活用できそうです。
#参考
HoloLensでAzure Custom Vision Service - ObjectDetectionをWindows MLを使ってオフライン推論してみた。
https://qiita.com/miyaura/items/1b9210b5c5f75d8722a3