前回の Cognitive Services の Computer Vision API の利用に引き続いて、
今回は Face API を .NET (C#) で試してみたいと思います。
Cognitive Services の各 API を利用するには、まずアカウントのページから
サブスクリプションを登録してサブスクリプション キーを入手します。
Visual Studio で新規のプロジェクトを作成して (ここでは WPF とします)、
NuGet で Microsoft.ProjectOxford.Face をインストールします。
画像から顔を検出するには、次のようなコードを記述します。
(これは完全なコードではなく、API を呼び出す部分のみです。)
using System; | |
using System.Diagnostics; | |
using System.IO; | |
using System.Windows; | |
using Microsoft.ProjectOxford.Face; | |
namespace FaceWpf | |
{ | |
public partial class MainWindow : Window | |
{ | |
public MainWindow() | |
{ | |
InitializeComponent(); | |
} | |
const string SubscriptionKey = "0123456789abcdef0123456789abcdef"; | |
const string ImagePath = @"Images\temp.jpg"; | |
FaceServiceClient client = new FaceServiceClient(SubscriptionKey); | |
async void DetectAsync() | |
{ | |
try | |
{ | |
using (var stream = File.OpenRead(ImagePath)) | |
{ | |
var faces = await client.DetectAsync(stream, returnFaceAttributes: (FaceAttributeType[])Enum.GetValues(typeof(FaceAttributeType))); | |
// 各情報を取り出します。 | |
var age = faces[0].FaceAttributes.Age; | |
var rectangle = faces[0].FaceRectangle; | |
} | |
} | |
catch (Exception ex) | |
{ | |
Debug.WriteLine(ex); | |
} | |
} | |
} | |
} |
FaceServiceClient.DetectAsync メソッドの第 1 引数で画像を指定します。
画像は、Web 上の URL で指定するか、Stream を介して直接送ります。
前回は URL を指定しましたが、今回は Stream を使っています。
また、returnFaceAttributes という引数で、何の判定をするか (年齢、性別、眼鏡の有無など) を
IEnumerable<FaceAttributeType> 型で指定します。
上のコードでは、すべての情報を取得するように指定しています。
目や鼻などの特徴点の座標を判定するには、returnFaceLandmarks 引数に true を指定します。
実行結果は Face[] 型で、人数分の顔情報が格納されています。
実際にサンプル アプリを作成して試してみましたが、以下の注意点があります。
- Computer Vision API にも年齢・性別を推定する機能がありますが、同一の結果にはならないようです。
- 20 回に 1 回くらいの割合でエラーとなることがあるため、try-catch ステートメントは必須です。
アプリの要件によってはリトライも検討したほうがよいでしょう。
画像ファイル自体が原因となる場合もあるようです (サイズが小さいなど)。 - (本題の Face API とは直接関係ないですが) JPEG ファイルは DPI が異なる場合があり (既定では 96)、
Image コントロールに直接読み込ませると DPI によりサイズが変化し、
Face API から取得した座標のスケールと異なってしまいます。
したがってこのサンプルでは、あらかじめ BitmapImage オブジェクトに画像を読み込ませて、
その PixelWidth および PixelHeight プロパティを利用しています。
作成したサンプル
FaceWpf (GitHub)
前回: Cognitive Services の Computer Vision API の利用
バージョン情報
.NET Framework 4.5
Microsoft.ProjectOxford.Face 1.1.0
参照
Face API
How to Detect Faces in Image
Face API (Reference)
Microsoft Cognitive Services を始める ~ 全21種のサービス概説と開発準備
de:code 2016 > DBP018-Microsoft Cognitive Services 入門 → サンプルコード解説