読者です 読者をやめる 読者になる 読者になる

はつねの日記

Kinect, Windows 10 UWP, Windows Azure, IoT, 電子工作

空気を読んで年齢を答えてくれる例のあれの裏側にあるAPIがAzure Marketplaceに登場してきました。

 Face APIっていうらしいですよ。

 

 

Marketplaceからの購入

でも、お高いんでしょう?

ふ、フリーっ!
無料ですか!

 

米国西部にしか展開できませんがさくっと作成できます。

管理用キーの取得

作成が完了するとAzureダッシュボードに「Microsoft Webサイト」にアクセスが必要だとリンクが張られているのでリンク先に移動します。

https://dev.projectoxford.ai/Developer

API仕様

Face APIには次のようなエンドポイントが公開されています。

  • Detection
  • Find Similar Faces
  • Grouping
  • Identification
  • Verification

Face APIのページ(というかProject  Oxfordのページ) には各エントリポイントを試せる「Open API Testing Console」が用意されています。

Detection

URLパラメタに指定する値は次の通り。

パラメタ名 説明
subscription-key トップページにあったPrimary Keyを指定します。
analyzesFaceLandmark 目とか口とかの画像上の位置判定の実施有無
これは年齢当てサイトでは使われていませんが、こんな判定までできるんですね。
analyzesAge 年齢推定の実施有無
analyzesGender 性別推定の実施有無
analyzesHeadPose 頭の向き判定の実施有無
pitch,roll,yawで返ってきます。
正面向いている写真だけ抽出とかにつかえそうですね。
なお、画像の中の顔の位置自体は、このパラメタがfalseでも関係なく常に返却されてきますので、それ使って顔の周りに四角い枠が描けます。

リクエストBodyにはJSON形式で画像のURLを指定します。ちゃんと自分でJSON形式で書いてくださいw

[HTTP POST]をクリックすると実行結果が返ってきます。

analyzesAgeとanalyzesGenderだけtrueにして実行してみると791msで戻ってきてますね。

16才の女性の画像であるって返ってきてますね。雨取千佳ちゃんと年齢近い!ww

ところでこのFaceIdですが他のエントリポイントで使うのでどれくらい維持されるのかと思ったら「The face ID will expire 24 hours after detection.」とのこと。24時間は保持されているみたいですね。これ利用率上がってくると時間短くなったりセッション内とかに変更されそうな予感。

そのほかの制限事項としては次のような感じです。

  • 画像フォーマットは、JPEGPNGGIF(最初のフレームだけ)、BMP
  • 画像サイズは、最大4MB
  • 顔のサイズとしては画像サイズとして36x36~4096x4096の間であれば認識
  • 1つの画像からは最大64人まで、それ以上多い時は顔の画像サイズが大きい人から
  • まだ実験段階なので年齢推定とか性別推定は性格じゃないかも

なお、画像自体を保存している訳ではなく特徴点とかそういったものみたいなので、faceIdから逆引きで画像URLを取得するAPIは用意されていないですね。

 

Detection(複数)

複数の人が写っている画像を指定してDetectionをしてみました。その結果は!

ちゃんと配列で帰ってくるんですね。

 

Find Similar Faces

顔画像の中から同一のものを抽出します。

事前にDetectionを使ってFaceIDを取得しておきます。

URLパラメタに指定する値は次の通り。

パラメタ名 説明
subscription-key トップページにあったPrimary Keyを指定します。

リクエストBodyにはJSON形式でfaceIdとfaceIdsを設定します。第二パラメタは配列なので[]で囲ってFaceIdを羅列します。

どれくらい並べられるかといえば最大100個まで。

処理速度は100ms。処理結果は第二パラメタに指定したのは姉妹で、1つめが該当人物。さて結果は?

きちんと1番目のfaceIdが返ってきましたね。

 

Grouping

最大で100個のfaceIdを指定して、同一人物ごとにグループ化します。

URLパラメタに指定する値は次の通り。

パラメタ名 説明
subscription-key トップページにあったPrimary Keyを指定します。

リクエストBodyにはJSON形式の配列でfaceIdsを設定します。

今回は3つのfaceIdを指定しています。このうちの2つが同じ人の別画像です。

応答時間は247ms。

結果は?

ちゃんと同一人物がグループ化されてます。

結果をよく見ると二重の配列になっているので、グループ化できるものが複数あった時にもgroups:[[Aさん1,Aさん2],[Bさん1],[Bさん2]]みたいな感じで返却されてきます。

 

Identification

FaceIdで指定した画像が誰なのか、事前に登録しておいたデータと顔認証を行い、特定を行います。

Identificationを使うためには、同一人物の顔画像をPersonとして登録しておき、さらに複数のPersonをPersonGroupとして登録したものを用意しておきます。

Personの作り方やPersonGroupの作り方は別エントリで説明しています。

 

PersonGroupが準備できたら、最大10人のfaceIdを配列で指定して、PersonGroupの中のPersonと比較します。

 

ヒットした場合は、FaceIdごとにCandidatesが返され、その中にPersonIdがあります。

サンプルではpersonIdに対するnameも返却されるみたいでしたが、現時点での実際の動作ではnameが返ってきません。このあたりはそのうち治っていくでしょう。

 

なお、PersonGroupのトレーニングが行われていないと次のような結果になります。

このときはPersonGroupに対するトレーニングを行ってください。

 

Verification

2つの画像から同一人物かを判定します。

事前にDetectionを使ってFaceIDを取得しておきます。例えば、

の2つの画像を比較していましょう。

事前にDetectionを使って2つの画像のFaceIdとして

d225347d-8a6c-48b6-af28-1bff90797c96

c71a4412-ce12-4015-9605-200c3d580e92

を取得しておきます。

URLパラメタに指定する値は次の通り。

パラメタ名 説明
subscription-key トップページにあったPrimary Keyを指定します。

リクエストBodyにはJSON形式でfaceId1とfaceId2を設定します。

[HTTP POST]をクリックすると実行結果が返ってきます。

応答時間は81ms。はやっ。

結果は同一人物(isIdentical=true)、適合度57.342%でした。

ちなみに同じ写真に別ID付与してやってみると適合度100%になります。

まあ当たり前ですねw

 

まとめ

Open API Testing ConsoleだけじゃなくてCode Samplesなんかもサイトから取得できます。

サポートされている言語は

と充実のラインナップです。Curlとか珍しいですね。

ぜひぜひ画像処理とかに活用してみてください。