「喰う・書く・逃げる」に棲む処

 動物に関するデータ分析者のブログです

OpenCV-Contribをビルドする(前編:下準備・VTKのビルド)

OpenCV-Contribを使いたいのでOpenCVと一緒にビルドしました。

OpenCVだけでよい場合はSourceForceからexeファイルをダウンロードすれば使えるようになります。

krhb.hatenablog.com

後編はこちら

krhb.hatenablog.com

インストール環境

必要なアプリケーション

https://my.visualstudio.com/Downloads?q=visual%20studio%202017&wt.mc_id=o~msft~vscom~older-downloads

これがないとCMakeでビルドした後にインストールできません。VisualStudio2019だとエラーになります。


https://github.com/git-for-windows/git/releases/download/v2.25.1.windows.1/Git-2.25.1-64-bit.exe

ひたすらNEXTを押すだけで完了です。


  • CMake

https://github.com/Kitware/CMake/releases/download/v3.17.0-rc3/cmake-3.17.0-rc3-win64-x64.msi

インストール時の設定でpathを通しておきましょう


https://repo.anaconda.com/archive/Anaconda3-2020.02-Windows-x86_64.exe

PythonでもビルドしたOpenCVを使いたいなら初めにインストールしてください。インストーラでパスを通して、デフォルトのpythonに設定しておきます。

OpenCVOpenCV-Contribの両方を使いたいなら

pip install opencv-contrib-python

PowerShellかCommand Promptから実行すれば終わりです。

pip install opencv-python

OpenCV単体でよいならこっちです。


  • CUDA 10.2

http://developer.download.nvidia.com/compute/cuda/10.2/Prod/network_installers/cuda_10.2.89_win10_network.exe

OpenCVでCUDAを実装してGPUによる並列処理をする場合に必要です。使いたくないなら入れなくてもよいです。

環境変数pathも通しておきます。

$SystemPath = [System.Environment]::GetEnvironmentVariable("Path","User")
$SystemPath += ";C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\bin
                ;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\libnvvp
                ;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\extras\CUPTI\libx64"
[System.Environment]::SetEnvironmentVariable("Path",$SystemPath,"User")


  • Qt 5.14.1

http://download.qt.io/official_releases/qt/5.14/5.14.1/qt-opensource-windows-x86-5.14.1.exe

OpenCVでQtを使ってGUI機能を拡張する場合に必要です。使いたくないなら入れなくてもよいです。

インストールするときにアカウントを作る必要があります。コンポーネントMSVC 2017 64bitを選択しておけばよいみたいです。心配なら全部入れてもいいと思います。あとから追加でインストールすることも可能みたいです。

環境変数pathも通しておきます。

$SystemPath = [System.Environment]::GetEnvironmentVariable("Path","User")
$SystemPath += ";C:\Qt\Qt5.14.1\5.14.1\msvc2017_64\bin"
[System.Environment]::SetEnvironmentVariable("Path",$SystemPath,"User")

VTK 8.2.0のビルド

まずは以下のジップファイルをダウンロードフォルダ(C:\Users\ユーザー\Downloads)にダウンロードします。

https://www.vtk.org/files/release/8.2/VTK-8.2.0.zip

次に作業フォルダを作成してからその中へ解凍します。

# 作業フォルダの作成
mkdir C:\build
# 作業フォルダに解凍
Expand-Archive -Path C:\Users\kawabata-lab\Downloads\VTK-8.2.0.zip `
               -DestinationPath C:\build

次にCMakeでビルドした後にVisual Studio 2017を使ってインストールします。

# インストールフォルダの作成
mkdir C:\lib\VTK820

# ビルド用のフォルダを作成
mkdir C:\build\VTK-8.2.0\build
cd C:\build\VTK-8.2.0\build

# CMakeでビルド(マシーンデフォルトのPythonが指定される)
cmake ../ -DCMAKE_INSTALL_PREFIX:PATH=C:/lib/VTK820 `
          -DBUILD_SHARED_LIBS=ON `
          -DCMAKE_CONFIGURATION_TYPES:STRING=Relese `
          -DCMAKE_CXX_MP_FLAG=ON `
          -DCMAKE_CXX_MP_NUM_PROCESSORS:STRING=8 `
          -DVTK_Group_Imaging=ON `
          -DVTK_Group_Rendering=ON `
          -DVTK_Group_StandAlone=ON `
          -DVTK_Group_Views=ON `
          -DVTK_WRAP_PYTHON=OFF `
          -G "Visual Studio 15 2017 Win64"

#特定のpythonを指定したい場合(-DPYTHON_EXECUTABLE, -DPYTHON_LIBRARYで指定)
cmake ../ -DCMAKE_INSTALL_PREFIX:PATH=C:/lib/VTK820 `
          -DBUILD_SHARED_LIBS=ON `
          -DCMAKE_CONFIGURATION_TYPES:STRING=Relese `
          -DCMAKE_CXX_MP_FLAG=ON `
          -DCMAKE_CXX_MP_NUM_PROCESSORS:STRING=8 `
          -DVTK_Group_Imaging=ON `
          -DVTK_Group_Rendering=ON `
          -DVTK_Group_StandAlone=ON `
          -DVTK_Group_Views=ON `
          -DVTK_WRAP_PYTHON=ON `
          -DVTK_PYTHON_VERSION:STRING=3 `
          -DVTK_WRAP_PYTHON=ON `
          -DPYTHON_EXECUTABLE:PATH=C:/python/python3.7/python.exe `
          -DPYTHON_LIBRARY:PATH=C:/python/python3.7/python37.lib `
          -G "Visual Studio 15 2017 Win64"

C:\build\VTK-8.2.0\buildの中にVTK.slnが生成されているのでVisual Studio 2017で開きます。

Visual Studio 2017の メニュービルドバッチビルド を選択して、プロジェクトが ALL_BUILDINSTALL の行の チェックボックス にチェックを入れて リビルド をクリックします。

するとC:\lib\VTK820の中にインストールされます。

最後に環境変数pathを通しておきます。

$SystemPath = [System.Environment]::GetEnvironmentVariable("Path","User")
$SystemPath += ";C:\lib\VTK\bin"
[System.Environment]::SetEnvironmentVariable("Path",$SystemPath,"User")

VisualStudioでVTKを使う

VisualStudioで使いたい場合はプロジェクトのプロパティの構成を Release に、プラットフォームを x64 に切り替えてから

プロジェクトのプロパティ → C/C++追加のインクルードディレクトC:\lib\VTK820\include\vtk-8.2

プロジェクトのプロパティ → リンカー追加のライブラリーディレクトC:\lib\VTK820\lib

プロジェクトのプロパティ → リンカー追加の依存ファイルの入力欄を開いて

Get-ChildItem C:\lib\VTK820\lib\*.* -Exclude *Python* -Name | clip

PowerShellで実行してからCtrl+Vで入力する、もしくは、以下をコピペします。 

vtkChartsCore-8.2.lib
vtkCommonColor-8.2.lib
vtkCommonComputationalGeometry-8.2.lib
vtkCommonCore-8.2.lib
vtkCommonDataModel-8.2.lib
vtkCommonExecutionModel-8.2.lib
vtkCommonMath-8.2.lib
vtkCommonMisc-8.2.lib
vtkCommonSystem-8.2.lib
vtkCommonTransforms-8.2.lib
vtkDICOMParser-8.2.lib
vtkDomainsChemistry-8.2.lib
vtkDomainsChemistryOpenGL2-8.2.lib
vtkdoubleconversion-8.2.lib
vtkexodusII-8.2.lib
vtkexpat-8.2.lib
vtkFiltersAMR-8.2.lib
vtkFiltersCore-8.2.lib
vtkFiltersExtraction-8.2.lib
vtkFiltersFlowPaths-8.2.lib
vtkFiltersGeneral-8.2.lib
vtkFiltersGeneric-8.2.lib
vtkFiltersGeometry-8.2.lib
vtkFiltersHybrid-8.2.lib
vtkFiltersHyperTree-8.2.lib
vtkFiltersImaging-8.2.lib
vtkFiltersModeling-8.2.lib
vtkFiltersParallel-8.2.lib
vtkFiltersParallelImaging-8.2.lib
vtkFiltersPoints-8.2.lib
vtkFiltersProgrammable-8.2.lib
vtkFiltersSelection-8.2.lib
vtkFiltersSMP-8.2.lib
vtkFiltersSources-8.2.lib
vtkFiltersStatistics-8.2.lib
vtkFiltersTexture-8.2.lib
vtkFiltersTopology-8.2.lib
vtkFiltersVerdict-8.2.lib
vtkfreetype-8.2.lib
vtkGeovisCore-8.2.lib
vtkgl2ps-8.2.lib
vtkglew-8.2.lib
vtkhdf5-8.2.lib
vtkhdf5_hl-8.2.lib
vtkImagingColor-8.2.lib
vtkImagingCore-8.2.lib
vtkImagingFourier-8.2.lib
vtkImagingGeneral-8.2.lib
vtkImagingHybrid-8.2.lib
vtkImagingMath-8.2.lib
vtkImagingMorphological-8.2.lib
vtkImagingSources-8.2.lib
vtkImagingStatistics-8.2.lib
vtkImagingStencil-8.2.lib
vtkInfovisCore-8.2.lib
vtkInfovisLayout-8.2.lib
vtkInteractionImage-8.2.lib
vtkInteractionStyle-8.2.lib
vtkInteractionWidgets-8.2.lib
vtkIOAMR-8.2.lib
vtkIOAsynchronous-8.2.lib
vtkIOCityGML-8.2.lib
vtkIOCore-8.2.lib
vtkIOEnSight-8.2.lib
vtkIOExodus-8.2.lib
vtkIOExport-8.2.lib
vtkIOExportOpenGL2-8.2.lib
vtkIOExportPDF-8.2.lib
vtkIOGeometry-8.2.lib
vtkIOImage-8.2.lib
vtkIOImport-8.2.lib
vtkIOInfovis-8.2.lib
vtkIOLegacy-8.2.lib
vtkIOLSDyna-8.2.lib
vtkIOMINC-8.2.lib
vtkIOMovie-8.2.lib
vtkIONetCDF-8.2.lib
vtkIOParallel-8.2.lib
vtkIOParallelXML-8.2.lib
vtkIOPLY-8.2.lib
vtkIOSegY-8.2.lib
vtkIOSQL-8.2.lib
vtkIOTecplotTable-8.2.lib
vtkIOVeraOut-8.2.lib
vtkIOVideo-8.2.lib
vtkIOXML-8.2.lib
vtkIOXMLParser-8.2.lib
vtkjpeg-8.2.lib
vtkjsoncpp-8.2.lib
vtklibharu-8.2.lib
vtklibxml2-8.2.lib
vtklz4-8.2.lib
vtklzma-8.2.lib
vtkmetaio-8.2.lib
vtkNetCDF-8.2.lib
vtkogg-8.2.lib
vtkParallelCore-8.2.lib
vtkpng-8.2.lib
vtkproj-8.2.lib
vtkpugixml-8.2.lib
vtkRenderingAnnotation-8.2.lib
vtkRenderingContext2D-8.2.lib
vtkRenderingContextOpenGL2-8.2.lib
vtkRenderingCore-8.2.lib
vtkRenderingFreeType-8.2.lib
vtkRenderingGL2PSOpenGL2-8.2.lib
vtkRenderingImage-8.2.lib
vtkRenderingLabel-8.2.lib
vtkRenderingLOD-8.2.lib
vtkRenderingOpenGL2-8.2.lib
vtkRenderingVolume-8.2.lib
vtkRenderingVolumeOpenGL2-8.2.lib
vtksqlite-8.2.lib
vtksys-8.2.lib
vtktheora-8.2.lib
vtktiff-8.2.lib
vtkverdict-8.2.lib
vtkViewsContext2D-8.2.lib
vtkViewsCore-8.2.lib
vtkViewsGeovis-8.2.lib
vtkViewsInfovis-8.2.lib
vtkWrappingTools-8.2.lib
vtkzlib-8.2.lib

そして

#define vtkRenderingCore_AUTOINIT 2(vtkInteractionStyle,vtkRenderingOpenGL2)

をvtkのインクルードの前につけます。

PythonでVTKを使う

自分の環境では何をやってもpythonでは動きませんでした。 vtkCommonPython.py でエラーがあるみたいで

ImportError: DLL load failed: The specified module could not be found.

が常に返されます。

このあたりの記事を参考にエラー解決を試みました。 参考までに載せときます

www.sejuku.net

stackoverflow.com

web-camp.io

qiita.com


後編に続く

krhb.hatenablog.com

参考

dev.infohub.cc

www.kunihikokaneko.com

dev.infohub.cc