RealsenseをPythonで動かす際に必要なライブラリであるpyrealsense2をインポートするまでの手順を解説します
#使用機器
Realsense D435
MacBook Pro
#環境構築
###ライブラリのインストール
$ brew install libusb pkg-config
$ brew install homebrew/core/glfw3
$ brew install cmake
###Realsenseのレポジトリからクローン
$ git clone https://github.com/IntelRealSense/librealsense.git
$ cd librealsense
###Make
$ mkdir build
$ cd build
$ cmake .. -DBUILD_EXAMPLES=true -DBUILD_WITH_OPENMP=false -DHWM_OVER_XU=false -DBUILD_PYTHON_BINDINGS=true -DPYTHON_EXECUTABLE:FILEPATH=/Users/python3 -G "Unix Makefiles"
$ make -j4
$ sudo make install
cmake -DPYTHON_EXECUTABLE:FILEPATH=/Users/python3の
/Users/python3は
$ which python3
で表示されるパスに変更してください.
make が完了するとbuild/wrappers/python ディレクトリ内に
pyrealsense2.cpython-〇〇m-darwin.so と pybackend2.cpython-〇〇m-darwin.so
というファイルが作成されていると思います.
ただし,cpython-〇〇m-darwin の〇〇は環境によって変わります.
###インポートの対象ディレクトリの確認
pyrealsense2をインポートできるようにするには,先ほど生成した
pyrealsense2.cpython-〇〇m-darwin.so と pybackend2.cpython-〇〇m-darwin.so
をインポート対象のディレクトリ内に追加する必要があります.
###シンボリックリンクの作成
$ cd /usr/local/lib/python3.6/site-packages
$ ln -s ~/librealsense/build/wrappers/python/pyrealsense2.cpython-36m-darwin.so pyrealsense2.so
$ ln -s ~/librealsense/build/wrappers/python/pybackend2.cpython-36m-darwin.so pybackend2.so
cd /usr/local/lib/python3.6/site-packages はインポート対象のディレクトリの一覧で表示されたディレクトリのどれかにしてください
インポート対象のディレクトリの一覧は次の方法で確かめられます.
$ python3
>>> import sys
>>> print(sys.path)
また,ln -s **~/librealsense/... の~/の部分はlibrealsenseのパスが通るように変更して下さい.
ホームディレクトリ直下にlibrealsenseがある場合は~/**のままで構いません.
###インポートの確認
$ python3
>>> import pyrealsense2
>>>
pyrealsense2がエラーなくimportできれば完了です.
##サンプルコード
確認用にpyrealsense2を用いた簡単なコードを記載しておきます.
Realsenseで撮影したRGB画像と深度画像をリアルタイムで表示します.
import numpy as np
import cv2
import pyrealsense2 as rs
# ストリーム(Color/Depth)の設定
config = rs.config()
config.enable_stream(rs.stream.color, 640, 360, rs.format.bgr8, 30)
config.enable_stream(rs.stream.depth, 640, 360, rs.format.z16, 30)
# ストリーミング開始
pipeline = rs.pipeline()
profile = pipeline.start(config)
try:
while True:
# フレーム待ち(Color & Depth)
frames = pipeline.wait_for_frames()
color_frame = frames.get_color_frame()
depth_frame = frames.get_depth_frame()
if not depth_frame or not color_frame:
continue
color_image = np.asanyarray(color_frame.get_data())
# Depth画像
depth_color_frame = rs.colorizer().colorize(depth_frame)
depth_color_image = np.asanyarray(depth_color_frame.get_data())
# 表示
images = np.hstack((color_image, depth_color_image))
cv2.namedWindow('RealSense', cv2.WINDOW_AUTOSIZE)
cv2.imshow('RealSense', images)
if cv2.waitKey(1) & 0xff == 27: # Escキーで終了
break
finally:
# ストリーミング停止
pipeline.stop()
cv2.destroyAllWindows()