こんにちわ。コンサルティング&テクノロジー部の佐藤です。
この記事は「ネクストスケープ クラウド事業本部 Advent Calendar 2017」の 12/15 の記事です。
前回のDlib環境構築編に引き続き、
今回はサンプルグラムを作成してDlibの顔器官検出を試してみます。
今回はDlibのexampleに含まれている『webcam_face_pose_ex.cpp』を動かしてみます。
このサンプルはDlibが公開している既に学習済みのデータを使い、顔の器官検出を行える優れものです。
なお、Dlibのexampleフォルダにもcmakelistファイルが存在し、Visual Studio用のソリューションファイルを生成することができます。
ただし、OpenCVをローカル環境でビルドし、環境変数を設定しないとプロジェクトに含まれないようです。
そのため、今回は『webcam_face_pose_ex.cpp』の実装をコピーして使わせてもらいます。
また、今回のサンプルプロジェクトを作ることで、C++プロジェクトにおいてのライブラリ参照設定をはっきりさせようと思います。
それでははりきってC++プロジェクトを作成します。
1.サンプルプロジェクトの作成
Visual Studio 2017を開き、新規プロジェクトから、
『Visual C++』のWindows コンソールアプリケーションを任意の名前で作成します。
私は『DlibTest』という名前で作成しました。(以降もフォルダ名として出てきます)
なお、今回は前提条件としてビルド構成が Release、プラットフォームがx64を対象に話を進めていきます。
下記の順番で、プロジェクトの設定を行います。
1. プロジェクトが作成できたら、プラットフォームを『x64』に変更します。
2. プロジェクトのプロパティを開きます。
3. 構成プロパティ -> VC++ディレクトリ のインクルードディレクトリにDlibとOpenCVの下記のディレクトリを追加します。
『C:\ns\dlib-19.7』
『C:\ns\opencv\build\include』
4. 構成プロパティ -> リンカー -> 全般 の追加のライブラリディレクトリに下記パスを指定します。
『C:\ns\opencv\build\x64\vc14\lib』
『C:\dlib\dlib-19.7\build\dlib\Release』
5. 構成プロパティ -> リンカー -> 入力 -> 追加の依存ファイルに下記ファイル名を追加します。
『dlib.lib』
『opencv_world330.lib』
6. OpenCVのDLLをコピー
『C:\ns\opencv\build\x64\vc14\bin\OpenCV\opencv_world330.dll』を
『C:\ns\DlibTest\x64\Release』にコピーします。
ここまでてプロジェクトの設定は完了です。
2. 学習データのダウンロード
それでは顔器官検出用の学習データをここ からダウンロードしましょう。
プロジェクトファイルがあるフォルダ(C:\ns\DlibTest\DlibTest)にダウンロードしたファイルをコピーし、解凍すればOKです。
3. サンプルコードの入れ込み
Visual Studioのプロジェクトに含まれる『DlibTest.cpp』にすべてペーストします。
ペースト後、『#include "stdafx.h"』をコードの先頭に追加します。
4 . source.cppファイルの入れ込み
次に、 『C:\ns\dlib-19.7\dlib\all 』に含まれている、source.cppファイルをプロジェクトに追加します。
プロジェクトのソリューションエクスプローラー->DlibTest->ソースファイルを右クリックして
追加->既存の項目から
『C:\ns\dlib-19.7\dlib\all\source.cpp』 を選択してください。
追加後、source.cppの先頭に
『#include "stdafx.h"』を追加します。
それではビルドして実行してみます。
正常に動けば、下記のように顔のパーツを認識してくれます。
また、スマートフォンに表示した写真の顔も判定されます。
今後の試みとしてUWPアプリへの実装、
およびHoloLensアプリへの組み込みを検証していきたいと思います。
それでは明日のSitecoreの記事もおたのしみに!