windows7 64bit環境でのpython, opencvセットアップ等

かなり久しぶりの記事になってしまいました。

windows7 64bitで環境構築にずいぶん手間取ったのでいくつかのポイントをメモしておきます。
目標は、64bit版のpythonopencv(含むpythonバインディング)あたりが普通に使えるようになることです。

pythonのインストール

python自体のインストールは公式サイトから配布されているインストーラを使えばできるはずです。
インストールしたらPYTHON_HOME環境変数python.exeがあるディレクトリを設定し、PATHに%PYTHON_HOME%を追加しておきます。

easy_install(setuptools)のインストール

pyhonのパッケージ管理システムにはeasy_installとpipがありますが、pipを入れるのにeasy_installがあった方がよいのでまずインストールします。これも公式の指示に従えばOKですが、サイトに書いてある通り、64bitの場合はインストーラがないのでez_setup.pyをダウンロードして実行することでインストールします。
easy_installは%PYTHON_HOME%/Scripts以下にインストールされるはずなので、ここにもPATHを通しておきます。

pipのインストール

easy_install pip

でOK

numpy, scipyのインストール

これらが少々面倒です。計算をするならnumpy, scipyは入れておきたいですが、一筋縄ではいかなくなります。
まず、

pip install numpy

とすると、いくつかエラーが出るはずで、その内容は

  • BLAS/ATLASがない
  • Lapackがない
  • vcvarsall.batがない

というものになるはずです。BLAS/ATLAS, Lapackを64bit環境でビルドする必要がありますが、そのためにはfortranコンパイラが必要で、ではMSYSやCygwinで64bitに対応してビルドするにはどうするか…という面倒な問題になります。また、vcvarsall.batはVisualStudio2008(EEでよい)が必要で、2010だけではビルドできません。(参考)
こういった面倒な状況に対応してくれている素晴らしいサイト(gohlke)があります。ここではpython関連の各種パッケージを32bit,64bitそれぞれのwindows向けにビルドしたインストーラを配布してくれています。numpyやscipyもあるので、これを利用するのがおそらく最も確実です。
さらに、ここで配布されているnumpyはIntel MKLでビルドしたもの(そうでないものもありますが、ここのscipyバイナリのインストールにはMKL版numpyが必要)なので、計算速度の観点からも是非これを使うべきと言えます。

matplotlibのインストール

綺麗なグラフを書きたいとなると必要なんですが、これがまた超頻出のハマリパターンがあるようで、しっかりハマると思われます。

pip install matplotlib

とすると、(VS2008がなければ)先ほどと同じ「vcvarsall.batがない」というエラーが起こり、あったとしてもmatplotlib.ft2font関連でエラーが起こると思われます。これについては"matplotlib ft2font"などでググると大量の事例が見つかり、freetype2フォントを別にインストールすることで何とかなったりもするようですが、freetype2フォント自体はwindows向けのバイナリが公開されておらず、自前の64bit環境でビルドする必要があります。
これについても、パッケージ管理システムを使うのはさっさと諦めて(ただしeasy_installを使うとうまくいくかもしれません。その場合もvcvarsall.batは必要)、公式インストーラを使うのが早いと思います。

OpenCVのインストール

ここでpythonから一旦離れて、OpenCVを64bit環境にインストールします。以下の説明は基本的に公式のインストールガイドの通りです。

cmakeのインストール

64bit版のOpenCVは自前でビルドする必要があり、環境に合わせてVisualStudioのプロジェクトファイル(またはMakefile)を生成するためにcmakeを用いる必要があります。というわけで、まずは公式からcmakeのインストーラを落としてきてインストールします(cmake自体は32bit版しかない)。インストーラにcmake.exeの場所へPATHを通すか聞かれるので、通しておくと良いです。

OpenCVのインストール

cmakeをインストールしたら、ビルドするOpenCVのソースをこの辺りから落としてきます。通常は最新版を落とします。OpenCV-2.4.1.exeなどのファイルがそれで、自己解凍形式になっているので適当な場所へ解凍します。
解凍したらcmake guiを起動し、Where is the source code:に解凍してできたディレクトリ(CMakeLists.txtがあるディレクトリ)、Where to build the binaries:にその直下のbuildディレクトリを指定してConfigureを押します。するとgenerator(コンパイル環境)を聞かれるので、VisualStudio10 Win64(VisualStudio2010を使っているなら)を指定します。

VisualStudioがExpress Editionの場合、64bitプロジェクトをビルドするのに若干の設定がいる場合があります。基本的にはVisualStudioとは別にWindows SDK 7.1をインストールすればOKですが、VisualC++の修正とWindows SDKの相性が悪くインストールできない場合があり、その場合はこの記事の内容に従う必要があります。

無事configureが終わるとビルド設定の画面が出てきますが、opencv.jpあたりの記事を参考に、自分の環境に合わせてせっていします。ここで、tbbEigenあたりをインストールしておくとよいと思います。特にtbbは簡単な(C++)テストプログラムを試す際にも要求されることがあるようです。tbbは適当な場所に解凍し、tbb40\bin\intel64\vc10あたり(dllファイルのある場所)、tbb40\include\tbbあたり(ヘッダファイルのある場所)にPATHを通します。また、Eigenはテンプレートライブラリなので、(C++であれば)必要なときにヘッダファイルを読み込むだけで利用できます。解凍したディレクトリにPATHを通します(PATHを通したディレクトリ\Eigen以下に.hなしのヘッダファイルがあります)。
また、cuda込みのビルドは手元ではどうにもうまく行っていません…(こういう感じの問題が起こる)。

ビルドされたライブラリとヘッダファイルのディレクトリにパスを通し、VisualStudioで(例によって)追加ライブラリにopencv_core241.lib, opencv_highgui241.lib, opencv_imgproc21.libあたりを追加して適当なテストプログラムがビルドできればとりあえず完了です。

Pythonバインディングのインストール

cmakeの設定でPython用のビルドを含める設定をしていれば自動的にcv2.pydがビルドされているはずなので、これをpythonから見える場所にコピーすればOK…のはずですが、うまく行かない場合があるようです。その場合は例によってgohlkeからバイナリをダウンロードしてきてインストールするとうまく行くと思います…。


VisualStudioの有償版があれば64bit環境に関する色々なところがだいぶ楽になりますが(それでもハマる)、EEでは色々と罠が多かったです。基本的に、ビルドを伴うパッケージの場合はpipだとハマる可能性が高そうです。