bagファイルから画像ファイルを作成することができるツールであるrs_bag2imageを使えるようにする。
基本的に下の公式サイトに書かれている環境を作成する。
https://github.com/UnaNancyOwen/rs_bag2image
私の環境では既にGCCのバージョンとCMakeのバージョンは適切であるため今回はRealSense2 SDKとOpenCVのインストールを行う。
環境
・Ubuntu 18.04
・pyenv (python3系とpython2系の環境)
手順
- IntelRealsense2SDKのインストール
- OpenCVのインストール
- rs_bag2imageを使う
IntelRealsense2SDKのインストール
以下のサイトの手順に従ってgitからダウンロードしたソースコードをもとに環境構築を行う。
http://www1.meijo-u.ac.jp/~kohara/cms/technicalreport/ubuntu1804_realsense
1.インストールのための準備
$ sudo apt install libssl-dev libusb-1.1.0-dev pkg-config libgtk3-dev pkg-config libglfw3-dev libgl1-mesa-libglu1-mesa-devdev
2.RealSense2 SDKのソースからのビルド
homeディレクトリ直下のgithubというディレクトリ内にソースのダウンロードを行う。
$ cd
$ cd github
$ git clone https://github.com/IntelRealSense/librealsense
$ cd librealsense
$ mkdir build & cd build
$ cmake .. -DBUILD_EXAMPLES=true
$ make
$ sudo make install
$ sudo ldconfig
3.動作確認
realsenseカメラを接続した後、以下のコマンドによりveiwerが立ち上がり、映像が確認できるれば成功
$ realsense-viewer
OpenCVのインストール
githubからダウンロードしたソースコードをもとに環境を構築する。
以下のサイトの手順をもとに行った。
https://qiita.com/tetsu_koba/items/7487fc5fa258f683122b
1.準備
$ sudo apt-get install libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
$ sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev
2.ソースコードのダウンロード
$ git clone https://github.com/Itseez/opencv.git
$ git clone https://github.com/Itseez/opencv_contrib.git
エラーに対する対処
ビルドする際に以下の2つのエラーがはっせいしたため、その解決を行う。
・ModuleNotFoundError: No module named ‘_ctypes’でcmakeが失敗する。
・cmakeを実行した際にpython3の環境へOpenCVがインストールされない。
ModuleNotFoundError: No module named ‘_ctypes’でcmakeが失敗する。
以下のサイトを参考にした。
https://katsuwosashimi.com/archives/371/python-pip-uwsgi-ctypes-not-found/
以下のコマンドでlibffiをインストールした後にpythonを再度インストールすることで解決することができる。
$ sudo apt install libffi-dev
cmakeを実行した際にpython3の環境へOpenCVがインストールされない。
以下のサイトを参考にした。
https://qiita.com/shinsumicco/items/4dd5c6a6cccf246da818
pyenvでPython環境をインストールする際にshared libraryを導入することでOpenCVのビルド時に参照できるようにする。
pyenv install時に以下の環境変数を設定してインストールを行う。
$ CONFIGURE_OPTS="--enable-shared" pyenv install <version_to_install>
CMake時のパス設定
私の環境ではpyenvの環境が以下のようになっているため
$ pyenv versions
system
* 3.6.7 (set by /home/houjou/.pyenv/version)
次のようにCMake時のオプションの設定を行った。
$ cd opencv
$ mkdir build
$ cd build/
$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=/home/houjou/shunsk_ws/workspace/opencv_contrib/modules -D BUILD_opencv_python3=ON -D BUILD_opencv_python2=OFF -D PYTHON3_EXECUTABLE=/home/houjou/.pyenv/versions/3.6.7/bin/python -D PYTHON3_PACKAGES_PATH=/home/houjou/.pyenv/versions/3.6.7/lib/python3.6/site-packages -D PYTHON3_INCLUDE_DIR=/home/houjou/.pyenv/versions/3.6.7/include/python3.6m -D PYTHON3_NUMPY_INCLUDE_DIRS=/home/houjou/.local/lib/python3.6/site-packages/numpy/core/include -D PYTHON3_LIBRARY=/home/houjou/.pyenv/versions/3.6.7/lib/libpython3.6m.so -D WITH_CUBLAS=OFF -D OpenBLAS_FOUND=OFF INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=ON -D OPENCV_ENABLE_NONFREE=ON -D BUILD_EXAMPLES=ON -D ENABLE_PRECOMPILED_HEADERS=OFF -D BUILD_TESTS=OFF ..
これらのオプションを設定することで指定したPython環境にインストールすることができる。
参考にしたサイト通りにパスの設定をコマンドによって記述しても良いが、私はそれでエラーが起きたため絶対パスをそのまま記述した。
CMake後の出力は以下のようになった。
--
-- Python 3:
-- Interpreter: /home/username/.pyenv/versions/3.6.7/bin/python (ver 3.6.7)
-- Libraries: /home/username/.pyenv/versions/3.6.7/lib/libpython3.6m.so (ver 3.6.7)
-- numpy: /home/username/.local/lib/python3.6/site-packages/numpy/core/include (ver 1.18.2)
-- install path: /home/username/.pyenv/versions/3.6.7/lib/python3.6/site-packages/cv2/python-3.6
--
-- Python (for build): /usr/bin/python2.7
--
-- Java:
-- ant: NO
-- JNI: NO
-- Java wrappers: NO
-- Java tests: NO
--
-- Install to: /usr/local
--
3.ビルド&インストール
エラーの対処時にCMakeを実行した後は、buildディレクトリの中で以下の通りに進める。
$ make -j4
$ sudo make install
-jの後の数字はプロセッサのコア数によって変更する。
以下のコマンドでプロセッサのコア数を確認することができる。
$ nproc
OpenCVがインストールされたかどうかは以下のコマンドでバージョンが表示されれば成功です。
$ python -c "import cv2; print(cv2.__version__)"
4.3.0-dev
rs_bag2imageを使う
1.ソースコードのダウンロード
githubからソースコードをダウンロードする。
$ git clone https://github.com/UnaNancyOwen/rs_bag2image.git
2.ビルド
ビルドして実行ファイルを作成する。
$ cd rs_bag2image/rs_bag2image/
$ mkdir build
$ cd build/
$ cmake ..
$ make
make実行時に私の環境では以下のエラーが発生した。
[ 33%] Building CXX object CMakeFiles/rs_bag2image.dir/realsense.cpp.o
/home/usrname/my_workspace/src/rs_bag2image/rs_bag2image/realsense.cpp: In member function ‘void RealSense::updateInfrared()’:
/home/usrname/my_workspace/src/rs_bag2image/rs_bag2image/realsense.cpp:246:14: error: ‘class rs2::frameset’ has no member named ‘foreach’; did you mean ‘foreach_rs’?
frameset.foreach( [this]( const rs2::frame& frame ){
^~~~~~~
foreach_rs
CMakeFiles/rs_bag2image.dir/build.make:62: recipe for target 'CMakeFiles/rs_bag2image.dir/realsense.cpp.o' failed
make[2]: *** [CMakeFiles/rs_bag2image.dir/realsense.cpp.o] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/rs_bag2image.dir/all' failed
make[1]: *** [CMakeFiles/rs_bag2image.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
realsense.cppの中身の以下の一行を
frameset.foreach( [this]( const rs2::frame& frame ){
次の一行に書き換えた。
frameset.foreach_rs( [this]( const rs2::frame& frame ){
その後、再度makeを行うと実行ファイルが作成される。
3.rs_bag2imageを使う
bagファイルがあるディレクトリで以下のコマンドを使う。
$ sudo ./build/rs_bag2image -b="output.bag" -s=true -d=true
私がコマンド実行時には、画像ファイルが作成されなかった。
realsense.cpp内の以下の一行を自分が指定したディレクトリまでの絶対パスで書き換えた。
directory = bag_file.parent_path().generic_string() + "/" + bag_file.stem().string();
directory = "/home/usrname/my_workspace/src/rs_bag2image/rs_bag2image/output";
書き換えたときは
$ rm -rf build
$ mkdir build
$ cd build/
$ cmake..
$ make
を再度行うことで実行ファイルを再び作成できる。
最後に
説明などを端折ってしまっているところが多々あるので、それぞれ参考にしたサイトを確認していただければ分かりやすいと思います。