トップページデータベース研究顔検出、顔識別肌色領域の抜き出し(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

前準備

Git, cmake のインストール

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

cmake の URL: https://cmake.org/download/

Python 3.6 のインストール,pip と setuptools の更新,Python 開発環境のインストール

※ TensorFlow 1.15 に対応する Python は,3.6 や 3.7 など(3.8 は対応していない)(2020/06 時点).このページでは 3.6 を使って説明する.3.7 でも同様の手順になる.

最新版ではない TensorFlow を使う.そうした場合,運用を簡単にする(TensorFlow を間違ってアップデートしないなど)ために,venv を用いて,隔離された Python 仮想環境を作る方が便利かもしれない(必ずしも,そうする必要はない).その手順もここに示している.

Windows の場合

  1. Python 3.6 のインストール

    Python の URL: http://www.python.org/

    インストール手順の詳細は: 別ページで説明している.

    Windows では,Python 3.8 や 3.6 の共存は簡単.

  2. pip と setuptools の更新,Python 開発環境(JupyterLab, spyder)のインストール(Windows 上)

    コマンドプロンプトを管理者として実行し,次のコマンドを実行.

    Python の使用は「py -3.6」で行う.

    Windows での pip の実行では,コマンドプロンプトを管理者として実行することにする。

    [image]

    py -3.6 -m pip install -U pip setuptools
    py -3.6 -m pip install -U jupyterlab jupyter jupyter-console jupytext nteract_on_jupyter spyder
    

    隔離された Python 仮想環境を使用したいときは,次のような手順で, venv を用いて,隔離された Python 仮想環境を作る.

    • 隔離された Python 仮想環境の名前: tf115py36
    • 使用するPython のバージョン: 3.6
    • Python 仮想環境を置くディレクトリ: C:\venv\tf115py36

    コマンドプロンプトを管理者として実行し,次のコマンドを実行.

    Python の使用は「C:\venv\tf115py36\Scripts\activate.bat」の後,「python」で行う.

    py -3.6 -m pip install -U pip setuptools
    py -3.6 -m venv --system-site-packages C:\venv\tf115py36
    C:\venv\tf115py36\Scripts\activate.bat
    python -m pip install -U pip setuptools
    python -m pip install -U jupyterlab jupyter jupyter-console jupytext nteract_on_jupyter spyder
    

Ubuntu の場合

次の手順により,システム Python とは別に,pyenv を用いて Pytnon 3.6 をインストールする.(システム Python の設定は変えたくないため).

  1. pyenv のインストール

    Ubuntu での pyenv のインストール手順の詳細説明: 別ページで説明している.

    rm -rf ~/.pyenv
    cd /tmp
    git clone https://github.com/pyenv/pyenv.git ~/.pyenv
    cd ~/.pyenv
    git pull
    echo 'export PYENV_ROOT="${HOME}/.pyenv"' >> ~/.bashrc
    echo 'if [ -d "${PYENV_ROOT}" ]; then' >> ~/.bashrc
    echo '    export PATH=${PYENV_ROOT}/bin:$PATH' >> ~/.bashrc
    echo 'fi' >> ~/.bashrc
    echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bashrc
    exec $SHELL -l
    source ~/.bashrc
    sudo apt -y install --no-install-recommends make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
    
  2. インストールできる Python 3.6 のバージョンの確認
    pyenv rehash 
    pyenv install -l | grep 3.6
    
  3. システム Python とは別に Python 3.6 をインストール (pyenv を使用)
    pyenv install 3.6.12
    

    [image]
  4. pyenv の Python 3.6 の有効化.

    端末で,次のコマンドを実行.

    pyenv shell 3.6.12
    

    Python の切り替えは次のようなコマンドで行う.

    • pyenv shell system
    • pyenv shell 3.6.12

    デフォルトで pyenv 配下の python 3.6.12 を使いたいときは, 次のように設定する

    echo 'pyenv shell 3.6.12' >> ~/.bashrc
    exec $SHELL -l
    
  5. pip と setuptools の更新,Python 開発環境(JupyterLab, spyder)のインストール(Ubuntu 上)

    インストールするには, 端末で,次のコマンドを実行.

    python -m pip install -U pip setuptools
    python -m pip install -U jupyterlab jupyter jupyter-console jupytext nteract_on_jupyter spyder
    

    隔離された Python 仮想環境を作成したいときは,次のような手順で, venv を用いて,隔離された Python 仮想環境を作る.

    • 隔離された Python 仮想環境の名前: tf115py36
    • 使用するPython のバージョン: 3.6
    • Python 仮想環境を置くディレクトリ: ~/tf115py36

    コマンドプロンプトを管理者として実行し,次のコマンドを実行.

    python -m pip install -U pip setuptools
    python -m venv --system-site-packages ~/tf115py36
    source ~/tf115py36/bin/activate
    python -m pip install -U pip setuptools
    python -m pip install -U jupyterlab jupyter jupyter-console jupytext nteract_on_jupyter spyder
    

(Windows を使う場合のみ)Visual C++ ビルドツール (Build Tools) のインストール

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

以下,Windows に Python, git, Visual C++ ビルドツール (Build Tools) をインストール済みであるものとして説明を続ける.

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

GPU とは,グラフィックス・プロセッシング・ユニットの略で、コンピュータグラフィックス関連の機能,乗算や加算の並列処理の機能などがある.

ダウンロードページ

詳細説明

(NVIDIA GPU を使うとき)NVIDIA CUDA ツールキット 10.0 のインストール

CUDA とは,NVIDIA社が提供している GPU 用のプラットフォームである.

指定されているバージョンより高いものは使わない. その根拠は次のページ. URL: https://www.tensorflow.org/install/source#common_installation_problems

詳細説明

(NVIDIA GPU を使うとき)NVIDIA cuDNN 7.6 のインストール

ダウンロードページ

TensorFlow 2.4 の GPU 版での,cuDNN のバージョンは 8.0.5(現時点で,NVIDIA CUDA ツールキット 11 で動く最新版).

TensorFlow 2.3, 2.2, 2.1 の GPU 版での,cuDNN のバージョンは 7.6.そして,TensorFlow 1.13 以上 TensorFlow 2.0 までの GPU 版での,cuDNN のバージョンは7.4 .それより高いバージョンよりは使わないこと.

詳細説明

TensorFlow 1.15(旧バージョン)のインストール

Python 3.6 を起動するコマンドを確認しておくこと.

Windows の場合

  1. コマンドプロンプトを実行する.
  2. 隔離された Python 仮想環境使用するときは,次のようなコマンドで有効化する.

    C:\venv\tf115py36\Scripts\activate.bat
    

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

    Python の使用は,隔離された Python 仮想環境有効化の後,「python」で行う. Windows で,隔離された Python 仮想環境使用しないときは,「python」ではなく「py -3.6」を使う.

    python -m pip uninstall -y tensorflow tensorflow-cpu tensorflow-gpu tensorflow_datasets tensorflow-hub keras
    python -m pip install -U tensorflow==1.15.5 tensorflow_datasets tensorflow-hub keras==2.3.1 matplotlib opencv-python
    python -m pip install git+https://github.com/tensorflow/docs
    python -m pip install git+https://github.com/tensorflow/examples.git
    
  4. TensorFlow のバージョン確認

    python -c "import tensorflow as tf; print( tf.__version__ )"
    

    [image]
  5. (GPU を使うとき) GPU が認識できてるかの確認

    TensorFlow が GPU を認識できているかの確認は,端末で,次を実行して行う.

    python -c "from tensorflow.python.client import device_lib; print(device_lib.list_local_devices())"
    

Ubuntu の場合

  1. 端末を開く
  2. pyenv の Python 3.6 の有効化.

    端末で,次のコマンドを実行.

    pyenv shell 3.6.12
    

    隔離された Python 仮想環境使用するときは, 「pyenv shell 3.6.12」は実行しないで, 次のようなコマンドで Python 仮想環境を有効化する.

    source ~/tf115py36/bin/activate
    

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

    Python の使用は,「python」で行う.

    python -m pip uninstall -y tensorflow tensorflow-cpu tensorflow-gpu tensorflow_datasets tensorflow-hub keras
    python -m pip install -U tensorflow==1.15.5 tensorflow_datasets tensorflow-hub keras==2.3.1 matplotlib opencv-python
    python -m pip install git+https://github.com/tensorflow/docs
    python -m pip install git+https://github.com/tensorflow/examples.git
    
  4. TensorFlow のバージョン確認

    python -c "import tensorflow as tf; print( tf.__version__ )"
    

    [image]
  5. (GPU を使うとき) GPU が認識できてるかの確認

    TensorFlow が GPU を認識できているかの確認は,端末で,次を実行して行う.

    python -c "from tensorflow.python.client import device_lib; print(device_lib.list_local_devices())"
    
    システムの環境変数:

mpatacchiola/DeepGaze のインストール

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

  1. Python 3.6 を起動するコマンドを確認しておく.
    • Windows の場合: 「py -3.6
    • Windows で Python 仮想環境 tf115py36 を使う場合: 「C:\venv\tf115py36\Scripts\activate.bat」の後,「python
    • Ubuntu の場合: 「pyenv shell 3.6.12」の後,「python
    • Ubuntu で Python 仮想環境 tf115py36 を使う場合: 「source ~/tf115py36/bin/activate」の後,「python
  2. 隔離された Python 仮想環境使用するときは,有効化する.

    Windows の場合での,有効化のコマンドの例.

    C:\venv\tf115py36\Scripts\activate.bat
    

    [image]

    Ubuntu の場合での,有効化のコマンドの例.

    source ~/tf115py36/bin/activate
    

    [image]

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

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

    cd C:\venv\tf115py36
    rmdir /s /q deepgaze
    

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

    このとき,virtualenv の隔離された Python 仮想環境を有効化する(「tf115py36」のところは、Python仮想環境の名前)

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

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

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

    [image]

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

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

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

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

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

    [image]
  2. このディレクトリに、mp4 形式ビデオファイル: sample1.mp4 を,C:\face-image の下にダウンロード
  3. Python 3.6 を起動するコマンドを確認しておく.
    • Windows の場合: 「py -3.6
    • Windows で Python 仮想環境 tf115py36 を使う場合: 「C:\venv\tf115py36\Scripts\activate.bat」の後,「python
    • Ubuntu の場合: 「pyenv shell 3.6.12」の後,「python
    • Ubuntu で Python 仮想環境 tf115py36 を使う場合: 「source ~/tf115py36/bin/activate」の後,「python
  4. 隔離された Python 仮想環境使用するときは,有効化する.

    Windows の場合での,有効化のコマンドの例.

    C:\venv\tf115py36\Scripts\activate.bat
    

    [image]

    Ubuntu の場合での,有効化のコマンドの例.

    source ~/tf115py36/bin/activate
    

    [image]

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

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

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

[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:/face-image/126.png, C:/face-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]