Real Sense D415　pyrealsense2のセットアップ（Windows10）

##はじめに
初投稿です。よろしくお願いします。
RealSenseは、Intelが販売している深度センサです。今回は、公式のgithubにあったWrapperから、python版のインストール方法と、注意点をメモしていきます。日本語の解説を見かけなかったので、ぜひ参考にしていただけたらと思います。

##前準備
###Visual StudioとCMakeのインストール
Visual Studio 2015または2017をインストールします。ここでは、2017の場合について解説します。まず下のURLからインストーラーをダウンロードしてください。
https://visualstudio.microsoft.com/ja/free-developer-offers/
インストーラーを起動して、Communityを選択すると無料で済みます。その時、ワークロードの「C++によるデスクトップ開発」と「C++によるモバイル開発」にチェックを入れ、個別のコンポーネントのWindows 10 SDK(10.0.10586以降)にもチェックを入れてください。その他は必要に応じてチェックを入れ、インストールしてください。
![visual_installer.png](https://qiita-image-store.s3.amazonaws.com/0/183478/ef77e3d6-425d-a6db-4afd-8beee65e18aa.png)
既にインストールが完了している場合は、Visual Studio Installerを起動し、「変更」をクリックして、個別のコンポーネントのWindows 10 SDK(10.0.10586以降)にチェックが入っていることを確認してください。

CMakeのインストールはこちらから
https://cmake.org/download/
最新版をダウンロードして、インストーラーに従ってそのままインストールしてください。

###githubからlibrealsenseをダウンロード
gitとgithubを使えることを前提として話を進めますが、詳しい使い方は以下を参照してください。
http://www.atmarkit.co.jp/ait/series/3190/

https://github.com/IntelRealSense/librealsense
からlibrealsenseをクローンしてください。

```
git clone https://github.com/IntelRealSense/librealsense.git
```

###メタデータの有効化
メタデータは、librealsenseによって提供される高度な機能だそうです。詳しくは[こちらのリンク](https://github.com/IntelRealSense/librealsense/blob/master/doc/frame_metadata.md)で説明されています。
Windows PowerShellを使って設定します。管理者としてWindows PowerShellを実行してください。(ホームボタンを右クリックで出てくる)
まず、`Set-ExecutionPolicy`コマンドを実行し、`ExcutionPolicy`を`RemoteSigned`に変更します。
次に、/librealsense/scriptsに移動し、お手持ちのRealSenseをパソコンに接続して、以下のコマンドを実行してください。
`.\realsense_metadata_win10.ps1 -op install`

###CMakeGUIを使ってビルドする
クローンしたフォルダ/librealsenseに、CMakeを使ってRealSenseSDKのプロジェクト群をビルドします。
デスクトップにCMakeのショートカットができているはずなので、起動してください。
![CMake.png](https://qiita-image-store.s3.amazonaws.com/0/183478/e7c2da8e-00b2-14c2-52e9-c1ebe4acd90f.png)
①`Browse Source`をクリックして先ほどクローンしたlibrealsenseフォルダを選択してください。
② `Browse Build`をクリックしてビルド結果が格納されるフォルダを選んでください。librealsense/buildにすると、失敗してもすぐ削除してやり直せるのでお勧めです。
③`Add Entry`をクリックすると、以下の画面が出ると思います。
![Add_Entry.png](https://qiita-image-store.s3.amazonaws.com/0/183478/babeff36-9ffd-ea31-2e9f-0e7f5218d0a6.png)
Nameに`BUILD_EASYLOGGINGPP`、TypeはBOOLのままで、Valueにチェックを入れてください。OKを押すと、エントリが追加された状態になると思います。同じようにして、以下のエントリ群を登録してください。

```
BUILD_EXAMPLES:
    Type:BOOL
    Value:True
BUILD_GRAPHICAL_EXAMPLES:
    Type:BOOL
    Value:True
BUILD_RS400_EXTRAS:
    Type:BOOL
    Value:True
BUILD_SHARED_LIBS:
    Type:BOOL
    Value:True
BUILD_UNIT_TESTS
    Type:BOOL
    Value:True
CMAKE_CONFIGURATION_TYPES:
    Type:STRING
    Value:Debug;Release;MinSizeRel;RelWithDebInfo
CMAKE_INSTALL_PREFIX:
    Type:PATH
    Value:C/Program Files/RealSense
HWM_OVER_XU:
    Type:BOOL
    Value:True
ENFORCE_METADATA:
    Type:BOOL
    Value:True
```
登録できたら、`Generate`をクリックします。

次に、`librealsense/wrappers/python`フォルダでも、CMakeを使ってプロジェクトをビルドします。
CMakeGUIのBrowsSourceに`librealsense/wrappers/python`、BrowsBuildに`librealsense/wrappers/python/build`を指定し、
エントリ`BUILD_PYTHON_BINDINGS = True`を追加した後、Generateをクリックしてください。

###プロジェクト群からサンプルプログラムや必要なプログラムをビルドする
Generateが成功したら、`librealsense/buld`フォルダにサンプルプロジェクト群が出来上がっているはずです。その中から、`librealsense2.sln`を開いてください。
![librealsense.png](https://qiita-image-store.s3.amazonaws.com/0/183478/175646fb-c64b-64c8-68d3-59939c15d0c1.png)
①準備完了になっていることを確認します。
②構成をReleaseに設定します。
③`ALL_BUILD`を右クリックして「ビルド」を選択します。
ビルドが成功すると、`librealsense/build/Release`フォルダにサンプルがいろいろ出来上がるので、それらで遊んでみると面白いです。
`librealsense/build/Release`フォルダにある、`realsense2.lib`を`librealsense/wrappers/python/build`にコピーすれば前準備は完了です。

##pyrealsense2.pydをビルドする
`librealsense/wrappers/python/build`フォルダにある、`RealsensePythonWrappers.sln`を開いてください。librealsense.slnの時と同様に、状態が準備完了になっているのを確認してから、構成をReleaseに設定します。
![PythonWrappers.png](https://qiita-image-store.s3.amazonaws.com/0/183478/8ae9568e-0a40-e6f7-9e18-72ba76869ff2.png)
その後、今度はpyrealsense2をビルドします。
ビルドが成功したら、`librealsense/wrappers/python/build/Release`にファイル`pyrealsense2.cp36-win32.pyd`ができているはずです。このファイルと、`librealsense/build/Release`にある`realsense2.dll`をあなたのパソコンの`Python/Python36-32/Lib/site-packages`にコピーしてください。
これにてpyrealsense2のセットアップは終了です。`librealsense/wrappers/python/examples`にあるプログラムを動かせるようになったはずなので各自確かめてみてください。

##まとめというかあとがきというか締めくくりというか
この記事を見てわかる通り、前準備の手順が長くて複雑です。この一か所だけ見れば手順がすべて書いてあるようなサイトは、公式ドキュメントにもなかったので、もう一度別のパソコンでやってみてといわれても、また一ヶ月ちょっと迷走することになりそうなので、メモとして残しておくことにしました。
ちなみに、デバイスの問題なのか、僕のパソコンの問題なのか、D415を接続してもRGBカメラがデバイスマネージャーで検出されずに、深度センサのみ検出されたりすることもよくあります。そういう時は、ノートパソコンの場合はシャットダウンして数分～数時間待ってから再起動すると正常に動作します。多分パソコン内部のパーツの放電を行えばいいという事だと思うので、内部に十分な余白があるデスクトップパソコンは単純な再起動でよさそうですね。
![RGB検出記念.png](https://qiita-image-store.s3.amazonaws.com/0/183478/351fd88f-9b97-621d-99e7-05dee5b820cb.png)
上は初めてRGB検出できた記念のスクショ。今回の迷走の中で一番原因が分かりにくかったです。
追記:パソコンのUSB3.0ポートに刺さないと正常に動作しません。USB3.0のポートは、覗いて見ると絶縁体の部分が青いポートです。接続端子も同じく3.0の物を使ってください。それでもRGBカメラが検出されない場合は上記の方法を試すと良いです。
###以上、ここまで読んでくれてありがとうございました。

##参考
https://github.com/IntelRealSense/librealsense/blob/master/doc/installation_windows.md
https://github.com/IntelRealSense/librealsense/tree/master/wrappers/python