トップページ -> 最新情報技術の実習と研究ツール -> 顔検出、顔識別 -> Dlib で顔検出を行ってみる,カメラともつなぐ
[サイトマップへ]  

Dlib で顔検出を行ってみる,カメラともつなぐ

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

Dlib の次の機能を使います

利用条件などは利用者において確認してください

サイト内の関連Webページ:

先人に感謝

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


前準備

Anaconda のインストール

前準備として,Python 開発環境のAnaconda のインストールが終わっていること.

隔離された Python 環境の作成.spyder, Tensorflow, Keras, Dlib のインストール

Windows での 手順は、 「Windows で,隔離された Python 環境 + Keras + TensorFlow + OpenCV + spyder + Dlib 環境を作る(Anaconda を利用)」の Web ページに記載しています

以下,Windows での Anaconda をインストール済み, 隔離された Python 環境(名前は ai)に、spyder, Tensorflow, Keras, Dlib をインストール済みであるものとして説明を続けます.

Dlib は C:\pytools\dlib にインストールされているとします


学習データの準備

  1. 学習済みデータ mmod_human_face_detector.datのダウンロード

    http://dlib.net/files/ を開き、 mmod_human_face_detector.dat.bz2をダウンロード

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

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

  3. 学習済みデータ mmod_human_face_detector.dat のファイルを C:\pytools\dlib\python_examples に置く

    ※ 「C:\pytools\dlib」は,Dlib をインストールしたディレクトリに読み替えること。

    ※ まだ Dlib のインストールを行っていないときは、 「Windows で,隔離された Python 環境 + Keras + TensorFlow + OpenCV + spyder + Dlib 環境を作る(Anaconda を利用)」の Web ページ の「Dlib のインストール」を見て、Dlib のインストールを行うこと

動かしてみる

  1. まずは、DLib に同封の顔画像ファイルに何があるかを、簡単にみておく

    C:\pytools\dlib\examples\faces の下の顔画像のファイルを確認する

  2. Windows のコマンドプロンプトを開く

  3. Python 環境(名前は ai)を有効にする

    「activate ai 」は Python 環境(名前はai)を有効にするためのコマンド(各自の環境の名前にあわせること

    activate ai
    

    「Could not find conda environment: ai」というメッセージが出たときは、 隔離された Python 環境の作成(名前は ai) を行う.

  4. 実行してみる
    cd C:\pytools\dlib\python_examples
    python cnn_face_detector.py mmod_human_face_detector.dat ..\examples\faces\2007_007763.jpg
    

    結果が表示されるまで少し待つ

    うまく動かないときのヒント

    • 次のように「RuntimeError: Unable to open mmod_human_face_detector.dat for reading」というエラーメッセージが出たときは、 上の前準備をやり直して、もう一度実行

    • python にパスが通っていないときは、うまくいかない. Windows で,python にパスが通っているかは、次のコマンドで確認
      where python
      

      回避策: Anaconda の python のパスの設定については別のWebページに書いています

  5. 別の画像で試してみる
    cd C:\pytools\dlib\python_examples
    python cnn_face_detector.py mmod_human_face_detector.dat ..\examples\faces\2008_001009.jpg 
    

  6. さらに別の画像で試してみる
    cd C:\pytools\dlib\python_examples
    python cnn_face_detector.py mmod_human_face_detector.dat ..\examples\faces\2008_001322.jpg 
    

  7. ./cnn_face_detector.py をエディタなどで開いて、中身を確認

    Dlib には Convolutional Network による顔検出の機能があり、顔検出させるためのプログラムは実質2行. 画面を開く、画像ファイルを読み込む、画像データを表示する、顔部分を四角で描くといったことも簡単なコマンド.


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

Python プログラムを動かしたい. そのために, IPython シェルのコンソールで、Python 環境(名前は ai)を使う

Anacondaに入っている開発環境 spyder を実行し,右下の ipython コンソールを使うのが簡単.

※ Windows のスタートメニューで、 「spyder」の方ではなく、 「spyder(ai)」を開く。 これで、spyder の中で、Python環境aiが有効になる

※「spyder(ai)」がない!というときは、Windowsのコマンドプロントで次を実行して、spyder をインストールする

activate ai
conda install -y spyder

※ Windows のスタートメニューで起動できないときは、Windowsのコマンドプロントで次を実行

activate ai
spyder

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

import sys
import dlib
from skimage import io
import cv2
import numpy as np

def box_label(bgr, x1, y1, x2, y2, label): 
    cv2.rectangle(bgr, (x1, y1), (x2, y2), (255, 0, 0), 1, 1)
    cv2.rectangle(bgr, (int(x1), int(y1-25)), (x2, y1), (255,255,255), -1)
    cv2.putText(bgr, label, (x1, int(y1-5)), cv2.FONT_HERSHEY_COMPLEX, 0.7, (0,0,0), 1)

detector = dlib.get_frontal_face_detector()
v = cv2.VideoCapture(0) 

while(v.isOpened()):
    r, bgr = v.read()
    if ( r == False ):
        break
    cv2.imwrite("hoge.png", bgr)
    img = io.imread("hoge.png")
    dets, scores, idx = detector.run(img, 1, -1)
    for i, d in enumerate(dets):
        box_label(bgr, d.left(), d.top(), d.right(), d.bottom(), 'face')
        print(d)

    cv2.imshow("", bgr)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        cv2.destroyAllWindows()
        break

※ 途中で止めたいとき,右上の「x」をクリックしない.画面の中をクリックしてから,「q」のキーを押して閉じる