トップページ -> 実践知識 -> 顔検出、顔識別 -> 肌色領域の抜き出し(mpatacchiola/DeepGaze を使用)
[サイトマップへ], サイト内検索:

肌色領域の抜き出し(mpatacchiola/DeepGaze を使用)

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

目次

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

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

謝辞:DeepGaze の作者に感謝します

参考Webページ https://www.github.com/mpatacchiola/DeepGaze


前準備

Python, 主要パッケージ, TenforFlow, OpenCV, git のインストール

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


mpatacchiola/DeepGaze のインストール

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

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

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

    workon ai
    

  3. DeepGaze のインストール

    mkdir c:\pytools
    cd c:\pytools
    rmdir /s /q deepgaze
    

    git clone https://github.com/mpatacchiola/deepgaze
    cd deepgaze
    python setup.py build
    python setup.py install 
    


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

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


mpatacchiola/DeepGaze を用いて肌色領域の抜き出し

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

PyCharmspyder を使うのが簡単

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

ビデオファイルで動かしてみる

  1. C:\face-image のような作業用のディレクトリ(フォルダ)を作る

  2. このディレクトリに、mp4 形式ビデオファイル: sample1.mp4 をダウンロード

  3. 次の Python プログラムを実行

    C:/face-image/sample1.mp4」のところは、実際のファイル名に置き換えること

    import cv2
    import numpy as np
    from deepgaze.color_detection import RangeColorDetector
    
    #Firs image boundaries
    min_range = np.array([0, 48, 70], dtype = "uint8") #lower HSV boundary of skin color
    max_range = np.array([20, 150, 255], dtype = "uint8") #upper HSV boundary of skin color
    my_skin_detector = RangeColorDetector(min_range, max_range) #Define the detector object
    
    FACEIMAGEROOT="C:/face-image/"
    v = cv2.VideoCapture(FACEIMAGEROOT + "sample1.mp4")
    while(v.isOpened()):
        r, f = v.read()
        if ( r == False ):
            break
        f = f[0:885, 0:773, 0:3]
        image_filtered = my_skin_detector.returnFiltered(f, morph_opening=False, blur=False, kernel_size=3, iterations=1)
        cv2.imshow("", image_filtered)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    v.release()
    cv2.destroyAllWindows()
    

パソコンの USB カメラで動かしてみる

v = cv2.VideoCapture(0) 」は、USB カメラを使うためのもの。他の部分は、上のプログラムと同じ。

import cv2
import numpy as np
from deepgaze.color_detection import RangeColorDetector

#Firs image boundaries
min_range = np.array([0, 48, 70], dtype = "uint8") #lower HSV boundary of skin color
max_range = np.array([20, 150, 255], dtype = "uint8") #upper HSV boundary of skin color
my_skin_detector = RangeColorDetector(min_range, max_range) #Define the detector object

v = cv2.VideoCapture(0)
while(v.isOpened()):
    r, f = v.read()
    if ( r == False ):
        break
    f = f[0:885, 0:773, 0:3]
    image_filtered = my_skin_detector.returnFiltered(f, morph_opening=False, blur=False, kernel_size=3, iterations=1)
    cv2.imshow("", image_filtered)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

v.release()
cv2.destroyAllWindows()

パソコンの USB カメラで動かし,結果を動画像ファイルに保存

「out = cv2.VideoWriter('C:/image/output.avi', fourcc, 20.0, (640, 480), True) 」の「True」は、カラーという意味

import cv2
import numpy as np
from deepgaze.color_detection import RangeColorDetector

#Firs image boundaries
min_range = np.array([0, 48, 70], dtype = "uint8") #lower HSV boundary of skin color
max_range = np.array([20, 150, 255], dtype = "uint8") #upper HSV boundary of skin color
my_skin_detector = RangeColorDetector(min_range, max_range) #Define the detector object

v = cv2.VideoCapture(0) 
fourcc = cv2.VideoWriter_fourcc(*'XVID')
FACEIMAGEROOT="C:/face-image/"
out = cv2.VideoWriter(FACEIMAGEROOT + 'output.avi', fourcc, 20.0, (640, 480), True) 
while(v.isOpened()):
    r, f = v.read()
    if ( r == False ):
        break
    f = f[0:885, 0:773, 0:3]
    image_filtered = my_skin_detector.returnFiltered(f, morph_opening=False, blur=False, kernel_size=3, iterations=1)
    cv2.imshow("", image_filtered)
    out.write(image_filtered)   
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

v.release()
out.release()
cv2.destroyAllWindows()


付属のサンプルプログラムを動かしてみる

  1. C:\face-image のような作業用のディレクトリ(フォルダ)を作る

  2. 顔写真のデータを、先ほど作成した「作業用のディレクトリ(フォルダ)」に入れる

    Webブラウザを使い、次の画像を「名前を付けて画像を保存」。 ファイル名は「126.png」とする。 「作業用のディレクトリ(フォルダ)」に保存する

    次の画像も、「名前を付けて画像を保存」。 ファイル名は「127.png」とする。 「作業用のディレクトリ(フォルダ)」に保存する

    次のようになる

  3. サンプルプログラム

    Web ブラウザで、 https://github.com/mpatacchiola/deepgaze/blob/master/examples/ex_skin_detection_images/ex_skin_detection_images.py を開く

  4. ここに掲載されているプログラムをコピー

  5. Windows のメモ帳を開き, 丸ごと、貼り付け

  6. このファイルの中の画像ファイル名を書き換え(2か所).

    C:/face-image/126.png, C:/face-image/126-filtered.png,

  7. 後半部分は削除

  8. メモ帳で、ファイルを「名前を付けて保存」する。

    このとき、ファイル名は、skin.py のようなファイル名で保存(拡張子は「.py」

    作業用のディレクトリ(フォルダ)」である C:\face-image に保存する

  9. メモ帳を閉じる

  10. Windows のコマンドプロンプトを開く

  11. 次のように実行

    先ほど名前を付けて保存したときのファイル名を使う

    cd C:\face-image
    python skin.py
    

  12. 結果の確認

もう1つの画像で確認

skin.py の中の画像ファイル名を 126 から 127 に書き換えて、python skin.py をもう一度実行。次のような結果になる