前回構築した環境を用いて表情認識を行うための学習済みモデルを作成します.
概要
通常人の表情認識には「顔の部分を画像全体から抜き出し」 -> 「抜き出した部分から表情を認識」を行う必要があります. dlibでは「顔の部分を画像全体から抜き出し」の機能は既に用意されており,後者の「抜き出した部分から表情を認識」に関しても学習済みモデルが提供されています.
しかしVirtualYoutuberである因幡はねるさんには現実の人に対する表情認識が利用できないため,「顔の部分を画像全体から抜き出し」と「抜き出した部分から表情を認識」の両方を自前で準備する必要があります.
そのため
- 画像データを集める
- 画像から「顔の部分を画像全体から抜き出し」を行うためのラベル付けを行う
- ラベル付けしたデータから判別用のモデルを学習
- ↑と同様に「抜き出した部分から表情を認識」のためにlandmarkをラベル付けする
- ラベル付けしたデータから表情認識用モデルを学習
を行います.
上記の処理は前回構築したbash on ubuntu on windowsのpython環境で行い,一部画像のラベル付けにWindowsを利用します. 利用したスクリプトとラベル付け用プログラムは以下に公開しています. 詳しいスクリプトの使い方はreadmeに記載しています.
以降の説明で利用します.
https://github.com/akihiro0105/DlibLandmarkToolkit
1.学習データ集め
- 因幡はねるの顔が映っている画像を集めます.(たくさん)
- 認識させたい状態,表情をたくさん集めると認識率が上がります.
- 「Tokyo HoloLens ミートアップ vol.11 忘年会スペシャル!」で展示,LTしましたでは400枚程度の画像を集めました.
2.物体認識ラベル付け
- 画像を集めたらキャラクターの顔を認識するためにラベル付けを行います.
- 画像をフォルダに集めてbash on ubuntu on windows環境から
detectXml.py
を実行してラベル付けファイルのひな形を作成します. - 次にWindows環境に戻って
Viewer
プロジェクトをVisual Studioで開いて実行します. Viewer
プログラムを利用して顔の部分を枠で囲んでいきます.
緑が物体認識用の枠,青い点が表情認識のためのlandmarkです.
3.物体認識モデル学習
- ラベル付けが完了後bash on ubuntu on windowsのpython環境で
trainDetect.py
を実行して物体認識モデルを作成します. - 学習されたモデルデータは
.svm
ファイルとなります.
4.表情認識ラベル付け
- 表情を認識するために顔の必要な部位にlandmarkを設定します.
- 3.物体認識モデル学習で作成した物体認識モデルを利用して
landmarkXml.py
で表情のラベル付けファイルのひな形を作成します. - 2.物体認識ラベル付けと同様に
Viewer
でラベル付けを行います. - landmarkは番号と配置部位を決めておく必要があります.
- Meetupの時のデータは
- 右目上
- 右目下
- 左目上
- 左目下
- 右口角
- 左口角
- 上唇
- 下唇
として設定しています.
5.表情認識モデル学習
- ラベル付けが完了後bash on ubuntu on windowsのpython環境で
trainLandmark.py
を実行して表情認識モデルを作成します. - 学習されたモデルデータは
.dat
ファイルとなります.
まとめ
利用したpythonスクリプトとラベル付け用Windowsプログラムは以下で公開しています.
次回はWindows上で因幡はねるさんの表情認識を行いネットワークに送信するまで行います.