メニュー 閉じる

172. dlib + OpenCV + TouchDesignerで顔のランドマーク検出

顔のランドマーク検出のために機械学習ライブラリ「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

 

Posted in python, touchdesigner