〈プロジェクト概要〉
自動車教習所で行われている学科教習をオンライン受講可能にするためのサービスの開発を行うことになりました。
《課題》
自動車教習所で従来行われている学科教習については、
「規定の時間内、講義を受けた」という実績と証明が必要なため、オンラインの受講動画を規定の時間でユーザである生徒の方にきちんと見ていただく必要があります。
そのため、どの様にこれを実現するかがプロジェクト・システム上の最大のポイントでした。
《解決策》
サービス利用前に生徒の方の画像を登録しておき、講義動画再生中に、ある一定の間隔で生徒の顔が登録時の画像一致しているか?を認証させるようにします。
〈実装方法〉
外部の画像認証APIを用いて、動画検証を実装します。
https://azure.microsoft.com/en-us/services/cognitive-services/face/#features
Microsoft Azure が提供している、「Face detection」と「Face verification」2つのAPIを使用して本人認証システムを再現する事が可能。
Face detection は、画像の中から「顔」を抽出するAPIであり、Face verification は2つの顔を比較して同一人物かどうか、判断出来るAPIです。
Face detection から取得出来る情報は
- faceId
- faceLandmarks
- faceRectangle
- faceAttributes
になりますが、本人認証を成功させる為には、faceIdだけ必要です。
faceId のデータ自体は uuid 形式の文字列です。
例)"faceId": "c5c24a82-6845-4031-9d5d-978df9175426"
faceLandmarksや他の情報は、今回使いません。
尚、本人認証を実行するには、2つのfaceIdを Face verification APIに送信するだけです。
例)
POST https://{ドメイン}/face/v1.0/verify
{
"faceId1": "c5c24a82-6845-4031-9d5d-978df9175426",
"faceId2": "815df99c-598f-4926-930a-a734b3fd651c"
}
APIコールに成功したら、レスポンスとして、
{
"isIdentical": true,
"confidence": 0.9
}
が返却されます。
- isIdentical のフィールドは同一人物の判定
- confidence のフィールドはMicrosoft側で同一人物の割合を示している
isIdentical だけで判定は出来ますが、confidence値をプログラム側で利用して判定する事も可能です。
この一連の流れが本人認証のシステムになります。
ここまで意外と簡単に説明しましたが、プログラム上で仕込む時に下記の2点を気に掛けていました。
①faceId の有効期限
開発している中、急に顔認証が出来なくなる現象が発生して、何事かと思っていたら参照元の登録画像faceIdにエラーが発生していた事が分かりました。
Microsoftの仕様書を読んでいたら、有効期限がある事を知り、1つのfaceIdは24時間しか保たない事が発覚。
本人認証する時には、毎回有効期限が過ぎているか、確認する必要がありました。
②Microsoft側のRateLimit
ここが一番悩ましい所でありました。
Freeプランで開発/検証している中で、稀に500エラーが発生していたのですが、これはMicrosoft側の制限だったようです。1秒にAPIを実行出来る回数がFreeプランの上限数を超えてしまっていましたというわけですね。。。
この問題は、アップグレードする他解決する方法がないのです。
以上が、画像認証AIの開発を行ってみて感じた課題感や工夫点です。
ぜひ、みなさんの参考になれば嬉しいです。