ヤマムギ

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

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

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

 - AWS , ,

ad

ad

  関連記事

Projectタグを強制するSCPでアクションやリソースを限定しないとき成り立つのか

ふと疑問に思ったので試しました。 予想は、拒否されてしまう、です。 [crayo …

QuickSightのVisualizeをダッシュボード化して定期メール

「Backlogの実績工数をAmazon QuickSightで可視化してわかっ …

GoogleForm,GASからAPI Gateway, Lambdaで入力情報をDynamoDBに格納する

vol.26 AWS認定試験テキスト認定クラウドプラクティショナーのデモ(Dyn …

Amazon API Gatewayでモックを作る

超シンプルなAPI Gatewayのサンプルがほしかったので、ユーザーガイドの手 …

EC2 プレイスメントグループを試してみました

やったことないのでやってみたやつです。 プレイスメントグループの作成 まず、EC …

EC2 Amazon LinuxのNginx+RDS MySQLにレンタルWebサーバーからWordPressを移設する(手順整理版)

ブログサイト(WordPress)をレンタルWebサーバーからAWSに移設する事 …

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

やったことないのでやってみるシリーズです。 VPC エンドポイントサービス (A …

EC2 Amazon Linux 2 にAmazon LinuxからWordPressを移行

このブログを新しいインスタンスに移行することにしました。 2015年5月にAma …

re:Invent 徒歩記(シアトルも)

このブログは、AWS re:invent 2018 Advent Calenda …

特定AWSアカウント特定リージョンのSNSトピックを削除するLambda(Python)

やりたいこと 特定アカウント内特定リージョン内のSNSトピックを全部削除したいで …