[Azure FaceAPI]PersonGroupに含まれる人数をカウントする。

[Azure FaceAPI]PersonGroupに含まれる人数をカウントする。

AzureのFaceAPIを使用して開発していると、PersonGroupの中に訓練済みの人物が何人含まれているかを知りたくなることがあります。例えば、無料枠の中で使おうとする場合、PersonGroupに保存できる人物はトータルで1000人が上限なので、1000人に対してどれだけ余裕があるのかは常に意識する必要があります。「countPersonGroupPerson」的なAPIがあるとありがたいのですが、残念ながら用意されていません。そこで、今回は自作で関数を作成していきます。

コード(python)

import requests
import json
# 人数をカウントしたいPersouGroupの名前を設定
groupName = "group1"

# APIで使う基本情報設定
# BASE_URLは地域ごとに異なるのでご自身の地域に合わせて設定してください。下記は東日本の場合です。
BASE_URL ="https://japaneast.api.cognitive.microsoft.com/face/v1.0/"
# SUB_KEYは各アカウントごとに割り振られているものを使用します。
SUB_KEY = "xxxxxxxxxxxxxxxxx999999999999999999999" 

# エンドポイント作成
end_point = end_point = BASE_URL + "persongroups/" + groupName + "/persons"

# APIに送る情報の設定
headers = {
    "Ocp-Apim-Subscription-Key": SUB_KEY
}
payload = {
    "personGroupId" : groupName
}

# HTTPリクエストを実行
r = requests.get(end_point,headers=headers,json=payload)

# エラー処理
if r.status_code != 200:
    #結果をかき出し
    print("HTTP通信に失敗しました。")
    print(r)
else:
    # json形式でPersonのリストを取得
    personlist = r.json()
    #結果をかき出し
    print("PersonGroup[{}]に含まれるPersonの人数は{}人です。".format(groupName,len(personlist)))

使い方

groupNameとSUB_KEYをご自身のものにしていただければ動くと思います。

詳細

PeronGroup Personの中にListというメソッドがあります。

このコマンドを使用すると、指定したPersonGroupの中に入っているすべてのPersonの情報をリスト形式で返してくれます。今回は返ってきたリストの長さを取得(len関数)することで人数をカウントしています。groupNameを変えながら繰り返し処理を行うように書き換えればすべてのPersonGroupの人数をカウントして、トータルの人数をカウントすることもできると思います。無料枠で使用する場合、1分間のトランザクションは20回までと制限されているので、繰り返し処理を実行する場合は、リクエストごとに3秒間停止するようにコーディングしてください。