3
2

More than 1 year has passed since last update.

AzureのFaceAPIの出力結果を色々試してみた

Posted at

はじめに

先日、赤ちゃんの感情を読み取るベビーカメラを作った際に、AzureのFaceAPIを使ったのですが、感情以外にもいろいろな情報を読み取ることができそうなので、どんな情報があるのか試しに使ってみようと思いました。

FaceAPIを使うまでの準備

  1. Azureのコンソールで「すべてのサービス」からFaceAPIを選択
    face1.png

  2. 基本情報を入れてインスタンスの作成
    facc2.png

  3. 作成したインスタンスからキーとエンドポイントの情報を取得
    facc3.png

  4. これでAzure側の準備は完了です

FaceAPIの使い方

以下のようなコードをwifiにつないだラズパイで実行してます。ネットワークにつながった環境であれば同じコードで動くと思います。
「face_client.face.detect_with_stream」の引数の「return_face_attributes」に取得したい顔属性を設定します。どんなものが表示されるか見たいので、今回は全部の顔属性を設定しています。

※「XXXXXXXXXXXXXXXX」には作成したインスタンスのキー1の情報を指定。
※「https://YYYYYYYYYYYYYYYYY.azure.com/」には作成したインスタンスのエンドポイントの情報を指定。
※「/home/pi/ZZZZZZZZZ.jpg」には分析したい画像ファイルを指定。

#!/usr/bin/python
# coding: UTF-8

from azure.cognitiveservices.vision.face import FaceClient
from msrest.authentication import CognitiveServicesCredentials

#キーとエンドポイントを設定する
KEY = "XXXXXXXXXXXXXXXX"
ENDPOINT = "https://YYYYYYYYYYYYYYYYY.azure.com/"
face_client = FaceClient(ENDPOINT, CognitiveServicesCredentials(KEY))

# 画像を分析する
filepath = '/home/pi/ZZZZZZZZZ.jpg'
img = open(filepath, 'rb')
params =["age", "gender", "headPose", "smile", "facialHair", "glasses", "emotion", "hair", "makeup", "occlusion", "accessories", "blur", "exposure", "noise"]
detected_faces = face_client.face.detect_with_stream(img, return_face_attributes = params)

#分析結果を表示する
print(detected_faces[0].as_dict())

お試し画像その1

使用したのはこの画像です。フリー素材を使わせていただきました。
1271992_s.jpg

{'face_id': 'b2d813f9-4d75-4dff-9e70-8c488fba7c70', 
'face_rectangle': {'width': 157, 'height': 157, 'left': 298, 'top': 94}, 'face_attributes': {
'age': 1.0, 
'gender': 'female', 
'smile': 1.0, 
'facial_hair': {'moustache': 0.0, 'beard': 0.0, 'sideburns': 0.0}, 
'glasses': 'noGlasses', 
'head_pose': {'roll': 4.7, 'yaw': -5.8, 'pitch': 2.4}, 
'emotion': {'anger': 0.0, 'contempt': 0.0, 'disgust': 0.0, 'fear': 0.0, 'happiness': 1.0, 'neutral': 0.0, 'sadness': 0.0, 'surprise': 0.0}, 
'hair': {'bald': 0.11, 'invisible': False, 'hair_color': [{'color': 'brown', 'confidence': 0.9}, {'color': 'black', 'confidence': 0.77}, {'color': 'blond', 'confidence': 0.55}, {'color': 'gray', 'confidence': 0.55}, {'color': 'other', 'confidence': 0.21}, {'color': 'red', 'confidence': 0.08}, {'color': 'white', 'confidence': 0.0}]}, 
'makeup': {'eye_makeup': False, 'lip_makeup': False}, 
'occlusion': {'forehead_occluded': False, 'eye_occluded': False, 'mouth_occluded': False}, 
'accessories': [], 
'blur': {'blur_level': 'Low', 'value': 0.0}, 
'exposure': {'exposure_level': 'GoodExposure', 'value': 0.67}, 
'noise': {'noise_level': 'Low', 'value': 0.0}}}

属性の意味とお試し画像その1に対する結果

属性名 属性の意味 実行の結果
age 年齢  女の子は「1.0」歳くらいに見えるのであっていそうです
gender 性別  写っているのは女の子なので「female」となっています 
headPose 頭の向き 正面を見ているように見えますが、「roll:4.7 yaw:-5.8 pitch:2.4」になっています
smile 笑顔 女の子は笑顔なので「1.0」になっています
facialHair 顔の毛 口ひげ、あごひげ、もみあげは生えてないので。すべて「0.0」になっています
glasses 眼鏡 眼鏡をかけていないので「noGlasses」となっています
emotion 感情 幸せそうなので「happiness」の感情が1.0になっています
hair 髪  髪の特徴と髪の色です。
髪色は高い順に並んでいて「brown」が最初に表示されてます 
makeup メイク 目と口にメイクをしていないように見えるので「False」になっています
occlusion 閉塞 目や口は開いてるので「false」となっています。
「forehead_occluded」はよくわかりませんがこれも「false」になってます
accessories アクセサリー 何もつけてないので何も表示されていません
blur ぼかし 「Low」で「0.0」なので、特にピンボケのない画像ってことなのかもしれません
exposure 露光 「GoodExposure」で「0.67」なので、光の量が充分ってことなのかもしれません
noise ノイズ 「Low」で「0.0」なので、ノイズのない画像ってことなのかもしれません

お試し画像その2

全然違う結果が見たかったので、今度はこの画像を使ってみました。
口ひげ、あごひげ、もみあげが生えているので「moustache」「beard」「sideburns」が 0.6になってます。
口は完全に閉じてると思うんですが、「mouth_occluded」が「false」になっています。

4717101_s.jpg

{'face_id': '87dc75f3-3b00-42da-b60d-e58d4c2c076c', 
'face_rectangle': {'width': 87, 'height': 87, 'left': 345, 'top': 107},
'face_attributes': {
'age': 49.0, 
'gender': 'male', 
'smile': 0.937, 
'facial_hair': {'moustache': 0.6, 'beard': 0.6, 'sideburns': 0.6}, 
'glasses': 'noGlasses', 
'head_pose': {'roll': -9.8, 'yaw': -14.6, 'pitch': -8.4}, 
'emotion': {'anger': 0.0, 'contempt': 0.0, 'disgust': 0.0, 'fear': 0.0, 'happiness': 0.937, 'neutral': 0.063, 'sadness': 0.0, 'surprise': 0.0}, 
'hair': {'bald': 0.04, 'invisible': False, 'hair_color': [{'color': 'brown', 'confidence': 0.97}, {'color': 'gray', 'confidence': 0.85}, {'color': 'black', 'confidence': 0.8}, {'color': 'blond', 'confidence': 0.47}, {'color': 'other', 'confidence': 0.07}, {'color': 'red', 'confidence': 0.02}, {'color': 'white', 'confidence': 0.0}]}, 
'makeup': {'eye_makeup': False, 'lip_makeup': False}, 
'occlusion': {'forehead_occluded': False, 'eye_occluded': False, 'mouth_occluded': False}, 
'accessories': [], 
'blur': {'blur_level': 'Low', 'value': 0.0}, 
'exposure': {'exposure_level': 'GoodExposure', 'value': 0.64}, 
'noise': {'noise_level': 'Medium', 'value': 0.31}}}

お試し画像その3

次はこの画像を使ってみました。
フレームなしのメガネのせいか「glasses」が「noGlasses」になっていて、レンズを勘違いしてるのか「eye_makeup」が「true」になっています。明らかに口紅をしてますが「lip_makeup」は「false」になっています。
イアリングもしてますが、「accessories」の所には特に情報は入ってませんでした。

4047404_s.jpg

{'face_id': '66984c1a-f827-46ee-8cf2-009279212d8d', 
'face_rectangle': {'width': 165, 'height': 165, 'left': 188, 'top': 123},
'face_attributes': {
'age': 70.0, 
'gender': 'female', 
'smile': 0.0, 
'facial_hair': {'moustache': 0.0, 'beard': 0.0, 'sideburns': 0.0}, 
'glasses': 'noGlasses', 
'head_pose': {'roll': -12.3, 'yaw': -20.0, 'pitch': 16.3}, 
'emotion': {'anger': 0.002, 'contempt': 0.0, 'disgust': 0.018, 'fear': 0.196, 'happiness': 0.0, 'neutral': 0.257, 'sadness': 0.45, 'surprise': 0.075}, 
'hair': {'bald': 0.09, 'invisible': False, 'hair_color': [{'color': 'gray', 'confidence': 1.0}, {'color': 'blond', 'confidence': 0.92}, {'color': 'other', 'confidence': 0.46}, {'color': 'black', 'confidence': 0.16}, {'color': 'brown', 'confidence': 0.09}, {'color': 'red', 'confidence': 0.01}, {'color': 'white', 'confidence': 0.0}]}, 
'makeup': {'eye_makeup': True, 'lip_makeup': False}, 
'occlusion': {'forehead_occluded': False, 'eye_occluded': False, 'mouth_occluded': False}, 
'accessories': [], 
'blur': {'blur_level': 'Low', 'value': 0.02}, 
'exposure': {'exposure_level': 'GoodExposure', 'value': 0.65}, 
'noise': {'noise_level': 'Low', 'value': 0.0}}}

おわりに

FaceAPIでどんな情報が見えるのかと思っていろいろ試してみました。
メガネ、化粧、アクセサリなどの認識については多少の間違いもありそうですが、年齢や性別や感情認識を収集するようなIoTを検討する場合にはFaceAPIを使ってみるのも便利そうです。
Azureには物体検知のComputer Visionもあるので、今度はそっちのほうも触ってみたいなと思ってます。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2