BEACHSIDE BLOG

MicrosoftとかC#を好むレンジャーの個人的メモ

Face API とEmotion API (Azure の Cognitive Services) - 画像認識の整理@201705

Azure の Cognitive Services で画像を認識するにあたり、以下4つをするのにAPIを整理したメモです。

やりたいこと サービス APIの機能名 備考
画像に顔があるかを検知したい Face API Face Detection オプションを指定して目や鼻の位置、感情認識などの情報も取得できる。
画像(顔)の感情を取得したい Emotion API Emotion Recognition Face APIでもできる…がAPIの料金はEmotionAPIの方が圧倒的に安い。
対象の顔が、複数人の中からどれかを探す (似ている人を探す) Face API Face Recognition > Finding Similar Face 事前にリストを作成しておいて、だれと似ているかを判断もできる
2つの画像(顔)から同一かどうかを判断する Face API Face Recognition > Face Verification より高度なことをしたい場合は、Face Identification (顔の識別)が使えるかも。

Overview

f:id:beachside:20170526205515j:plain

> Face APIの概要

> Face API > Face Detection (顔検知)

このAPIをコールして画像から顔を検知した場合に FaceId が生成されます。FaceId は24時間後に消えます。FaceListやPerson Groupを作って永続化させることもできます(後述)。

APIをコールする際にオプションを指定することで、顔のランドマーク(Cognitive Sericesの用語「Face Landmarks/Facial Landmarks」、以下の図)等が取得できます。

https://docs.microsoft.com/ja-jp/azure/cognitive-services/face/images/landmarks.1.jpg
(画像元:https://docs.microsoft.com/ja-jp/azure/cognitive-services/face/images/landmarks.1.jpg

取得できる様々な情報についてざっくりと説明をすると…

  • faceRectangle : 顔の位置
  • faceLandmarks : ランドマーク(上図)の位置
  • faceAttributes : 以下の顔のAttributeを取得できます。
    • age : 年齢。
    • gender : “male” (男性) または"female"(女性)
    • smile : 笑顔かどうか(0~1の値)
    • facialHair : ひげ。口ひげ、あごひげ、ほおひげの3つ
    • headPose : 顔の角度(ロール角・ピッチ角・ヨー角)を認識。ピッチ角は現状常に0。
    • glasses : 眼鏡かけるかかけてないか。'NoGlasses', ‘ReadingGlasses’, ‘Sunglasses’, ‘SwimmingGoggles’ の値が返る
    • emotion : Emotion APIでとれるのと同様の感情
    • hair : 髪が見えているかどうか。見えてるなら髪の色も
    • makeup : 顔(の目と口)に化粧しているか
    • accessory : 帽子、めがね、マスクをしているかどうか
    • occlusion : 目、鼻、口が塞がれているか
    • blur : ぼかし
    • exposure : 顔の露出レベル
    • noise : 顔のノイズレベル

ワタシが画像系の知識がないので「ん?」ってのはありますが…詳細は、Face API - V1.0 API Reference - Face - Detect にあります。

様々な情報をとれるのでAPIの料金が他より高めなのかと思いますが、顔を検知したいだけであれば、APIの料金節約のためにOpenCVとか使ってローカルでやった方がいい可能性もありますね。


Face API >> Face Recognition > Face Verification (顔の検証)

顔を1対1で同一の人物か検証します。事前にFace Detection (顔検知) のAPIを使って FaceId を取得しておき、検証したい2つの FaceId をFace Verificationをコールすると結果が返ってきます。
または、事前に Person、またはPerson Groupを作って保存しておき、それらと顔を検証することもできます。


> Face API > Face Recognition > Finding Similar Face

顔を1対Nで、似た顔を検索します。用途は、防犯カメラに映っているたくさんの人から特定の犯人を見つけるようなこととかパッと浮かびますね。

比較元の顔は FaceId です。つまり事前にFace Detectionをコールして、FaceId を取得する必要があります。比較対象として以下2つのどちらかを指定すると、類似度が返ってきます。

  • FaceIds : Face Detectionをコールすることで自動で保存されていく顔(=FaceId)のリスト。24時間で消えます。
  • faceListId : 事前に作成しておく(Create a Face List)ことで永続化されるFaceIdのリスト。現状リストの数が64、1リストあたり1000人までという上限がある。


> Face API > Face Recognition > Face Grouping

このAPIに複数のFaceIdを投げると、Face Groupを作ってくれます。1グループ=同一人物です。クラスタリングをしてくれるAPIのようですが、癖がありますので利用の際はドキュメントをチェックしましょう。


> Face API > Face Recognition > Face Identification (顔の識別)

Finding Similar Faceと似ている機能です。Face Person Group をトレーニングして認識精度を高めて利用する感じです。これも使い方や制約に癖があるので、ドキュメントを見てから使った方がよですね。


※ FaceId, FaceList, Person と Person Groupについて

これらはFaceを永続化するためのものですが、やや混乱しやすいので整理します。

FaceIdは、Face Detectionをすると取得でき、24時間だけ保存されるものです。FaceListは、FaceIdの永続化版するためのものです。正確には、画像をアップしてを生成されるpersistedFaceIdのリストです。このFaceListは、Finding Similar Faceをするために使います。

Person Groupは、Personをグルーピングするための入れ物です。まずPerson Groupを作っておき、Personを作成する際にPerson GroupのIdをセットします(後で更新もでききますが)。 Personは、name(名前)と userData(ユーザーに紐づく情報)を持つものです。そこに、248までFaceを追加できます。

https://docs.microsoft.com/ja-jp/azure/cognitive-services/face/images/person.group.clare.jpg

(画像元:https://docs.microsoft.com/ja-jp/azure/cognitive-services/face/overview

Person GroupPersonは、Face Verification (顔の検証) やFace Identification (顔の識別)で使います。

> Emotion API の概要

> Emotion API > Emotion Recognition (感情認識)

画像の感情認識は、Face Detectionでも取得できる感情認識ですが、使い分けは考えた方が良いです。理由としては、Freeの制限を超えたところでの料金が何倍に違うためです。
APIを利用するときに全般で検討すべき当たり前のことですが、プロダクトで使う際は、トランザクション量と料金の見積もりはちゃんとしておかないとAPI課金地獄になりますね。気を付けましょう。

> Emotion API > 動画関連

今回は全く書く気のない部分なので、Emotion APIでの動画関連リンクを張っておきました。

docs.microsoft.com

docs.microsoft.com

> その他のVison系のAPIの概要をさらっと

> Computer Vision API

画像や動画を分析して何をしているのかのテキスト化、OCR、サムネイルの作成などができます。

> Content Moderator

画像や動画、テキストからやらしいもの(もしくは際どいもの)かを判定するAPI

> Video API

動画から顔やモーションの検出、サムネイルの作成やブレの補正などをしてくれます。

> Video Indexer

Video APIやCognitive Servicesの様々な機能を集約したサービス。ブログで概要レベルをまとめていますのでそちらを♪

beachside.hatenablog.com

> Custom Vision Service

5月に行われたBuild 2017で発表された新機能となります。ざっくりな概要だと、ラベル付けした画像をアップロードすることで、画像判定をカスタムにできるサービスです。これについては別途まとめようと思いますのでここでは詳しく書かず…次回更新時に!

おしまい。