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

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

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

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

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


前準備

Python, 主要パッケージ, Tensorflow, Keras, Dlib, git のインストール

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

Dlib は C:\pytools\dlib にインストールされているとします


shaoanlu/face-segmentation-keras のダウンロード

  1. GitHub の shaoanlu/face-segmentation-keras の Web ページを開き、説明を確認する

    https://github.com/shaoanlu/face-segmentation-keras

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

  3. (オプション)もし、virtualenv のPython 仮想環境にインストールしていて、そこにインストールしたいとき、それを有効化する

    ※ virtualenv のPython 仮想環境を有効化したいときに限る(「ai」のところは、Python仮想環境の名前に変えること)

    workon ai
    

  4. インストール
    mkdir C:\pytools
    cd C:\pytools
    rmdir /s /q face-segmentation-keras
    

    cd c:\pytools
    git clone https://github.com/shaoanlu/face-segmentation-keras
    


この Web ページで説明のために使用する写真

必要であればダウンロードして使ってください.


shaoanlu/face-segmentation-keras を使ってみる

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

PyCharmspyder を使うのが簡単

※ (オプション)もし、virtualenv のPython 仮想環境にインストールしていて、それを使いたいときは、有効化する

  1. IPython シェルのコンソールで、ディレクトリの移動

    cd C:/pytools/face-segmentation-keras
    

    https://github.com/shaoanlu/face-segmentation-keras/blob/master/FCN8s_keras_demo.ipynb に記載のプログラムを動かしてみる

    from keras.models import Sequential, Model
    from keras.layers import *
    from keras.layers.advanced_activations import LeakyReLU
    from keras.activations import relu
    from keras.initializers import RandomNormal
    from keras.applications import *
    import keras.backend as K
    import os
    import time
    import cv2
    import matplotlib.pyplot as plt
    %matplotlib inline
    
    from FCN8s_keras import FCN
    m = FCN()
    m.load_weights("Keras_FCN8s_face_seg_YuvalNirkin.h5")
    
    def vgg_preprocess(im):
        im = cv2.resize(im, (500, 500))
        in_ = np.array(im, dtype=np.float32)
        in_ = in_[:,:,::-1]
        in_ -= np.array((104.00698793,116.66876762,122.67891434))
        in_ = in_[np.newaxis,:]
        return in_
      
    def auto_downscaling(im):
        w = im.shape[1]
        h = im.shape[0]
        while w*h >= 700*700:
            im = cv2.resize(im, (0,0), fx=0.5, fy=0.5)
            w = im.shape[1]
            h = im.shape[0]
        return im
    
    fn = "input_img.jpg"
    im = cv2.cvtColor(cv2.imread(fn), cv2.COLOR_BGR2RGB)
    im = auto_downscaling(im)
    plt.imshow(im)
    
    # vgg_preprocess: output BGR channel w/ mean substracted.
    inp_im = vgg_preprocess(im)
    out = m.predict([inp_im])
    
    out_resized = cv2.resize(np.squeeze(out), (im.shape[1],im.shape[0]))
    out_resized_clipped = np.clip(out_resized.argmax(axis=2), 0, 1).astype(np.float64)
    plt.imshow(im)
    plt.imshow(out_resized_clipped, cmap='gray')
    mask = cv2.GaussianBlur(out_resized_clipped, (7,7), 6)
    plt.imshow((mask[:,:,np.newaxis]*im.astype(np.float64)).astype(np.uint8))