こんにちは、Michaelです。
今回は、前回の: Amazon Rekognition編~AWSの画像認識サービスで顔認識を試してみた~ に引き続き、画像認識サービス「Amazon Rekognition」の顔の比較デモで試してみます。
**Face comparisonのデモ
**
「Face comparison」のデモでは、見つけ出したい人物の画像を左側の「Reference face」に、比較する画像を右側「Compare faces」に入力します。
他のデモと同様に画面右側には、認識結果が表示され、Compare facesで検出された顔がReference faceの顔と一致しているかが割合で表示されます。
最初に表示されるサンプルでは、3人の女の子からReference faceに表示されている子を見つけ出すことができていました。
「Reference face」と単数形で書かれているように、見つけ出したい人物の画像は1人の顔だけ写っている画像を使用する必要があります。
仮に複数の人物が写っている写真を使用した場合には、その中の1人だけが比較対象となるようです。
複数の中から特定の人物を検知したい場合には、その人物を切り出して比較にかけるなど加工が必要になります。
Face comparisonはFacial analysisとは異なるAPIとして提供されていますが、内部的にはFacial analysisと同じアルゴリズムを使用しているようで、Facial analysisで顔認識ができるものであれば顔の比較ができます。
試しに、「西郷隆盛」像と、いくつかの美術品、動物を比較してみたところ、角度を変えて撮った「西郷隆盛」像を見事に当てることができていました。
なお、顔が検出されない場合にはHTTPステータスコード400が返され、顔の比較ができませんでした。
**顔比較の検証
**
Face comparisonのAPIのレスポンスは非常にシンプルで、顔の位置を示す「BoundingBox」と顔の一致率「Similarity」、そしてその信頼性を示す「Confidence」のみがJSON形式で得られます。
1{2 "FaceMatches": [3 {4 "Face": {5 "BoundingBox": {6 "Height": 0.5252403616905212,7 "Left": 0.10808863490819931,8 "Top": 0.17668269574642181,9 "Width": 0.78724551200866710 },11 "Confidence": 99.9961853027343812 },13 "Similarity": 9814 }15 ],16 "SourceImageFace": {17 "BoundingBox": {18 "Height": 0.4771634638309479,19 "Left": 0.14231669902801514,20 "Top": 0.171875,21 "Width": 0.715186476707458522 },23 "Confidence": 99.9911651611328124 }25}レスポンス上はBoundingBoxのみですが、上で述べたようにFacial analysisと同じアルゴリズムを使用しているようなので、顔の比較にはFacial analysisと同様のパラメータを使用していることが考えられます。そこで、Facial analysisと同様に写真を加工して、顔比較の可否をいくつか試してみました。
Facial analysisの顔認識では顔の境界を示すBoundingBoxのほか、顔の特徴点「Landmarks」、顔の角度「Pose」が認識の要素として使用されていました。
試しにFacial analysisでBoundingBoxと判定された範囲を基準に、顔の表示範囲を10%ずつ縮小しながら同じ顔の比較をしてみましたが、Facial analysisと同様、顔の輪郭がなくなるほどに顔の認識が困難になり、70%まで範囲を縮小した段階で顔の比較ができなくなりました。
※Amazon RekognitionのFacial analysisについてはこちらを参照してください。
このときの比較結果は、一致率88%とほぼ同一人物の顔として判定されました。このことから、人物の判定に関して、顔の輪郭は判定の対象としてあまり重視されていないことがわかります。
続いて、同じ人物が表情を変えた場合に、どの程度人物の判定が可能か試してみました。元の写真のほか、3つの表情の写真を判定してみたところ、あくびや舌を出した写真でもそれぞれ79%、98%と概ね同一人物として判定することができていました。
また、同じ写真でどの程度の変装まで人物判定ができるか試してみました。あごひげ、口ひげ、メガネ(サングラス)を装着(合成)した変装15パターンを試してみたところ、すべてのパターンで概ね同一人物と判定することができていました。
ただし、口ひげ、サングラスのように口、目にかかるような変装では認識精度が下がる傾向にあるようです。
さらに、表情を変えた場合も試してみましたが、顔のパーツが大きく歪むあくびや、濃いサングラスを装着した場合では人物判定が難しくなるものの、様々な表情、変装に対応できることが分かりました。
別の人物画像で、今度は顔の角度、表情の違う画像から人物判定を試してみました。
うつむいた顔や、斜め前、真横を向いた顔を含む6パターンを判定してみましたが、驚くことに、真横を向いた顔でも同一人物を識別することができていました。
上で比較した正面、真横向きの画像について、それぞれFacial analysisで顔パーツを分析してみたところ、2画像の特徴点の相対位置は、平面的に見て近似しているとは言い難いものでした。
それでも人物判定ができていることから、顔の特徴点を基に三次元的な顔の認識、判定をしていることが分かりました。
今回はAmazon Rekognitionを使って顔の比較、人物判定を試してみましたが、平面の顔画像の特徴点から三次元的な分析、比較ができている点はとても興味深く感じました。