Amazon Rekognitionを使って「ベストショット分類」機能をつくる!(第2回)

AWS運用自動化サービス「Cloud Automator」
この記事は1年以上前に書かれたものです。
内容が古い可能性がありますのでご注意ください。

 こんにちは。最近日経Linuxの人工知能特集でRekognitionの記事を執筆しました。こけし部 部長の坂本(@t_sakam)です。
 
 記事では、実際にRekognitionをどのように利用するかまでは触れられなかったので、Rekognitionの「顔分析」機能を利用して「ベストショット分類」機能を簡単につくってみよう、ということで前回、ブログをスタートしました。そして、「ベストショット」として判定する条件を決めるところまでをおこないました。
 
 第2回の今回はいよいよ実際にRekognition、Lambda、S3を使って「ベストショット分類」機能をつくります。
 

第1回

Amazon Rekognitionを使って「ベストショット分類」機能をつくる!(第1回)
 

日経Linux 9月号表紙

目次
  1. 処理の流れ
  2. Serverless Frameworkで簡単作成
  3. デプロイ
  4. 確認
  5. まとめ

1. 処理の流れ

 「rekognition-image-upload」というS3のバケットに画像をアップロードされたのをトリガーにしてLambdaファンクションが実行され、Rekognitionで「顔分析」をおこないます。
 その結果を元に、Lambdaファンクション内で処理が動き、「ベストショットである」と判定された場合のみ、「rekognition-bestshot」バケットにその画像がコピーされるという流れです。

2. Serverless Frameworkで簡単作成

 それでは、今回も「Serverless Framework」を使って、簡単につくりたいと思います。作業環境はEC2(Amazon Linux)で言語はPythonです。
※「Serverless Framework」についてやインストール方法などは以下の記事をご確認ください。
 
サーバーレスシステム構築のベストプラクティス! Serverless Frameworkをもっと試してみよう! API GatewayとDynamoDB編
 
 

ディレクトリ作成

 まず、「bestshot」というディレクトリを作成して、移動します。

テンプレート作成

 以下のコマンドで、Python用のテンプレートを作成します。

 以下の3ファイルが作成されました。このあと、「serverless.yml」ファイルと「handler.py」ファイルを編集します。

 

「serverless.yml」ファイルを編集

 まずは、Serverless Frameworkの設定ファイル、「serverless.yml」ファイルを編集します。

 
 以下でいくつかピックアップして補足します。
 

iamRoleStatements

 「iamRoleStatements」でS3とRekognitionが操作できるように権限を設定します。

events

 「events」では、Lambdaファンクションを起動させるトリガーを設定します。今回は「rekognition-image-upload」バケットにオブジェクトがつくられた場合、というトリガーを設定しています。「rekognition-image-upload」バケットも事前にS3に作成しておく必要はなく、ここで設定しておくとデプロイ時に作成されます。

NewResource

 こちらでアップロードされた画像が「ベストショット」だった場合の画像のコピー先である「rekognition-bestshot」バケットを設定します。ここで設定しておけば、このバケットもデプロイ時に作成されます。

 

「handler.py」ファイルを編集

 「handler.py」ファイルに実際の処理を書きます。第1回で決めた「目が開いているかどうか」を90%以上とし、「笑っているかどうか」を70%以上として判定しています。条件に一致していた場合は、S3の「rekognition-bestshot」バケットにアップロードされた画像をコピーしています。

 

3. デプロイ

 準備ができたので、あとはデプロイします。これだけで「ベストショット分類」機能は完成です。

 

4. 確認

 デプロイできたら、2つのバケットとも空であることを確認してから、S3の「rekognition-image-upload」バケットに画像をアップロードしてみます。
 

空の「rekognition-image-upload」バケット

空の「rekognition-bestshot」バケット

5つの画像ファイルを「rekognition-image-upload」バケットにアップロード

「rekognition-bestshot」バケットに「venus_5.png」だけコピーされている

venus_5.png

 

5. まとめ

 今回はRekognition、Lambda、S3を使って「ベストショット分類」機能をつくってみました。Rekognitionを使えばたったこれだけの手順でつくることができてしまうので本当に簡単ですね!
 Rekognitionの「顔分析」機能には「幸せそう」かどうかや「悲しそう」などの感情を分析する機能もあるので、そういった感情によって判断する、という分類方法もあるかもしれません。
 このように簡単に使えますので、みなさんもぜひRekognitionを試してみてください!
 
 いや〜、Amazon Rekognitionって本当にいいものですね!

AWS運用自動化サービス「Cloud Automator」