Microsoft Cognitive Services の Face API を試してみる

# Microsoft Cognitive Services
お試しできるみたいなので、早速使ってみます。

- [Microsoft Cognitive Services](https://azure.microsoft.com/ja-jp/services/cognitive-services/) を使う
- 登録して Face API の subscription key を入手
- Raspberry Pi で使用するので Python 3.x を使う
- 写真は事前に撮影したものを使う

# 開発

## プログラム
関数にして、呼び出す形にしてみました。
keyFaceapi は自分で登録した subscription key を設定してください

~~~python:pyFaceapi.py
# -*- encoding:utf-8 -*-
# ----------------------------------------------------------------------
# ■初期設定
# ----------------------------------------------------------------------

# ライブラリインポート
# ------------------------------
import requests
import urllib
import json

# Bing Face API 用設定
# ------------------------------
imgFaceapi = 'faceimage.jpg'
urlFaceapi = 'https://api.projectoxford.ai/face/v1.0/detect'
keyFaceapi = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
retFaceapi = 'age,gender,headPose,smile,facialHair,glasses,emotion,hair,makeup,occlusion,accessories,blur,exposure,noise'


# ----------------------------------------------------------------------
# ■画像分析（Bing Face API） for python 3.x
# ----------------------------------------------------------------------
def useFaceapi(url, key, ret, image):

    # サーバ問合せ
    # ------------------------------
    headers = {
        'Content-Type': 'application/octet-stream',
        'Ocp-Apim-Subscription-Key': key,
        'cache-control': 'no-cache',
    }
    params = {
        'returnFaceId': 'true',
        'returnFaceLandmarks': 'false',
        'returnFaceAttributes': ret,
    }
    data = open(image, 'rb').read()

    try:
        jsnResponse = requests.post(url ,headers=headers, params=params, data=data)
        if(jsnResponse.status_code != 200):
            jsnResponse = []
        else:
            jsnResponse = jsnResponse.json()
    except requests.exceptions.RequestException as e:
        jsnResponse = []

    # 戻り値
    # ------------------------------
    return jsnResponse


# ----------------------------------------------------------------------
# ■分析実行
# ----------------------------------------------------------------------

# Bing Face API を使う
# ------------------------------
resFaceapi = useFaceapi(urlFaceapi, keyFaceapi, retFaceapi, imgFaceapi)
print(resFaceapi)
~~~

## 実行

実行ファイルと同じフォルダに自分の顔写真「faceimage.jpg」を置いて実行する

~~~
python3 pyFaceapi.py
~~~

## 実行結果
以下、分析結果

~~~text:resFaceapi
[
    {
        'faceAttributes': {
            'blur': {
                'value': 0.29,
                'blurLevel':
                'medium'
            },
            'smile': 0.0,
            'headPose': {
                'roll': -2.5,
                'pitch': 0.0,
                'yaw': -15.3
            },
            'hair': {
                'invisible': False,
                'hairColor': [
                    {
                        'color': 'black',
                        'confidence': 1.0
                    },
                    {
                        'color': 'brown',
                        'confidence': 0.98
                    },
                    {
                        'color': 'other',
                        'confidence': 0.17
                    },
                    {
                        'color': 'red',
                        'confidence': 0.12
                    },
                    {
                        'color': 'gray',
                        'confidence': 0.05
                    },
                    {
                        'color': 'blond',
                        'confidence': 0.03
                    }
                ],
                'bald': 0.01
            },
            'age': 31.7,
            'emotion': {
                'anger': 0.002,
                'surprise': 0.0,
                'contempt': 0.049,
                'neutral': 0.853,
                'disgust': 0.002,
                'happiness': 0.0,
                'sadness': 0.094,
                'fear': 0.0
            },
            'gender': 'male',
            'occlusion': {
                'eyeOccluded': False,
                'foreheadOccluded': False,
                'mouthOccluded': False
            },
            'noise': {
                'value': 0.11,
                'noiseLevel': 'low'
            },
            'facialHair': {
                'beard': 0.0,
                'moustache': 0.0,
                'sideburns': 0.1
            },
            'exposure': {
                'value': 0.43,
                'exposureLevel': 'goodExposure'
            },
            'makeup': {
                'lipMakeup': True,
                'eyeMakeup': False
            },
            'glasses': 'NoGlasses',
            'accessories': []
        },
        'faceId': 'dafdf8f1-c910-45ee-aef3-2247b446ea1d',
        'faceRectangle': {
            'height': 98,
            'width': 98,
            'top': 248,
            'left': 380
        }
    }
]
~~~

## 結果確認
結果確認します。

- 性別（gender）は男性（male）正解！
- めがね（glasses）なし（NoGlasses）正しく判定されてる！
- 年齢（age）が31.7才と判定されていました。私の年齢は30後半。。。
- 口紅（lipMakeup）あり（True）って…してません！！

他の方にも協力してもらい試してみましたが、年齢は全体的に若く判定される模様
２人以上写っている写真なら人数分の分析ができる

# 次回予告（python）
Raspberry Pi 楽しいです！大人の電子工作って気がするね（笑
今回紹介した Face API 以外に色んな API（Microsoft 以外にも Google、IBMなど）が公開されているので、試してみたいと思います！