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

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

サイト構成 連絡先,業績など コンピュータ実習 データの扱い コンピュータ設定 教材(公開) サポートページ

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

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

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


前準備

Python, virtualenv のインストール

git のインストール

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

(GPU を使うときに限り) NVIDIA グラフィックスカード・ドライバのインストール

GPU 版の TensorFlow を使うには, CUDA Compute Capability 3.5 以上に適合するグラフィックスカード、NVIDIA グラフィックスカードのドライバのインストールが必要である.

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

(GPU を使うときに限り) NVIDIA CUDA ツールキット,NVIDIA cuDNN のインストール

GPU 版の TensorFlow を使うときについては,次のページに記載がある.

https://www.tensorflow.org/install/gpu#pip_package

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

  1. 今から作成するPython 環境の名前と、Pythonのバージョンを決めておく

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

  3. virtualenv隔離された Python 環境新規作成し,有効化

    下の例では,Python 環境名をtf1に設定している

    mkvirtualenv tf1
    lsvirtualenv 
    

  4. TenforFlow 1.15 のインストール

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

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

    ※ Windows で,「python」の代わりに,「py」(Windows のPythonランチャー)を使うと,Anaconda 3 内の Python が実行されることはない(Anaconda を使いたくないときは「py」)

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

    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 などに展開(解凍)し,パスを通しておくこと

  5. その他の Python パッケージのインストール

    pip install -U keras opencv-python matplotlib
    


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

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

  2. virtualenv のPython 仮想環境を有効化する(「tf1」のところは、Python仮想環境の名前に変えること)

    workon tf1
    

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

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

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

  4. ファイルの移動

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

    C:\pytools\keras-face移動

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

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

  6. ファイルの編集

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

    Python プログラムを動かす.

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

  7. ディレクトリの移動

    cd C:/pytools
    cd keras-face
    

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

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

    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()
    

  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. 実行結果を確認する

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