今回は、Microsoft Cognitive Servicesの顔認識サービスであるFace APIをPythonで利用してみます。
Face APIの概要
Face APIはMicrosoft Cognitive ServicesのAPIの中でも顔の認識に特化したAPIであり、顔の検出のほか、比較や類似の顔の検索、グルーピングなど様々な機能が利用できます。
顔の情報を蓄積して、顔認証に使用することもできるため、例えばロボットが顔を見てその人の名前を答えるなど、サービスのパーソナライズが可能になります。
APIキーの取得
Face APIを利用するには、まずAzureポータルにてAPIキーを取得する必要があります。
Azureポータルにサインインしたら、サービス一覧から「Cognitive Services accounts」を選択します。
リスト左上の「+追加」をクリックすると「Create」のペインが表示されるため、下記の項目を入力、選択して「作成」をクリックします。
項目 | 入力 |
Account name | 任意の名称 |
API type | 「Face API (preview)」を選択 |
場所 | 任意のリージョンを選択(現在は「米国西部」のみ) |
Pricing tier | 「F0 Free」または「S0 Standard」を選択 |
Resource group | 「新規作成」または「既存のものを使用」を選択し、リソースグループを入力 |
Legal terms | 「I Agree」 |
しばらくするとFace APIの項目が追加されます。
追加された項目をクリックし、表示されるメニューから「Keys」をクリックするとAPIキーが表示されるので、「KEY1」、「KEY2」のいずれかをコピーして控えておきます。
Face APIの利用
APIキーが取得できたら、実際にPythonを使ってFace APIの顔検出機能を利用してみます。今回は簡単に、
Face APIのリファレンス
のPython 2.7サンプルを使用して、Azure Storage上にある画像ファイルの顔検出を試してみます。
下記コードの’Ocp-Apim-Subscription-Key’に取得したAPIキー、変数「image_url」に対象の画像のURLを入力します。
・Python 2.7
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
import httplib, urllib, base64 import json # Request header headers = { # Request headers 'Content-Type': 'application/json', 'Ocp-Apim-Subscription-Key': '***********{APIキー}', } params = urllib.urlencode({ # Request parameters 'returnFaceId': 'true', 'returnFaceLandmarks': 'true', 'returnFaceAttributes': 'age,gender,smile,facialHair,headPose,glasses', }) image_url = '{画像のURL}' body = { # Request body 'url': image_url } try: conn = httplib.HTTPSConnection('api.projectoxford.ai') conn.request("POST", "/face/v1.0/detect?%s" % params, json.dumps(body), headers) response = conn.getresponse() data = json.loads(response.read()) print(json.dumps(data, indent=4)) conn.close() except Exception as e: print("[Errno {0}] {1}".format(e.errno, e.strerror)) |
コードの「Request parameters」ではレスポンスの内容を設定できます。今回はすべての情報を取得するよう設定していますが、必要な情報だけに絞ることでAPIのレスポンスを速くすることもできます。
設定項目 | 内容 |
‘returnFaceId’ | 24時間有効な顔のID |
‘returnFaceLandmarks’ | 顔の特徴点情報 |
‘returnFaceAttributes’ | age (年齢)、gender (性別)、headPose (頭の角度)、smile (笑顔)、facialHair (ヒゲ、もみあげの有無)、glasses (メガネの有無)の取得 |
上記コードを実行するとレスポンスがJSON形式で出力されます。
今回は以下の写真から顔検出を行いましたが、faceLandmarksの情報を画像に当てはめてみると、確かに顔の特徴を捉えて検出できていることが分かりました。
いかがでしたか?
次回は、Face APIで取得した情報をOpenCVで画像に描き込んでみます。
次回もお楽しみに!