WindowsでのOpenCV, PCL(その他いくつか)環境構築メモ (2017/04版)

# **[2019/04版](https://qiita.com/n_chiba_/items/8d546272035f3123aee8)の記事を公開しています**
https://qiita.com/n_chiba_/items/8d546272035f3123aee8

# **[2018/04版](https://qiita.com/n_chiba_/items/0658e8f3a4b4c094df51)の記事を公開しています**
https://qiita.com/n_chiba_/items/0658e8f3a4b4c094df51

# はじめに

WindowsでのQtとVTK(with Qt)有効な開発環境構築の記録用メモです．CUDAも使えそうなら使う方針で．
主にOpenCV, PCLが使える環境を目指しています．
ライブラリはC:\lib以下に配置することにしました．

今回の環境構築には http://unanancyowen.com/pcl18/ (PCL 1.8.0), http://qiita.com/bodyscrap/items/68b38f58f492bc645da5 (OpenCV3.2+Tensorflow1.0.1) を大いに参考にさせて頂きました．ありがとうございます．

本記事での `> 何かコマンド` は，PowerShell上での操作の意味です．



# システム構成

|  要素 | スペック |
|---:|:---|
| CPU | Intel Xeon E5-2630v4 x2 |
| RAM | 64GB                    |
|  OS | Windows 10 Pro (64bit)  |
| GPU | NVIDIA GeForce GT 730   |

グラボが貧弱なのは予算の都合．
三次元センサとしてEnsensoを使用(予定)．



# 導入するもの
- 今回の構築で導入
    - TensorFlow 1.0.1
    - Keras 2.0.3
    - Boost 1.64.0
    - Eigen 3.3.3
    - VTK 7.1.1
    - FLANN 1.9.1
    - QHull 2015.2 (7.2.0)
    - OpenCV 3.2.0
    - PCL 1.8.0
    - Bullet 2.86
- 事前に導入 (後ろ2つは必要に応じて)
    - VS Community 2015 Update 3 (Visual C++を含める)
    - CMake 3.8.0
    - Git for Windows 2.12.2.2
    - Mercurial (tortoisehg-4.1.2)
    - Anaconda **3-4.2.0** (Python 3.5.2)
    - Cuda Tool Kit 8.0.61
    - cuDNN v6.0
    - Qt 5.8
    - HDF5 1.8.18
    - Microsoft MPI 7.0.12437.6
    - Microsoft MPI SDK 7.0.12437.6
    - OpenNI 2.2.0.33 Beta
    - (MATLAB 2016b)
    - (Ensenso SDK 2.0.101)



# 実際の手順

## 前準備
事前に導入するものをそれぞれダウンロードしてインストールしておく



## TensorFlow 1.0.1, Keras 2.0.3
(参考: http://qiita.com/bodyscrap/items/68b38f58f492bc645da5)

管理者権限で `> pip install tensorflow-gpu keras`



## bzip2 1.0.6 (ソースだけ)

1. C:\lib\bzip2を作成
1. http://www.bzip.org/downloads.html からソースをダウンロードしてC:\lib\bzip2\srcに解凍



## zlib 1.2.11 (ソースだけ)

1. C:\lib\zlibを作成
1. http://zlib.net/ からソースをダウンロードしてC:\lib\zlib\srcに解凍




## Boost 1.64.0
(参考: https://gist.github.com/UnaNancyOwen/d879a41710e9c05025f8)

1. C:\lib\boost\を作成
1. http://www.boost.org/users/download/ からソースをダウンロード，C:\lib\boost\srcに解凍
1. C:\lib\boost\srcに移動
1. https://github.com/boostorg/mpi/pull/39 を参考に次のファイルを書き換え
   - include/boost/mpi/detail/mpi_datatype_primitive.hpp
   - include/boost/mpi/detail/packed_iprimitive.hpp
   - include/boost/mpi/detail/packed_oprimitive.hpp
1. `> bootstrap.bat`
1. project-config.jamに以下を追記
  
    ```
    using mpi ;
    ```

1. `> ./b2.exe toolset=msvc-14.0 address-model=64 --build-dir="C:\lib\boost\build" -s BZIP2_SOURCE="C:\lib\bzip2\src" -s ZLIB_SOURCE="C:\lib\zlib\src" -j38`
(-jで並列数指定，コア数より少なく設定する)
1. `> ./b2.exe toolset=msvc-14.0 address-model=64 --build-dir="C:\lib\boost\build" install --prefix="C:\lib\boost\install"`
1. project-config.jamの

    ```
    using mpi ;
    ```

    を削除し以下を追記

    ```
    using python : 3.5 : "C:\\Program Files\\Anaconda3" : "C:\\Program Files\\Anaconda3\\include" : "C:\\Program Files\\Anaconda3\\libs" : ;
    ```

1. `> ./b2.exe toolset=msvc-14.0 address-model=64 --build-dir="C:\lib\boost\build" -j38`
1. `> ./b2.exe toolset=msvc-14.0 address-model=64 --build-dir="C:\lib\boost\build" install --prefix="C:\lib\boost\install"`
1. 環境変数 %BOOST_ROOT% を C:\lib\boost\install に設定



## Eigen 3.3.3
(参考: https://gist.github.com/UnaNancyOwen/08e5a9b8f5979ed0077c)

1. C:\lib\eigen\を作成し移動
1. `> hg clone https://bitbucket.org/eigen/eigen/ src`
1. CMake
    - src: C:\lib\eigen\src
    - build: C:\lib\eigen\build
1. Configure (変更点のみ．各自の環境に合わせて確認する)
    - CMAKE_INSTALL_PREFIX: C:/lib/eigen/install/
1. Generate & Open Project
1. DebugでALL_BUILD, INSTALLを順にビルド
1. ReleaseでALL_BUILD, INSTALLを順にビルド
1. 環境変数 %EIGEN_ROOT% を C:\lib\eigen\install に設定



## VTK 7.1.1
(参考: https://gist.github.com/UnaNancyOwen/9d16060714ba9b28f90e)

1. C:\lib\vtk\を作成し移動
1. `> git clone https://github.com/Kitware/VTK.git src`
1. `> cd src`
1. `> git checkout v7.1.1`
1. build\GUISupport\Qt\PluginInstall.cmake の5行目を

    ```
    IF(BUILD_TYPE MATCHES Debug)
      SET(VTK_INSTALL_QT_PLUGIN_FILE "QVTKWidgetPlugin-gd.dll")
    ELSE()
      SET(VTK_INSTALL_QT_PLUGIN_FILE "QVTKWidgetPlugin.dll")
    ENDIF()
    ```

   に書き換え．
   (参考: https://gist.github.com/UnaNancyOwen/77d61f9f21376c9b59fc#build)
1. CMake
    - src: C:\lib\vtk\src
    - build: C:\lib\vtk\build
1. Configure (変更点のみ．各自の環境に合わせて確認する)
    - CMAKE_DEBUG_POSTFIX: \_d
    - BUILD_TESTING: no
    - CMAKE_CXX_MP_FLAG: yes
    - CMAKE_INSTALL_PREFIX: C:/lib/vtk/install
    - VTK_RENDERING_BACKEND: OpenGL
    - VTK_PYTHON_VERSION: 3
    - VTK_GROUP_Qt: yes
    - VTK_WRAP_PYTHON: yes
    - VTK_QT_VERSION: 5
    - QT_QMAKE_EXECUTABLE: C:/Qt/5.8/msvc2015_64/bin/qmake.exe
    - Qt5_\*: C:/Qt/5.8/msvc2015_64/lib/cmake/*
1. Generate & Open Project
1. DebugでALL_BUILD, INSTALLを順にビルド
1. ReleaseでALL_BUILD, INSTALLを順にビルド
1. 環境変数 %VTK_DIR% を C:\lib\vtk\install に設定
1. Pathに C:\lib\vtk\install\bin を追加



## FLANN 1.9.1
(参考: https://gist.github.com/UnaNancyOwen/1e3fced09e4430ad0b7b/revisions)

1. C:\lib\flann\ を作成し移動
1. `> git clone git://github.com/mariusmuja/flann.git src`
1. `> cd src`
1. `> git checkout 1.9.1`
1. CMake
    src: C:\lib\flann\src
    build: C:\lib\flann\build
1. Configure (変更点のみ．各自の環境に合わせて確認する)
    - CMAKE_DEBUG_POSTFIX: \_d
    - CMAKE_INSTALL_PREFIX: C:/lib/flann/install
    - BUILD_MATLAB_BINDINGS: no
    - BUILD_PYTHON_BINDINGS: no
    - BUILD_EXAMPLES: no
1. Generate & Open Project
1. DebugでALL_BUILD, INSTALLを順にビルド
1. ReleaseでALL_BUILD, INSTALLを順にビルド
1. 環境変数 %FLANN_ROOT% を C:\lib\flann\install に設定
1. Pathに C:\lib\flann\install を追加



## QHull 2015.2 (7.2.0)
(参考: https://gist.github.com/UnaNancyOwen/ffbe6b05ee0101620d3c)

1. C:\lib\qfull\ を作成し移動
1. `> git clone https://github.com/qhull/qhull.git src`
1. `> cd src`
1. `> git checkout 5a79a0009454c86e9848646b3c296009125231bf` (2015.2 (7.2.0)), tagなどがないのでHash値で指定
1. CMake
    - src: C:\lib\qfull\src
    - build: C:\lib\qfull\build
1. Configure (変更点のみ．各自の環境に合わせて確認する)
   - CMAKE_DEBUG_POSTFIX: \_d
   - CMAKE_INSTALL_PREFIX: C:/lib/qfull/install
1. Generate & Open Project
1. DebugでALL_BUILD, INSTALLを順にビルド
1. ReleaseでALL_BUILD, INSTALLを順にビルド
1. 環境変数%QHULL_ROOT%: C:\lib\qfull\install
1. PathにC:\lib\qhull\install\binを追加



## OpenCV 3.2.0
(参考: http://qiita.com/bodyscrap/items/68b38f58f492bc645da5)
(参考: http://qiita.com/emakryo/items/5e2c79c2a18e60dd212f)

1. C:\lib\opencv\ を作成し移動
1. `> git clone https://github.com/Itseez/opencv.git src`
1. `> cd src`
1. `> git checkout 3.2.0`
1. `> cd ..`
1. `> git clone https://github.com/Itseez/opencv_contrib.git src_contrib`
1. `> git checkout 3.2.0`
1. opencv\src_contrib\modules\cvv\src\stfl\stringutils.cpp の77行目-79行目のウムラウト文字を適当に置き換え or コメントアウト (参考: http://qiita.com/fukushima1981/items/fae7d40123bfdf426624)
1. CMake
    - src: C:\lib\opencv\src
    - build: C:\lib\opencv\build
1. Configure (変更点のみ．各自の環境に合わせて確認する)
   - CMAKE_DEBUG_POSTFIX: \_d
   -  CMAKE_INSTALL_PREFIX: C:/lib/opencv/install
   -  CUDA_ARCH_BIN: 3.5
   -  BUILD_PERF_TESTS no
   -  TBB_ENV_INCLUDE: C:\lib\tbb\install\include
   -  TBB_ENV_LIB: C:\lib\tbb\install\lib\intel64\vc14\tbb.lib
   -  TBB_ENV_LIB_DEBUG: C:\lib\tbb\install\lib\intel64\vc14\tbb_debug.lib
   -  TBB_VER_FILE: C:\lib\tbb\install\include\tbb\tbb_stddef.h
   -  WITH_CUDA yes
   -  WITH_EIGEN yes
   -  WITH_TBB yes
   -  WITH_QT yes
   -  WITH_OPENNI2 yes
   -  OPENCV_EXTRAMODELUES_PATH: C:\lib\opencv\src_contrib\modules
   -  Qt5*\_DIR: C:/Qt/5.8/msvc2015_64/lib/cmake/*
   -  EIGEN_INCLUDE_PATH: C:/lib/eigen/install/include/eigen3
1. Generate & Open Project
1. DebugでALL_BUILD, INSTALLを順にビルド
1. ReleaseでALL_BUILD, INSTALLを順にビルド (必要なら管理者権限でVisual Studioを起動)
1. 環境変数 %OPENCV_DIR% を C:\lib\opencv\install に設定
1. Pathに C:\lib\opencv\install\bin と C:\lib\opencv\install\x64\vc14\bin を追加



## PCL 1.8.0

1. C:\lib\pcl\を作成し移動
1. `> git clone https://github.com/PointCloudLibrary/pcl.git src`
1. `> cd src`
1. `> git checkout pcl-1.8.1`
%1. C:\lib\pcl\src\surface\include\pcl\surface\impl\bilateral_upsampling.hpp 119行目を以下に変更(以前のバージョンでの記述)
%    
%    ```
%    float val_exp_rgb = expf (- d_color * d_color / (2.0f * sigma_color_ * sigma_color_));
%    ````
%    
%1. io/src/ensenso_grabber.cppの464行目と509行目の `uint` を `unsigned int` に変更
%1. visualization/src/pcl_visualizer.cppに対して %https://github.com/PointCloudLibrary/pcl/commit/8710ee9b6c3ef236a84450ab9fd1f8f167c87a56 を適用
%1. registration\include\pcl\registration\impl\ndt_2d.hppの361行目に以下を追加 (参考: http://www.pcl-users.org/Compiling-PCL-1-8-with-visual-studio-2013-td4043387.html)
%
%    ```
%    typedef double Literal;
%    ```
%
%1. gpu\people\src\cuda\nvidia\NPP_staging.cu 2073行目を以下に変更
%(参考: https://github.com/PointCloudLibrary/pcl/issues/1674)
%
%    ```
%    #if ((defined __CUDA_ARCH__) && (__CUDA_ARCH__ < 200))
%    ```
%
%1. PCLConfig.cmake.inの89行目を以下に変更
%(参考: https://github.com/PointCloudLibrary/pcl/pull/1856)
%
%    ```
%    "@Boost_MAJOR_VERSION@.@Boost_MINOR_VERSION@.@Boost_SUBMINOR_VERSION@" %"@Boost_MAJOR_VERSION@.@Boost_MINOR_VERSION@"
%    "1.64.0" "1.64" "1.63.0" "1.63" "1.62.0" "1.62" "1.61.0" "1.61" "1.60.0" "1.60"
%    "1.59.0" "1.59" "1.58.0" "1.58" "1.57.0" "1.57" "1.56.0" "1.56" "1.55.0" "1.55"
%    "1.54.0" "1.54" "1.53.0" "1.53" "1.52.0" "1.52" "1.51.0" "1.51"
%    "1.50.0" "1.50" "1.49.0" "1.49" "1.48.0" "1.48" "1.47.0" "1.47")
%    ```
%
1. CMake
    - src: C:\lib\pcl\src
    - build: C:\lib\pcl\build
1. Configure (変更点のみ．各自の環境に合わせて確認する)
    - CMAKE_DEBUG_POSTFIX: \_d
    - CMAKE_INSTALL_PREFIX: C:/lib/pcl/install
    - WITH_ENSENSO: yes
    - WITH_QT: yes
    - Qt5*\_DIR: C:/Qt/5.8/msvc2015_64/lib/cmake/*
    - BUILD_CUDA: yes
    - BUILD_GPU: yes
    - BUILD_apps: yes
    - BUILD_examples: yes
    - BUILD_cuda_apps: yes
    - BUILD_cuda_io: yes
    - BUILD_gpu_kinfu: yes
    - BUILD_gpu_kinfu_large_scale: yes
    - BUILD_gpu_people: yes
    - BUILD_gpu_surface: yes
    - BUILD_gpu_tracking: yes
    - BUILD_apps_modeler: yes
    - BUILD_apps_point_cloud_editor: yes
    - BUILD_apps_cloud_composer: no
    - BUILD_apps_3d_rec_framework: no
    - BUILD_apps_in_hand_scanner: no
    - BUILD_apps_optronic_viewer: no
    - CUDA_ARCH_BIN: 3.5
1. Generate & Open Project
1. DebugでALL_BUILD, INSTALLを順にビルド
1. ReleaseでALL_BUILD, INSTALLを順にビルド
1. 環境変数 %PCL_ROOT% を C:\lib\pcl\install に設定
1. Pathに C:\lib\pcl\install\bin を追加



## Bullet 2.86

1. C:\lib\bullet\を作成し移動
1. `> git clone https://github.com/bulletphysics/bullet3.git src`
1. `> cd src`
1. `> git checkout 2.86.1`
1. CMake
    - src: C:\lib\bullet\src
    - build: C:\lib\bullet\build
1. Configure
    - CMAKE_INSTALL_PREFIX: C:/lib/bullet/install
    - INSTALL_LIBS: yes
    - INSTALL_EXTRA_LIBS: yes
    - USE_MSVC_RUNTIME_LIBRARY_DLL: yes
1. Generate & Open Project
1. DebugでALL_BUILD, INSTALLを順にビルド
1. ReleaseでALL_BUILD, INSTALLを順にビルド
1. 環境変数 %BULLET_ROOT% を C:\lib\bullet\install に設定