双子の識別
さて、顔認識について誰でも疑問に思うだろうこと、それは似ている顔の人をちゃんと区別できるのかということです。幸いにも我が家には双子の娘がいるので、どれくらいの精度で区別できるかを試してみたいと思います。
顔の検証
前回試してみたように、face groupを作成し、個人の顔を識別することが可能ですが、トレーニングが必要だったりと少し面倒です。そこで今回は、顔の検証のFace - Verifyを使用してみたいと思います。
このメソッドは、顔がface groupに含まれるか、あるいは2つの顔が同じ人物かを検証することが可能です。
まず、2人の顔が映っている写真を用いて、Detectメソッドで顔の検出を行います。
以下のようなレスポンスがありました。3歳なので、ageもほぼほぼ正確です。
[
{
"faceId": "c51b3384-0661-4171-9454-5fbbf804f887",
"faceRectangle": {
"top": 194,
"left": 469,
"width": 174,
"height": 174
},
"faceAttributes": {
"smile": 0.999,
"gender": "female",
"age": 2.9
}
},
{
"faceId": "f5acd026-a13a-4862-8060-7f67fa11b67a",
"faceRectangle": {
"top": 157,
"left": 93,
"width": 144,
"height": 144
},
"faceAttributes": {
"smile": 0.996,
"gender": "female",
"age": 3.9,
}
}
]
次にVerivyメソッドを呼び出します。
https://westcentralus.api.cognitive.microsoft.com/face/v1.0/verify
以下のように2つのFaceIdをデータとして渡すことが可能です。
{
"faceId1":"c51b3384-0661-4171-9454-5fbbf804f887",
"faceId2":"f5acd026-a13a-4862-8060-7f67fa11b67a",
}
さて、注目の結果ですが、
{
"isIdentical": true,
"confidence": 0.78104
}
confidence 0.78で同一人物と判定されました。なんともいえない微妙な結果ですが、明らかに別人と判断されないという意味では正しい結果といえます。6歳の兄の写真で再び試してみましたが、以下のような結果になりました。
{
"isIdentical": false,
"confidence": 0.42475
}
双子じゃなければ同一人物かどうかはそれなりの精度があると思われます。
まとめ
似ている顔で写っている写真を選んだというのもありますが、Verifyメソッドだけを用いて、双子の写真を区別するのはなかなか難しそうです。今回はトレーニングを伴わないVerifyメソッドを使用しましたが、トレーニングを行った場合にはおそらくもう少し精度が高くなると思われます。APIドキュメントにも、
For the scenarios that are sensitive to accuracy please make your own judgment.
と書いてありますし、認識精度が必要なシナリオの使用法については慎重に検討する必要がありますね。
あと、こういったAPIについて記事を書くとき、元の写真にオーバーレイで認識した顔を矩形表示したりしないと、JSONの中身を見るだけで楽しくないことが分かりました。
ということで、今後はOpenCVなども使っていこうと思います。