先日に引き続き、AWSから出ているAIのサービスを使って遊んでいこうと思います。
今回使うサービスはAmazon Rekognitionという画像分析のツールです。
Rekognitionは画像や動画の分析を自動化してくれるシステムで、画像の顔認証や、物体へのラベルの付与、動画の動線の検出などを自動で行ってくれます。
アメリカのアメフトリーグのNFLでもプレーの分析のためにRekognitionが用いられているようです。
今回はこのRekognitionを用いて、1枚の画像に写っている人物を他の画像から抜き出していきます。
条件変えて、どんな画像が抜き出せるのか検証します。
#コード
コードは以下のとおりです。
# 各種インポート
import boto3
import json
import sys
from PIL import Image
# コマンドライン引数が3つじゃなかったら抜ける
if len(sys.argv) != 3:
print('python', sys.argv[0], 'source-image', 'target-image')
exit()
# クライアントサービスを呼び出し
rekognition = boto3.client('rekognition')
# 画像を読み込んで比べる
with open(sys.argv[1], 'rb') as source:
with open(sys.argv[2], 'rb') as target:
result = rekognition.compare_faces(
SourceImage={'Bytes': source.read()},
TargetImage={'Bytes': target.read()})
print(json.dumps(result, indent=4))
# 2枚目の画像から顔を抜き出して表示
image_in = Image.open(sys.argv[2])
w, h = image_in.size
image_out = Image.new('RGB', (w, h), (200, 200, 200))
for face in result['FaceMatches']:
box = face['Face']['BoundingBox']
left = int(box['Left']*w)
top = int(box['Top']*h)
right = left+int(box['Width']*w)
bottom = top+int(box['Height']*h)
image_out.paste(
image_in.crop((left, top, right, bottom)),
(left, top))
image_out.save('compare_'+sys.argv[2])
image_out.show()
コマンドライン引数でこのソースが置いてあるフォルダ配下の画像を指定します。
1つ目に指定した写真にいる人物を2つ目に指定した写真から抜き出すという形ですね。
また、Similarityというパラメータでその切り抜いた画像の類似度も出してくれます。
#No.1 正面
まずは正面の写真でチャレンジ
元になる写真はこちら
そして抜き出す写真はこちら
言わずと知れた日本のアイドルグループ、嵐の松潤です。
下の写真は松潤とニノの不仲説が流れたときの週刊誌の写真です。
特にトラブルの無いまま、引退まで元気に活動してくれることを願います。
抜き出して見るとこんな感じ
ここらへんは余裕ですね。5秒も経たずに抜き出してくれました。
Similarityは99.24%でした。
#No.2 斜め
では少し難易度を上げて、横顔にしてみましょう。
元の画像はこちら
抜き出す画像はこちら
美しすぎる石原さとみ様の登場です。
女優とかアイドルとかに疎い私でも流石に石原さとみは知ってます。
2015年に「世界で最も美しい顔100選」に選ばれたのも納得ですね。
そんな美しい顔を切り抜いてみましょう。
余裕です。
永久保存版で保存しておきましょう。
こうした画像がAmazonがたくさん集まるかと思うと、Amazonに就職したくなりますね。
こちらのSimilarityは99.55%ということで、全く問題ないようです。
#No.3 変装
では顔の一部が隠れるとどうなるのでしょうか?
元画像はこちら
抜き出す画像がこちら
大人気タレントのりゅうちぇるが、自身のツイッターに投稿していた変装ですが、ファンには一発でバレていたようです。
Rekognitionは見破れるのか??
結果はこちら
流石に顔と髪型を隠すと無理だったか…
ではこちらではどうでしょうか?
りゅうちぇるが有名になり始めた頃の写真です。
この頃はおバカキャラだったのに、今やカリスマタレント的なポジションを確立しております。
もはやこの変わりようは変装と言ってもいいレベル。
この変化にRekognitionは対応できるのかは注目です。
結果はこちら!
いけました!
恐らく顔のパーツの位置や、骨格などから判断しているのでしょう。
メイクやアクセサリーで騙されることはありませんでした。
こちらのSimilarityは97.09%です。
松潤や石原さとみに比べると多少落ちてはいますが、問題ないレベルでしょう。
よかったね、りゅうちぇる。
#No.4 昔の写真
では時系列の変化には対応できるのでしょうか?
元画像はこちら
抜き出す画像はこちら
佐藤健の卒業アルバムの写真です。
芸能人の変化がすごい卒業写真ということで有名です。
また、卒業写真ということもあって、少し画質が荒いですが、Rekognitionは判断できるのでしょうか?
結果はこちら
すごい
ちゃんと抜き出してくれました。
恐らく私の親戚より判断能力が優れていることは確かでしょう。
Similarityは94.92%でした。やはり昔の写真だと少し類似度は落ちるようですね。
#No.5 集団の中の1人
今までは1人か2人の画像を切り抜いていましたが、たくさん顔があった場合にはどのようになるのでしょうか?
元画像はこちら
抜き出す画像はこちら
アイドル戦国時代と呼ばれる2010年代の伝説的なAKBメンバーです。
この時にAKBヲタをやっていた友達に「だいたい同じ顔じゃん」と言ったら、それぞれの特徴について力説されたのを覚えています。
この大勢の中から篠田麻里子だけを抜き出すことはできるのでしょうか?
できた…すごい…
たくさんの顔を判断しているので、他の画像に比べて時間はかかりましたが、しっかり判断してくれました。
Similarityも98.86%と高い値を示しています。
人の多さや顔の小ささは画像解析の障壁にはならないようです。
#番外編 ウォーリー探せるんじゃね?
ここまで精度が良いと、ウォーリーをさがせなんて一瞬で終わるんじゃね?と悪巧みをしてみました。
早速やってみましょう
元画像はこちら
抜き出す画像はこちら
毎回ウォーリーをさがせをやるときは本当にいるのか不安になりますよね。
ただ、確かに右上の方にいます。是非探してみてください。
Rekognitionに判断させてみましょう。
結果はこちら
さすがに厳しかったか…
イラストは難しいみたいですね…
元画像同士で抜き出させてみると
しっかり抜き出せているので、認識は出来ているのですが、他のイラストから探すのが難しいようですね。
ウォーリーが左下に大きめに写っているこちらの画像
こちらを抜き出そうとしても出来ませんでした。
#まとめ
最近はiPhoneなどにも顔認証が搭載されて、我々の身近に顔認証があるような社会になってきました。
ユーザーとしてだけではなく、開発者としても参入障壁がすごく落ちて、こうしてすぐにAIによる画像解析ができるようになっているので、是非皆さんも試してみてください!
#参考文献
今回のコードはAWSでつくる AIプログラミング入門という本から引用しました!
セットアップも詳しく書いてあるし、サンプルソースも豊富ですぐにAWSのAIのサービスが使えるようになっているので是非読んでみてください!