1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-06-04

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

お品書き

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

学習のお時間

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

Face APIの準備

1. PersonGroupを作成する

"PersonGroup"、つまり人物のグループを作ってその中に"PersonGroup Person"、つまりユーザーを、その中に顔情報を記録していくわけです。
構造1.png
Cognitive Services APIs Reference - PersonGroup - Createより、グループを作成します。緑色のやつです。
Hostに関しては前回の通り。
Query parameters - personGroupIdにはPersonGroupの名前を入力します。英小文字、数字ぐらいしか使えないみたいです(例ではauthlist)。
Headersもいつも通りに入力してください。
Learning-1-1.png
今度はbodyを編集します。
nameの欄には表示される名前を入力します。ほとんど使いませんが。(例では大学の学生リスト)
userDataは今回はまだ使わないので消してあげてください。
recognitionModelはrecognition_04に変更してあげてください。最新版のほうがいいです。
Learning-1-2.png
「Send」を押すと作成できます。
Learning-1-3.png

2. Personを追加する

ユーザーを作成します。黄色のやつです。
Cognitive Services APIs Reference - PersonGroup Person - Createから作成します。
Query parameters - personGroupIdには先ほど作成したグループのID(ここではauthlist)を入力します。
Learning-2-1.png
body部分のuserDataはまたしてもいらないので消してあげてください。
nameにユーザーの名前(ここではTestuser01)を入力します。
Learning-2-2.png
「Send」を押すと、返り値にpersonIdというものが入ってます。

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

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

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)を入力します。
Learning-3-1.png
Learning-3-2.png
「202 Accepted」となれば学習が開始されてます。
Cognitive Services APIs Reference - PersonGroup - Get Training Statusから学習状況を確認できます。
Learning-3-3.png
100枚程度なら1秒程度で学習できました。おそろしく速い学習、オレでなきゃ見逃しちゃうね

お疲れさまでした

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

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

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?