トップページ人工知能,実世界DB顔情報(顔検出,顔識別、表情判定,顔のクラスタリングや類似度や分類,肌色部分の抽出,瞳孔の検出,顔姿勢の推定)Dlib を用いた顔検出(Windows 上)

Dlib を用いた顔検出(Windows 上)

Dlibは,数多くの機能を持つ C++ ライブラリ.機能には,機械学習,数値計算,グラフィカルモデル推論,画像処理,スレッド,通信,GUI,データ圧縮・一貫性,テスト,さまざまなユーティリティなどがある.Python API もある.

Dlib の次の機能を使う

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

【サイト内の関連ページ】

先人に感謝

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

前準備

Python のインストール,pip と setuptools の更新,Python 開発環境

Python の URL: http://www.python.org/

【Python, pip の使い方】

Python, pip は,次のコマンドで起動できる.

Python 開発環境のインストール】

Dlib のインストール

Dlib は c:\dlib にインストールされているとして,以下,説明する.

Python 用 numpy, scikit-image, opencv-python のインストール

Windows の場合

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

Windows での pip の実行では,コマンドプロンプト管理者として実行することにする。

[image]

python -m pip install -U numpy scikit-image opencv-python

学習済みモデルのダウンロード

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

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

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

    Windows での展開(解凍)のためのソフトには,「7-Zip」などがある.

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

    c:\dlib が無いときは作る

    [image]

Dlib による顔検出

Dlib の顔検出 を行う.

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

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

    [image]
  2. Windows のコマンドプロンプトを開く
  3. 実行してみる

    Python プログラムを動かすために, Windows では「python」, Ubuntu では「python3」などのコマンドを使う. あるいは, 開発環境や Python コンソール(Jupyter Qt ConsoleSpyderPyCharmPyScripter など)の利用も便利である.

    cd c:\dlib\python_examples
    python cnn_face_detector.py mmod_human_face_detector.dat ..\examples\faces\2007_007763.jpg
    

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

    [image]

    [image]

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

    • 次のように「RuntimeError: Unable to open mmod_human_face_detector.dat for reading」というエラーメッセージが出たときは、 上の「学習済みモデルのダウンロード」をやり直して、もう一度実行.

      [image]
    • python にパスが通っていないときは、うまくいかない. Windows で,python にパスが通っているかは、次のコマンドで確認
      where python
      
  4. 別の画像で試してみる
    cd c:\dlib\python_examples
    python cnn_face_detector.py mmod_human_face_detector.dat ..\examples\faces\2008_001009.jpg
    

    [image]

    [image]
  5. さらに別の画像で試してみる
    cd c:\dlib\python_examples
    python cnn_face_detector.py mmod_human_face_detector.dat ..\examples\faces\2008_001322.jpg
    

    [image]

    [image]
  6. cnn_face_detector.py をエディタなどで開いて、中身を確認

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

    [image]
  7. Dlib では、顔のサイズは 80 x 80 であるとして、学習済みデータが配布されている。 より小さな顔を検出したいときは、アップサンプルを行う。アップサンプルを行うと、動作は遅くなる。

    cnn_face_detector.py の「dets = cnn_face_detector(img, 1)」の「1」を「2」や「3」に変える。 そして、再び、cnn_face_detector.py を実行する。

    [image]

    上で使用した画像を、縦、横 0.4 倍した画像で試してみる。 まず、「dets = cnn_face_detector(img, 1)」のとき

    [image]

    「dets = cnn_face_detector(img, 2)」のとき

    [image]

    「dets = cnn_face_detector(img, 3)」のとき

    [image]

手持ちの画像ファイルや,パソコンのカメラで顔検出を行う.

Python 用 opencv-python, matplotlib のインストール

※ 「pip install ...」は,Python パッケージをインストールするための操作

python -m pip install -U opencv-python matplotlib  

学習済みモデルのダウンロード

前準備として,学習済みモデルのダウンロードを行う.

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

python -m pip install dlib opencv-python matplotlib
curl -O http://dlib.net/files/mmod_human_face_detector.dat.bz2
 e mmod_human_face_detector.dat.bz2

手持ちの画像ファイルで顔検出を行う.

Python プログラムを動かす.

Python プログラムを動かすために, Windows では「python」, Ubuntu では「python3」などのコマンドを使う.

あるいは, 開発環境や Python コンソール(Jupyter Qt ConsoleSpyderPyCharmPyScripter など)の利用も便利である.

あるいは,オンラインで動くGoogle Colaboratory のノートブックの利用も,場合によっては便利である.

dlib に付属の「face_detector.py」を参考にして、次のプログラムを作成してみた. ファイルを作成するので,cd コマンドで,書き込み権限のあるディレクトリに移動してから実行すること.

import dlib
import cv2
import matplotlib.pyplot as plt
import numpy as np

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

# 「mmod_human_face_detector.bat」のところは、学習済みモデルのファイル名.
face_detector = dlib.cnn_face_detection_model_v1('mmod_human_face_detector.dat')

# 画像ファイル名を a.png のところに設定
img = cv2.imread('a.png')
if img is None:
    print("画像ファイルがない")
    exit()

# 顔検出を行う.
faces = face_detector(img, 1)

# 顔検出で得られた顔(複数あり得る)それぞれについて、四角を書く
for i, f in enumerate(faces):
        box_label(img, f.rect.left(), f.rect.top(), f.rect.right(), f.rect.bottom(), 'face')

# 画面に描画
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))

# ファイルに保存
cv2.imwrite("result.png", img)

[image]

パソコンのカメラで顔検出を行う.

Python プログラムを動かす.

Python プログラムを動かすために, Windows では「python」, Ubuntu では「python3」などのコマンドを使う.

あるいは, 開発環境や Python コンソール(Jupyter Qt ConsoleSpyderPyCharmPyScripter など)の利用も便利である.

あるいは,オンラインで動くGoogle Colaboratory のノートブックの利用も,場合によっては便利である.

dlib に付属の「face_detector.py」を参考にして、次のプログラムを作成してみた. ファイルを作成するので,cd コマンドで,書き込み権限のあるディレクトリに移動してから実行すること.

import dlib
import cv2
import matplotlib.pyplot as plt
import numpy as np

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

# ディープラーニングを使わない.精度は低下し,性能は上がるとされている.
face_detector = dlib.get_frontal_face_detector()

# ビデオカメラ
v = cv2.VideoCapture(0)


while(v.isOpened()):
    r, img = v.read()
    if ( r == False ):
        break
# 顔検出を行う
    faces = face_detector(img, 1)
    for i, f in enumerate(faces):
# 四角を書く
        box_label(img, f.left(), f.top(), f.right(), f.bottom(), 'face')
        print(d)
    cv2.imshow("", img)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        cv2.destroyAllWindows()
        break

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

[image]