Skip to the content.

ステップ3. 顔画像分析結果を取得するWeb APIを作成する(スマートフォンとAWSサービスを用いた画像認識サービスの構築する)

当コンテンツは、エッジデバイスとしてスマートフォン、クラウドサービスとしてAWSを利用し、エッジデバイスとクラウド間とのデータ連携とAWSサービスを利用した画像認識を体験し、IoT/画像認識システムの基礎的な技術の習得を目指す方向けのハンズオン(体験学習)コンテンツ「スマートフォンとAWSサービスを用いた画像認識サービスの構築する」の一部です。

ステップ3. 顔画像分析結果を取得するWeb APIを作成する

ステップ3アーキテクチャ図

ステップ2の応用として、「画像をアップロードすると、その画像に写る顔の特徴を分析するAPI」を作成し、最後はデバイスからAPIにアクセスします。 簡単なヒントを書いておりますので、このヒントとステップ2を参考に実装してみましょう。


目的

概要


<Amazon Rekognitionでの顔分析>

Amazon Rekognitionでは、イメージ内やビデオ内の顔を検出し、顔の検出場所、目の位置などの顔のランドマーク、楽しさや悲しさなどの感情の検出に関する情報を取得できます。 イメージ内の顔を検出し、顔の属性を分析して、イメージ内で検出した顔と顔属性の信頼スコア(%)を返します。 たとえば、ある画像を分析した結果として、90%の信頼性スコアで「男性」、85%の信頼性スコアで「笑顔」という情報を返します。 詳細は公式ドキュメント「顔の検出と分析」をご確認ください。

今回のステップではイメージ内の顔の分析を行うために DetectFaces という機能を使います。 使用方法は公式ドキュメント「イメージ内の顔の検出」をご確認ください。

3-1. AWS Lambdaで関数を新規作成

指定したS3バケット内の画像に写っている顔がどのような顔か、Rekognitionを用いた分析結果をリターン値として返すLambda関数部分を作成します。

ステップ2-1-1を参考に、新たなLambda関数を作成しましょう。

LambdaのIAMロールについて

Lambdaに必要な権限(Rekognitionに関する部分)が前回と異なります。 上述の DetectFacesのオペレーションの権限が必要となりますので、ポリシー作成時に気をつけましょう。 なお、今回はコレクションが必要ない為、リソースの指定は必要ありません。

3-2. LambdaにPythonの関数コードを実装

ステップ2-1-3を参考にLambdaのPythonコードを実装しましょう。

以下にコードの実装に最低限必要な要素を挙げています。後のステップに影響する実装もありますので、必ずご確認ください。

作成プログラムの解説

import json                       # JSONフォーマットのデータを扱うために利用します
import boto3                      # AWSをPythonから操作するためのSDKのライブラリです
from typing import Union, Tuple   # 変数や引数・返り値などの型定義に利用します
from datetime import datetime     # この関数を動かした(=顔の認証を行なった)時間をtimestampとして作成するのに利用します
import botocore.exceptions        # boto3実行時に発生する例外クラスです
import base64                     # base64フォーマットの画像データをRekognitionが認識できる形に変換するのに利用します

3-3. Web APIを作成

ステップ2-2を参考にWeb APIを作成しましょう。

ステップ2-3-1で作成したAPI Gatewayに新たなリソースとメソッドを追加しましょう

3-3

ステップ2-2-6でデプロイしたステージを更新する形でデプロイすることで、使用量プランとAPIキーに、ステップ2-2-7で作成したものを引き続き適用できます。

sh curl_analysis_test_format.sh

{"msg": "[SUCCEEDED]Analysis done", "payloads": {"timestamp": "2019-08-19 01:40:17", 
"analysis": [{"BoundingBox": {"Width": 0.3842945396900177, "Height": 0.4907236397266388, "Left": 0.34415897727012634, 
"Top": 0.28372901678085327}, "AgeRange": {"Low": 21, "High": 33}, "Smile": {"Value": false, "Confidence": 58.52912521362305}, 
"Eyeglasses": {"Value": false, "Confidence": 99.91854858398438}, "Sunglasses": {"Value": false, "Confidence": 99.9820556640625}, 
"Gender": {"Value": "Male", "Confidence": 98.9040298461914}, "Beard": {"Value": false, "Confidence": 93.08826446533203}, 
"Mustache": {"Value": false, "Confidence": 99.42503356933594}, "EyesOpen": {"Value": true, "Confidence": 95.3335952758789}, 
"MouthOpen": {"Value": false, "Confidence": 98.8746109008789}, "Emotions": [{"Type": "SURPRISED", "Confidence": 0.25857076048851013}, 
{"Type": "CONFUSED", "Confidence": 0.36431387066841125}, {"Type": "FEAR", "Confidence": 0.09700098633766174}, {"Type": "DISGUSTED", "Confidence": 0.9556394815444946}, 
{"Type": "HAPPY", "Confidence": 41.95534133911133}, {"Type": "SAD", "Confidence": 0.3965829014778137}, {"Type": "ANGRY", "Confidence": 0.30273476243019104}, 
・・・(省略)・・・

3-4. スマホ画面から顔画像分析を実行する

前のステップで解説したWebアプリケーションを実際に動かして顔画像分析処理を実行します。

最後に、AWSのコンソールに移動し、CloudWatchでAPIへのアクセス履歴やLambdaのログを確認してみましょう。