' 肌色領域の抜き出し(mpatacchiola/DeepGaze を使用,Python 3.6, TensorFlow 1.15 を使用)
トップページ人工知能,実世界DB顔情報(顔検出,顔識別、表情判定,顔のクラスタリングや類似度や分類,肌色部分の抽出,瞳孔の検出,顔姿勢の推定)肌色領域の抜き出し(mpatacchiola/DeepGaze を使用,Python 3.6, TensorFlow 1.15 を使用)

肌色領域の抜き出し(mpatacchiola/DeepGaze を使用,Python 3.6, TensorFlow 1.15 を使用)

【目次】

  1. 前準備
  2. Python の隔離された環境の新規作成と,TensorFlow 1.15.3 (旧バージョン)のインストール
  3. mpatacchiola/DeepGaze のインストール
  4. このページで説明のために使用するビデオ、写真
  5. mpatacchiola/DeepGaze を用いて肌色領域の抜き出し
  6. 付属のサンプルプログラムを動かしてみる

手順の要点: Python 3.6, TensorFlow 1.15, Python の隔離された環境(Windows では C:\venv\tf115py36)

ソフトウエア等の利用条件等は,利用者で確認すること.

【サイト内の関連ページ】:

謝辞:ソフトウエアの作者に感謝します

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

前準備

TensorFlow 1.15 を使う.

(Windows を使う場合のみ)マイクロソフト C++ ビルドツール (Build Tools) のインストール

Visual Studio Community 2019 vesion 16.2, マイクロソフト C++ ビルドツールのインストール(Windows 上)」で説明している.

Python,TensorFlow 1.15 のインストール

すでに TensorFlow 2 を使っている,あるいは使う予定ということがありえる. 単純には,TensorFlow 2 と TensorFlow 1.15 を共存させて Python で使うということはできないが, 少しの手間で,共存できるようになる. そこで,TensorFlow 2 とTensorFlow 1.15 の共存を前提として, TensorFlow 1.15 のインストールを行う.

Python 開発環境のインストール】

Python を使うときは,Python開発環境や Python コンソール(Jupyter Qt ConsoleSpyderPyCharmPyScripter など)の利用も便利である

Windows, Ubuntu での Python 開発環境,Python コンソールJupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, spyder)のインストール: 別ページで,インストール手順を説明している.

Windows の場合

Windows でのPython3.6TensorFlow 1.15 のインストール:別ページで説明している.

すでにPython 3.9 あるいは Python 3.8 をインストールしている,あるいは,インストール予定という場合を想定し, あとのトラブルが起きにくい,そして,簡単に運用できるように 「Python 3.6 をインストールし,その上に,TensorFlow 1.15.5 をインストールする」という手順を案内している.

Ubuntu の場合

Ubuntu でのPythonTensorFlow 1.15 のインストール:別ページで案内している.

Ubuntu のシステム Python に影響を与えないように,隔離された Python 3.6 仮想環境の新規作成し,その上にTensorFlow 1.15.5 をインストールするという手順(venv を使用)(Ubuntu 上)を案内している.

Git のインストール

Git の URL: https://git-scm.com/

Git, cmake のインストール

Git の URL: https://git-scm.com/

cmake のダウンロード URL: https://cmake.org/download/

mpatacchiola/DeepGaze のインストール

Windows での手順を下に示す.Ubuntu でも同様の手順になる.

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

    [image]
  2. DeepGaze のインストールディレクトリを空にしておく

    cd c:\pytools
    rmdir /s /q deepgaze
    

    [image]
  3. DeepGaze のインストール

    c:\pytools\.venv\Scripts\activate.bat
    git clone https://github.com/mpatacchiola/deepgaze
    cd deepgaze
    python setup.py build
    python setup.py install 
    

    [image]
    (以下省略)
  4. 結果の確認

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

    [image]

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

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

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

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

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

    [image]
  2. このディレクトリに、mp4 形式ビデオファイル:
  3. ここで使用する mp4 形式ビデオファイル: sample1.mp4 を,C:\face-image の下にダウンロード
  4. Windows で,コマンドプロンプト管理者として実行する.

    [image]
  5. 作業用に c:\do.bat というファイルを作る.

    まず,メモ帳を開く(メモ帳以外のエディタでも問題ない)

    notepad c:\do.bat
    

    [image]

    次のように編集する.

    sed -i "s/import tensorflow as tf/import tensorflow.compat.v1 as tf/g"
    sed -i "s/from tensorflow import/from tensorflow.compat.v1 import"
    sed -i "s/from keras import/from tensorflow.compat.v1.keras import"
    
  6. Python プログラムを動かす.

    Windows でのプログラムを下に示す.Ubuntu でも同様のプログラムになる.

    「FACEIMAGEROOT + "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:/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()
    

    [image]

    [image]

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

Python プログラムを動かす.

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

[image]

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

Windows でのプログラムを下に示す.Ubuntu でも同様のプログラムになる.

「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:/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()

[image]

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

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

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

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

    [image]

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

    [image]

    次のようになる

    [image]
  3. サンプルプログラム

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

  4. ここに掲載されているプログラムをコピー
  5. Windows のメモ帳を開き, 丸ごと、貼り付け

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

    c:/image/126.png, c:/image/126-filtered.png,

    [image]
  7. 後半部分は削除
  8. メモ帳で、ファイルを「名前を付けて保存」する。

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

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

    [image]
  9. メモ帳を閉じる
  10. Windows のコマンドプロンプトを開く
  11. 次のように実行

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

    cd C:\face-image
    python skin.py
    

    [image]
  12. 結果の確認

    [image]

もう1つの画像で確認

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

[image]

[image]

[image]