Help us understand the problem. What is going on with this article?

UnityでDlibFaceLandmarkDetectorを利用した顔器官検出アプリ事始め

はじめに

ついに人物の顔、眉、目、鼻、口の輪郭ポイントが検出できるUnity Assetが登場!

UnityのAssetStoreで多機能な画像処理Asset「OpenCV for Unity」を販売しているEnox Softwareさんが、今度はDlibという機械学習のライブラリの中から顔検出および顔器官検出機能を利用可能にするAssetを公開されました。
こちらもWindows、Mac、Android、IOS、Linux、Windows10 UWP、WebGLなどのマルチプラットフォームに対応しています。

v1.2.6の更新履歴によるとAssetに同梱されている顔器官検出用学習データファイル(sp_human_face_68.dat、sp_human_face_17.dat、sp_human_face_6.datなど)は商用利用が可能であるとのことです。

1.2.6
[Common]Changed the training dataset of Shape Predictor model. Since the training dataset consists of Flickr CC0 licensed images, the Shape Predictor model files are available for commercial use.

Dlib FaceLandmark Detector (https://assetstore.unity.com/packages/tools/integration/dlib-facelandmark-detector-64314)

Dlibとは?

最新の機械学習、線形代数アルゴリズムや画像処理機能が実装されているオープンソースのC++ライブラリです。
特に顔検出や「Real-Time Face Pose Estimation」と呼ばれる顔器官検出の精度はOpenCVよりも優れていると言われています。(当記事で紹介するAssetではこの機能を利用できるようになります)
検出性能比較動画:dlib vs OpenCV face detection
(OpenCV(青丸)のパラメータ設定によっても違うと思いますが、誤検出が少ないという点でDlib(赤矩形)の方が安定しているように見えます)

dlib-logo.png

landmarked_face2.png

Real-Time Face Pose Estimation (YouTube)
http://dlib.net/

さらに詳しいことは以下のページが参考になると思います。

Dlib FaceLandmark Detectorのインポート

UnityのAssetStoreから「Dlib FaceLandmark Detector」をダウンロードし、プロジェクトにインポートします。
Assetsのインポートが完了すると、メニューに[Tools/Dlib FaceLandmark Detector/Set Plugin Import Settings]が追加されます。

Dlib FaceLandmark Detectorセットアップとサンプル実行

  1. メニューの[Tools/OpenCV for Unity/Set Plugin Import Settings]を選択してプラグインファイルの設定を行う
    QiitaDlibFLD_setup1.jpg

  2. “OpenCVForUnity/StreamingAssets/”フォルダを“Assets/”フォルダ直下に移動する
    QiitaDlibFLD_setup2.jpg

  3. “DlibFaceLandmarkDetector”フォルダ以下にある全ての “***.unity” ファイルを [Build
    Settings] – [Scene In Build]に登録する.

4.サンプルを再生

QiitaDlibFLD_sample1.jpg
(驚くほどの精度で顔のランドマークが取得できました)
QiitaDlibFLD_sample2.jpg
(ネコの顔器官検出用の学習データも用意されていました。自分で学習データを作成することも可能っぽいです)

OpenCV for Unityとの連携

OpenCVと組み合わせることで検出した輪郭ポイントを基に高度な画像処理が可能に!
「Dlib FaceLandmark Detector」単体でも顔検出と顔器官検出は可能ですが、「OpenCV for Unity」と組み合わせることで、たとえば写真の人物の顔のパーツを変形したり、二人の人物の顔を交換するなどの高度な写真加工アプリ等の作成が可能になるわけです。

//「OpenCVForUnity」の画像Matデータを「DlibFaceLandmarkDetector」にセットするコードサンプル
faceLandmarkDetector.SetImage ((IntPtr)imgMat.dataAddr (), imgMat.width (), imgMat.height (), (int)imgMat.elemSize ());

DlibFaceLandmarkDetector×OpenCVサンプル

  1. UnityのAssetStoreから「OpenCV for Unity」をダウンロードし、プロジェクトにインポート(参考記事:UnityでOpenCVを利用した顔検出・画像処理アプリ事始め
  2. Dlib FaceLandmark Detectorフォルダに同梱されている“DlibFaceLandmarkDetectorWithOpenCVSample.zip”をプロジェクト外の場所に解凍して取り出したDlibFaceLandmarkDetectorWithOpenCVSample.unitypackageをインポート

QiitaDlibFLD_setup3.jpg

  1. “DlibFaceLandmarkDetectorWithOpenCVSample”フォルダ以下にある全ての “***.unity” ファイルを [Build Settings] – [Scene In Build]に登録する。

4.サンプルを再生

QiitaDlibFLD_sample3.jpg
(OpenCVのみで同様の事をしている「FaceTracker Sample」では追従不可能な激しい動きの動画なのに、Dlibではピッタリと追従できている!)

(※追記)Dlib FaceLandmark Detectorの初期化時に画面が固まる問題への対策法の記事をアップしました。
「Dlib FaceLandmark Detector」初期化処理を別スレッドで行う方法

関連記事

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away