トップページ -> データベース研究スタート -> ビデオデータの操作 -> dlib を使い,顔検知などを行ってみる
[サイトマップへ]  

dlib を使い,顔検知などを行ってみる

dlibは,機械学習のアルゴリズムやトールの機能を持つソフトウエア.

dlib の次の機能を使います

先人に感謝

dlib の Web ページ: http://dlib.net/

GitHub の aithyaselv / face-expression-detect の‘Webページ: https://github.com/adithyaselv/face-expression-detect

キーワード:dlib, Python, Windows でインストール,顔検知,顔のランドマーク検知,表情判定


前準備

前準備として,Anaconda 3, Anaconda 3 での Python 2.7 環境,dlib 及び関連パッケージのインストールが終わっていること. 手順を下に説明しています.

Anaconda のインストール

Python 3 の開発環境である Anacondaをおすすめ.Window でのインストール手順は次の通りです(Linuxでも同様の手順です).

  1. https://www.continuum.io/downloads#windowsを開く

  2. Download」をクリックする.

  3. ダウンロードが始まるので確認する.

  4. ダウンロードした .exe ファイルを実行して,Anacondaをインストール.

Anaconda 3 での新しい Python 2.7 環境の作成

Anaconda 3 で新しい Python 2.7環境を作成する

  1. コマンドプロンプトを管理者として実行し,次のコマンドを実行

    ※ 「--name py27」のところに書く名前「py27」は何でもいいですが,あとで思い出しやすい分かりやすい名前がいいです.

    conda create --name py27 python=2.7 anaconda
    

  2. ※ 「Proceed ([y]/n)?」と表示されたら, y + Enter で続行する.「反応が遅いなあ」と思ったら、Enter キーを押してみる.

  3. インストール終了の確認

    エラーメッセージが出ていないことを確認する.

これで、元からインストールされていた Python と,新しく作成した Python バージョン2.7 という、違うバージョンの Python が共存できた。 「py27」は、新しく作成した Python2.7環境の名前である。名前は何でもよいが、変えるとしても分かりやすい名前がよい。


dlib 及び関連パッケージのインストール

次の手順で,Anaconda 3 の Python 2.7 環境に dlib 及び関連パッケージをインストールします.

コマンドプロンプトを管理者として実行そして,次のコマンドを実行.

activate py27
conda install -y scikit-image
conda install -y -c conda-forge dlib
conda install -y opencv 

※ 「Proceed ([y]/n)?」のように表示されたときは y, Enter キー


dlib サンプルプログラムのダウンロードと展開(解凍)

dlib の配布サイト(GitHub の davisking/dlib)で公開されている dlib サンプルプログラムを,ダウンロードし展開(解凍)します。

ここでの作業に使っているディレクトリ:

  1. ダウンロードしたいので,GitHub の davisking/dlib の Web ページを開く.

    https://github.com/davisking/dlib

  2. 「Clone or download」を展開.「Download ZIP」をクリック

  3. davisking/dlib で公開されているプログラム の .zip ファイルがダウンロードされるので確認する.

  4. ダウンロードした .zip ファイルを展開(解凍)し,分かりやすいディレクトリに置く.

    ※ Windows での展開(解凍)のためのソフトは「7-Zip」をおすすめ.

    この .zip ファイルは,D:\dlib-master\dlib-master に展開(解凍)したものとして,説明を続けるので,適切に読み替えてください.


学習済みのモデルデータのダウンロードと展開(解凍)

次の3つの「学習済みのモデルデータ」をダウンロードする

  1. Web ブラウザで次の URL を開く

    http://dlib.net/files

  2. 次の3つのファイルをダウンロードする

  3. ダウンロードした3つのファイルを展開(解凍)する.

    ※ Windows での展開(解凍)のためのソフトは「7-Zip」をおすすめ.

  4. 展開(解凍)してできたファイルを確認する.

  5. このファイルを3つとも,先ほど作成した 「ファイルを展展(解凍)したディレクトリ」の下の「python-example」にコピーする.

dlib サンプルプログラムのいくつかを実行してみる.

ファイルは、 D:\dlib-master\dlib-master(適切に読み替えること)のようなディレクトリに展展(解凍)したはずである.

  1. コマンドプロンプトを開き,「activate py27」を実行
    activate py27
    

    「ファイルを展展(解凍)したディレクトリ」の下の「Python-example」に移動する.

    ※ 例えば次のように.

    D:
    cd D:\dlib-master\dlib-master
    cd python_examples
    

  2. 顔検知 (face detector) のサンプルプログラムを実行してみる

    顔検知が行われ,顔を囲むようなバウンディングボックス (bounding box) が表示される. そして,バウンディングボックスの座標値が数値データとして得られていることが,画面表示で確認できる.

    python face_detector.py ..\examples\faces\2007_007763.jpg
    
  3. 顔のランドマークの検知 (face landmark detector) のサンプルプログラムを実行してみる

    顔ごとに,最大で 68 のランドマーク (68 landmarks) が得られる.

    python face_landmark_detection.py shape_predictor_68_face_landmarks.dat ..\examples\faces\
    

aithyaselv / face-expression-detect

GitHub の aithyaselv / face-expression-detect で公開されているプログラムを試してみます.

参考文献: http://www.paulvangent.com/2016/08/05/emotion-recognition-using-facial-landmarks/

  1. ダウンロードしたいので,GitHub の aithyaselv / face-expression-detect の Web ページを開く.

    https://github.com/adithyaselv/face-expression-detect

  2. 「Clone or download」を展開.「Download ZIP」をクリック

  3. .zip ファイルがダウンロードされるので確認する.

  4. ダウンロードした .zip ファイルを展開(解凍)する.

    ※ Windows での展開(解凍)のためのソフトは「7-Zip」をおすすめ.

  5. 展開してできたファイルをすべて,先ほど作ったディレクトリ(D:\dlib-master\dlib-master のような) のpython_examples移動する.

  6. 表情判定のプログラムを動かしてみる

    テスト用の画像 t1.jpg, t2.jpg, t3.jpg, t4.jpg, t5.jpg の5つについて,プログラムを実行してみる.

    python EmoDetect.py -i t1.jpg
    python EmoDetect.py -i t2.jpg
    python EmoDetect.py -i t3.jpg
    python EmoDetect.py -i t4.jpg
    python EmoDetect.py -i t5.jpg
    

パソコンにつないだカメラで試してみる

dlib に付属の「face_detector.py」を参考にして、次のプログラムを作成してみた

import sys

import dlib
from skimage import io


detector = dlib.get_frontal_face_detector()

import cv2
import numpy as np

v = cv2.VideoCapture(0)
while(v.isOpened()):
	r, f = v.read()
	cv2.imwrite("hoge.png", f)
	img = io.imread("hoge.png")
	dets, scores, idx = detector.run(img, 1, -1)
	for i, d in enumerate(dets):
		cv2.rectangle(f, (d.left(), d.top()), (d.right(), d.bottom()), (0,255,255), 4)
	cv2.imshow("", f)
	if cv2.waitKey(1) & 0xFF == ord('q'):
		break
v.release()
cv2.destroyAllWindows()