家庭用見守りロボットを作る（Raspberry Pi2+Windows10 IoT Core+Azure）第2回：ProjectOxford FaceAPIで顔認識を体験

家庭用見守りロボットを作る（Raspberry Pi2+Windows10 IoT Core+Azure）第2回です。

#今回のテーマ
[前回](http://qiita.com/ma-watanabe/items/5cf62166cf69d21154e6)は環境構築でしたが、今回はMicrosof ProjectOxford FaceAPIと連携したWindowsサンプルプログラムを使って、顔認識を体験してみます。
Windows10とVisual Studio2015 Community（無料）をインストールしていて、Webカメラがあれば無料で試せます。
今回はRaspberry Pi2は登場しません。

# 参考にした書籍、サイト
・<a rel="nofollow" href="http://www.amazon.co.jp/gp/product/4839956790/ref=as_li_qf_sp_asin_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4839956790&linkCode=as2&tag=noahloungecaf-22">Raspberry Pi 2とWindows 10ではじめるIoTプログラミング(Amazon)</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=noahloungecaf-22&l=as2&o=9&a=4839956790" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

Windowsのサンプルプログラムが参考になりました。
※サンプルプログラムはユニバーサルアプリとして作成されてますので、WindowsPC上でアプリの起動を確認できます。

・[Microsoft/ProjectOxford-ClientSDK](https://github.com/Microsoft/ProjectOxford-ClientSDK/)
FaceAPIのサンプルソースが見れます。見るだけで結構勉強になりました。

#1.ProjectOxfordとは？
Microsoftの機械学習 画像解析サービスです。 
AzureのMachineLarningを派生させたサービスの位置付けのようです。
AzureのMachineLarningについては[別投稿](http://qiita.com/ma-watanabe/items/c1ce03e6a621fe0a92a4)で取り上げさせていただきましたので、機械学習の参考にしていただければと思います。
[How-Old.netのデモはSNS上で既に話題になっていました](http://jp.techcrunch.com/2015/05/01/20150430microsofts-project-oxford-gives-developers-access-to-facial-image-and-speech-recognition-apis/)が、そのAPIの活用にチャレンジします。
詳細については本家サイトをご参考ください。
[Microsoft Project Oxford](https://www.projectoxford.ai/)

#2.ProjectOxfordのアカウント登録をする

1.まずはProject Oxfordのトップページへアクセスしてサインインをします。
[Microsoft Project Oxford](https://www.projectoxford.ai/)
※Microsoftアカウントを持っている場合は、同じアカウントを使用することができます。
2.Project Oxfordのトップページから、「FaceAPI」をクリックして開きます。
3.「Subscribibe」をクリックすると、「Request New Keys」画面が立ち上がります。
4.「Request New Keys」画面で以下のチェックをします。
　Ⅰ.画面を下にスクロールして「Face API - Free」にチェックして
　　いることを確認します。

　Ⅱ.「term of use（利用規約）」と「privacy statement（個人情報
　　保護方針）」の内容を確認の上、「I agree to the Microsoft」に
　　チェックをします。

　Ⅲ.「I would like Microsoft to 」でProject Oxfordに関するお知らせ
　　が必要か求められますので、チェックをいれます。
　　※チェックを入れなくても先に進めます。
![Subscribe.png](https://qiita-image-store.s3.amazonaws.com/0/33021/557d9280-186d-f237-1e85-35f86e73e68f.png)

5.「Subscribe」をクリックして、しばらくすると、Subscription-Keyが発行されるのを確認できます。
![Subscribe_after.png](https://qiita-image-store.s3.amazonaws.com/0/33021/4576552b-c0b3-283b-1041-6461d88f4fa8.png)

※[補足]
私の環境では、「Face API - Free」だけチェック入れても、New Keysを発行されることができませんでした。
すべてのAPIのチェックをすれば、New Keysの発行ができましたので、もしうまくいかない方はすべてのチェックをお試しください。

6.「Face API - Free」の「Keys」の「Primary Key:」の「Show」をクリックして、Keyのコピーをしておきます。

#3.FaceAPIと連携したサンプルプログラムを動かしてみる。（Windows10）
1.サンプルプログラム「FaceAPI_UWP.zip（460KB）」をダウンロードし、解凍します。
下記のサイトに公開しています。
https://book.mynavi.jp/supportsite/detail/9784839956790.html

2.解凍後、「FaceAPI_UWP」-「FaceAPI＿UWP.sln」をダブルクリックします。

3.VisualStudioが起動すると、ユニバーサル Windows アプリ開発ツールのインストールを求められますので、インストールします。
※インストール開始の際にVisualStudioを閉じるように求められますので、閉じてから再試行します。

4.再度「FaceAPI＿UWP.sln」をダブルクリックします。
「セキュリティ警告」の画面が出ますが、「OK」をクリックして進めます。

5.「開発者用ライセンス」画面が表示されます。
「開発者向け設定」をクリックして、「開発者向け機能を使う」画面を開き、「開発者モード」を選択し、「はい」をクリックします。

6.「開発者用ライセンス」画面を「OK」でクリックして閉じます。

7.「Device」→「ローカルコンピューター」を選択して、ビルドボタン（緑の三角）（もしくはF5キー）をクリックして実行すると、FaceAPIアプリケーションが起動します。

8.右ペインのMainPage.xamlにある▷をクリックして開き、「MainPage.xaml.cs」をクリックして、開きます。

9.Makerequestソッド内の[your subscription-key]の部分を手順6でコピーしたKeyに置き換えます。

![FaceAPI_UWP (実行中) - Microsoft Visual Studio 2016_01_01 8_24_22.png](https://qiita-image-store.s3.amazonaws.com/0/33021/1c57a1a5-2623-d34c-9880-e99b48865232.png)

10.「ローカルコンピュータ」を選択して、ビルドボタン（緑の三角）（もしくはF5キー）をクリックして実行すると、FaceAPI(Detection)UWP Sampleが起動します。
![FaceAPI_UWP 2016_01_01 10_29_30.png](https://qiita-image-store.s3.amazonaws.com/0/33021/7ac224fa-45d6-d6a7-5a6c-f2c2f9bacdde.png)

11.「Take Picture」をクリックすると、写真が撮影され、
性別と年齢が赤枠の下に、認識できた人数も表示されます。
![FaceAPI_UWP 2016_01_01 10_38_58.png](https://qiita-image-store.s3.amazonaws.com/0/33021/6715774c-5bfd-f499-3747-d1d435183885.png)

12.少し小さくて見づらいですが、顔の下に性別と年齢も出ています。
性別：女性、年齢：24才・・・というサバ読み&性別間違いというとんだハプニングになりましたが、ひとまず動いたので良しとしましょう 笑。
おそらく外人が主体のデータが集まってると思いますので、日本人の顔だとまだ判定が難しいんでしょうね^^;

次回は、ProjectOxford FaceAPIを用いて、家族の写真を学習させて、写真を見せて家族の名前を判定するプログラムの作成にチャレンジします。