Intel® RealSense™ D400シリーズをOpenBlocks IoT VX2で利用するためのdockerコンテナイメージの使い方と、buildに関するメモ

Intel® RealSense™ D400シリーズは、SDK2.0にてサポートされています。
![realsense01.jpg](https://qiita-image-store.s3.amazonaws.com/0/316451/620ef512-506c-4887-9957-383e8681fe9d.jpeg)
D415およびD435をOpenBlocks IoT VX2シリーズで利用するにあたり、SDKであるlibsenseおよびOpenCV 3.4.3をbuildするとともに、dockerコンテナのイメージとして、dockerhubにてpublic公開しました。

今回は、dockerコンテナイメージをOpenBlocks IoT VX2で利用する方法と合わせて、SDKおよびOpenCV3.4.3のソースコードからのビルドする方法についてのTipsを書いておきます。
## Dockerコンテナイメージの使い方
dockerコンテナイメージは以下の場所で公開しています。

https://hub.docker.com/r/goto2048/obsvx2_realsense_sdk20

OpenBlocks IoT VX2に拡張機能として、docker (WebUI付き)をインストールし、WebUIより検索しダウンロードするか、コンソールから、以下の様にpullしてください。

```
docker pull goto2048/obsvx2_realsense_sdk20
```
上記ページのDescriptionにも記述していますが、初期起動のオプションは、

```
-ti --name realsense --privileged --net=host -v /dev:/dev --restart always
```
となります。

サンプルのアプリケーションを利用するにあたり、Linux版のOpenCVの場合は、X11の環境が必要となりますが、OpenBlocks IoTシリーズには基本ディスプレイはつきませんので、別にXサーバを用意する必要があります。Linuxデスクトップ環境をお持ちであれば、それを、Windows環境の場合は、VcXsrvなどをインストールして下さい。

コンテナへ入るには、以下のコマンドおよびオプションを使います

```
docker exec -ti --privileged realsense /bin/bash
```
XサーバのIPアドレス(もしくはサーバ名)を指定してください。

```
export DISPLAY=xxx.xxx.xxx.xxx:0
```
librealsenseをビルドした時のソースツリーを~/の下へ置きました。
サンプルプログラムは、~/librealsense/build/examples/ の下にあります。

capture/rs-captureを実行してみました
![rs-capture.jpg](https://qiita-image-store.s3.amazonaws.com/0/316451/892f51d2-e258-1738-6a7d-5401bea4290c.jpeg)
なお、本コンテナイメージは3GBを超えており、OpenBlocks IoT VX1シリーズで使用する場合は、eMMCサイズが非常に厳しい状況となります。VX2でのご利用をお勧めします。
## ソースコードからのビルドに関してのTips
上記コンテナを構築するにあたり、OpenCV 3.4.3をOpenBlocks IoT VX2のCPUに対応したビルドおよび、RealSense™ SDK2.0であるlibsenseのビルドを行いました。
すべての手順はここでは書きませんが、構築にともなうTipsについてそれぞれ書いておきます。
### opencv 3.4.3
先にビルドに必要な各種パッケージをインストールします。

```
sudo apt-get install --assume-yes build-essential cmake git
sudo apt-get install --assume-yes pkg-config unzip ffmpeg qtbase5-dev python-dev python3-dev python-numpy python3-numpy
sudo apt-get install --assume-yes libopencv-dev libgtk-3-dev libdc1394-22 libdc1394-22-dev libjpeg-dev libtiff5-dev
sudo apt-get install --assume-yes libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt-get install --assume-yes libv4l-dev libtbb-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev
sudo apt-get install --assume-yes libvorbis-dev libxvidcore-dev v4l-utils vtk6
sudo apt-get install --assume-yes liblapacke-dev libopenblas-dev libgdal-dev checkinstall<br>
libfaac-devは、non-freeですので、/etc/apt/sources.listにnon-freeを追加して、apt-get updateする必要があります。
```
ソースコードは以下より入手します。

```
wget https://github.com/opencv/opencv/archive/3.4.3.tar.gz
```
ビルドの手順は、以下の通り

```
tar xzf 3.4.3.tar.gz
cd opencv-3.4.3
mkdir build
cd build
cmake -G "Unix Makefiles" --build . -D BUILD_CUDA_STUBS=OFF -D BUILD_DOCS=OFF \
-D BUILD_EXAMPLES=OFF -D BUILD_JASPER=OFF -D BUILD_JPEG=OFF -D BUILD_OPENEXR=OFF \
-D BUILD_PACKAGE=ON -D BUILD_PERF_TESTS=OFF -D BUILD_PNG=OFF -D BUILD_SHARED_LIBS=ON \
-D BUILD_TBB=OFF -D BUILD_TESTS=OFF -D BUILD_TIFF=OFF -D BUILD_WITH_DEBUG_INFO=ON \
-D BUILD_ZLIB=OFF -D BUILD_WEBP=OFF -D BUILD_opencv_apps=ON -D BUILD_opencv_calib3d=ON \
-D BUILD_opencv_core=ON -D BUILD_opencv_cudaarithm=OFF -D BUILD_opencv_cudabgsegm=OFF \
-D BUILD_opencv_cudacodec=OFF -D BUILD_opencv_cudafeatures2d=OFF -D BUILD_opencv_cudafilters=OFF \
-D BUILD_opencv_cudaimgproc=OFF -D BUILD_opencv_cudalegacy=OFF -D BUILD_opencv_cudaobjdetect=OFF \
-D BUILD_opencv_cudaoptflow=OFF -D BUILD_opencv_cudastereo=OFF -D BUILD_opencv_cudawarping=OFF \
-D BUILD_opencv_cudev=OFF -D BUILD_opencv_features2d=ON -D BUILD_opencv_flann=ON \
-D BUILD_opencv_highgui=ON -D BUILD_opencv_imgcodecs=ON -D BUILD_opencv_imgproc=ON \
-D BUILD_opencv_java=OFF -D BUILD_opencv_ml=ON -D BUILD_opencv_objdetect=ON \
-D BUILD_opencv_photo=ON -D BUILD_opencv_python2=OFF -D BUILD_opencv_python3=ON \
-D BUILD_opencv_shape=ON -D BUILD_opencv_stitching=ON -D BUILD_opencv_superres=ON \
-D BUILD_opencv_ts=ON -D BUILD_opencv_video=ON -D BUILD_opencv_videoio=ON \
-D BUILD_opencv_videostab=ON -D BUILD_opencv_viz=OFF -D BUILD_opencv_world=OFF \
-D CMAKE_BUILD_TYPE=RELEASE -D WITH_1394=ON -D WITH_CUBLAS=OFF -D WITH_CUDA=OFF \
-D WITH_CUFFT=OFF -D WITH_EIGEN=ON -D WITH_FFMPEG=ON -D WITH_GDAL=OFF -D WITH_GPHOTO2=OFF \
-D WITH_GIGEAPI=ON -D WITH_GSTREAMER=OFF -D WITH_GTK=ON -D WITH_INTELPERC=OFF -D WITH_IPP=ON \
-D WITH_IPP_A=OFF -D WITH_JASPER=ON -D WITH_JPEG=ON -D WITH_LIBV4L=ON -D WITH_OPENCL=ON \
-D WITH_OPENCLAMDBLAS=OFF -D WITH_OPENCLAMDFFT=OFF -D WITH_OPENCL_SVM=OFF -D WITH_OPENEXR=ON \
-D WITH_OPENGL=ON -D WITH_OPENMP=OFF -D WITH_OPENNI=OFF -D WITH_PNG=ON -D WITH_PTHREADS_PF=OFF \
-D WITH_PVAPI=OFF -D WITH_QT=ON -D WITH_TBB=ON -D WITH_TIFF=ON -D WITH_UNICAP=OFF \
-D WITH_V4L=ON -D WITH_VTK=OFF -D WITH_WEBP=ON -D WITH_XIMEA=OFF -D WITH_XINE=OFF \
-D WITH_LAPACKE=ON -D WITH_MATLAB=OFF ..
make -j $(($(nproc) + 1))
sudo make install
sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
```
### librealsense
opencvのビルド後であれば、以下のパッケージを追加する必要がありました。

```
apt-get install libglfw3-dev
apt-get install libusb-1.0-0-dev
```
ソースコードは以下より入手します。

```
git clone https://github.com/IntelRealSense/librealsense.git
```
Tipなどは特にありません。
librealsenseのビルド手順は以下の通りです。

```
cd librealsense
mkdir build
cd build
cmake .. -DBUILD_EXAMPLES=true -DCMAKE_BUILD_TYPE=Release
make -j1
make install
```
続けて、OpenCV用wrapperやpythonモジュールもビルドします。
## 最後に
今回は、主としてdockerhubにpushしたdockerコンテナイメージの使い方について説明しました。
同じアカウントで、Myriad™に対応したIntel® OpenVINO™ Toolkit環境を提供するdockerコンテナイメージも公開しました。次回の記事にてコンテナイメージの使い方などを紹介します。