OpenCV-Contribをビルドする(前編:下準備・VTKのビルド)
OpenCV-Contribを使いたいのでOpenCVと一緒にビルドしました。
OpenCVだけでよい場合はSourceForceからexeファイルをダウンロードすれば使えるようになります。
後編はこちら
インストール環境
Windows 10 (64 bit)
PowerShell (途中からAnaconda Powershell Prompt) のコマンドを使用
必要なアプリケーション
- Visual Studio Community 2017
https://my.visualstudio.com/Downloads?q=visual%20studio%202017&wt.mc_id=o~msft~vscom~older-downloads
これがないとCMakeでビルドした後にインストールできません。VisualStudio2019だとエラーになります。
- git for windows
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を通しておきましょう
- Anaconda (python)
https://repo.anaconda.com/archive/Anaconda3-2020.02-Windows-x86_64.exe
PythonでもビルドしたOpenCVを使いたいなら初めにインストールしてください。インストーラでパスを通して、デフォルトのpythonに設定しておきます。
OpenCVとOpenCV-Contribの両方を使いたいなら
pip install opencv-contrib-python
をPowerShellかCommand Promptから実行すれば終わりです。
pip install opencv-python
OpenCV単体でよいならこっちです。
- CUDA 10.2
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_BUILD と INSTALL の行の チェックボックス にチェックを入れて リビルド をクリックします。
すると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.
が常に返されます。
このあたりの記事を参考にエラー解決を試みました。 参考までに載せときます
後編に続く