顔のランドマーク検出のために機械学習ライブラリ「dlib」とOpneCVを用います。
開発環境:Windows10, Anaconda3(Python 3.7.6)
【dlibをインストールするための準備】
1. CMakeのインストール
https://github.com/Kitware/CMake/releases/download/v3.19.0-rc1/cmake-3.19.0-rc1-win64-x64.msi
2. Visual Studioのインストール(C++のコンパイラ)
https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community&rel=16
「C++によるデスクトップ開発」だけチェックしてインストール。
【dlibのインストール】
1. Anaconda3のコマンドプロンプトで
(base) PS C:\Users\tanaka_atsushi> pip install dlib
(base) PS C:\Users\tanaka_atsushi> python
>>> import dlib
>>> #エラーが出なければインストール成功
【imutils(画像処理機能の簡略化)のインストール】
1. Anaconda3のコマンドプロンプトで
(base) PS C:\Users\tanaka_atsushi> pip install imutils
(base) PS C:\Users\tanaka_atsushi> python
>>> import imutils
>>> #エラーが出なければインストール成功
【学習済みモデルのデータを入手】
http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2
【インストールしたdlibをTouchDesignerのPythonで使えるようにパスを通す】
TouchDesignerの環境設定から(Edit > Preferrences)Generalタブの
「Python 64-bit Module Path」のところに下記を加える。
C:/ProgramData/Anaconda3/Lib/site-packages
これでTouchDesignerのPythonからdlibを使うことができます。
今回はScript TOPを用いて下記のコードを書いています。
import cv2 import dlib import numpy as np from imutils import face_utils landmark = [] face_detector = dlib.get_frontal_face_detector () predictor_path = 'shape_predictor/shape_predictor_68_face_landmarks.dat' face_predictor = dlib.shape_predictor (predictor_path) def onCook (scriptOp): frame = op ('video_null').numpyArray (delayed = True) f_arr = frame[:, :, 0 : 3] f_arr = np.flipud (f_arr) f_arr = f_arr * 255.0 f_arr = f_arr.astype (np.uint8) dummy = op ('dummy_back').numpyArray (delayed = True) gray = cv2.cvtColor (f_arr, cv2.COLOR_BGR2GRAY) faces = face_detector (gray, 1) for face in faces: landmark = face_predictor (gray, face) landmark = face_utils.shape_to_np (landmark) for (x, y) in landmark: dummy[y - 1][x - 1][0] = 0 dummy[y - 1][x - 1][1] = 255 dummy[y - 1][x - 1][2] = 0 dummy[y - 1][x - 1][3] = 255 scriptOp.copyNumpyArray (dummy) return