にせねこメモ

はてなダイアリーがUTF-8じゃないので移ってきました。

Mac OS XでpyFaceTrackerをインストール

pyFaceTrackerを使いたかった。とりあえず、OpenCVバージョン2.4系へ対応してるらしい(2.4.9での動作報告あり。バージョン3系は不明)ので、2.4.12を利用してインストールしてみる。

環境

インストール手順

OpenCV 2.4.12のインストール

まずOpenCVをインストールする。今回はバージョン2.4.12をHomebrewを利用してインストールした。
ターミナルから

brew install homebrew/science/opencv

を実行すると、うまい具合にインストールされ、最後にインストール場所が表示される。

🍺  /usr/local/Cellar/opencv/2.4.12_2: 261 files, 35.6M

これがライブラリのパスである。

pyFaceTrackerのインストール

基本的なインストール手順は配布サイト(https://bitbucket.org/amitibo/pyfacetracker)にある通りである。

まず、次のリンクからソースコードのtarball(pyFaceTracker-0.1.1.tar.gz)をダウンロードしてくる。

ダウンロードはブラウザ等でしても良いし、次のコマンドでも可。

wget https://bitbucket.org/amitibo/pyfacetracker/downloads/pyFaceTracker-0.1.1.tar.gz

ターミナルで pyFaceTracker-0.1.1.tar.gz と同じディレクトリに移動し、解凍し、解凍したディレクトリに移動する。

tar xvzf pyFaceTracker-0.1.1.tar.gz
cd pyFaceTracker-0.1.1

そのディレクトリに setup.py があるので Xcode か何かテキストエディタで編集する。


Mac用に書き換える。
27行〜のこの部分を

OPENCV_BASE = r'D:\amit\opencv'
OPENCV_LIB_DIRS=[OPENCV_BASE + r'\build\x64\vc9\lib']
OPENCV_VERSION = '245'

FACETRACKER_BASE = r'external\FaceTracker'

ライブラリをインストールしたディレクトリやUnix用のディレクトリ区切りに合わせて次のように書き換える。

OPENCV_BASE = r'/usr/local/Cellar/opencv/2.4.12_2'
OPENCV_LIB_DIRS=[OPENCV_BASE + r'/lib']
OPENCV_VERSION = '2.4.12'

FACETRACKER_BASE = r'external/FaceTracker'


また、47行〜の

OPENCV_LIBS=[
    l % OPENCV_VERSION for l in (
        'opencv_core%s',
        'opencv_imgproc%s',
        'opencv_calib3d%s',
        'opencv_video%s',
        'opencv_features2d%s',
        'opencv_ml%s',
        'opencv_highgui%s',
        'opencv_objdetect%s',
        'opencv_contrib%s',
        'opencv_legacy%s'
    )
]

についても、

OPENCV_LIBS=[
    l % OPENCV_VERSION for l in (
        'opencv_core.%s',
        'opencv_imgproc.%s',
        'opencv_calib3d.%s',
        'opencv_video.%s',
        'opencv_features2d.%s',
        'opencv_ml.%s',
        'opencv_highgui.%s',
        'opencv_objdetect.%s',
        'opencv_contrib.%s',
        'opencv_legacy.%s'
    )
]

のように書き換える。
( -l オプションに渡すものはファイル名の頭の lib と拡張子の .dylib は省略して書くらしい。 参考: python - Mac OSX 10.10 cannot find opencv library - Stack Overflow)


また、94行目の

                extra_compile_args=['/EHsc']

コメントアウトする。

                #extra_compile_args=['/EHsc']

以上の変更を行い、ターミナルでsetup.pyと同じディレクトリに入った状態で、

sudo python setup.py install

を実行し、コンパイルとインストールが行われる。

サンプルの実行

PIL(pillow), matplotlib, scipy などが必要なようである。これは入っていなければpipで入れる。

pip install pillow
pip install matplotlib
pip install scipy


さて、サンプルを実行しようとしたところ、numpyが以前に導入したままであったので、pythonOpenCVをインポートしようとするところでエラーが表示された。

>>> import cv2
RuntimeError: module compiled against API version a but this version of numpy is 9

だそうで、numpyのバージョンが古いということである。

バージョンを調べると、

>>> import numpy
>>> numpy.__version__
'1.9.2'
>>> numpy.__path__
['/usr/local/lib/python2.7/site-packages/numpy']

とのこと。

確かnumpyはpipでインストールしたものだったと思うが、アップデートのやりかたがわからなかったので、消して入れ直した。

rm -rf /usr/local/lib/python2.7/site-packages/numpy*
pip install numpy

今度はOK。

>>> import numpy
>>> numpy.__version__
'1.11.0'
>>> import cv2
>>> 


サンプルの examples/face_image.py を動かしてみる。まずはMac向けにスクリプトを修正する。

6行目

import Image

を次に変更。

from PIL import Image

22-24行目、顔モデルの読み込みのパスのディレクトリ区切りをMacに合わせる。

    conns = facetracker.LoadCon(r'..\external\FaceTracker\model\face.con')
    trigs = facetracker.LoadTri(r'..\external\FaceTracker\model\face.tri')
    tracker = facetracker.FaceTracker(r'..\external\FaceTracker\model\face.tracker')

から

    conns = facetracker.LoadCon(r'../external/FaceTracker/model/face.con')
    trigs = facetracker.LoadTri(r'../external/FaceTracker/model/face.tri')
    tracker = facetracker.FaceTracker(r'../external/FaceTracker/model/face.tracker')

へ変更。

顔の入った画像を用意し(ここではホームディレクトリにlenna.pngを用意した)、実行する。

cd examples
python face_image.py ~/lenna.png

結果、ちゃんと動いてるようである。
f:id:nixeneko:20160502111637p:plain