ヤマムギ

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があります。

レスポンスの例

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

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


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

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

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

【PR】 「ポケットスタディ AWS認定 デベロッパーアソシエイト」という本を書きました。

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

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

 - AWS , ,

ad

ad

  関連記事

Cloud9のデフォルト設定での権限確認(AWS managed temporary credentials)

Cloud9の環境を作成した際のデフォルトアクセス権限は、環境を作成したIAMユ …

Lucidchart AWSアカウントからインポート機能で自動作図

SNSでLucidchartというサービスが話題になってました。 AWSの環境を …

「関西AWSスタートアップ勉強会」に行ってきました

第2回 関西スタートアップAWS勉強会に行ってきました。 akippa 拠点数コ …

AWS Backupで取得したAMIとスナップショットの削除

個人で使っているAWSリソースの断捨離をしてました。 Cloud9も複数アカウン …

DynamoDBテーブル項目をS3にエクスポート

DynamoDBテーブルを一時テーブルとして使っていて、毎回使い捨てしてます。 …

T3.nanoで仮想メモリ割当をユーザーデータで実行する

T3.nanoはメモリがだいたい500MBです。 実行する処理によってはメモリエ …

TwilioからのリクエストをAPI Gateway+LambdaでTwimlを返して処理する

Twilioで着信した時のリクエスト先としてTwimlをWebサーバやS3で用意 …

Active Directory認証でAWSマネジメントコンソールにSSO

こちらの2つのサイトを参考にすすめました。 Active Directory資産 …

RDSインスタンスのストレージをgp2からgp3に変更しました

2022/11/9にRDSでgp3ボリュームが使用できるようになりました。 Am …

Amazon CloudSearchにAWS Lambda(Python)からデータをアップロードする

このブログはゆるっとアドベントカレンダー Advent Calendar 201 …