トップページ -> 最新情報技術の実習と研究ツール -> 顔検出、顔識別 -> 肌色領域の抜き出し(mpatacchiola/DeepGaze を使用)
[サイトマップへ]  

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

目次

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

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

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


前準備

Anaconda, git のインストール

Windows での Anaconda, git のインストール手順は、 別の Web ページに記載しています

Ubuntu での Anaconda のインストール手順は、 別の Web ページに記載しています

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

Windows での 手順は、 「Windows で,隔離された Python 環境 + Keras + TensorFlow + OpenCV + spyder + Dlib 環境を作る(Anaconda を利用)」のページで説明しています.

以下,Windows での Anaconda と git をインストール済み, 隔離された Python 環境(名前は ai)に、spyder, numpy, OpenCV, Tensorflow をインストール済みであるものとして説明を続けます.


mpatacchiola/DeepGaze のインストール

  1. Windows のコマンドプロンプトを管理者として実行する.

  2. Python 環境(名前は ai)を有効にする

    ※ 「activate ai 」は Python 環境(名前はai)を有効にするためのコマンド(各自の環境の名前にあわせること

    activate ai 
    

    「Could not find conda environment: ai」というメッセージが出たときは、 隔離された Python 環境の作成(名前は 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 プログラムを動かしたい. そのために, IPython シェルのコンソールで、Python 環境(名前は ai)を使う

Anacondaに入っている開発環境 spyder を実行し,右下の ipython コンソールを使うのが簡単.

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

※「spyder(ai)」がない!というときは、Windowsのコマンドプロントで次を実行して、spyder をインストールする

activate ai
conda install -y spyder

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

activate ai
spyder

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

  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
    
    v = cv2.VideoCapture("C:/face-image/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')
out = cv2.VideoWriter('C:/image/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 をもう一度実行。次のような結果になる