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にチェックを入れます。
Scripting Backendは.NETにします。
ビルドを行い成功すれば、Unityでの作業は完了です。
Visual Studioでの作業
学習させたデータに合わせてタグの変更を行います。今回の記事では
{“curry”,”gyoza”,”meat”,”pizza”,”sushi”}になっていますが、学習させた内容に合わせて適宜変更してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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を使ってオフライン推論してみた。
https://qiita.com/miyaura/items/1b9210b5c5f75d8722a3