RealSence  D435をPythonで使う【とりあえず表示編】（Windows10）

#はじめに

先日PythonでD435を動かす[ラッパーのビルド方法](https://qiita.com/tom_eng_ltd/items/87ce6e6c82db0d965db0)をアップしたので
実際にD435を動かすスクリプトをアップします

#環境
windows10
python：3.6.6とか3.6.7とか3.6.8
OpenCV：3.4.2
pyrealsense2:2.19.0
numpy：1.15.1

#スクリプト全体
下記のプログラムで深度のカラーマップが表示されます


```python
import pyrealsense2 as rs
import numpy as np
import cv2

# ストリーム(IR/Color/Depth)の設定
config = rs.config()

config.enable_stream(rs.stream.infrared, 1, 640, 480, rs.format.y8, 30)
config.enable_stream(rs.stream.infrared, 2, 640, 480, rs.format.y8, 30)
config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)
config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)

# ストリーミング開始
pipeline = rs.pipeline()
profile = pipeline.start(config)

try:
    while True:
        # フレーム待ち
        frames = pipeline.wait_for_frames()
        #IR１
        ir_frame1 = frames.get_infrared_frame(1)
        ir_image1 = np.asanyarray(ir_frame1.get_data())
        
        #IR2
        ir_frame2 = frames.get_infrared_frame(2)
        ir_image2 = np.asanyarray(ir_frame2.get_data())
        
        #RGB
        RGB_frame = frames.get_infrared_frame()
        RGB_image = np.asanyarray(ir_frame2.get_data())
        
        #Depth
        depth_frame = frames.get_depth_frame()
        depth_image = np.asanyarray(depth_frame.get_data())
        
        #depth imageをカラーマップに変換
        depth_colormap = cv2.applyColorMap(cv2.convertScaleAbs(depth_image, alpha=0.08), cv2.COLORMAP_JET)
                
        # 表示
        cv2.namedWindow('RealSense', cv2.WINDOW_AUTOSIZE)
        cv2.imshow('RealSense', depth_colormap)

        if cv2.waitKey(1) & 0xff == 27:
            cv2.destroyAllWindows()
            break

finally:
    # ストリーミング停止
    pipeline.stop()
```

#解説
中身をざっくり説明します

##ストリーム(IR/Color/Depth)の設定
ここで、IR,RGB,Depthの入力のサイズとかフレームレートとか設定します
IRはステレオで2台積んでいるので下記のように記入するとカメラを指定できます
使わないカメラがある場合、設定しなくても大丈夫です。

DepthはハードウェアがあるわけではないですがIRカメラ＋プロジェクタを使って
カメラ内で距離データが演算されデータが格納されます

設定値についてはマニュアルかrealsense-viewerあたりを動かして
設定できる値を記入してください

RGBとIR(Depth)で設定値が結構違うのでイラっとします（笑


```python

config = rs.config()

config.enable_stream(rs.stream.infrared, 1, 640, 480, rs.format.y8, 30)
config.enable_stream(rs.stream.infrared, 2, 640, 480, rs.format.y8, 30)
config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)
config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
```

##ストリーミング開始
読んで字のままでございます

```python

pipeline = rs.pipeline()
profile = pipeline.start(config)
```
##※ここから先がループ部分です
フレーム待ちは絶対必要ですが、各カメラの出力の配列は必要なのだけ書けばOKです

```python

# フレーム待ち
frames = pipeline.wait_for_frames()

#IR1
ir_frame1 = frames.get_infrared_frame(1)
ir_image1 = np.asanyarray(ir_frame1.get_data())
        
#IR2
ir_frame2 = frames.get_infrared_frame(2)
ir_image2 = np.asanyarray(ir_frame2.get_data())
        
#RGB
RGB_frame = frames.get_infrared_frame()
RGB_image = np.asanyarray(ir_frame2.get_data())
        
#Depth
depth_frame = frames.get_depth_frame()
depth_image = np.asanyarray(depth_frame.get_data())
```

##depth imageをカラーマップに変換
上記のままですとDepthの配列がuint16なので疑似RGB変換をしてコンターっぽくします
この変換だといまいちなのですが、とりあえず表示させるだけなら問題ないので掲載します
※対策版は今後UPするかも・・・


```python

depth_colormap = cv2.applyColorMap(cv2.convertScaleAbs(depth_image, alpha=0.08), cv2.COLORMAP_JET)
```

##表示
何位変哲もないOpenCVなので割愛

```python

cv2.namedWindow('RealSense', cv2.WINDOW_AUTOSIZE)
cv2.imshow('RealSense', depth_colormap)

if cv2.waitKey(1) & 0xff == 27:
    cv2.destroyAllWindows()
    break
```

上記ですとRGBとDepthの画角が合わないのですが
それはまた次回以降に・・・