今回はCognitive ServicesのFace APIをPythonからより簡単に利用できるSDKをご紹介します。
Face APIのリクエスト
「Cognitive Services: Face APIの顔検出をPythonで試してみた」でもご紹介しましたが、Face APIはPOSTリクエストで使用するため、リファレンスに則して下記のようにheader、body、parameterをそれぞれ設定し、リクエストを行う必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#!/usr/bin/env python #coding:utf-8 import httplib, urllib import json headers = { # Request headers 'Content-Type': 'application/json', 'Ocp-Apim-Subscription-Key': '******** {APIキー}', } body = {'url': ' https://******** {画像URL}'} params = urllib.urlencode({ # Request parameters 'returnFaceId': 'true', }) conn = httplib.HTTPSConnection('westus.api.cognitive.microsoft.com') conn.request("POST", "/face/v1.0/detect?%s" % params, json.dumps(body), headers) response = conn.getresponse() result = json.loads(response.read()) print(result) conn.close() |
もちろん、同じ機能を使う限りリクエストの形式は変わらないため、上記コードを関数として定義し、変更部分を変数にしておけばいちいち書き直す必要はないのですが、Face APIには6つの機能に計28の操作が存在するため、すべてを関数として定義するのは困難です。
Python SDKを使用すると、Face APIへのリクエストがより簡単になる関数が利用できるようになるため、Face APIをより簡潔なコードで利用できるようになります。
Python SDKのインストール
Face APIのPython SDKはpipでインストールできます。
下記のコードによりインストールを行います。
1 |
$ pip install cognitive_face |
Python SDKは内部的にRequestsライブラリを使用しており、古いバージョンがインストールされている状態でSDKを実行した場合、エラーが発生してしまいます。
そのため、予めRequestsのアップデートも行っておきます。
1 |
$ pip install -U requests |
※ Requestsのバージョンが古い場合、下記のようなエラーが発生します。
1 2 3 4 5 6 7 8 9 10 |
Traceback (most recent call last): File "*******.py", line 9, in <module> result = CF.face.detect(img_url) File "/usr/local/lib/python2.7/dist-packages/cognitive_face/face.py", line 40, in detect data=data) File "/usr/local/lib/python2.7/dist-packages/cognitive_face/util.py", line 72, in request json=json, headers=headers) File "/usr/lib/python2.7/dist-packages/requests/api.py", line 44, in request return session.request(method=method, url=url, **kwargs) TypeError: request() got an unexpected keyword argument 'json' |
Python SDKの利用
Python SDKを使った場合の最も簡単なコードは下記のようなものになります。
必要になる情報は、APIキーと画像のURLのみで、このコードを実行すると最初に示したコードと全く同じレスポンスをえることができ、最初に示したコードに比べすっきりと簡潔に記述することができました。内部的にはSDKがheader、body、parameter を自動生成、補完し、FaceAPIにリクエストしているようです。
1 2 3 4 5 6 7 8 9 10 |
#!/usr/bin/env python #coding:utf-8 import cognitive_face as CF KEY = '******** {APIキー}' CF.Key.set(KEY) img_url = 'https://******** {画像URL}' result = CF.face.detect(img_url) print(result) |
上記のコードを実行すると以下のようなレスポンスが返ってきます。
レスポンスはJSON文字列ではなくリストとして出力されるため、JSONライブラリでデコードするなどの操作なしにデータを使用することができます。
1 2 3 4 5 6 7 8 9 10 11 |
[ { "faceId": "87d14da5-77d6-4f72-ab05-7ce9d11f8dde", "faceRectangle": { "width": 198, "top": 155, "height": 198, "left": 119 } } ] |
faceLandmarksなど他の情報を取得する場合には、画像のURLに続けて以下のようにパラメータを設定します。設定に関してはリファレンスに準じており、face_id、landmarksにブーリアン、attributesに取得項目を設定することで、必要なレスポンスを得ることができます。
1 |
CF.face.detect(img_url, face_id=True, landmarks=True, attributes='age,gender') |
・レスポンス
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 |
[ { "faceId": "9b447437-4e7b-4d78-b108-7cf78fcd309e", "faceRectangle": { "width": 198, "top": 155, "height": 198, "left": 119 }, "faceAttributes": { "gender": "male", "age": 23.5 }, "faceLandmarks": { "underLipTop": { "y": 316.4, "x": 217.1 }, "noseTip": { "y": 256.7, "x": 220.6 }, <中略> "pupilRight": { "y": 213.4, "x": 262.5 } } } ] |
いかがでしたか?
Face APIのPython SDKは面倒なPOSTリクエストを記述する必要がなく、シンプルにFace APIを利用することができるため、ぜひ使ってみてください。
次回もお楽しみに!