Amazon Rekognition 人工知能で画像分析 Part 1

はじめに

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の使い方を紹介する予定です。

APN Consulting Partner
スーパーソフトウエアはAWSパートナーネットワーク(APN)のコンサルティングパートナーです。