前々回の日記で、Bash on Windowsにdlibをインストールする方法を書いたが、Anaconda 4.1(64-bit)でインストールしたPython 3.5にもインストールできたので、その方法を示す。
※2016/9/27追記:この方法でインストールしてもJPEGライブラリが有効にならないためサンプルが実行できない。事前にソース修正が必要となる。こちらの記事を参照。
AnacondaでインストールしたPythonのpipコマンドで、
pip install dlib
と行うと、ソースがダウンロードされてcmakeでビルドが行われる。
cmakeは、MSYS2などでインストールして、PATHを通しておく。
コンパイラは、Python3.5に合わせて、Visual Studio 2015をインストールしておく。
この状態で、pipを使ってビルドすると、Boostがないというエラーがでる。
Could NOT find Boost
Boostインストール
Boostを用意する必要があるが、condaやpipでboostをインストールしてもうまく認識されなかったため、ソースからビルドを行った。
Boostの公式サイトから、Boostのソースをダウンロードする。
自分は最新バージョンの「boost_1_61_0.7z」をダウンロードした。
適当な場所に解凍する。(以下、C:\に解凍したものとして説明する。)
dlibをビルドした時のエラーメッセージにBoostのインストール方法が表示されるので、その通りにコマンドを実行する。
-- Set the BOOST_ROOT and BOOST_LIBRARYDIR environment variables before running cmake. -- E.g. Something like this: -- set BOOST_ROOT=C:\local\boost_1_57_0 -- set BOOST_LIBRARYDIR=C:\local\boost_1_57_0\stage\lib -- -- You will also likely need to compile boost yourself rather than using one of the precompiled -- windows binaries. Do this by going to the folder tools\build\ within boost and running -- bootstrap.bat. Then run the command: -- b2 install -- And then add the output bin folder to your PATH. Usually this is the C:\boost-build-engine\bin -- folder. Finally, go to the boost root and run a command like this: -- b2 -a --with-python address-model=64 toolset=msvc runtime-link=static -- When it completes, set BOOST_LIBRARYDIR equal to wherever b2 put the compiled libraries. -- Note that you will need to set the address-model based on if you want a 32 or 64bit python library. -- -- Next, when you invoke cmake to compile dlib you may have to use cmake's -G option to set the -- 64 vs. 32bit mode of visual studio. Also, if you want a Python3 library you will need to -- add -DPYTHON3=1. You do this with a statement like: -- cmake -G "Visual Studio 12 2013 Win64" -DPYTHON3=1 ..\..\tools\python -- Rather than: -- cmake ..\..\tools\python -- Which will build a 32bit Python2 module by default on most systems.
コマンドプロンプトで、以下の通りコマンドを実行する。
c: cd c:\boost_1_61_0 bootstrap.bat b2 install b2 -a --with-python address-model=64 toolset=msvc runtime-link=static
ビルドには数10分かかる。
ビルド完了後、環境変数を設定する。
set BOOST_ROOT=C:\boost_1_61_0 set BOOST_INCLUDEDIR=C:\boost_1_61_0 set BOOST_LIBRARYDIR=C:\boost_1_61_0\stage\lib
dlibインストール
もう一度、dlibをpipコマンドでインストールしようとすると、以下のエラーが表示される。
C:\Program Files (x86)\Windows Kits\10\Include\10.0.14393.0\shared\basetsd.h(77): error C2371: 'INT32': 再定義されています。異なる基本型です。 [C:\Users\xxx\AppData\Local\Temp\pip-build-b3ed4rlj\dlib\tools\python\build\dlib_build\dlib.vcxproj]
これは、おそらく64bit版のみで表示されるエラーで、32bit版の場合は、そのままpipでインストールできると思われる。
64bit版の場合は、dlibのソースを一部修正する必要がある。
pipコマンドでインストールすると、ソースのダウンロードとビルドが自動で行われるのでソースが修正できない。
そこで、dlibをソースからビルドする。
dlibサイトからソースをダウンロードして解凍する。
wget https://github.com/davisking/dlib/archive/v19.1.zip unzip v19.1.zip
※wgetとunzipはmsys2でインストール
解凍したdlib-19.1ディレクトリ内の、dlib\image_saver\save_jpeg.cppをテキストエディタで開いて、9行目に以下の行を追加する。
#include <basetsd.h>
SDKのbasetsd.hでINT32が再定義されるエラーだが、basetsd.hを先にincludeすることでdlib側では定義しなくなるため、エラーが回避できる。
dlib-19.1ディレクトリで、以下のコマンドを実行し、dlibをビルド/インストールする。
python setup.py install
成功すれば、以下のメッセージが表示され、インストール完了となる。
Installed c:\anaconda3\lib\site-packages\dlib-19.1.0-py3.5-win-amd64.egg Processing dependencies for dlib==19.1.0 Finished processing dependencies for dlib==19.1.0