SixDRepNet のインストールと動作確認(頭部の姿勢推定)(Python 3.12, PyTorch を使用)(Windows 上)

目次
  1. 前準備
  2. SixDRepNet のインストール
  3. SixDRepNet を用いて頭部の姿勢推定を行ってみる

手順の要点: 前準備として,Python 3.12PyTorch 等をインストールする.続いて,PyTorch 実装の頭部姿勢推定ライブラリ SixDRepNet をインストールし,画像・動画・ビデオカメラでの動作を確認する.

SixDRepNet は,mpatacchiola/DeepGaze の CNN による頭部姿勢推定(roll,pitch,yaw の推定)と同様の機能を,PyTorch 実装で提供するライブラリである.学習済みモデルの重みは初回実行時に自動的にダウンロードされる.

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

参考Webページ: https://github.com/thohemp/6DRepNet

前準備

Python 3.12 のインストール

Pythonのインストールを行い、Pythonのプログラムを実行する環境を整える。扱う環境は、Windows搭載パソコンである。金子研究室では、Python 3.12.10を推奨する。

[Windows での Python 3.12 のインストール手順を見るには、ここをクリック]

Windows での Python 3.12 のインストール

以下のいずれかの方法でPython 3.12をインストールする。Pythonがインストール済みの場合、この手順は不要である。

方法 1:winget によるインストール

インストールコマンドの実行方法

管理者権限コマンドプロンプトを起動する(手順:Windowsキーまたはスタートメニュー → cmd と入力 → 右クリック → 「管理者として実行」)。そして、コマンド全体をコマンドプロンプトにコピー&ペーストする。

--scope machine を指定することで、システム全体(全ユーザー向け)にインストールされる。このオプションの実行には管理者権限が必要である。インストール完了後、コマンドプロンプトを再起動するとPATHが反映される。

REM Python 3.12 をシステム領域にインストール
winget install --id Python.Python.3.12 -e --scope machine --silent --accept-source-agreements --accept-package-agreements --override "/quiet InstallAllUsers=1 PrependPath=1 Include_test=0 Include_pip=1 Include_launcher=1 InstallLauncherAllUsers=1 TargetDir=\"C:\Program Files\Python312\""
if not "%ERRORLEVEL%"=="0" ( color 0c & echo Python 3.12 のインストールに失敗しました & ping 127.0.0.1 -n 6 >nul & color )

REM Python と Scripts を PATH 先頭に追加
powershell -NoProfile -Command "$p='C:\Program Files\Python312'; $s=\"$p\Scripts\"; if(Test-Path $p){$k=[Microsoft.Win32.Registry]::LocalMachine.OpenSubKey('SYSTEM\CurrentControlSet\Control\Session Manager\Environment',$true); $c=$k.GetValue('Path','',[Microsoft.Win32.RegistryValueOptions]::DoNotExpandEnvironmentNames); $t=$k.GetValueKind('Path'); $new=$c; if((';'+$new+';') -notlike \"*;$p;*\"){$new=$p+';'+$new}; if((';'+$new+';') -notlike \"*;$s;*\"){$new=$s+';'+$new}; if($new -ne $c){$k.SetValue('Path',$new,$t)}; $k.Close()}"

REM 現在のセッションにも反映(システムPATHを再取得して連結)
for /f "usebackq tokens=2,*" %A in (`reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path`) do set "PATH=%B"

REM pip / wheel の更新
python -m pip install --no-user -U pip wheel
if not "%ERRORLEVEL%"=="0" ( color 0c & echo pip / wheel の更新に失敗しました & ping 127.0.0.1 -n 6 >nul & color )

方法 2:インストーラーによるインストール

  1. Python公式サイト(https://www.python.org/downloads/)にアクセスし、「Download Python 3.x.x」ボタンからWindows用インストーラーをダウンロードする。
  2. ダウンロードしたインストーラーを実行する。
  3. 初期画面の下部に表示される「Add python.exe to PATH」にチェックを入れてから「Customize installation」を選択する。このチェックを入れ忘れると、コマンドプロンプトから python コマンドを実行できない。
  4. 「Install Python 3.xx for all users」にチェックを入れ、「Install」をクリックする。

インストールの確認

コマンドプロンプトで以下を実行する。

python --version

バージョン番号(例:Python 3.12.x)が表示されればインストール成功である。「'python' は、内部コマンドまたは外部コマンドとして認識されていません。」と表示される場合は、インストールが正常に完了していない。

Git のインストール(Windows 上) [クリックして展開]

管理者権限コマンドプロンプトで以下を実行する.管理者権限は,winget の --scope machine オプションでシステム全体にインストールするために必要となる.

REM Git をシステム領域にインストール
winget install --scope machine --id Git.Git -e --silent --disable-interactivity --force --accept-source-agreements --accept-package-agreements --override "/VERYSILENT /NORESTART /NOCANCEL /SP- /CLOSEAPPLICATIONS /RESTARTAPPLICATIONS /COMPONENTS=""icons,ext\reg\shellhere,assoc,assoc_sh"" /o:PathOption=Cmd /o:CRLFOption=CRLFCommitAsIs /o:BashTerminalOption=MinTTY /o:DefaultBranchOption=main /o:EditorOption=VIM /o:SSHOption=OpenSSH /o:UseCredentialManager=Enabled /o:PerformanceTweaksFSCache=Enabled /o:EnableSymlinks=Disabled /o:EnableFSMonitor=Disabled"

NVIDIA CUDA Toolkit のインストール(GPU を使用する場合)

NVIDIA GPU を利用して高速に処理を行いたい場合は,NVIDIA ドライバNVIDIA CUDA Toolkitを事前にインストールする.GPU を使用しない場合は,この手順は不要である(CPU でも動作する).

関連する外部ページ

PyTorch のインストール

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

python -m pip uninstall -y torch torchvision torchaudio
# 公式サイト(https://pytorch.org/get-started/locally/)で環境に合ったコマンドを確認すること.以下は CUDA 12.8 環境向けの一例
python -m pip install -U torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128

インストールの確認を行う.

python -c "import torch; print(f'PyTorch Version: {torch.__version__}'); print(f'CUDA Available: {torch.cuda.is_available()}')"

SixDRepNet のインストール

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

  1. Windows で,コマンドプロンプト管理者として実行する.
  2. SixDRepNet と,動作確認に用いる OpenCV のインストール
    python -m pip install -U sixdrepnet opencv-python
    
  3. インストール完了後,エラーメッセージが出ていないことを確認する.

SixDRepNet を用いて頭部の姿勢推定を行ってみる

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

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

  1. Windows で,コマンドプロンプトを実行する.
  2. エディタを起動する
    cd /d c:%HOMEPATH%
    notepad headpose_image.py
    
  3. エディタで,次のプログラムを保存する

    【説明】

    このプログラムは,SixDRepNet を用いて,1枚の画像から頭部姿勢(roll,pitch,yaw)を推定し,結果を画像上に描画して表示する.学習済みモデルの重みは初回実行時に自動的にダウンロードされる.

    import cv2
    from sixdrepnet import SixDRepNet
    
    # モデルの作成(学習済みの重みは自動的にダウンロードされる)
    model = SixDRepNet()
    
    # 画像の読み込み
    img = cv2.imread('demo.jpg')
    
    # 頭部姿勢(pitch, yaw, roll)の推定
    pitch, yaw, roll = model.predict(img)
    
    print("roll %s, pitch %s, yaw %s" % (roll, pitch, yaw))
    
    # 推定結果を画像上に描画
    model.draw_axis(img, yaw, pitch, roll)
    
    cv2.imshow("SixDRepNet", img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
  4. 動作確認用の画像ファイル demo.jpg を,プログラムと同じフォルダに用意する
  5. Python プログラムの実行
    python headpose_image.py
    
  6. 結果を確認する

動画ファイルで動かす

ここで使用する mp4 形式動画ファイル: sample1.mp4
  1. Windows で,コマンドプロンプトを実行する.
  2. 作業用のディレクトリ(フォルダ)として c:\image を作り, sample1.mp4c:\image の下にダウンロードする
    mkdir c:\image
    cd c:\image
    curl -O https://www.kkaneko.jp/sample/face/sample1.mp4
    
  3. エディタを起動する
    cd /d c:%HOMEPATH%
    notepad headpose_video.py
    
  4. エディタで,次のプログラムを保存する

    【説明】

    このプログラムは,SixDRepNet を用いて,動画ファイルの各フレームから頭部姿勢(roll,pitch,yaw)を推定し,結果を画面に表示する.OpenCV による動画表示を行っている.

    import cv2
    from sixdrepnet import SixDRepNet
    
    model = SixDRepNet()
    
    v = cv2.VideoCapture("c:/image/sample1.mp4")
    while(v.isOpened()):
        r, img = v.read()
        if ( r == False ):
            break
        img = cv2.resize(img, (480, 480))
    
        pitch, yaw, roll = model.predict(img)  # 頭部姿勢(roll, pitch, yaw)を推定
        print("roll %s, pitch %s, yaw %s" % (roll, pitch, yaw))
        model.draw_axis(img, yaw, pitch, roll)
    
        cv2.imshow("", img)
        # Press Q to exit
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    
    v.release()
    cv2.destroyAllWindows()
    

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

  5. Python プログラムの実行
    python headpose_video.py
    
  6. 結果の確認

ビデオカメラで確認

  1. 上のプログラムの動画ファイル読み込み部分を,次のように書き換える.書き換えたら保存する
    v = cv2.VideoCapture(0)
    
  2. ファイルを「上書き保存」する
  3. Python プログラムの実行
    python headpose_video.py
    
  4. 結果の確認