トップページ情報工学を学ぶ人工知能の実行,Python プログラム (Windows 上)Dlib による顔検出を行うPython プログラム(Dlib, Python を使用)(Windows 上)

Dlib による顔検出を行うPython プログラム(Dlib, Python を使用)(Windows 上)

サイト内の関連ページ

先人に感謝

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

前準備

Build Tools for Visual Studio 2022 (ビルドツール for Visual Studio 2022)もしくは Visual Studio 2022 のインストール(Windows 上)

Build Tools for Visual Studio 2022 (ビルドツール for Visual Studio 2022)もしくはVisual Studio 2022 を,前もってインストールしておく.NVIDIA CUDA の nvcc を機能させるため.

Git のインストール

7-Zip のインストール

7-Zip のページ: https://sevenzip.osdn.jp/ からダウンロードしてインストールする.

Python 64 ビット版のインストール,pip と setuptools の更新(Windows 上)

Windows での Python 3.10 のインストール,pip と setuptools の更新: 別ページで説明している.

Python の公式ページ: http://www.python.org/

Dlib のインストール

  1. Windows で,コマンドプロンプト管理者として実行

    Windowspip を実行するときは,コマンドプロンプト管理者として実行し,それを使って pip を実行することにする.

    コマンドプロンプトを管理者として実行: 別ページで説明している.

  2. 次のコマンドを実行する.
    python -m pip install -U dlib
    

Dlib のソースコード等と,Dlib の学習済みモデルのダウンロード

  1. Windows で,コマンドプロンプト管理者として実行

    コマンドプロンプトを管理者として実行: 別ページで説明している.

  2. Dlib のソースコード等のダウンロード

    端末で,次のコマンドを実行する..

    cd C:\
    rmdir /s /q dlib
    git clone https://github.com/davisking/dlib
    
  3. Dlib の学習済みモデルのダウンロード

    端末で,次のコマンドを実行する..

    cd C:\dlib
    cd python_examples
    curl -O http://dlib.net/files/mmod_human_face_detector.dat.bz2
    curl -O http://dlib.net/files/dlib_face_recognition_resnet_model_v1.dat.bz2
    curl -O http://dlib.net/files/shape_predictor_5_face_landmarks.dat.bz2
    curl -O http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2
    "c:\Program Files\7-Zip\7z.exe" x mmod_human_face_detector.dat.bz2
    "c:\Program Files\7-Zip\7z.exe" x dlib_face_recognition_resnet_model_v1.dat.bz2
    "c:\Program Files\7-Zip\7z.exe" x shape_predictor_5_face_landmarks.dat.bz2
    "c:\Program Files\7-Zip\7z.exe" x shape_predictor_68_face_landmarks.dat.bz2
    del mmod_human_face_detector.dat.bz2
    del dlib_face_recognition_resnet_model_v1.dat.bz2
    del shape_predictor_5_face_landmarks.dat.bz2
    del shape_predictor_68_face_landmarks.dat.bz2
    

Dlib による顔検出を行う Python プログラム(手持ちの画像ファイルや,パソコンのカメラで顔検出を行う)

Python の opencv-python のインストール

  1. Windows で,コマンドプロンプト管理者として実行

    コマンドプロンプトを管理者として実行: 別ページで説明している.

  2. opencv-python のインストール

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

    python -m pip install -U opencv-python opencv-contrib-python
    

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

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

  1. 処理したい画像ファイルを準備

    ファイル名は a.png にする. %HOMEPATH%\dlib\python_examples に置く.

    cd C:\dlib\python_examples
    curl -O https://www.kkaneko.jp/sample/face/126.png
    move 126.png a.png
    

    [image]
  2. Python プログラムファイルの作成

    notepad hoge.py
    

    [image]

    ソースコードは次の通り.

    import dlib
    import cv2
    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')
    
    # 画面に描画
    cv2.imshow('',img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    # ファイルに保存
    cv2.imwrite("result.png", img)
    
  3. Python プログラムの実行

    Python プログラムの実行

    Python 開発環境(Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, Spyder, PyCharm, PyScripterなど)も便利である.

    Python のまとめ: 別ページにまとめている.

    python hoge.py
    

    [image]

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

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

  1. Python プログラムファイルの作成

    notepad hoge2.py
    

    [image]

    ソースコードは次の通り.

    import dlib
    import cv2
    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
    
  2. Python プログラムの実行

    Python プログラムの実行

    Python 開発環境(Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, Spyder, PyCharm, PyScripterなど)も便利である.

    Python のまとめ: 別ページにまとめている.

    python hoge2.py
    

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

    [image]