Amazon Rekognitionを使って「ベストショット分類」機能をつくる!(第1回)

記事タイトルとURLをコピーする

https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200711/20200711170710.png

 こんにちは。最近日経Linuxの人工知能特集でRekognitionの記事を執筆しました。こけし部 部長の坂本(@t_sakam)です。
 
 記事では、実際にRekognitionをどのように利用するかまでは触れられませんでしたので、今回はRekognitionの「顔分析」機能を利用して「ベストショット分類」機能を簡単につくってみたいと思います。
 

日経Linux 9月号表紙

目次
  1. 「ベストショット分類」機能
  2. ベストショットの判定条件を検討する
  3. ヴィーナスの目を開けていく
  4. まとめ

1. 「ベストショット分類」機能

 せっかく写真をとっても目をつぶってしまっている写真や笑っていない写真が多かったりしてベストショットを探すのって大変ですよね…。
 今回はそんなお悩みを解消するために、S3に画像をアップロードした時に、ベストショットだけを自動で分類して別の場所にコピーする仕組みを作ります。
 文章が少し長くなったので、記事は2回に分けています。今回はその1回目です。

 

2. ベストショットの判定条件を検討する

 まず最初に、何をもって「ベストショット」とするかを決めたいと思います。
 今回は目をつぶってしまっている写真は除外したいと思います。そして笑っている写真を「ベストショット」としたいと思います。
※笑って目が開いていない写真でいい写真もあると思いますが、今回は除外しました。
 
 適切な判定条件をさぐるために、まずはRekognitionのマネジメントコンソールにあるデモ機能でどういう結果がでるのかを確認してみます。モデルは前回も登場した、「ヴィーナスの誕生」の「ヴィーナス」です。目をつぶっている状態から徐々に目を開けていきます。
※なお、今回使用している「ヴィーナスの誕生」はパブリックドメインとなっています。
 
http://blog.serverworks.co.jp/tech/2017/08/01/celebrity_kokeshi/

 
 
 まずは、「ヴィーナス」の画像をRekognitionのマネジメントコンソールのデモ機能で確認し、その結果を見てプログラムで書くときの判定条件を決めたいと思います。
 「venus_1.png」〜「venus_5.png」という目の開き具合いを5段階に変えた画像で確認します。
 

3. ヴィーナスの目を開けていく

3-1. eyes are closed 99.9% / smiling 74.1% (venus_1.png)

 最初はヴィーナスの目が完全に閉じられた状態で確認します。
 きちんと「eyes are closed」が「99.9%」となっています。「smiling」は「74.1%」となっていて、どちらかと言うと笑っていると判定されました。
https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200711/20200711171341.png

3-2. eyes are closed 80.2% / not smiling 55.8% (venus_2.png)

 次はヴィーナスの目を少し開き、薄目を開けている状態です。
 「eyes are closed」が「80.2%」、「smiling」が「not smiling」に変わり、値は「55.8%」となりました。ヴィーナスの目の開き具合いを変えているだけで、口は何も変更を入れていないのですが、「smiling」が値が減少して「not smiling」になってしまいました。このことから口角の上がり具合いだけでRekognitionが笑顔かどうかを判断しているわけではないことがわかります。
https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200711/20200711171346.png  
 デモ機能ではなく、APIで確認すると以下のような形で値が返ってきます。「笑っているかどうか」の場合だと、「Value」の値が「True」の場合は「smiling」で「False」の場合は「not smiling」と表示されます。

            "EyesOpen": {
                "Confidence": 80.28357696533203,
                "Value": false
            },
            "Smile": {
                "Confidence": 55.82002258300781,
                "Value": false
            },

 

3-3. eyes are closed 65.4% / not smiling 54.8% (venus_3.png)

 次はヴィーナスの目を更にもう少し開きました。「eyes are closed」が「65.4%」、「not smiling」は「54.8%」となりました。半目を開いた画像なので、目が開いているのか閉じているのかRekognition的には判断がつきにくい状態のようです。
https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200711/20200711171351.png

3-4. eyes are open 88.3% / smiling 72.2% (venus_4.png)

 ヴィーナスの目を更にもう少し開きました。項目名が「eyes are closed」から「eyes are open」に変わりました。「eyes are open」が「88.3%」、「smiling」も「not smiling」が「smiling」に変わり、値は「72.2%」となりました。
 ただ、人の目で見て、まだ目が開ききった状態ではなく、少し眠そうな表情の画像です。
https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200711/20200711171354.png

3-5. eyes are open 99.9% / smiling 71.1% (venus_5.png)

 最後に実際の「ヴィーナスの誕生」そのままのヴィーナスの画像で試します。「eyes are open」が「99.9%」、「smiling」は、「71.1%」となりました。
 今回はこの本物の絵の表情のみ「ベストショット」としたいので、「目が開いているか」が「90%以上」で「笑顔かどうか」は「70%以上」の場合を「ベストショット」の条件にしたいと思います。 https://cdn-ak.f.st-hatena.com/images/fotolife/s/serverworks/20200711/20200711171359.png

4. まとめ

 今回はRekognitionを使って「ベストショット分類」機能をつくるために、S3にアップロードした画像を「ベストショット」と判断する判定条件を決めるところまでおこないました。
 判定条件が定まったところで、次回は実際に「ベストショット分類」機能の作成をおこないます。RekognitionとLambdaとS3を使い(Serverless Frameworkも使い)、簡単につくりたいと思います。
 
 いや〜、Amazon Rekognitionって本当にいいものですね!
 

第2回はこちら

Amazon Rekognitionを使って「ベストショット分類」機能をつくる!(第2回)