Cognitive Services の Face API の利用

前回の 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)

FaceWpf

 

前回: 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 入門 → サンプルコード解説

Cognitive Services の Computer Vision API の利用

カテゴリー: サービス. タグ: , . 1 Comment »