MicrosoftのFace APIで画像認識を利用した感情分析を試してみる

このエントリーをはてなブックマークに追加

すでにLedge.aiでも紹介しているMicrosoftの「Face API」。顔認識ができるAIで、主な機能として

  • 画像中の顔を認識し、年齢や性別、感情などを推定
  • 2つの写真の人物を同一人物か検証

の2つがあります。

Ledge.aiで以前Face APIを試した際には、“画像中の顔を認識し、年齢の推定と顔検出の検証”に絞って紹介しました。

今回は、

  • どこまでヒトの感情を読み取れるのか
  • 同一人物を見分けることができるのか

という2つに挑戦していきたいと思います。

AIによる感情分析がすごい。これは大活躍するかも

今回試してみるのは、感情の部分。画像を入力すると、それぞれの感情の推定値が次のように表示されます。

"emotion" : {
  "anger": 0.003,
  "contempt": 0.008,
  "disgust": 0.0,
  "fear": 0.0,
  "happiness": 0.032,
  "neutral": 0.948,
  "sadness": 0.006,
  "surprise": 0.002
}

※ 結果は一部省略しています

この写真では感情は「中立」を意味する“neutral” が強いですね。この写真を基準にいろいろ見てみましょう。続いてはこちらの写真です。

"emotion" : {
  "anger": 0.0,
  "contempt": 0.0,
  "disgust": 0.0,
  "fear": 0.0,
  "happiness": 1.0,
  "neutral": 0.0,
  "sadness": 0.0,
  "surprise": 0.0
}

こちらの写真では、感情は「喜び」となっています。右にある数値からも、“happiness”が100%と分析されていることがわかります。喜びの笑顔はしっかり分析できたみたいです。

"emotion" : {
  "anger": 0.452,
  "contempt": 0.026,
  "disgust": 0.422,
  "fear": 0.0,
  "happiness": 0.022,
  "neutral": 0.076,
  "sadness": 0.002,
  "surprise": 0.001
}

続いては怒りの表情です。「怒り」を意味する“anger”の数値が一番高くなりました。ここからさまざまな感情の要素が少しずつ現れるようになりました。

"emotion" : {
  "anger": 0.365,
  "contempt": 0.027,
  "disgust": 0.494,
  "fear": 0.0,
  "happiness": 0.079,
  "neutral": 0.031,
  "sadness": 0.003,
  "surprise": 0.001
}

続いてはこちらの写真です。あれ?と思う方も多いかもしれません。そうです、「嫌悪感」と表されているこの写真ですが、先ほどの「怒り」の写真ととても似ています。

「怒り」の表情の数値

"emotion" : {
  "anger": 0.452,
  "contempt": 0.026,
  "disgust": 0.422,
  "fear": 0.0,
  "happiness": 0.022,
  "neutral": 0.076,
  "sadness": 0.002,
  "surprise": 0.001
}

「嫌悪感」の表情の数値

"emotion" : {
  "anger": 0.365,
  "contempt": 0.027,
  "disgust": 0.494,
  "fear": 0.0,
  "happiness": 0.079,
  "neutral": 0.031,
  "sadness": 0.003,
  "surprise": 0.001
}

先ほどの「怒り」の表と今回の「嫌悪感」の表を比較してみるとわかります、たしかにどちらも「怒り」と「嫌悪感」を表す“Anger”と“Disgust”の数値が高くなっていることがわかります。

どちらとも怒りの表情で撮ったつもりでしたが、片方は「嫌悪感」の表情になりました。認識が難しい表情なのかもしれません。

最後に「悲しみ」の表情をみてみます。

"emotion" : {
  "anger": 0.009,
  "contempt": 0.027,
  "disgust": 0.027,
  "fear": 0.003,
  "happiness": 0.001,
  "neutral": 0.383,
  "sadness": 0.549,
  "surprise": 0.002
}

しっかり「悲しみ」の表情分析ができているようです。

ちなみに、試しに変顔をしてみたところ、

"emotion" : {
  "anger": 0.095,
  "contempt": 0.003,
  "disgust": 0.072,
  "fear": 0.041,
  "happiness": 0.201,
  "neutral": 0.04,
  "sadness": 0.536,
  "surprise": 0.011
}

「悲しみ」の感情が圧倒的でした。ほかにもいくつか試してみたのですが、ほとんど悲しい顔をしていると判断されてしまいました。悲しいですね。

表情からの感情分析、細かい違いもしっかり見分けた分析で、想像以上に正確な結果が出ました。

感情分析がこの結果なら、同一人物の認識精度はかなり期待できそうです。

マスクをしても?二枚の写真からAIが同一人物を判別する

Face APIは表情を分析にくわえ、同一人物かどうか判別することもできます。

試しに、変化の少ない二枚の写真を判別してみました。

信頼度:0.56257

確度だけを少し変えてみたこの二枚の写真もしっかり判別してくれています。

さらに角度を変えた二枚の画像はどうでしょう。

信頼度:0.49534

こちらは別人と認識されてしまいました。光の加減が影響しているのかもしれません。

信頼度をみてみると、一枚目と大きな変化はありませんが、信頼度が0.5を下回った場合に別人と判断されるようです。

次にマスクをした場合とメガネをはずした場合で比べてみます。

信頼度:0.57708

信頼度:0.63976

どちらも同一人物と認識してくれました。

マスクだと顔が隠れてしまうため、同一人物だと認識されないのではないかと思いましたがあまり影響はないようで、信頼度も横向きのときより高いです。

次は過去の写真とくらべてみます。

信頼度:0.50355

同一人物と認識されました! こちらの右の写真が五年前のもので、左が現在のものです。

雰囲気や髪型の変化に関わらず、問題なく判別されています。目や鼻の位置から推定しているのかもしれないですね。

次にネット上のフリー素材である双子の写真をお借りして、どう判断されるか試してみます。

信頼度:0.65502

こちらは同一人物と判断されてしまいました。やはり双子はむずかしいようですね。

ちなみに別人でやってみると、

信頼度:0

こちらはまったくの別人と判別してくれています、信頼度は0ですね。

同じ性別で同じ人種だったりすると、信頼度は多少上がりますが、別人だと判別してくれます。

双子は認識することができなかったのですが、顔の角度、髪型、雰囲気の変化、メガネやマスクは、あってもしっかり判別してくれたのでなかなかの正確性だったのではないでしょうか。

「顔は情報」そんな時代がAIによって訪れる

今回紹介した感情分析、同一人物か判別するAIは具体的に、

  • 気分に適したレコメンド機能
  • 顔認識による身分証明
  • 顔判別によるセキュリティー

など、さまざまな場面での活用が考えられます。

今後、AIによる認識技術がどのように生活を変えていくのか、期待していきたいです。

今回利用したFace APIは簡単に試すことができるので、興味がある方はぜひ実際に使ってみてください。

>> Microsoft Azure Face API