この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
前回、顔認証のクラウドサービス Mercury Cloud を使って顔検知を行いました。
顔認証のクラウドサービスMercury Cloudで遊んでみる – 顔検知 –
今回は 顔比較API を使って2つの顔が同じ人物であるかどうかを確認してみようと思います。
使ってみる
前提
Mercury CloudのAPIを使うには、全てのAPI共通で認証を行っておく必要があります。
x-dateとAuthorizationのheaderが必要で、含まれていないと401エラーとなります。
前回の記事で行いましたので、本記事では詳細を割愛します。
例)
x-date: Fri, 09 Jul 2021 01:51:02 GMT
Authorization: hmac username="005c5acf-5ea9-499c-8d3e-690413f9b5b9", algorithm="hmac-sha256", headers="x-date request-line", signature="kUJ6OHiMMBZnxgSEa2ARxVAlgjC2kzjedZgxOz07i+Y="
顔比較のリクエストを作成
リクエストURI: https://{domain}/openapi/face/v1/{app_id}/compare
比較をするので2つの画像を用意します。そして、画像データはbase64でエンコードされたバイナリである必要があります
比較1
この2つの画像を比較してみましょう。 クラスメソッドの採用サイトにあった画像から引っ張ってきた同一人物の画像を使用しています。
画像データのリクエストは、
{
"one": {
"data": "/9j/4AAQSkZJRgA...Tpi3Q1lZTCn//Z",
"rectangle": {
"top": 100,
"left": 50,
"width": 300,
"height": 350
}
},
"another": {
"data": "KB2/gMyt1O0NEnY...BJRU5ErkJggg==",
"rectangle": {
"top": 100,
"left": 100,
"width": 500,
"height": 400
}
}
}
のような形式になります。
※ rectangle
フィールドがない複数の顔を含める画像の場合、画像内の最大の顔のみが比較されます.
指定される場合、長方形領域の中にある最大の顔のみが比較されます
レスポンス例
{
"trace_id": "43bfb9d4c34be7ea91b42f42d522a6a3",
"score": 0.9815845,
"one_face": {
"quality": 0.9874657,
~~~~~~
},
"another_face": {
"quality": 0.9877943,
~~~~~~
}
}
score
フィールドに2つの顔の類似度を表す値、顔検知結果を含むone_face
とanother_face
フィールドが含まれます。
上記例だと、98.15% で同一人物であるということがわかります。
すごい。
比較2
次は全く別人物の比較を行ってみましょう。
レスポンス例
{
"trace_id": "f59b5e3df570efdc2cf728d6aa5b0d90",
"score": 0.09446178,
"one_face": {
"quality": 0.8895489,
~~~~~~
},
"another_face": {
"quality": 0.9272079,
~~~~~~
}
}
score
が 0.09446178 というとても低い数値になりました。
同一人物であるという数値が9%という結果だったので、別人物と判断しても良いでしょう。
最後に
2つの画像を使って同一人物かどうかの比較をしてくれるAPIを実行しました。
score
というフィールドに結果が返ってきますが、実際に顔認証をする場合はしきい値を決めなければいけません。
そのしきい値を使って自身のプログラムで顔認証の結果を判断する必要があり、Mercury Cloudは判断を行いません。
しきい値の設定は、他人受入率(FAR)と本人拒否率(FRR)の間のトレードオフです
とされています。
しきい値の決定についてはビジネス要件とテスト結果を用いて調整を行っていく必要があります。