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

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

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


前準備

Anaconda のインストール

Windows での Anaconda のインストール手順は、 別の Web ページに記載しています

Ubuntu での Anaconda のインストール手順は、 別の Web ページに記載しています

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

Windows での 手順は、 別の Web ページに記載しています

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


ageitgey/face_recognition のインストール

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

  2. face_recognition のインストール準備

    「activate keras 」は Python 環境(名前はkeras)を有効にするためのコマンド

    activate keras 
    mkdir c:\pytools
    cd c:\pytools
    rmdir /s face_recognition
    

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

  3. 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 を作る

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

    ※ アクセスが拒否されたときは、cd コマンドで、別のディレクトリに移ること

    mkdir known_people
    mkdir unknown_pictures
    

  3. 顔画像の準備

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

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

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

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

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

顔識別を行ってみる

  1. 顔検知を行うために次のコマンドを実行

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

    face_recognition known_people unknown_pictures
    

顔検知を行ってみる

face_detection unknown_pictures

4つの数字は、顔領域の座標値


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

  1. 前準備 コマンドプロンプトを管理者として実行し,次のコマンドを実行
    conda install -y pillow
    

  2. 顔検知の Python プログラム

    Python プログラムを実行しながら結果を結果を確認したい.

    そのために, IPython シェルのコンソールで、Python 環境(名前は keras)を使う

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

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

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

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

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

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

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

    import face_recognition
    import PIL
    image = face_recognition.load_image_file("D:/unknown_pictures/two_people.jpg")
    face_locations = face_recognition.face_locations(image)
    
    for face_location in face_locations:
        top, right, bottom, left = face_location
        face_image = image[top:bottom, left:right]
        pil_image = PIL.Image.fromarray(face_image)
        pil_image.show()
    

  4. 顔のランドマークの Python プログラム
    import face_recognition
    image = face_recognition.load_image_file("D:/unknown_pictures/two_people.jpg")
    face_landmarks_list = face_recognition.face_landmarks(image)
    print(face_landmarks_list)
    

  5. 顔のランドマークの Python プログラムで、最初の顔画像の左目の位置を表示
    import face_recognition
    image = face_recognition.load_image_file("D:/unknown_pictures/two_people.jpg")
    face_landmarks_list = face_recognition.face_landmarks(image)
    print(face_landmarks_list[0]['left_eye'])
    

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

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

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

    import face_recognition
    from PIL import Image, ImageDraw
    image = face_recognition.load_image_file("D:/unknown_pictures/two_people.jpg")
    face_landmarks_list = face_recognition.face_landmarks(image)
    pil_image = Image.fromarray(image)
    d = ImageDraw.Draw(pil_image)
    for face_landmarks in face_landmarks_list:
        for facial_feature in face_landmarks.keys():
            d.line(face_landmarks[facial_feature], width=5)
    pil_image.show()
    

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

    次の2つの顔画像を比べる

    import face_recognition
    picture_of_obama = face_recognition.load_image_file("D:/known_people/obama.jpg")
    obama_face_encoding = face_recognition.face_encodings(picture_of_obama)[0]
    
    biden_picture = face_recognition.load_image_file("D:/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)
    

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

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

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

    今度は True と表示される

    import face_recognition
    picture_of_obama = face_recognition.load_image_file("D:/known_people/obama.jpg")
    obama_face_encoding = face_recognition.face_encodings(picture_of_obama)[0]
    
    another_picture = face_recognition.load_image_file("D:/known_people/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)
    

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