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が以前に導入したままであったので、pythonでOpenCVをインポートしようとするところでエラーが表示された。
>>> 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
結果、ちゃんと動いてるようである。