この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
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で認識してくれました。素晴らしいです!