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

頭部の向きの推定(mpatacchiola/DeepGaze,Python 3.6, TensorFlow 1.15 を使用)

【目次】

  1. 前準備
  2. mpatacchiola/DeepGaze のインストール
  3. このページで説明のために使用するビデオ、写真
  4. mpatacchiola/DeepGaze を用いて頭部の向きの推定を行ってみる

手順の要点: Python 3.6, TensorFlow 1.15 を使用

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

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

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

参考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/

mpatacchiola/DeepGaze のインストール

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

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

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

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

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

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

    [image]
  4. 終了の確認

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

    [image]

mpatacchiola/DeepGaze を用いて頭部の向きの推定を行ってみる

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

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

  1. Windows では,コマンドプロンプトを実行.
  2. 次のコマンドを実行
    py -3.6 ex_cnn_head_pose_estimation_images.py
    
  3. 結果を確認

    [image]

ビデオファイルで動かす

ここで使用する mp4 形式ビデオファイル: sample1.mp4

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

    [image]
  2. mp4 形式ビデオファイル: sample1.mp4 を、c:\image の下にダウンロード

    [image]
  3. Windows では,コマンドプロンプトを実行.
  4. c:\pytools\deepgaze の下の examples の下の ex_cnn_head_pose_estimation_images の下にあるファイルを使いたい

    ファイルのコピー

    cd c:\pytools
    cd deepgaze\examples\ex_cnn_head_pose_estimation_images
    copy ex_cnn_head_pose_estimation_images.py a.py 
    

    [image]
  5. いまコピーしてできた新しいファイル a.py をエディタで開く
    notepad a.py
    

    [image]
  6. このプログラムファイルの後半部分を次のように書き換え
    v = cv2.VideoCapture("c:/image/sample1.mp4")
    while(v.isOpened()):
        r, img = v.read()
        if ( r == False ):
            break
        img = cv2.resize(img, (480, 480))
        roll = my_head_pose_estimator.return_roll(img)  # Evaluate the roll angle using a CNN
        pitch = my_head_pose_estimator.return_pitch(img)  # Evaluate the pitch angle using a CNN
        yaw = my_head_pose_estimator.return_yaw(img)  # Evaluate the yaw angle using a CNN
        print("roll %s, pitch %s, yaw %s" % ( str(roll[0,0,0]), str(pitch[0,0,0]), str(yaw[0,0,0]) ) )
    
        cv2.imshow("", img)
    
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    
    v.release()
    cv2.destroyAllWindows()
    

    [image]

    編集したら,ファイルを「上書き保存」する

  7. Python プログラムを動かす.
    py -3.6 a.py
    

    [image]
  8. 結果の確認

    [image]

ビデオカメラで確認

  1. 次のように書き換える.書き換えたら保存する

    v = cv2.VideoCapture(0)

    v = cv2.VideoCapture(0)
    while(v.isOpened()):
        r, img = v.read()
        if ( r == False ):
            break
        img = cv2.resize(img, (480, 480))
        roll = my_head_pose_estimator.return_roll(img)  # Evaluate the roll angle using a CNN
        pitch = my_head_pose_estimator.return_pitch(img)  # Evaluate the pitch angle using a CNN
        yaw = my_head_pose_estimator.return_yaw(img)  # Evaluate the yaw angle using a CNN
        print("roll %s, pitch %s, yaw %s" % ( str(roll[0,0,0]), str(pitch[0,0,0]), str(yaw[0,0,0]) ) )
    
        cv2.imshow("", img)
    
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    
    v.release()
    cv2.destroyAllWindows()
    

    [image]
  2. ファイルを「上書き保存」する
  3. Python プログラムを動かす.

    python a.py
    
  4. 結果の確認

    [image]