Amazon RekognitionをAWS CLIから使って二次元社員を解析してみた #reinvent
はじめに
AWS re:Invent 2016が終わって数日経ちますが、まだまだ熱気は冷めません。特にAI関連のサービスは非常に面白いです。画像解析サービスであるAmazon Rekognitionについては以下に多数のブログを書いていますので、ぜひご覧ください。
さて、皆さんご存知の通り、弊社には二次元社員であるめそ子さんがいらっしゃいます。
昨日は三次元に出張してました。
そんなめそ子さんですが、二次元社員でもちゃんとRekognitionで認識してもらえるんだろうか?というのを、AWS CLIを使ってやってみました!
事前準備
Rekognitionが使えるリージョン
Rekognitionが使えるリージョンは以下の通りです。
US East (N. Virginia) | us-east-1 |
US West (Oregon) | us-west-2 |
EU (Ireland) | eu-west-1 |
このため、aws --region us-east-1のように、Rekognitionが使えるリージョンを指定して実行します。
画像ファイルのアップロード
Rekognitionでは画像ファイルをS3バケットからインポートします。必要な画像をaws cliを使ってアップロードしておきます。
$ aws s3 cp ./mesoko.png s3://test-bucket/
RekognitionをAWS CLIで使ってみる
detect-labels
detect-labesは、GUI画面での「Object and scene detection」です。指定された画像ファイルからオブジェクトやシーン、コンセプトを検出し、ラベリングします。これには通常バージョンを使いました。
aws --region us-east-1 rekognition detect-labels \ --image '{"S3Object":{"Bucket":"test-bucket","Name":"mesoko_normal.png"}}'
結果は以下の通り。ちゃんとHumanとして認識されています。二次元社員らしくComics、Mangaなどが出てきていますね。
{ "Labels": [ { "Confidence": 98.54424285888672, "Name": "People" }, { "Confidence": 98.5442886352539, "Name": "Person" }, { "Confidence": 98.43740844726562, "Name": "Human" }, { "Confidence": 72.89351654052734, "Name": "Comics" }, { "Confidence": 72.89351654052734, "Name": "Manga" }, { "Confidence": 67.74996185302734, "Name": "Maillot" }, { "Confidence": 66.44335174560547, "Name": "Costume" }, { "Confidence": 62.694580078125, "Name": "Clown" }, { "Confidence": 62.694580078125, "Name": "Performer" }, { "Confidence": 60.902889251708984, "Name": "Heel" }, { "Confidence": 52.33467102050781, "Name": "Figurine" }, { "Confidence": 50.61745071411133, "Name": "Footwear" }, { "Confidence": 50.61856460571289, "Name": "Hippie" }, { "Confidence": 50.61745071411133, "Name": "Shoe" } ] }
detect-faces
detect-facesは、GUI画面での「Facial analysis」です。指定された画像ファイルから顏を認識、表情やその他の要素を解析します。これには8月バージョンを使いました。
aws --region us-east-1 rekognition detect-faces \ --image '{"S3Object":{"Bucket":"test-bucket","Name":"mesoko_aug.png"}}' \ --attributes "ALL"
結果は以下の通り。GenderがFemale、Smileがtrueとなっています。EyesOpen、MouthOpenもちゃんと検出出来ていますね。EmotionsがHAPPYなのも合ってます。
{ "FaceDetails": [ { "Confidence": 88.54199981689453, "Eyeglasses": { "Confidence": 99.9925765991211, "Value": false }, "Sunglasses": { "Confidence": 98.67586517333984, "Value": false }, "Gender": { "Confidence": 100.0, "Value": "Female" }, "Landmarks": [ { "Y": 0.2552224397659302, "X": 0.3957245647907257, "Type": "eyeLeft" }, { "Y": 0.25708654522895813, "X": 0.44977006316185, "Type": "eyeRight" }, { "Y": 0.2762846350669861, "X": 0.42634454369544983, "Type": "nose" }, { "Y": 0.3213154673576355, "X": 0.3897435963153839, "Type": "mouthLeft" }, { "Y": 0.32372066378593445, "X": 0.43350324034690857, "Type": "mouthRight" }, { "Y": 0.2566165626049042, "X": 0.39412373304367065, "Type": "leftPupil" }, { "Y": 0.2581627666950226, "X": 0.44744673371315, "Type": "rightPupil" }, { "Y": 0.22764962911605835, "X": 0.3792399764060974, "Type": "leftEyeBrowLeft" }, { "Y": 0.22367167472839355, "X": 0.39797037839889526, "Type": "leftEyeBrowRight" }, { "Y": 0.2365337312221527, "X": 0.41573676466941833, "Type": "leftEyeBrowUp" }, { "Y": 0.2299892008304596, "X": 0.4426124691963196, "Type": "rightEyeBrowLeft" }, { "Y": 0.2252616286277771, "X": 0.4613278806209564, "Type": "rightEyeBrowRight" }, { "Y": 0.23516058921813965, "X": 0.47599753737449646, "Type": "rightEyeBrowUp" }, { "Y": 0.2536274194717407, "X": 0.38417407870292664, "Type": "leftEyeLeft" }, { "Y": 0.25952738523483276, "X": 0.4083125591278076, "Type": "leftEyeRight" }, { "Y": 0.2499462068080902, "X": 0.39566507935523987, "Type": "leftEyeUp" }, { "Y": 0.2591436505317688, "X": 0.3952653706073761, "Type": "leftEyeDown" }, { "Y": 0.2588331997394562, "X": 0.4374157786369324, "Type": "rightEyeLeft" }, { "Y": 0.2596224844455719, "X": 0.46207863092422485, "Type": "rightEyeRight" }, { "Y": 0.25124311447143555, "X": 0.4495422840118408, "Type": "rightEyeUp" }, { "Y": 0.2607886493206024, "X": 0.4500206708908081, "Type": "rightEyeDown" }, { "Y": 0.29305756092071533, "X": 0.409304678440094, "Type": "noseLeft" }, { "Y": 0.29468250274658203, "X": 0.43120652437210083, "Type": "noseRight" }, { "Y": 0.3182951509952545, "X": 0.41752180457115173, "Type": "mouthUp" }, { "Y": 0.33339062333106995, "X": 0.4158816337585449, "Type": "mouthDown" } ], "Pose": { "Yaw": 9.999004364013672, "Roll": 0.8055953979492188, "Pitch": 17.73681640625 }, "Emotions": [ { "Confidence": 98.50025939941406, "Type": "HAPPY" }, { "Confidence": 18.25212860107422, "Type": "SURPRISED" }, { "Confidence": 1.1148333549499512, "Type": "CALM" } ], "EyesOpen": { "Confidence": 99.43682098388672, "Value": true }, "BoundingBox": { "Width": 0.14222222566604614, "Top": 0.18611110746860504, "Left": 0.3444444537162781, "Height": 0.17638888955116272 }, "Smile": { "Confidence": 99.83159637451172, "Value": true }, "MouthOpen": { "Confidence": 97.49351501464844, "Value": false }, "Quality": { "Sharpness": 30.000001907348633, "Brightness": 58.01166915893555 }, "Mustache": { "Confidence": 99.9998779296875, "Value": false }, "Beard": { "Confidence": 99.99998474121094, "Value": false } } ], "OrientationCorrection": "ROTATE_0" }
compare-faces
compare-facesは、GUI画面での「Face comparison」です。指定された2つの画像ファイルから顏をベースに認識、同一人物判定をします。これには11月バージョンと12月バージョンを使用しました。
aws --region us-east-1 rekognition compare-faces \ --source-image '{"S3Object":{"Bucket":"test-bucket","Name":"mesoko_nov.png"}}' \ --target-image '{"S3Object":{"Bucket":"test-bucket","Name":"mesoko_dec.png"}}'
結果は以下の通り。96%で一致しました。すごい。二次元社員もちゃんと見分けてる。
{ "FaceMatches": [ { "Face": { "BoundingBox": { "Width": 0.14222222566604614, "Top": 0.19722221791744232, "Left": 0.7311111092567444, "Height": 0.17777778208255768 }, "Confidence": 96.19059753417969 }, "Similarity": 96.0 } ], "SourceImageFace": { "BoundingBox": { "Width": 0.1688888818025589, "Top": 0.24166665971279144, "Left": 0.22777777910232544, "Height": 0.21111111342906952 }, "Confidence": 99.58025360107422 } }
余談ですが、8月バージョンを使ったところ、狐のお面が顔として認識されてしまいました。この辺の精度は今後に期待ですね。
さいごに
二次元社員めそ子さんも、ちゃんとRekognitionで認識してくれました。素晴らしいです!