ひさふぃの日記

DjangoとPythonとLaravelが好き。大阪でフリーランスエンジニアやってます。

dlibのface_recognitionでハマったメモ

dlibの顔検出機能を簡単に使えるようにしたライブラリface_recognitionを試した時に環境構築でハマったので忘れないうちにメモ。

GitHub - ageitgey/face_recognition: The world's simplest facial recognition api for Python and the command line

顔検出でググるopencvのhaarlikecascadeが多量に引っかかりますが、本ライブラリで使えるhog+svmとcnnを用いた方が精度は良いです。hog+svmopencvでも使えるけどface_recognitionは数行で使えて簡単!(環境構築が簡単とは言っていない)

検出率比較や使い方は下記記事を参照してください。

shikouno.hatenablog.com

エラー内容

ImportError: dlopen(/Users/hisafi/.anyenv/envs/pyenv/versions/anaconda3-4.3.0/envs/face_detector/lib/python3.5/site-packages/dlib/dlib.so, 2): Symbol not found: _PyClass_Type
Referenced from: /usr/local/opt/boost-python/lib/libboost_python-mt.dylib
Expected in: flat namespace

からの

File "/Users/hisafi/.anyenv/envs/pyenv/versions/anaconda3-4.3.0/envs/face_reco/lib/python3.5/site-packages/dlib/__init__.py", line 1, in <module>
    from .dlib import *
ImportError: dlopen(/Users/hisafi/.anyenv/envs/pyenv/versions/anaconda3-4.3.0/envs/face_reco/lib/python3.5/site-packages/dlib/dlib.so, 2): Library not loaded: /usr/local/opt/boost-python/lib/libboost_python-mt.dylib
Referenced from: /Users/hisafi/.anyenv/envs/pyenv/versions/anaconda3-4.3.0/envs/face_reco/lib/python3.5/site-packages/dlib/dlib.so
Reason: image not found

対処方法

上段のエラーは、python-boostをインストールする際のpythonバージョンが異なると発生するエラーのようです。

Installation issue on the Mac · Issue #168 · ageitgey/face_recognition · GitHub

homebrew使っていると発生するエラーなのかな。

一旦boost-pythonをアンインストールしてpython3指定でインストールすることで下段のエラーに進化することができます。

brew install boost-python --with-python3 --without-python

下段のエラーは、face_recognitionで使用しているboost-pythonの名称がpython3対応していないためです。

python3指定でインストールしたboost-pythonは3がつくので、シンボリックリンクを貼り付けてあげると解決します。

ln -s libboost_python3-mt.dylib libboost_python-mt.dylib

さいごに

これ

それじゃ!