トップページ -> 実践知識 -> 顔検知、顔識別 -> Windows で chen0040/keras-face を使ってみる
[サイトマップへ], [サイト内検索へ],

Windows で chen0040/keras-face を使ってみる

サイト構成 連絡先,業績 実践知識 コンピュータ 教材 サポートページ

前準備

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

Python のインストール

※ Python のプログラム作成には、PyCharmなどが便利である.

以下,Windows に Python, git, cmake をインストール済みであるものとして説明を続ける.

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

Windows での 手順は、 別のページで説明している

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


Windows で chen0040/keras-face を使ってみる

  1. GitHub の chen0400/keras-face の Web ページを開く

    https://github.com/chen0040/keras-face

  2. Clone or download」を展開し, 「Download ZIP」をクリック

  3. .zip ファイルがダウンロードされるので確認する.

  4. ダウンロードした .zip ファイルを展開(解凍)する.分かりやすいディレクトリに置く.

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

    この .zip ファイルは,D:\keras-face-master\keras-face-master に展開(解凍)したものとして,説明を続けるので,適切に読み替えてください.

  5. ファイルの移動

    D:\keras-face-master\keras-face-master\demo にあるファイルを丸ごと、

    D:\keras-face-master\keras-face-master移動

    その結果、次のようになる

  6. data\images の下に、顔写真のファイルがあるので確認する

    Python プログラムを動かしたい. そのために,「Python コンソール」を使う.

    PyCharmか, Anacondaに入っているspyder を使うのが簡単

    Anacondaに入っているspyder で, Python環境 kerasを使いたいときの手順

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

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

    activate keras
    spyder
    

  7. ディレクトリの移動

    cd D:/keras-face-master/keras-face-master
    

  8. デモプログラム DeepFace を実行してみる

    このプログラムは camera_0.jpg が誰なのかを顔識別する。

    GitHub の chen0400/keras-face の Web ページに記載されている次のプログラムを実行

    from keras_face.library.face_net import FaceNet
    
    
    def main():
        model_dir_path = './models'
        image_dir_path = "./data/images"
    
        fnet = FaceNet()
        fnet.load_model(model_dir_path)
    
        database = {}
        database["danielle"] = fnet.img_to_encoding(image_dir_path + "/danielle.png")
        database["younes"] = fnet.img_to_encoding(image_dir_path + "/younes.jpg")
        database["tian"] = fnet.img_to_encoding(image_dir_path + "/tian.jpg")
        database["andrew"] = fnet.img_to_encoding(image_dir_path + "/andrew.jpg")
        database["kian"] = fnet.img_to_encoding(image_dir_path + "/kian.jpg")
        database["dan"] = fnet.img_to_encoding(image_dir_path + "/dan.jpg")
        database["sebastiano"] = fnet.img_to_encoding(image_dir_path + "/sebastiano.jpg")
        database["bertrand"] = fnet.img_to_encoding(image_dir_path + "/bertrand.jpg")
        database["kevin"] = fnet.img_to_encoding(image_dir_path + "/kevin.jpg")
        database["felix"] = fnet.img_to_encoding(image_dir_path + "/felix.jpg")
        database["benoit"] = fnet.img_to_encoding(image_dir_path + "/benoit.jpg")
        database["arnaud"] = fnet.img_to_encoding(image_dir_path + "/arnaud.jpg")
    
        # verifies whether a particular camera image is a person in the image database
        dist, is_valid = fnet.verify(image_dir_path + "/camera_0.jpg", "younes", database)
        print('camera_0.jpg is' + (' ' if is_valid else ' not ') + 'yournes')
        dist, is_valid = fnet.verify(image_dir_path + "/camera_2.jpg", "kian", database)
        print('camera_0.jpg is' + (' ' if is_valid else ' not ') + 'yournes')
        
        # whether a particular camera image is which person in the image database (or not at all)
        dist, identity = fnet.who_is_it(image_dir_path + "/camera_0.jpg", database)
        if identity is None:
            print('camera_0.jpg is not found in database')
        else:
            print('camera_0.jpg is ' + str(identity))
    
    
    if __name__ == '__main__':
        main()
    

    「import cv2;」のエラーメッセージが出たときは、Windows での OpenCV のインストールをやり直す

  9. 実行結果を確認する

    顔識別の結果が表示される

  10. デモプログラム VGG16 + Siamese の学習 を実行してみる

    このプログラムは、VGG16 + Siamese の学習を行うプログラムである。

    ※ 1つ前のプログラムは、DeepFace 法(つまり別もの)

    データのダウンロードと、学習を行うので時間がかかる

    from keras_face.library.siamese import SiameseFaceNet
    
    
    def main():
        fnet = SiameseFaceNet()
        fnet.vgg16_include_top = True # default is False
    
        model_dir_path = './models'
        image_dir_path = "./data/images"
    
        database = dict()
        database["danielle"] = [fnet.img_to_encoding(image_dir_path + "/danielle.png")]
        database["younes"] = [fnet.img_to_encoding(image_dir_path + "/younes.jpg")]
        database["tian"] = [fnet.img_to_encoding(image_dir_path + "/tian.jpg")]
        database["andrew"] = [fnet.img_to_encoding(image_dir_path + "/andrew.jpg")]
        database["kian"] = [fnet.img_to_encoding(image_dir_path + "/kian.jpg")]
        database["dan"] = [fnet.img_to_encoding(image_dir_path + "/dan.jpg")]
        database["sebastiano"] = [fnet.img_to_encoding(image_dir_path + "/sebastiano.jpg")]
        database["bertrand"] = [fnet.img_to_encoding(image_dir_path + "/bertrand.jpg")]
        database["kevin"] = [fnet.img_to_encoding(image_dir_path + "/kevin.jpg")]
        database["felix"] = [fnet.img_to_encoding(image_dir_path + "/felix.jpg")]
        database["benoit"] = [fnet.img_to_encoding(image_dir_path + "/benoit.jpg")]
        database["arnaud"] = [fnet.img_to_encoding(image_dir_path + "/arnaud.jpg")]
    
        fnet.fit(database=database, model_dir_path=model_dir_path)
    
    if __name__ == '__main__':
        main()
    

  11. 実行結果を確認する

    エラーメッセージが出ていないこと

  12. デモプログラム VGG16 + Siamese による顔判定 を実行してみる

    このプログラムは、VGG16 + Siamese の学習の結果を使うもの

    このプログラム camera_0.jpg が誰なのかを顔識別する。

    from keras_face.library.siamese import SiameseFaceNet
    
    
    def main():
        fnet = SiameseFaceNet()
    
        model_dir_path = './models'
        image_dir_path = "./data/images"
        fnet.load_model(model_dir_path)
    
        database = dict()
        database["danielle"] = [fnet.img_to_encoding(image_dir_path + "/danielle.png")]
        database["younes"] = [fnet.img_to_encoding(image_dir_path + "/younes.jpg")]
        database["tian"] = [fnet.img_to_encoding(image_dir_path + "/tian.jpg")]
        database["andrew"] = [fnet.img_to_encoding(image_dir_path + "/andrew.jpg")]
        database["kian"] = [fnet.img_to_encoding(image_dir_path + "/kian.jpg")]
        database["dan"] = [fnet.img_to_encoding(image_dir_path + "/dan.jpg")]
        database["sebastiano"] = [fnet.img_to_encoding(image_dir_path + "/sebastiano.jpg")]
        database["bertrand"] = [fnet.img_to_encoding(image_dir_path + "/bertrand.jpg")]
        database["kevin"] = [fnet.img_to_encoding(image_dir_path + "/kevin.jpg")]
        database["felix"] = [fnet.img_to_encoding(image_dir_path + "/felix.jpg")]
        database["benoit"] = [fnet.img_to_encoding(image_dir_path + "/benoit.jpg")]
        database["arnaud"] = [fnet.img_to_encoding(image_dir_path + "/arnaud.jpg")]
    
        fnet.verify(image_dir_path + "/camera_0.jpg", "younes", database)
        fnet.verify(image_dir_path + "/camera_2.jpg", "kian", database)
        fnet.who_is_it(image_dir_path + "/camera_0.jpg", database)
    
    
    if __name__ == '__main__':
        main()
    

  13. 実行結果を確認する

    顔識別の結果が表示される