学生証と顔認証で本人確認してみる [2] 〜Face APIにユーザーを覚えさせよう〜


先ほどぶりです。たてしきと申します。
本人確認しようってやつの続きです(雑)

お品書き

学生証と顔認証で本人確認してみる [1] 〜MS Azure、Face APIの利用準備をしよう〜
学生証と顔認証で本人確認してみる [2] 〜Face APIにユーザーを覚えさせよう〜 ←いまここ!
学生証と顔認証で本人確認してみる [3] 〜Node-REDを使ってシステムを構築しよう〜 New!
学生証と顔認証で本人確認してみる [4] 〜実際に使ってみよう〜 (仮) (執筆中)

学習のお時間

AIを使う上で欠かせないものといえば、やっぱり学習ですよね。
というわけでFace APIを学習させていきましょう。

Face APIの準備

1. PersonGroupを作成する

"PersonGroup"、つまり人物のグループを作ってその中に"PersonGroup Person"、つまりユーザーを、その中に顔情報を記録していくわけです。

Cognitive Services APIs Reference - PersonGroup - Createより、グループを作成します。緑色のやつです。
Hostに関しては前回の通り。
Query parameters - personGroupIdにはPersonGroupの名前を入力します。英小文字、数字ぐらいしか使えないみたいです(例ではauthlist)。
Headersもいつも通りに入力してください。

今度はbodyを編集します。
nameの欄には表示される名前を入力します。ほとんど使いませんが。(例では大学の学生リスト)
userDataは今回はまだ使わないので消してあげてください。
recognitionModelはrecognition_04に変更してあげてください。最新版のほうがいいです。

「Send」を押すと作成できます。

2. Personを追加する

ユーザーを作成します。黄色のやつです。
Cognitive Services APIs Reference - PersonGroup Person - Createから作成します。
Query parameters - personGroupIdには先ほど作成したグループのID(ここではauthlist)を入力します。

body部分のuserDataはまたしてもいらないので消してあげてください。
nameにユーザーの名前(ここではTestuser01)を入力します。

「Send」を押すと、返り値にpersonIdというものが入ってます。

return
{
     "personId": "aa0dadea-a031-45c9-a759-1a5a3fe93cfe"
}

これがユーザーを識別するUUIDになるのでどこかに保存しておきます。

3. PersistedFaceを登録する

顔写真を登録します。オレンジ色っぽいやつです。今回は班のメンバーの写真を登録しました。
もちろん枚数が多い方が精度が高くなりますが、実用化するわけでもないので僕の写真はとりあえず100枚準備しました。
Cognitive Services APIs Reference - PersonGroup Person - Add Faceからも登録できますが、圧倒的に時間がかかります。
というわけで、サクッとPythonでコードでも書いて自動化しましょう。

main.py
import requests, glob, os, time

resourceId = "tsukuru-system-faceapi" # リソースID
personGroup = "authlist" # さっき作ったグループID
personId = "aa0dadea-a031-45c9-a759-1a5a3fe93cfe" # さっきのpersonId
detectionModel = "detection_03" # 最新モデル
subKey = "********************" # サブスクキー

accessCount = 0 # アクセス制限用カウンタ

def main():
    imageList = glob.glob(".\\images\\"+personId+"\\image_*.jpg") # 保存フォルダから画像を選択 (環境によって書き換えてください)
    for image in imageList:
        print("Reading "+os.path.basename(image)+" ... ", end="") # デバッグ
        binData = open(image, "rb").read() # バイナリで読み込む
        print("OK. Uploading ... ", end="") # デバッグ
        response = requests.post(
            "https://"+resourceId+".cognitiveservices.azure.com/face/v1.0/persongroups/"+personGroup+"/persons/"+personId+"/personFaces?detectionModel="+detectionModel,
            headers={"Content-Type": "application/octet-stream", "Ocp-Apim-Subscription-Key": subKey},
            data=binData
        ) # 顔情報を登録する
        op = str(response.status_code)+" OK" if (response.status_code == requests.codes.ok) else str(response.status_code)+" Failed"
        print(op) # デバッグ
        print(response.json) # デバッグ
        accessCount += 1 # アクセスカウント (アクセス制限対策)
        if accessCount >= 20:
            time.sleep(60) # 1分待機
            accessCount = 0 # カウンタをリセット

if __name__ == "__main__":
    main()

py main.pyで実行です。あとは登録が終わるまで待つ。

4. トレーニングする

いよいよ学習させます。Cognitive Services APIs Reference - PersonGroup - Trainから指示します。
Query parameters - personGroupIdにはグループのID(ここではauthlist)を入力します。


「202 Accepted」となれば学習が開始されてます。
Cognitive Services APIs Reference - PersonGroup - Get Training Statusから学習状況を確認できます。

100枚程度なら1秒程度で学習できました。おそろしく速い学習、オレでなきゃ見逃しちゃうね

お疲れさまでした

学習まで完了しました。次はNode-REDを用いつつ、顔認証テストとシステム構築を行っていきます。

前: 学生証と顔認証で本人確認してみる [1] 〜MS Azure、Face APIの利用準備をしよう〜
次: 学生証と顔認証で本人確認してみる [3] 〜Node-REDを使ってシステムを構築しよう〜 (仮) (執筆中)