ヤマムギ

growing hard days.

*

Pepperで撮影した写真をAmazon Rekognitionで分析してその結果をPepperがしゃべる ~(1)AWS編~

      2018/07/10

Pepperの機能を使えるところは使って、何かしたいなあと思ってまして。
目(カメラ)が付いてて、音声(スピーカー)で話すことが出来るので、とりあえずは画像分析からかなと思いまして、Amazon Rekognitionを使ってみました。


※ソフトバンクロボティクスのPepperを活用し、私が独自に実施しているものです。

(1) PepperからはAPI Gateway経由でLambdaを実行します。
(2) Pepperからアップロードされた画像はS3に格納されます。
(3) その画像は、Amazon Rekognitionによって画像解析されてその結果がAPI Gateway経由でレスポンスンとして戻ります。
(4) レスポンスをPepperが会話文に整形して話します。

今回はAWS側の開発(1)~(3)について記載します。

AWS側にはこれらが必要です。
API GatewayとLambdaで実装します。

  • Pepperから送信される画像をS3に格納する
  • S3の画像をAmazon Rekognitionで分析する

リポジトリはGithubです。

LambdaのランタイムはPython3系です。

撮影した写真をS3に格納する

  • バイナリデータをb64decodeでデコード
  • S3オブジェクトキーをrandomで生成
  • buckt.put_objectでS3に画像ファイルをアップロード

API Gatewayの設定

バイナリメディアタイプ

[設定] – [バイナリメディアタイプ]に、image/jpg を設定

他は任意で追加

本文マッピングテンプレート

[リソース] – [統合リクエスト] – [本文マッピングテンプレート]

Content-Typeに image/jpg を追加。
テンプレートの生成は「メソッドリクエストのパススルー」を設定。

他のContent-Typeは任意で追加。

(参考)リクエストを送信するクライアント

  • 画像ファイルをdata引数にわたす
  • headersでContent-Typeで image/jpgを設定

画像を解析する

  • 引数のバケット名、オブジェクトキー対象の画像を分析
  • バージョニングしているS3の場合はバージョンIDを指定することも可能

これ1行で書けちまってるんですよね。

Rekognition 顔分析(detect_faces)のレスポンス

FaceDetailsのに画像の中の人数分の結果が配列になって戻される。

key 内容 値の例
AgeRange.Low 年齢幅の下 26
AgeRange.High 年齢幅の上 43
Smile.Value 笑顔か true or false
Smile.Confidence 笑顔の可能性 88.67390441894531
Eyeglasses.Value 眼鏡をしているか true or false
Eyeglasses.Confidence 眼鏡をしている可能性 99.99993133544922
Sunglasses.Value サングラスをしているか true or false
Sunglasses.Confidence サングラスをしている可能性 99.99896240234375
Gender.Value 性別 Male or Female
Gender.Confidence 性別の可能性 52.36514663696289
Beard.Value 髭が生えているか true or false
Beard.Confidence 髭の可能性 99.86187744140625
Mustache.Value 口ひげが生えているか true or false
Mustache.Confidence 口ひげの可能性 99.57250213623047
EyesOpen.Value 目が空いているか true or false
EyesOpen.Confidence 目が空いている可能性 99.9950942993164
MouthOpen.Value 口が空いているか true or false
MouthOpen.Confidence 口が空いている可能性 98.92902374267578
Emotions.Type 感情 HAPPY,SAD,ANGRY
Emotions.Confidence 感情の可能性 98.92902374267578

※Emotionsは配列です。
※Emotionsの値にはHAPPY,SAD,ANGRY,CONFUSED,DISGUSTED,SURPRISED,CALM,UNKNOWNがあります。

レスポンスの例

上記以外にも画像内の位置情報も戻ってきます。

以下は実際のレスポンスです。


最後までお読みいただきましてありがとうございました!

「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。

 - AWS , ,

ad

ad

  関連記事

kintoneに登録されたアカウントの電話番号にGoogleカレンダーの予定をAmazon Pollyが読み上げてTwilioから電話でお知らせする(AWS Lambda Python)

Google Calendar Twilio Reminder Googleカレ …

RDSスナップショットをS3にエクスポートする新機能を試そうかと思った

やったこと RDSスナップショットをS3にエクスポートできる、という新機能が追加 …

ECR(Amazon Elastic Container Registry)にコンテナイメージをアップロードする

「Pandocサーバーのコンテナイメージを作成する」で作成したイメージをAWS …

JAWS-UG関西「AI で人を笑わせてみよう!ハンズオン」に参加しました

AI で人を笑わせてみよう!ハンズオン 灼熱の7月最終日にJAWS-UG関西のオ …

JAWS FESTA 2019 Sapporo 参加&当日スタッフ&企業サポーターで!

2019年のJAWS FESTA は札幌です! 今回もありがたいことに、所属して …

Amazon SNSサブスクリプションフィルターで優先度別のSQSキューにサブスクライブする

EC2のコンシューマーアプリケーションは優先度の高いキューのメッセージを先に処理 …

特定のIAMロールをLambda(Python)で削除する

やりたいこと 特定アカウントの特定の名前が含まれるIAMロールをまとめて削除した …

RDS + VPC + Lambda + API Gateway + CloudFront + WAF + ACMでAPIを構築する

RDSのMySQLの情報を与えられたリクエストをキーにしてjsonで返すAPIを …

AWS Organizationsでアカウントを50作って指定したOUに移動するスクリプト

AWS Organizationsでアカウントを50個作る必要がありましたので、 …

Amazon S3オブジェクトロック

S3のオブジェクトロックを確認しました。 オブジェクトロックの有効化 現在、既存 …