はじめに
AWSにもディープラーニングを使ったサービスが増え始めており、その中の一つ、「Amazon Rekognition」は画像分析を簡単に行えるサービスです。
画像に含まれる物体や、顔の認識、顔の位置や表情、感情の推定などが可能で、一般的なディープラーニングによる画像分析サービスでできることはほぼ全てカバーされています。
そして、さらに良いところは、人物の顔を学習して判別ができるところで、こういったプレフィックス型のAIがあるのは、アプリケーション開発者にとってとても便利な世の中になってきましたね。
さっそく、各APIを見ていきましょう。
Object and scene detection
画像に含まれる内容、状況を分析できるAPIです。
試しにNew York Cityの街角の画像で試してみます。
「路地」「道」「街」「車」と確かに画像の内容を高精度で補足できています。
94.2%なんていう数字を叩き出せるところがディープラーニング強みです。
同じ画像でaws-cliでも試してみます。
まずアップロードしましょう。
$ aws s3 cp ./IMG_2257.JPG s3://ssw-uswest/
upload: ./IMG_2257.JPG to s3://ssw-uswest/IMG_2257.JPG
そしてdetectionを実行。
$ aws --region us-west-2 rekognition detect-labels --image '{"S3Object":{"Bucket":"ssw-uswest","Name":"IMG_2257.JPG"}}'
LABELS 94.2463607788 Alley
LABELS 94.2463607788 Alleyway
LABELS 94.2463607788 Road
LABELS 94.2463607788 Street
LABELS 94.2463607788 Town
LABELS 82.0486450195 City
LABELS 82.0486450195 Downtown
LABELS 82.0486450195 Metropolis
LABELS 82.0486450195 Urban
・
・
Facial analysis
画像の中から顔認識を行い、顔がいくつあるか、顔位置レクタングルの座標、目や口など各パーツの座標位置などを返してくれるAPIです。
ディープラーニングらしいところとして、年齢、性別、笑っているか、幸せに見えるかなどの感情までも分析してくれます。
撮ったばかりのリア充っぽい写真で試してみると、
aws-cliでは、–attributes “ALL”を付けることで詳細なデータが返ってきます。
$ aws --region us-west-2 rekognition detect-faces --image '{"S3Object":{"Bucket":"ssw-uswest","Name":"IMG_a.jpg"}}' --attributes "ALL"
FACEDETAILS 99.5733566284
AGERANGE 44 27
BEARD 99.9661483765 False
BOUNDINGBOX 0.147403687239 0.153333336115 0.190954774618 0.0977777764201
EMOTIONS 99.7837371826 HAPPY
EMOTIONS 6.48752450943 CALM
EMOTIONS 0.341820716858 CONFUSED
EYEGLASSES 99.8971786499 False
EYESOPEN 99.9983444214 False
GENDER 99.9269866943 Male
LANDMARKS eyeLeft 0.182261198759 0.258524179459
LANDMARKS eyeRight 0.214303314686 0.245224401355
LANDMARKS nose 0.202227979898 0.285905092955
LANDMARKS mouthLeft 0.189863353968 0.301656454802
LANDMARKS mouthRight 0.224157467484 0.288723319769
LANDMARKS leftPupil 0.185016259551 0.258981823921
LANDMARKS rightPupil 0.212754517794 0.246596395969
LANDMARKS leftEyeBrowLeft 0.169253438711 0.240166157484
LANDMARKS leftEyeBrowRight 0.177411094308 0.237352564931
LANDMARKS leftEyeBrowUp 0.184821873903 0.238478586078
LANDMARKS rightEyeBrowLeft 0.203291296959 0.230779290199
LANDMARKS rightEyeBrowRight 0.211873278022 0.223424091935
LANDMARKS rightEyeBrowUp 0.221158325672 0.220782786608
LANDMARKS leftEyeLeft 0.175313144922 0.260035723448
LANDMARKS leftEyeRight 0.188862934709 0.25470033288
LANDMARKS leftEyeUp 0.182431966066 0.258959382772
LANDMARKS leftEyeDown 0.182263627648 0.259245067835
LANDMARKS rightEyeLeft 0.206606715918 0.24683585763
LANDMARKS rightEyeRight 0.221117794514 0.2413431108
LANDMARKS rightEyeUp 0.214707806706 0.245497614145
LANDMARKS rightEyeDown 0.214339911938 0.24608618021
LANDMARKS noseLeft 0.196668908 0.290402919054
LANDMARKS noseRight 0.212483152747 0.284062534571
LANDMARKS mouthUp 0.206553846598 0.295882791281
LANDMARKS mouthDown 0.210586100817 0.315419733524
MOUTHOPEN 83.9619522095 False
MUSTACHE 99.9769897461 False
POSE -14.9218702316 -15.5610284805 -5.62592029572
QUALITY 60.0329208374 99.9581985474
SMILE 97.2041244507 True
SUNGLASSES 99.1343765259 False
プログラムから使うならSDKで同様のデータが返ってきます。
レクタングル、パーツ、感情などここまで細かく正確に分析してくれるのは本当に便利です。
OpenCVでカスケードファイルのパスを間違って読み込みエラーになってた頃が懐かしい。
Face comparisons
よりAmazon Rekognitionの威力を発揮するAPIがコレ。
2つの画像から人物の顔が一致するかを判定するFace comparisonsです。
これがあれば、画像や動画に誰が写っているのかを特定するプログラムが簡単に書けることになります。
AWSコンソールからアップロードすると、精度とともに結果が表示されます。
aws-cliからは、このようなコマンドで実行できます。
$ aws --region us-west-2 rekognition compare-faces --source-image '{"S3Object":{"Bucket":"ssw-uswest","Name":"IMG_2100.jpg"}}' --target-image '{"S3Object":{"Bucket":"ssw-uswest","Name":"IMG_0804.JPG"}}'
FACEMATCHES 99.0
FACE 99.9987716675
BOUNDINGBOX 0.394099056721 0.278187572956 0.204425707459 0.394099056721
SOURCEIMAGEFACE 99.9914169312
BOUNDINGBOX 0.375555545092 0.120245397091 0.170000001788 0.414723932743
検証する画像が集合写真などで、複数の顔が合った場合はどうなるかと仕様を見てみると、
If you provide a source image containing multiple faces, the service detects the largest face and uses it to compare with each face detected in the target image.(source)
複数の顔があった場合は、最も大きいサイズが使用されます。
Image moderation
Image moderationは他とは少し種類の違ったAPIで、アダルト画像チェックができるというソリューション寄りのAPIです。
画像投稿を含むサービスを作っている際には、監視や画像削除を業者に発注したり、ユーザからの報告に頼ることも多いので、プログラムで自動化できればかなり合理化できます。
- Explicit Nudity(明示的)
- * Nudity
- * Graphic Male Nudity
- * Graphic Female Nudity
- * Sexual Activity
- * Partial Nudity
- Suggestive(暗示的)
- * Female Swimwear Or Underwear
- * Male Swimwear Or Underwear
- * Revealing Clothes
という分類で、かなり事細かに画像に写されている状況を特定してくれます。
サンプルとしてこちらの「透き通る海に入るイケメンボーイ」を使ってみると、51.3%で明示的な画像という判定が出ました。
ただ、これではちょっとよく分からない微妙な結果なので、もっと正解データっぽい画像を使ってはっきりさせるしかないですね。
とはいえ、そういういかがわしい画像は手元には一切ないので、今まで見たこともダウンロードしたことも一切ないので、検索して探してくるしかないです。
どうやって探すのか皆目見当もつかないので難しいところですが、これも仕事なのでしょうがない。
時間がかかっても探し出すしかありません。
さて、0.001秒くらいで見つかったので試してみると、
98.6%明示的という結果がでました。
このAPIを使えば、投稿NG判定も簡単にできます。
まとめ
Amazon Rekognitionではディープラーニングで詳細な画像分析が可能になるため、写っている内容をもとにしたレコメンド、人物認識を利用したセキュリティ、膨大な画像の整理・カテゴライズ、自動投稿チェックなど画像周りのアプリケーション開発に役立ちます。
次回は顔を学習させて利用する、Rekognitionの使い方をご紹介いたします。