Dlibの高性能な顔器官検出をMacでさくっと試す

  • 103
    Like
  • 0
    Comment
More than 1 year has passed since last update.

Dlib http://dlib.net/

Dlib is a modern C++ toolkit containing machine learning algorithms and tools for creating complex software in C++ to solve real world problems.

Real-Time Face Pose Estimation (YouTube)
Real-Time Face Pose Estimation

このDlibは、画像処理、機械学習系のすごーーーいライブラリなんですが、OpenCVなんかに比べて日本語の情報が少ないです。
OpenCVよりも顔検出精度が良かったり、OpenCVにはない顔器官検出など備えてます。PythonのAPIもあって簡単に使える感じですね。
githubはこちら https://github.com/davisking/dlib

この記事について

今回、ウェブカメラで撮影した画像からリアルタイムで顔器官検出する、Dlibに付属のサンプルコードをMacで試してみました。
下の写真のように顔の中から68点の特徴点(口角とか鼻のあたまとか)を自動抽出します。
機械学習で、顔の特徴点を自動判定するんですね。ライブラリを使えば最先端の顔器官検出を簡単に使える時代なんですねー。すごいですね。

Dlib: face_landmark_detection
スクリーンショット 2016-02-05 00.48.47.png
写真素材: http://www.ashinari.com/

インストールから実行までの手順

所要時間は30分です。参りましょうー

わたしの環境

普通のマックです。

  • Mac OSX El Capitan 10.11.3
  • python2.7

Dlib のバージョンは 18.18 ( 2016/2/4 時点で最新 ) を利用しました。

必要なソフトウェア

このへんが入ってなければ入れてくださいませ。

  • homebrew
  • command line tools in Xcode
  • boost
  • boost-python
  • cmake
  • opencv (ウェブカメラを使うサンプルを動かすために必要デス)

boost、boost-python、cmake、opencvは入ってなかったらbrewでさくっとインストールしてーー。

boost

$ brew install boost

boost-python

$ brew install boost-python

cmake

$ brew install cmake

opencvはこんな感じでインストールします。

$ brew tap homebrew/science
$ brew install opencv

X11のインストール

GUIのサンプルを実行するのに必要です。
XQuartz http://www.xquartz.org/ から.dmgをダウンロードしてインストールしてください。インストールしたら Xlib.hが見えるように下記のようにシンボリックリンクを張るーー

$ ln -s /opt/X11/include/X11 /usr/local/include/X11

Dlibのインストール

Dlib本体のインストールです。ダウンロードして解凍して

$ wget http://dlib.net/files/dlib-18.18.tar.bz2
$ tar zxvf dlib-18.18.tar.bz2

セットアップスクリプトを実行してくださいー

$ cd dlib-18.18
$ sudo python setup.py install

これでDlibはインストールは完了です。

サンプルプログラムのビルド

C++のサンプルプログラムをビルドします。buildというディレクトリを作ってそこに実行ファイルを置くことにします。

$ cd dlib-18.18/examples
$ mkdir build
$ cd build
$ cmake .. 
$ cmake --build . --config Release

cmake --buildでDLIB_NO_GUI_SUPPORTエラーになる場合の対処について

自分の環境では、”DLIB_NO_GUI_SUPPORTがオンになってるぞ”という旨のエラーになってbuildが通らなかった。謎い。
とりあえず下記のように CMakeCache.txt を直接編集して解決しました。

CmakeCache.txt
#(修正前)
# DLIB_NO_GUI_SUPPORT:STRING=ON   # GUIサポートを使わない

#(修正後)
DLIB_NO_GUI_SUPPORT:STRING=OFF # GUIサポートを使う

http://stackoverflow.com/questions/31898245/trouble-installing-dlib-for-python-on-mac-osx-10-10

顔器官検出用の学習済みデータの準備

顔器官検出のために学習データが必要です。
下記のように顔器官の学習済みデータをダウンロードして解凍してサンプルプログラムと同じ場所に置いてくださいー

$ wget http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2 
$ bzip2 -d shape_predictor_68_face_landmarks.dat.bz2
$ mv shape_predictor_68_face_landmarks.dat ~/dlib-18.18/examples/build/

サンプルプログラムの実行

example/build/にあるwebcam_face_pose_ex が実行ファイルです。

$ ./webcam_face_pose_ex

MacのFacetimeカメラが起動して、リアルタイムに顔器官が検出されるはずです。あなたのお顔でぜひお試しくださいー

個別の画像データの入力

おなじ example/build/ にある face_landmark_detection_ex を使えばウェブカメラ経由でなく、個別の写真データを読み込ませて顔器官検出することができます。

$ ./face_landmark_detection_ex ./shape_predictor_68_face_landmarks.dat ~/myphoto/*.jpg

検出例

少し斜めからでもしっかり検出してますね。
スクリーンショット 2016-02-05 00.58.13.png

ドーナツで隠れてるところまで検出できてるんですが。
スクリーンショット 2016-02-05 00.58.05.png

複数人でもいけます。女性の方は少しずれちゃってますね。
スクリーンショット 2016-02-05 00.58.22.png

写真素材: http://www.ashinari.com/

感想

Dlibを使って顔器官を検出するサンプルプログラムを動かしました。
画像処理といえばOpenCVが主流ですが、このDlibも高性能ですし、もっと使われていいと思いますねー。
いろいろと応用できそうですねーーー