Skip to the content.

ステップ2. 顔認識用のコレクションを作成する(SORACOM回線を使ったスマートフォンとAWSサービスを用いた画像認識サービスを構築する)

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

ステップ2. 顔認識用のコレクションを作成する

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

ステップ2では、画像に写っている人物を特定するために必要なコレクションを作成します。

AWS Rekognitionサービスでは、コレクションの情報を使って、画像内に誰が写っているのかを特定する機能があります。

まずは、画像のアップロード先として「Amazon S3(以下、S3)」にバケットを作成し、登録したい人物が1人で写っている画像をAWSコンソールからアップロードします。

AWSのCLI(コマンド・ライン・インターフェース)ツールを使って、「Amazon Rekognition(以下、Rekognition)」の「コレクション」を作成し、認識対象となる顔を登録します。


目的

概要


<Amazon S3とは?>

Amazon Simple Storage Service(Amazon S3)は、AWSによって提供されるクラウド型のオブジェクトストレージサービスです。容量無制限・高耐久性と低コストが大きな特徴です。

より詳しく知りたい場合は公式サイトをご確認ください。

<AWS CLIとは?>

AWSコマンドラインインターフェースの略で、AWSサービスをコマンドラインから操作し管理するためのオープンソースツールです。

コマンドラインから複数のAWSサービスを制御し、スクリプトを使用してこれらの作業を自動化することができます。

より詳しく知りたい場合は公式サイトをご確認ください。

<Amazon Rekognitionとは?>

Amazon Rekognitionは、ディープラーニング技術を利用したフルマネージド型の画像認識サービスです。

画像や動画を対象に、画像のシーンやアクティビティの検出、顔認識、有名人の検出、顔の分析、テキスト抽出といった機能を提供します。

Rekognition APIに対象の画像を登録・送信するだけで、これらの機能を自身のアプリケーションに簡単に組み込み利用することが可能です。

より詳しく知りたい場合は公式サイトをご確認ください。

<Amazon Rekognitionでの顔認識>

顔認識を行うためにAmazon Rekognitionの機能のひとつである SearchFacesByImage という機能を使います。

Amazon Rekognitionでは、検出した顔に関する情報を コレクション というサーバー側のコンテナに保存できます

コレクションにはイメージが格納されているのではなく、顔ごとに顔の特徴を特徴ベクトルに抽出し、その特徴ベクトルが保存されています。

コレクションに保存された顔の情報を使用して、イメージ、保存済みビデオ、およびストリーミングビデオ内の既知の顔を検索することができます。

また、コレクション内の画像にタグをつけて「コレクションの中に登録されている顔であれば、登録した顔画像のタグを返す」といった使い方ができます。

詳細は、公式ドキュメント「コレクション内での顔の検索」をご確認ください。


2-1. コレクションに登録する画像をアップロードするためのS3バケットを作成

この項目ではAWSのS3というサービスを用いて、コレクションに登録するための画像の保存先となる「バケット」を作成していきます。

以下の手順でS3のバケットを用意します。


<S3バケットとは?>

Amazon S3に格納されるすべてのオブジェクト(ファイル)は、バケット(バケツ)と呼ばれる入れ物の中に存在します。

バケットの用途には、Amazon S3の最上位の名前空間を形成する、ストレージとデータ転送の課金アカウントを特定する、アクセスコントロールに使用する、使用状況レポートの集計単位として使用するなど、さまざまなものがあります。

もっとも重要な役割は「オブジェクトに対して名前空間を提供する」ことです。
名前空間はすべてのAWSアカウントによって共有されますので、グローバルに一意である必要があります。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/UsingBucket.html


2-1-1. AWSのコンソール画面で「S3」を検索・選択し[バケットを作成する]をクリックする

2-1-2. バケット名とリージョンを入力する

2-1-2_1

【注意】 バケット名の一意性

Amazon S3のバケット名はグローバルに一意であり、名前空間はすべてのAWSアカウントによって共有されています。

そのためバケット名は世界で一意のものを指定する必要があります。
重複するバケット名がすでに他の誰かに作成されている場合、その名前は利用できません。

S3バケットの命名のガイドラインについてはバケットの制約と制限のサイトを参照してください。

【注意】 リージョン指定

リージョンが「アジアパシフィック(東京)」になっていることを確認してください。

今回はすべてのAWSサービスを東京リージョンで構築します。
リージョンが異なると、サービス間連携の遅延や他のAWSサービスと連携する上での困難等が生じることがございます。

2-1-3. ブロックパブリックアクセスのバケット設定の「パブリックアクセスをすべてブロック」にチェックが入っていることを確認する

アクセス許可の設定では、S3バケットに対してアクセスできる権限を指定します。

パブリックアクセスをすべてブロック」にチェックが入っていることを確認してください。

【注意】 S3バケットのパブリックアクセスについて

「パブリックアクセスが有効」な状態のS3バケットは、世界中の人々に公開されている状態となります。

S3バケットのパブリックアクセスが原因となった顧客情報の漏洩などの事件も発生しておりますので、アクセス権限の設定はお気をつけください。 2-1-3_1

2-1-4. バケットのバージョニングの「無効にする」にチェックが入っていることを確認する

今回はバケット内オブジェクトのバージョン管理は行いませんので、「無効にする」にチェックが入っていることを確認してください。

2-1-4_1


<バージョニングとは?>

バージョニングとは、同じバケット内でオブジェクトの複数のバージョンを保持する手段です。

バージョニングの設定をONにすることで、Amazon S3バケットに格納されたあらゆるオブジェクトのあらゆるバージョンを格納、取得、復元することができます。

オブジェクトを誤って削除した場合でも復元することが可能です。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/Versioning.html


2-1-5. デフォルトの暗号化の「無効にする」にチェックが入っていることを確認し、「バケットを作成」をクリックする

今回はバケット内オブジェクトの暗号化は行いませんので、「無効にする」にチェックが入っていることを確認し、「バケットを作成」をクリックしてください。

2-1-5_1

2-2. S3バケットに画像をアップロードする

作成したバケットに、事前準備として用意した自分の顔が写った画像をアップロードします。 画像認識のベースとなる画像は1枚のみで問題ございません。

2-2-1. 対象のバケットを検索し選択する

2-2-2. 対象画像をアップロードする

2-3. コレクションを作成する

顔認証サービスを利用するために、認証の対象となる顔データの登録先となるコレクションを作成します。

コレクションには、 --collection-idパラメーターで名前をつける必要があります。 使用目的が分かるように「{名前}-authentication-collection」というコレクション名をつけましょう。
(例:yamada-authentication-collection)

2-3-1. コレクションを作成する

$ aws rekognition create-collection --collection-id "yamada-authentication-collection"
{
    "StatusCode": 200,
    "CollectionArn": "aws:rekognition:ap-northeast-1:XXXXXXXXXXXX:collection/yamada-authentication-collection",
    "FaceModelVersion": "5.0"
}

2-3-2. コレクションの作成を確認する

$ aws rekognition list-collections

2−4. コレクションに顔を登録する

前のステップで作成したコレクションに対して、「aws rekognition index-faces」コマンドで対象の顔画像を登録します。

2-4-1. コマンドを編集する

コマンドが長くなりますので、shellファイルを準備しています。
Cloud9の左側ディレクトリから「/soracom-ug-reko-handson/sources/step2/rekognition_index_faces.sh」をダブルクリックして、ファイルを開いてください。

2-4-2. コマンドを実行する

ファイルを [File] - [Save] で保存したら、Terminal画面からシェルを実行します。

$ sh soracom-ug-reko-handson/sources/step2/rekognition_index_faces.sh
{
    "FaceRecords": [
        {
            "Face": {
                "FaceId": "XXXXX-XXXX-XXXX-XXXX-XXXXXXX",
                "BoundingBox": {
                    "Width": 0.40926530957221985,
                    "Height": 0.446433961391449,
                    "Left": 0.2812435030937195,
                    "Top": 0.12307235598564148
                },
                "ImageId": "XXXXX-XXXX-XXXX-XXXX-XXXXXXX",
                "ExternalImageId": "Taro_Yamada",
                "Confidence": 100.0
            },
          ・・・

2-4-3. コレクションの内容を確認する

list-faces コマンドを実行することで、対象のコレクションに含まれる顔の一覧を確認することができます
実行時には対象のコレクションIDを指定する必要があります

$aws rekognition list-faces --collection-id yamada-authentication-collection
{
    "Faces": [
        {
            "FaceId": "XXXXX-XXXX-XXXX-XXXX-XXXXXXX",
            "BoundingBox": {
                "Width": 0.40926501154899597,
                "Height": 0.44643399119377136,
                "Left": 0.2812440097332001,
                "Top": 0.12307199835777283
            },
            "ImageId": "XXXXX-XXXX-XXXX-XXXX-XXXXXXX",
            "ExternalImageId": "Taro_Yamada",
            "Confidence": 100.0
        }
    ],
    "FaceModelVersion": "4.0"
}

2-5. コレクションをテストする

ステップ2-1で作成したバケットとアップロードした画像を利用して、コレクションに登録した顔とマッチするかテストします。

コレクションに登録した顔のデータと、そのデータの元となる画像を比較するため、マッチ率は100%に限りなく近い数値となります。

2-5-1. コマンドを編集する

コマンドが長くなりますので、shellファイルを準備しています。
Cloud9の左側ディレクトリから「/soracom-ug-reko-handson/sources/step2/search_faces_by_image.sh」をダブルクリックして、ファイルを開いてください。

2-5-2. コマンドを実行する

ファイルを保存したら、Terminal画面からシェルを実行します。

$ sh soracom-ug-reko-handson/sources/step2/search_faces_by_image.sh
{
    "SearchedFaceBoundingBox": {
        "Width": 0.40926530957221985,
        "Height": 0.446433961391449,
        "Left": 0.2812435030937195,
        "Top": 0.12307235598564148
    },
    "SearchedFaceConfidence": 100.0,
    "FaceMatches": [
        {
            "Similarity": 99.99918365478516,
            "Face": {
                "FaceId": "XXXXX-XXXX-XXXX-XXXX-XXXXXXX"",
                "BoundingBox": {
                    "Width": 0.40926501154899597,
                    "Height": 0.44643399119377136,
                    "Left": 0.2812440097332001,
                    "Top": 0.12307199835777283
                },
                "ImageId": "XXXXX-XXXX-XXXX-XXXX-XXXXXXX",
                "ExternalImageId": "Taro_Yamada",
                "Confidence": 100.0
            }
        }
    ],
    "FaceModelVersion": "5.0"
}

次のステップへ進んでください