C#でHoloLens RS4 PreviewのResearch modeを使う

# はじめに
[CameraFrames](https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/CameraFrames)というUWPのサンプルプロジェクトを修正して各種センサーのデータを可視化してみた。

近距離赤外線
![CameraFrames01_ShortThrowToFReflectivity.jpg](https://qiita-image-store.s3.amazonaws.com/0/162000/b28bb7e6-919b-39dc-4e30-3303fc241de7.jpeg)
[Youtube](https://www.youtube.com/watch?v=gD1YOjE8Enk)

近距離深度
![CameraFrames02_ShortThrowToFDepth.jpg](https://qiita-image-store.s3.amazonaws.com/0/162000/5b0b36ed-e7d9-026f-d9ae-974c3d7deb66.jpeg)
[Youtube](https://www.youtube.com/watch?v=F-FUGiteuyE)

修正したプロジェクトをGitHubに置いた → https://github.com/sotanmochi/CameraFramesSampleForHoloLensRS4  

# 検証環境
- Windows 10 Pro Insider Preview (Version: 1803, OS build: 17127.1)
- Visual Studio 2017 (Version 15.6.6)
- HoloLens RS4 Preview (OS build: 10.0.17123.1004)

# サンプルプロジェクトの取得
[Windows-universal-samples](https://github.com/Microsoft/Windows-universal-samples/tree/master/)のmasterブランチをcloneする。```
$ git clone https://github.com/Microsoft/Windows-universal-samples.git
```

# サンプルプロジェクトの実行
[Windows-universal-samples](https://github.com/Microsoft/Windows-universal-samples/tree/master/)には色々なサンプルが含まれているが、今回は[CameraFrames](https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/CameraFrames)を使う。
CameraFramesのソリューションファイル（Windows-universal-samples\Samples\CameraFrames\cs\CameraFrames.sln）をVisual Studioで開いてビルド・デプロイする。

実行してSource GroupのSensor Streamingを選択すると「Access is denied.」と表示されてHoloLensのセンサーデータを使えない。各種センサーのデータを使えるようにプロジェクトの設定を変更していく。

![CameraFrames00.jpg](https://qiita-image-store.s3.amazonaws.com/0/162000/dc40c565-9704-5eb7-eec8-4a5f8c32c140.jpeg)

# HoloLensのSensor Streamsを取得できるようにプロジェクト設定を変更

## 開発環境のレジストリの内容確認
開発環境のレジストリエディタ（regedit.exe）でcapabilityClass_Restrictedの内容を事前確認しておく。
capabilityClass_RestrictedのMemberCapabilityに「perceptionSensorsExperimental」が含まれていること。  

![RegEditCapability.jpg](https://qiita-image-store.s3.amazonaws.com/0/162000/fa87c19d-9756-419d-4be5-563a60df0058.jpeg)

## Package.appxmanifestの修正
「CameraFrames\cs\Package.appxmaniest」にPackageとCapabilitiesの設定を追記する。

- Packageにrescapを追加
- CapabilitiesにperceptionSensorsExperimentalを追加

修正後のPackage.appxmanifestは最終的に以下のようになる。

```
<?xml version='1.0' encoding='utf-8'?>
<Package
  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
  xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
  xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  IgnorableNamespaces="uap mp rescap"
  >
  <Identity Name="Microsoft.SDKSamples.CameraFrames.CS" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" Version="1.0.0.0"/>

・・・（中略）・・・

  <Capabilities>
    <rescap:Capability Name="perceptionSensorsExperimental"/>
    <DeviceCapability Name="microphone"/>
    <DeviceCapability Name="webcam"/>
  </Capabilities>
</Package>
```

## 実行結果
Package.appxmanifestを修正するとHoloLensのセンサーデータを使えるようになった。実行結果は以下のようになる。

近距離赤外線
![CameraFrames01_ShortThrowToFReflectivity.jpg](https://qiita-image-store.s3.amazonaws.com/0/162000/b28bb7e6-919b-39dc-4e30-3303fc241de7.jpeg)

近距離深度
![CameraFrames02_ShortThrowToFDepth.jpg](https://qiita-image-store.s3.amazonaws.com/0/162000/5b0b36ed-e7d9-026f-d9ae-974c3d7deb66.jpeg)

# 参考情報
- [Experimenting with Research Mode and Sensor Streams on HoloLens Redstone 4 Preview](https://mtaulty.com/2018/04/06/experimenting-with-research-mode-and-sensor-streams-on-hololens-redstone-4-preview/)
- [Download Windows 10 Insider Preview ISO](https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewiso)
- [Download Windows Insider Preview SDK](https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewSDK)