Amazon Rekognition編~AWSの画像認識サービスで顔認識を試してみた~

こんにちは、Michaelです。

今回は、前回のオブジェクト・シーン認識に引き続き、画像認識サービス「Amazon Rekognition」の顔認識のデモで
試してみます。

Facial analysisのデモ

それでは顔認識デモの「Facial analysis」を試してみます。

「Facial analysis」も「Object and scene detection」のデモと同様にサンプル画像が用意されており、
画像の右に認識結果やAPIのレスポンスが表示されます。
「Facial analysis」のレスポンスは「Object and scene detection」とは異なり、表情や感情など、顔認識に
特化したものとなっています。

最初に表示されるサングラスをかけた女性のサンプル画像では、「appears to be female (女性) / 100%」、
「smiling (笑顔) / 99.4%」、「wearing sunglasses (サングラスをかけている) / 97.6%」など
女性の表情、容姿を的確にとらえられていることがわかります。

arf-01

また、「Facial analysis」では現在15までの顔を同時に認識することができます。
サンプル画像の家族の写真でも、3人の親子をそれぞれ認識して性別や表情を認識することができていました。

arf-02

試しに、人型ロボット「NAO」の写真をアップロードしてみましたが、「No faces detected」と顔の検出ができませんでした。
やはりヒトの顔でないと認識されないようです。

arf-03

そこで、同じヒト科のゴリラをアップロードしてみると・・・なんと顔として認識されました。
ただし、口の位置がずれており、正しく認識はされていないようです。

他にも、イケメン過ぎるゴリラやチンパンジー、ニホンザルも試しましたが、認識されるもの、されないものがあり、
やはりヒトでないと正確には認識できないようです。

arf-04

逆にヒトの顔でさえあれば、適応範囲は広いようで、上野の「西郷隆盛」像、「ベートーヴェン」の肖像画、
「織田信長像」というような銅像、絵画でも顔を認識できました。
ただし、やはりデフォルメの度合いにより認識の精度は変わっています。

arf-05

さらに、「織田信長像」に適当なサングラスを描き加えて、認識させてみたところ、
「not wearing eyeglasses/sunglasses」から「wearing eyeglasses/sunglasses」に変化しました。
画像をしっかり認識していることがわかりました。

arf-06

顔認識の検証

Amazon Rekognitionがどの程度の顔まで認識できるか画像加工をして試してみました。

Amazon Rekognitionの顔認証は、
デモの画面上では顔を目、鼻、口の位置を5個の点だけで表しているように見えますが、
レスポンスの内容を見ると、「Landmarks」という瞳、眉、目じりなど25項目にわたる顔のパーツと「BoundingBox」という顔の境界、そして「Pose」という顔の回転を分析して、認識していることがわかります。

なお、顔の特徴点に関する座標情報は、画像の左上を(X, Y) = (0, 0)、右下を(X, Y) = (1, 1)とする相対座標となっており、X、Yにそれぞれ幅、高さのピクセル数をかけることで、特徴点のピクセルを導出できます。

arf-07

試しにBoundingBoxを基準に顔の表示範囲を10%ずつ縮小していくと、まだ輪郭が見える90%では正常に認識されますが、80%では顔の認識が不正確になり、輪郭がほとんど見えない70%では顔を認識することができなくなりました。

arf-08

ただし、BoundingBoxのいう「境界」とは、輪郭のことではないようで、認識できなかった顔画像に「枠」を追加したところ、顔として認識させることができました。
もちろん、実際の顔の輪郭を見ているわけではないため、性別など元の画像と同じ認識をさせることはできませんでした。

arf-09

また、どれぐらいまでの顔サイズを認識できるかBoundingBoxの範囲だけを縮小して認識結果を比較してみました。
原寸から40×40pixelまではほぼ同じ認識結果を出していましたが、30×30pixelでは表情の認識に差異が発生し、20×20pixelでは認識不能となりました。
検証した写真が正面向きのくっきりした顔のため、写真によっては40×40pixelでも認識が困難になることが予想されますが、顔サイズがAPIの下限値80×80pixelより大きければ概ね認識できるのではと考えられます。

arf-10

あくびや舌を出すなど表情を変えて、認識したLandmarksや判定結果を比較してみました。

Landmarksを見ると、目を閉じる、口を大きく開けるなどの表情でも目、口の輪郭をとらえ、その表情に則した表情の判定ができていました。

また、驚くことに目が全く見えないようにサングラスを合成しても、裸眼時とほぼ同じ位置に目の輪郭をとらえていました。ただ、舌を出すなど唇の輪郭が見えないものは、画像の濃淡で判断しているようで正しい輪郭はとらえられていませんでした。

arf-11

さらに、明るさ/コントラストや色相/彩度も変化させてみましたが、多少認識の違いはあるものの、よほど輪郭や陰影が潰れない限り、広い範囲で顔認識が適応できそうなことがわかりました。

・明るさ/コントラスト
arf-12
・色相/彩度

arf-13

今回はAmazon Rekognitionの顔認識を試してみましたが、顔認識の精度はかなり高いように思いました。検証した限りでは、性能の悪いカメラでもそこそこ顔を認識できそうなので、おもちゃのカメラを使って顔認識をするなどもできるのではないでしょうか。

次回は、Amazon Rekognitionを使った顔の比較デモを検証していきます。

次回もお楽しみに!

次回記事:Amazon Rekognition編~AWSの画像認識サービスで顔の比較を試してみた~