[C#] Azure Face API試してみた
2019-04-27
azblob://2022/11/11/eyecatch/2019-04-27-new-hire-training-azure-face-api-trial-000.png

初めまして。株式会社FIXERの河口です。新入社員として今回の研修で様々な技術に触れましたが、今回はAzure Face APIについて書いていきます。

Azure Face APIとは

Azure Face API は、画像に含まれている人の顔を検出、認識、分析するためのアルゴリズムを備えたコグニティブ サービスです。

一口にFace APIと言っても様々な機能があります。検出、検証、似た顔の検索、顔のグループ化、人物の特定。ここでは主に顔の検出の機能について書いていきます。

実装

1.Azureポータルを開きFace APIのリソースを作成

Azureポータル上でのface API 作成手順

2.必要な項目を入力後作成

Azure Portal, Face API

3.リソースの作成が終わると右上に通知が出てくるのでリソースに移動

通知

4.リソースに移動後、リソース管理のキーをクリック

5.Face APIにアクセスするためにキーが必要になる

リソース管理
Face API, アクセスキー

顔検出する準備が整ったのでローカルから画像を投げてみます。プログラムは以下に記載します。

using System;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Web;

namespace Face_API_Detect
{
    class Program
    {
        static void Main(string[] args)
        {
            var imageFilePath = @"画像ファイルパス";
            DetectImage(imageFilePath);
            Console.WriteLine("Hit ENTER to exit...");
            Console.ReadLine();
        }

        static async void DetectImage(string fname)
        {
            var client = new HttpClient();
            var queryString = HttpUtility.ParseQueryString(string.Empty);

            //サブスクリプションキー設定
            client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "サブスクリプションキー");
            
            //Request parameters
            queryString["returnFaceId"] = "true";
            queryString["returnFaceAttributes"] = "age,gender";

            //エンドポイント
            var uri = "https://japaneast.api.cognitive.microsoft.com/face/v1.0/detect?" + queryString;

            HttpResponseMessage response;

            var fs = new FileStream(fname, FileMode.Open, FileAccess.Read);
            byte[] byteData = new byte[fs.Length];
            fs.Read(byteData, 0, byteData.Length);

            using (var content = new ByteArrayContent(byteData))
            {
                content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
                response = await client.PostAsync(uri, content);
                var responceBody = await response.Content.ReadAsStringAsync();

                Console.WriteLine(responceBody);
            }
        }
    }
}

以下のような結果がjson形式で返ってきます。

[{"faceId":"52ce8f92-fa36-447d-b5a1-5c226e711bbb","faceRectangle":{"top":296,"left":519,"width":319,"height":319},"faceAttributes":{"gender":"male","age":22.0}}]   

顔の検出した結果、画像内の顔の位置、性別、年齢が返ってきました。さらにリクエストパラメータを指定すればより多くの情報を得ることができます。注意点として、作成したFace APIのリージョンによってリクエストURLが変わるので作成したリソースのリージョンがどこか確認してください。

顔の情報が簡単に解析できるなんてとても面白いですよね! ほかにもいろいろ機能があるので気になった方はどんどん試してみてください!

参考リンク

公式ドキュメント

https://docs.microsoft.com/ja-jp/azure/cognitive-services/face/overview

公式APIリファレンス

https://westus.dev.cognitive.microsoft.com/docs/services/563879b61984550e40cbbe8d/operations/563879b61984550f30395236