トップページ -> データベース関連技術 -> 顔検知、顔識別 -> 顔識別を行う(Keras, chen0040/keras-face を使用)
[サイトマップへ], [サイト内検索へ]

顔識別を行う(Keras, chen0040/keras-face を使用)

次で配布されているソフトウエアを使ってみる

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

これは,顔検証と顔識別のソフトウエア.DeepFace, VGG16 + Siamese を使用.


前準備

Python のインストール

virtualenv, virtualenv-wrapper のインストール

git のインストール

(NVIDIA GPU を使うとき)NVIDIA グラフィックスボード・ドライバ,NVIDIA CUDA ツールキットのインストール

次のページの手順により,インストールを行う

参考Webページ:

(NVIDIA GPU を使うとき)NVIDIA cuDNN のインストール

Windows でのインストール手順の詳細は,別ページで説明している.

インストールの要点:https://developer.nvidia.com/cudnn から cuDNN を入手し,C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1 などに展開(解凍)し,パスを通しておくこと

隔離された Python 仮想環境の新規作成と,TensorFlow 1.15(旧バージョン)のインストール

  1. 今から作成する隔離された Python 仮想環境の名前と、Pythonのバージョンを決めておく
  2. Windows で,コマンドプロンプトを実行.
  3. virtualenv隔離された Python 仮想環境新規作成し,有効化

    下の例では,隔離された Python 仮想環境の名前をtf1に設定している

    mkvirtualenv tf1
    lsvirtualenv 
    

    [image]
  4. TenforFlow 1.15 のインストール

    このとき,virtualenv の隔離された Python 仮想環境を有効化する(「tf1」のところは、Python仮想環境の名前)

    ※ 「py」は,Windows のPythonランチャーAnaconda 3 内の Python などを間違って使ってしまわないように,Pythonランチャーを使って Python を起動している.Ubuntu では「py」でなく「python3」コマンドを使う.

    ※ 「py -m pip install」は,Python パッケージをインストールするための操作. Ubuntu では,「py -m pip install」の代わりに「pip3 install ...」のように操作すること.

    workon tf1
    py -m pip install --upgrade pip
    py -m pip install -U tensorflow==1.15
    

    [image]

    GPU版の TensorFlow を使いたいとき

    ※ TensorFlow 1.15 では CPU 版と GPU版が 1つのパッケージに統合されている.

    GPU 版 TensorFlow 1.15 を使うために,https://developer.nvidia.com/cuda-10.0-download-archiveから CUDA 10.0 を入手し,インストールしておくこと

    そして,https://developer.nvidia.com/cudnn から cuDNN を入手し,C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0 などに展開(解凍)し,パスを通しておくこと

->

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

Windows の場合

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

workon tf1
pip install -U keras matplotlib opencv-python

Ubuntu の場合

workon tf1
pip3 install -U keras matplotlib opencv-python

顔識別を行う(Keras, chen0040/keras-face を使用)

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

    [image]
  2. virtualenv の隔離された Python 仮想環境を有効化する(「tf1」のところは、Python仮想環境の名前に変えること)

    workon tf1
    

    [image]
  3. Face-Aging-CAAE のインストール

    mkdir c:\pytools
    cd c:\pytools
    rmdir /s /q keras-face
    

    [image]

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

    [image]
  4. ファイルの移動

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

    C:\pytools\keras-face移動

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

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

    [image]
  6. ファイルの編集

    エラーの回避のため.keras_face\library\face_net.py を次のように書き換える

    [image]

    Python プログラムを動かす.

    ※ Python プログラムを動かすために, Windows では,「python」コマンドやPythonランチャーである「py」を使う. Ubuntu では「python3」コマンドを使う. あるいは, PyCharmなどにある Python コンソールも便利である.

  7. ディレクトリの移動

    cd C:/pytools
    cd keras-face
    

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

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

    [image]

    GitHub の chen0040/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()
    

    [image]
  9. 実行結果を確認する

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

    [image]
  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()
    

    [image]
  11. 実行結果を確認する

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

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

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

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

    [image]
    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()
    

    [image]
  13. 実行結果を確認する

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

    [image]

本サイトは金子邦彦研究室のWebページです.サイトマップは,サイトマップのページをご覧下さい. 本サイト内の検索は,サイト内検索のページをご利用下さい.

問い合わせ先: 金子邦彦(かねこ くにひこ) [image]