トップページ -> 最新情報技術の実習と研究ツール -> 顔検出、顔識別 -> 顔識別を行ってみる(Python の ageitgey/face_recognition パッケージを使用)
[サイトマップへ]  

顔識別を行ってみる(Python の ageitgey/face_recognition パッケージを使用)

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

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

参考 Web ページ: https://github.com/ageitgey/face_recognition


前準備

Anaconda, git のインストール

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

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

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

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


ageitgey/face_recognition のインストール

まだインストールしていない場合には、次の手順でインストールする

  1. Windows のコマンドプロンプトを管理者として実行する.

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

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

    activate ai 
    

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

  3. face_recognition のインストール準備
    mkdir c:\pytools
    cd c:\pytools
    rmdir /s /q face_recognition
    

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

  4. face_recognition のインストール

    cd c:\pytools
    git clone https://github.com/ageitgey/face_recognition
    cd face_recognition
    python setup.py build
    python setup.py install 
    

ageitgey/face_recognition で顔識別を行ってみる

ファイルとディレクトリの準備

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

  2. 2つのディレクトリ known_people, unknown_pictures を作る

    コマンドプロンプトで次のコマンドを実行

    mkdir C:\pytools\face_recognition\known_people
    mkdir C:\pytools\face_recognition\unknown_pictures
    

  3. 顔画像の準備

    C:\pytools\face_recognition\examples にある顔画像のファイル 「biden.jpg」と「obama.jpg」を,先ほど作成した ディレクトリ known_people の下にコピー

    copy C:\pytools\face_recognition\examples\biden.jpg C:\pytools\face_recognition\known_people
    copy C:\pytools\face_recognition\examples\obama.jpg C:\pytools\face_recognition\known_people
    

  4. Windows で、ディレクトリ known_people の下に 2つの画像ファイルがあることを確認

  5. C:\pytools\face_recognition\examples にある顔画像のファイル 「two_people.jpg」を,先ほど作成した ディレクトリ unknown_pictures の下にコピー

    copy C:\pytools\face_recognition\examples\two_people.jpg C:\pytools\face_recognition\unknown_pictures
    

  6. Windows で、ディレクトリ unknown_pictures の下に画像ファイルがあることを確認

顔識別、顔検出のコマンド

顔識別を行ってみる

unknown_pictures の下にある画像ファイルを、 known_people 下の画像ファイルを照合して顔識別を行うコマンド

face_recognition known_people unknown_pictures

顔検出を行ってみる

face_detection unknown_pictures

表示される4つの数字は、顔領域の座標値


顔識別、顔検出の Python プログラム

前準備として pillow のインストール

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

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

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

    activate ai
    

    引き続き

    conda install -y pillow
    

  3. 顔検出の Python プログラム

    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
    

    C:/pytools/face_recognition/unknown_pictures」のところは、実際に作成したディレクトリに書き換えて実行すること.ディレクトリの切れ目に「\」でなく「/」を使うのは Python の流儀.

    import face_recognition
    image = face_recognition.load_image_file("C:/pytools/face_recognition/unknown_pictures/two_people.jpg")
    face_locations = face_recognition.face_locations(image)
    print(face_locations)
    

  4. 画像表示(顔の部分の切り出し表示)

    プログラムは、https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture.py  のものを一部変更したものを掲載しています

    C:/pytools/face_recognition/unknown_pictures」のところは、実際に作成したディレクトリに書き換えて実行すること.ディレクトリの切れ目に「\」でなく「/」を使うのは Python の流儀.

    import face_recognition
    import PIL
    import cv2
    
    F = "C:/pytools/face_recognition/unknown_pictures/two_people.jpg"
    
    image = face_recognition.load_image_file(F)
    face_locations = face_recognition.face_locations(image)
    
    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)
    
    bgr = cv2.imread(F)
    for face_location in face_locations:
        top, right, bottom, left = face_location
        box_label(bgr, left, top, right, bottom, 'face')
    
    cv2.imshow('', bgr)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    画像が表示されるので確認. このあと,ウインドウの右上の「x」をクリックしない.画面の中をクリックしてから,何かのキーを押して閉じる

  5. 顔のランドマークの Python プログラム

    chin, left_eyebrow, right_eyebrow, nose_bridge, left_eye, right_eye の情報が表示される

    import face_recognition
    image = face_recognition.load_image_file("C:/pytools/face_recognition/unknown_pictures/two_people.jpg")
    face_landmarks_list = face_recognition.face_landmarks(image)
    for i in face_landmarks_list:
        print(i)
    

  6. 顔のランドマークについてについて画像表示

    プログラムは、https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture.py  のものを一部変更したものを掲載しています

    C:/pytools/face_recognition/unknown_pictures」のところは、実際に作成したディレクトリに書き換えて実行すること.ディレクトリの切れ目に「\」でなく「/」を使うのは Python の流儀.

    import face_recognition
    import PIL
    import cv2
    
    F = "C:/pytools/face_recognition/unknown_pictures/two_people.jpg"
    
    image = face_recognition.load_image_file(F)
    face_landmarks_list = face_recognition.face_landmarks(image)
    
    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)
    
    bgr = cv2.imread(F)
    for i in face_landmarks_list:
        for j in i.keys():
            for k in (i[j]):
                cv2.circle(bgr, (k[0], k[1]), 2, (255, 0, 0), -1)
    
    cv2.imshow('', bgr)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    画像が表示されるので確認. このあと,ウインドウの右上の「x」をクリックしない.画面の中をクリックしてから,何かのキーを押して閉じる

  7. 顔のランドマークの Python プログラムで、左目(lefteye)と左の眉(left_eyrbrow)のを表示
    import face_recognition
    image = face_recognition.load_image_file("C:/pytools/face_recognition/unknown_pictures/two_people.jpg")
    face_landmarks_list = face_recognition.face_landmarks(image)
    for i in face_landmarks_list:
        print(i['left_eye'])
        print(i['left_eyebrow'])
    

  8. 左目(lefteye)と左の眉(left_eyrbrow)のランドマークについて画像表示

    プログラムは、https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture.py  のものを一部変更したものを掲載しています

    C:/pytools/face_recognition/unknown_pictures」のところは、実際に作成したディレクトリに書き換えて実行すること.ディレクトリの切れ目に「\」でなく「/」を使うのは Python の流儀.

    import face_recognition
    import PIL
    import cv2
    
    F = "C:/pytools/face_recognition/unknown_pictures/two_people.jpg"
    
    image = face_recognition.load_image_file(F)
    face_landmarks_list = face_recognition.face_landmarks(image)
    
    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)
    
    bgr = cv2.imread(F)
    for i in face_landmarks_list:
        for j in i['left_eye']:
            cv2.circle(bgr, (j[0], j[1]), 2, (0, 255, 0), -1)
        for j in i['left_eyebrow']:
            cv2.circle(bgr, (j[0], j[1]), 2, (0, 0, 255), -1)
    
    
    cv2.imshow('', bgr)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    画像が表示されるので確認. このあと,ウインドウの右上の「x」をクリックしない.画面の中をクリックしてから,何かのキーを押して閉じる

  9. 2つの顔画像が同一人物かを識別する Python プログラム

    2つの顔画像を比べる

    import face_recognition
    picture_of_obama = face_recognition.load_image_file("C:/pytools/face_recognition/known_people/obama.jpg")
    obama_face_encoding = face_recognition.face_encodings(picture_of_obama)[0]
    
    biden_picture = face_recognition.load_image_file("C:/pytools/face_recognition/known_people/biden.jpg")
    biden_face_encoding = face_recognition.face_encodings(biden_picture)[0]
    
    results = face_recognition.compare_faces([obama_face_encoding], biden_face_encoding)
    print(results)
    

  10. 2つの顔画像が同一人物かを識別する Python プログラム

    https://github.com/ageitgey/face_recognition に掲載の写真から切り取った、次の写真を使ってみる

    上の画像ファイルを、unknown_pictures の下に、 104.png という名前で保存しておく

    今度は True と表示される

    import face_recognition
    picture_of_obama = face_recognition.load_image_file("C:/pytools/face_recognition/known_people/obama.jpg")
    obama_face_encoding = face_recognition.face_encodings(picture_of_obama)[0]
    
    another_picture = face_recognition.load_image_file("C:/pytools/face_recognition/unknown_pictures/104.png")
    another_face_encoding = face_recognition.face_encodings(another_picture)[0]
    
    results = face_recognition.compare_faces([obama_face_encoding], another_face_encoding)
    print(results)
    

  11. 以上の実験後は、ディレクトリを消去しておく
    rmdir /s /q known_people
    rmdir /s /q unknown_pictures