ヤマムギ

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認定クラウドプラクティショナー 改訂第2版」という本を書きました。

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

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

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

 - AWS , ,

ad

ad

  関連記事

AWS EC2 Amazon Linuxにmauticをインストールする(Sendgrid, Nginx, MySQL on RDS)

mauticをAmazon LinuxとNginx,MySQL on RDSにイ …

MySQL WorkbenchからRDSに接続する

MySQL WorkbenchからAWS RDSのMySQLに接続するために、「 …

Route 53 の加重ラウンドロビンルーティングでロードバランサー

Route 53の加重ラウンドロビンで両方1に設定してみました。 上図はイメージ …

ハンズオン目的アカウントに設定しているSCPポリシー

AWS Organizationsでハンズオン目的のアカウントに設定しているSC …

AWS CLIを使用せずにCodeCommitへSSHユーザーで接続する

AWS CLIやアクセスキーID、シークレットアクセスキーなどを開発環境にセット …

別アカウントのVPCからAWS PrivateLinkを使う

VPC エンドポイントサービス (AWS PrivateLink)を参考にしまし …

API GatewayのアクセスログをCloudWatchに記録する

Amazon API GatewayのアクセスログをCloudWatchに記録で …

ユーザーガイドの方法でGithubからCodeCommitへリポジトリを移行する

GitリポジトリをAWS CodeCommitに移行するを参照しました。 環境 …

AWS Toolkit for Eclipseをセットアップする

AWSでそろそろ課金がされつつありますので、夜中はインスタンスを自動停止して朝自 …

AWS CodeStarのプロジェクトテンプレートLambda+Pythonによって生成されるもの

勉強会のデモで、AWS CodeStarのプロジェクトテンプレートLambda+ …