Yusuke Saitoの雑記

センサー類, Python, Unity(C#), Unreal Engine, 機械学習とかについてのメモ

HoloLens 2のResearchModeのStreamRecorderを試す

HoloLens 2のResearchMode とは?

簡単にいうと、HoloLens2に内蔵されているセンサー類のストリームデータを可視化・保存できるモードのことです。 もちろん、研究用途のためなので、動作保証とかないです。(なので、お仕事で使う場合は気をつけてください) また、Preview版なので、変更される可能性が高いです。 詳しくは、下記ドキュメントをご覧になってください。 docs.microsoft.com

HoloLens 2のOSをInsiderPreviewにする

ドキュメント通りやれば大丈夫なはず。 OSのversionが19041.1356 以降となってれば使えるはずです。 また、デバイスポータルでReserchmodeを有効にすることを忘れずに。

ResearchModeのサンプルコードを試す

公式にサンプルコードが公開されています. https://github.com/microsoft/HoloLens2ForCV

本記事では、Samples/StreamRecorder以下を参照します。 ここには、記録するためのプロジェクト(C++)と、保存したデータをロードするコード類(Python)が入っています - StreamRecorderApp : 記録するためのプロジェクト(C++) - StreamRecorderConverter : 保存したデータをロードするコード類(Python)

1. StreamRecorderを試す

まず、ソリューションファイルStreamRecorderApp/StreamRecorder.sln を開きます。

1-1. StreamRecorderのコードを変更する

(20200912時点)現在のコードだと、RGBカメラの情報やEyeTrackingの情報を記録するモードになっていません。 これを有効にするために、以下の手順を踏んでください。

AppMain.cppファイルのコードを少し変えます。 //Set streams to capture となっている部分に以下を追記(20200912時点)してください。

std::vector<ResearchModeSensorType> AppMain::kEnabledRMStreamTypes = { ResearchModeSensorType::DEPTH_LONG_THROW };
std::vector<StreamTypes> AppMain::kEnabledStreamTypes = { StreamTypes::PV , StreamTypes::EYE };

1-2. 実行

Debugビルド、ARM64で実行すると、Start・Stopボタンが表示されます。 Start押し、適当な時間の後Stopを押して記録が完了するのを待ちます。 記録が完了すると、以下の図ようにHandの位置などが可視化された状態になります。

f:id:stopengin0012:20200911175840j:plain

2.StreamRecorderConverterを試す

2-1.Anaconda3, opencv-python. open3dのインストール

仮想環境を作成し、python3, numpy, opencv-python. open3dをインストールしてください。 この辺は省略します。

2-2.実機から保存したデータをタウンロードする

  • <output_folder> : 出力先のフォルダを指定してください
  • user : デバイスポータルに入る際に入力するuserを指定してください
  • password : デバイスポータルに入る際に入力するpasswordを指定してください
python StreamRecorderConverter/recorder_console.py --workspace_path <output_folder>  --dev_portal_username <user> --dev_portal_password <password>

すると、下記のようなコンソール画面になります。download_allを入力してEnterを押すと、実機からダウンロードされます。

f:id:stopengin0012:20200912104924p:plain

データには、HandやGazeのデータがCSV形式になっていたり、またCameraパラメータなどもあるようです。

2-3.データを読み込むコードを動かす

下記コマンドで、ダウンロードしたデータを、いくつかのスクリプトで読み込める形にできます。 - <path_to_capture_folder> : 実機からダウンロードしたフォルダのパスを指定してください("2020-09-11-175712"のように日付の形式になっているフォルダです)

python process_all.py --recording_path <path_to_capture_folder>

色付きPointCloudの生成

python convert_images.py --recording_path <path_to_capture_folder>

f:id:stopengin0012:20200912103754p:plain

Hand・Eye追跡画像の生成

python project_hand_eye_to_pv.py --recording_path <path_to_capture_folder>

青がGaze, 緑がHandかな??

f:id:stopengin0012:20200912104350p:plain

空間Meshの生成

  • <path_to_pinhole_projected_camera> : <path_to_capture_folder>以下にある、pinhole_projectionフォルダを指定してください
python tsdf-integration.py --pinhole_path <path_to_pinhole_projected_camera>

tsdf-mesh.plyが作成されます.

f:id:stopengin0012:20200912104206p:plain