はじめに
こんにちは、@t-osdyと申します。
Livesense Advent Calendar 2016 その3 14日目です。
先日のAWS re:inventで新サービスの発表がありました。
今回は業務とは関係ないですが、同僚の方が私の写真を取りながらデモ画面で遊んでいたのを機に、AWS Rekognition
をRuby側からサービスを触ってみたのでやったことをまとめたいと思います。
AWS Rekognitionについて
AWS Recognition – 深層学習による画像検出と認識
詳しいことは色々な方面で説明されていると思うので割愛しますが、まとめてしまうと画像ファイルから人物やその表情の分析や比較、またシーンやどういった物体が含まれているかを検出するサービスです。
今回の内容
AWSドキュメントを参考にRubyで以下のことをやりました。
- インプット画像のシーンや物体を分析(detect_labels)
- インプット画像の内の顔の表情検出(detect_face)
- 2つの画像からの顔を比較する(compare_faces)
やってみた
まずはcredential情報を設定してAWSへのアクセス準備します。Rekognition
はまだ東京リージョンがないので注意してください。(私はus-east-1
を設定しました。)
require 'aws-sdk'
require 'dotenv'
Dotenv.load
Aws.config.update({
region: ENV['AWS_REGION'],
credentials: Aws::Credentials.new(ENV['AWS_ACCESS_KEY_ID'],ENV['AWS_SECRET_ACCESS_KEY'])
})
rekognition = Aws::Rekognition::Client.new(region: Aws.config[:region], credentials: Aws.config[:credentials])
インプット画像のシーンや物体を分析
デモ画面でも試せるdetect_labels
を実行してみます。
response_detect_labels = rekognition.detect_labels(
image: { bytes: File.read(ARGV.first) }
)
response_detect_labels.labels.each do |label|
puts " #{label.name} #{label.confidence.to_i}"
end
実行結果
Animal 86
Cat 86
Mammal 86
Manx 86
Pet 86
Hardwood 68
Wood 68
Chest 67
Drawer 67
Furniture 67
Indoors 50
Interior Design 50
Room 50
猫、かわいいですね。猫だけでなくそれ以外の物体も認識してますね。すごい。
余談ですが、クロネコヤマトのダンボールに入った猫は猫を認識してくれませんでした。
インプット画像の内の顔検出(detect_face)
次にdetect_face
を使って画像内の顔を認識して、表情を分析します。
response_detect_faces = rekognition.detect_faces({
image: { bytes: File.read(ARGV.first) },
attributes: ['ALL']
})
response_detect_faces.face_details[0].emotions.each do |emotion|
puts emotion.type + " " + emotion.confidence.to_i.to_s
end
実行結果
HAPPY 99
CONFUSED 9
SAD 3
何が正しいのかはわからないですが、上の画像からCONFUSED
とSAD
が検出されている辺り精度が高く思えてきます。
2つの画像からの顔を比較する(compare_faces)
最後に2つの画像から顔を比較して類似度を表示します。
response_compare_faces = rekognition.compare_faces({
source_image:{ bytes: File.read(ARGV[0]) },
target_image:{ bytes: File.read(ARGV[1]) },
similarity_threshold: 1.0
})
puts response_compare_faces.face_matches[:similarity]
サンプル画像
sorce | target |
---|---|
実行結果
#<struct Aws::Rekognition::Types::CompareFacesMatch
similarity=0.0,
face=
#<struct Aws::Rekognition::Types::ComparedFace bounding_box=
#<struct Aws::Rekognition::Types::BoundingBox
width=0.1088888868689537,
height=0.18386492133140564,
left=0.596666693687439,
top=0.23076923191547394>,
confidence=99.9999771118164>>
ありゃ、本当か?まさかの類似度0…同じモデルさんですが帽子、角度等があると精度が落ちまだ難しいのでしょうか?(そもそもサンプルが悪かった気がする…)
※念の為、同一モデルの正面を向いた写真で何枚か試してみたところでは類似度80%くらいでした。)
まとめ
今回は公式ドキュメントをもとにAWS Rekoginiton
を触ってみました。
触りながら分析の部分とかはブラックボックスで処理結果も???となった面もありましたが、こういったディープラーニングによる画像認識が手軽に利用できる様になり気持ちが躍ります。
また、AWS RekognitionではCollection
と言われるAWS上のクラスタ(?)に画像ファイルから顔情報を格納(index_faces
)して、その情報郡に対して類似画像検索(search_faces_by_image
)と言った使い方もできるようでサービスのアイデアが出てきたので別途試してみたいと思います。