以前、顔認証アプリを作成しました(C#で顔検出アプリを作成してみるを参照)。このときはOpenCvSharpを使いましたが、今回はAzure.CognitiveServicesを使います。

キーとエンドポイントを取得する

Face API に接続するには、キーとエンドポイントが必要です。まず、ここからAzure サブスクリプション – 無料アカウントを作成します。そしてAzure サブスクリプションを入手したら、Azure portal で Face リソースを作成し、デプロイされたらキーとエンドポイントを取得します。

これはクイック スタート:Face クライアント ライブラリを使用するを参考に作成したコードです。

まず上記の手順で作成されたSUBSCRIPTION_KEYとENDPOINTを指定します。

画像から顔情報を取得する

ボタンがクリックされたら画像ファイルであることを確認してから自作メソッド DetectFaceExtractを実行します。これは非同期処理です。

取得する属性を決める

DetectFaceExtractメソッドでは最初に顔に関する何を取得するのかを決めます。

FaceAttributeType.Accessories
特定の顔にアクセサリ(帽子、眼鏡、マスクなど)があるかどうか。その信頼度スコア(0~1で評価)。

FaceAttributeType.Age
顔の推定年齢

FaceAttributeType.Blur
画像内の顔のぼかしの程度(0~1で評価)。

FaceAttributeType.Emotion
感情。喜び、悲しみ、中立、怒り、軽蔑、嫌悪感、驚き、恐怖(それぞれを0~1で評価)

FaceAttributeType.Exposure
顔の露出の程度(0~1で評価)

FaceAttributeType.FacialHair
顔ひげの有無と長さ

FaceAttributeType.Gender
性別

FaceAttributeType.Glasses
眼鏡があるかどうか。NoGlasses、ReadingGlasses、Sunglasses、Swimming Goggles

FaceAttributeType.Hair
髪の毛が見えるかどうか、はげが検出されたかどうか、どのような髪の色か。

FaceAttributeType.HeadPose
3 次元空間での顔の向き。上向きか下向きか、左向きか右向きか、回転しているか。

FaceAttributeType.Makeup
化粧しているか。

FaceAttributeType.Noise
視覚ノイズ(0~1で評価)

FaceAttributeType.Occlusion
顔のパーツをブロックするオブジェクトがあるかどうか

FaceAttributeType.Smile
笑顔表現(0~1で評価)

属性を取得する処理

これらをFaceAttributeTypeのリストに格納してIFaceClient.Face.DetectWithStreamAsyncメソッドに渡します。クイック スタート:Face クライアント ライブラリを使用するでは全部ひとつのメソッドに詰め込んでいますが長くなりすぎているので、この記事では各メソッドにわけました。

GetAccessoriesOfFaceメソッドはアクセサリがあるかどうかを文字列で返します。

GetEmotionOnFaceメソッドは喜び、悲しみ、中立、怒り、軽蔑、嫌悪感、驚き、恐怖の各感情のなかでもっともスコアの高いものと、そのスコア(0~100)を返します。

GetFacialHairOnFaceメソッドは推定される顔ひげの有無と長さを文字列で返します。

GetHairColorメソッドは髪の毛が見えるかどうか、はげが検出されたかどうか、どのような髪の色が検出されたかを文字列で返します。

HeadPoseメソッドは頭部姿勢(3次元空間での顔の向き)を文字列で返します。