本プロジェクトは、MediaPipeを用いた顔認識と3Dモデリングを組み合わせ、顔の3D再現を行うものです。 特に、マスクなどで顔の一部が隠れている状態でも、3Dモデルを用いて顔全体の再現を目指すことを目的としています。 MediaPipeで検出した顔の特徴点に顔の3Dモデルをマッピングすることで、リアルタイムに立体的な顔の再構成が可能になります。
このリポジトリでは、main.py と yolofolder/chin_detection.py を同じ Python 3.10 環境で動かすために、facelandmark310 環境を使用します。
環境定義:
作成手順:
conda env create -f environment.facelandmark310.yml
conda activate facelandmark310main.py は OpenGL と user site-package の影響を受けやすいため、facelandmark310 環境に activate hook を設定して実行する前提です。現在のセットアップでは conda activate facelandmark310 の後に python main.py を実行します。
conda activate facelandmark310
python main.py [--texture nomask.jpg] [--draw_landmark]- texture 使用するテクスチャ画像のファイルパスを指定します(省略可)
- draw_landmark ランドマークを描画する場合に指定します(省略可)
- use_facedetector Face Detector機能を起動時にONにします(省略可)
- n: モデル描画のON/OFF(3Dモデルの表示・非表示)
- p: 対応点モードを変更(All Points → Upper Points → Selected Points)
- t: ステータス表示モードの切り替え(コンパクト表示 → 詳細表示 → コンソール表示のみ)
実行中、画面右上に現在の機能状態が表示されます:
- [N] Model Draw: モデル描画のON/OFF(緑=有効、灰色=無効)
- [P] Point Mode: 現在の対応点モード(All Points/Upper Points/Selected Points)
- FL Scale: Face Landmarkerスケール係数と調整モード(Manual/Auto)
3Dモデルの表示・非表示を制御:
- OFF時は姿勢推定のみ実行し、モデルは表示しない
- ランドマーク表示のみ確認したい場合や処理負荷軽減に有効
複数の姿勢推定機能が有効な場合の実行優先順位:
- 姿勢比較モード(Cキー)
- Face Landmarker PnP姿勢推定(Gキー)
- Face Landmarker直接姿勢推定(Bキー)
- 従来のPnP方式(デフォルト)
conda activate facelandmark310
python create_MQO.py [model/nomask.jpg]- 画像の名前は適宜変更してください
- OS: Ubuntu 22.04 系 / X11 実行
- Python: 3.10.18
- conda env:
facelandmark310
- glfw==2.10.0
- mediapipe==0.10.21
- numpy==1.26.4
- opencv-contrib-python==4.11.0.86
- PyOpenGL==3.1.10
- PyOpenGL-accelerate==3.1.10
- TkEasyGUI==1.0.41
- ultralytics==8.3.203
- torch==2.8.0
- torchvision==0.23.0
- face_landmarker.task: MediaPipe Face Landmarker用モデルファイル(プロジェクトルートに配置)
- 自動ダウンロードスクリプト:
python3 download_model.py
- 自動ダウンロードスクリプト:
│ Application.py # アプリの大部分の処理
│ create_MQO.py # モデル生成
│ GLWindow.py # glウィンドウ関連の関数
│ main.py # メインプログラム
│ PoseEstimation.py # カメラ姿勢推定
│ USBCamera.py # カメラ関連の処理
│
├─data # 推定に使用する点のデータ
│
├─mqodata
│ │ mask.jpg
│ │ nomask.jpg # テクスチャ画像
│ │ mesh.dat # メッシュデータ
│ │
│ ├─landmark # 全特徴点保存用フォルダ
│ ├─landmark3d # 全特徴点(正規化後)保存用フォルダ
│ ├─mesh # メッシュデータ保存用フォルダ
│ └─model # 生成したモデル保存用フォルダ
│
├─mqoloader # mqoデータ読み込みプログラム群
│
├─output # 出力動画像保存フォルダ
│ ├─images
│ └─videos
│
├─results # 結果保存フォルダ
│ culc.py
│ landmark_mask.jpg # ランドマーク推定結果
│
└─test_programs # 顔認識関連のテスト用プログラム群