いっきのblog

技術とか色々

Azure Face APIとAmazon Rekognitionで性別判定を比べてみた

どうも、くずきです。
ユーザーの画像から性別を判定する方法は何かないかと思い、Amazon RekognitionAzure Face APIを試してみたのでメモっときます。

結論を先に言うと本番環境ではAmazon Rekognitionを使って性別判定して、数十万ユーザーの識別をしているけど、結構満足いく結果になってる。

Azure Face APIとは

Microsoftが提供している画像認識のAPI
詳しくは今回省くが、こんな感じで、性別/年齢/表情/眼鏡の有無などを判定できる。

f:id:kzkohashi:20180107211535p:plain

今回選んだ理由としては、以下の記事の方が素晴らしい検証を行なっていて、識別率が高いという部分で選んだ。

qiita.com

検証用のコードはPHPを利用している。

docs.microsoft.com

ここにコード書いてあるのでこれ使えばすぐできる。
(HTTP/Request2の導入が多少めんどくさかったけど・・。)

Amazon Rekognitionとは

AWSが提供している画像認識のAPI
こっちも詳しくは書かないけど、同じように性別/年齢/表情/眼鏡の有無などを判定できる。

f:id:kzkohashi:20180107211607p:plain

違いとしては目が開いているとか、眼鏡ではなくサングラスも判定できるとかあるけど、大きい違いは

  • 年齢がRangeになっている
  • 色々なパラメーターにConfidence(信頼度)がついている

年齢はRangeになって使いづらい感が否めないけど、性別判定にConfidenceがついてるのはかなり使える。

SNSの画像を利用して比べてみた

今回は、945枚のSNSの画像を使った。
実際本番で使う画像で試したかったため、顔写真がわかりやすく乗っているような写真ではなく、ランダムで取って来ている画像のため人じゃない場合もある。
また、複数の人が写ってる画像の場合も今回は対象外にしてある。

正解画像

画像の種類 枚数
男性の画像 163枚
女性の画像 230枚
上記以外または複数の人の画像 552枚

大体がその他画像という(泣き)。

正答

種類 男性 女性 その他
Rekognition 112(68%) 174(75%) 512(92%)
Face API 75(46%) 121(52%) 522(94%)

結果から見るとRekognitionのほうがとてもよく、Face APIはちゃんと正面向いてる場合は精度は高く使いやすいんだけど、目が見えづらかったり、口が見えてないと検出率が極端に悪い。InstagramTwitter系のSNSだと、Facebookとは違い、しゃれてる画像や、少し離れた画像でとる人が多くこういう結果になったのだと思う。
例えば、こういう画像

f:id:kzkohashi:20180107211621p:plain

(Rekognitionは認識)

f:id:kzkohashi:20180107211630p:plain

(Face APIは認識せず)

こういう、これはさすがに分かるだろ〜っていうのがFace APIだと結構認識してくれなくて、、、最終的に候補からはずれてしまった。

誤答

正解が男性の場合

種類 女性 その他
Rekognition 13 38
Face API 5 83

正解が女性の場合

種類 男性 その他
Rekognition 5 51
Face API 3 106

その他が多くなるということ、検出率が低いということなんですが、
少しばかりの差ではあるが、精度に関してはFace APIのほうがたかそうだ。

まとめ

SNSの種類にもよるけど、正面の写真ではなかったり、少し遠くから取ってるような画像が多いものに関してはRekognitionが有効ということがわかった。

おまけ

f:id:kzkohashi:20180107213702p:plain

顎に手を当てれば女性になれるのかもしれない。