ヤマムギ

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

  関連記事

Aurora Serverless Data APIを有効にしてQuery Editorを使ってみました

Aurora ServerlessのMySQLでData APIを有効にして作成 …

Feedlyのフィードを自動でSlackへ投稿する(AWS Lambda , Amazon DynamoDB)

やりたいこと Feedlyで共有したいフィードに特定のタグを付けます。 特定のタ …

EC2 VyOSで/etc/resolv.confを設定しました

EC2でVyOSを起動してSSHで接続して確認していたところ、どうもVyOSから …

EFSのマウントターゲットがデフォルトで作成されるようになってました

ひさしぶりにAmazon EFSファイルシステムを作成しました。 作成手順がすご …

Amazon SES, S3で受信したメールをAWS Lambda, SESで別のメールへ転送する

Amazon SESでメール受信で受信したメールを、毎回S3バケットに見に行って …

AWSセルフマネージドAD環境にリモートデスクトップで接続

AWSクイックスタートのActive Directory Domain Serv …

Cloud9でSAMローカルテスト

せっかくテストするので、Amazon CloudSearchからAmazon E …

AWS EC2 インスタンスステータスのチェックで失敗して起動しなくなり復旧

EC2のインスタンスに接続出来なくなったので、AMIから作成してElastic …

CloudTrailのログファイルの整合性検証をAWS CLIで実行しました

CloudTrailのログファイルの検証を「有効」にしました。 上記のようなCl …

AWSエンコードされたエラーメッセージをデコードするコマンドのメモ

Stdout: couldn’t create ENI: Unaut …