Amazon Web Services ブログ

Amazon Rekognitionでの索引中に顔をフィルターして、時間とお金を節約します。

Amazon Rekognitionはオブジェクト、人物、文字、場面および活動を識別し、さらに不適切な内容を検知する、ディープラーニングベースの画像および映像分析サービスです。新しいAmazon Rekognitionの顔フィルター機能を使用して、顔認識のために索引できる顔の質と量を制御できます。これはコストを抑え、開発時間を減少し、顔認識の正確性を向上させます。

このリリースに先駆け、IndexFaces API アクションを使用するとき、Amazon Rekognitionは画像中のすべての顔を検知し、ご指定のコレクションに索引しました。しかし、一部の画像は索引したくない顔を含んでいることがあります。例えば、顔検索の質に逆効果を与える小さくてぼやけた顔、またはレッドカーペットプレミアのような、人込みの背景の関連のない顔を索引したくないかもしれません。そのような顔を索引することはコストを増やし、多くの場合、精確性に対して有害になります。これまでは、顔検知の実行、それぞれの顔の集まりでフィルタールールを適用する、およびフィルターを通過した顔の集まりを索引することのみでそのような顔をフィルターすることができました。新しいAmazon Rekognition顔フィルター機能は、たった二つのパラメータを使用して索引中に顔をフィルターさせることにより、この処理を簡易化します。複数のAPIコールを使って追加のコードを書いたり維持する、または質を測定するための独自ルールを作成する必要がありません。

このブログでの掲示で、新しいAmazon Rekognitionの顔フィルター機能の使用法のいくつかの例をお見せします。

手順 1 – コレクションの作成

CreateCollection API アクションを使用することにより、コレクションを作成できます。

リクエストの例:

boto3をインポートする

collection_name = "TestCollection"

def create_collection():
    # awsのデフォルト位置およびクレデンシャルを仮定する
    rekognition_client = boto3.client('rekognition')
    response = rekognition_client.create_collection(CollectionId=collection_name)
    print(response)

create_collection()

手順 2 – 索引に使用される画像を収集、検査する

コレクションが設定された後、顔を索引したい画像をそこから収集できます。索引に使用される一部の画像は、被写体が離れているため、非常に小さいまたはぼやけた、または一部分しか見えない顔を含んでいることがあります。理想的には、「良い」質の顔だけが索引されることを確かなものにしたいですが、質の悪い顔は自動的にフィルターされます。画像に映っているすべての顔を索引したくないという状況に遭遇することもあるかもしれません。例えば、バーでのデートで自撮りされた二つの最も目立つ顔だけを索引したいのに、背景に他人の多くの小さな顔があるかもしれません。

これがどのように行われるかを説明するために、2枚の写真を例として使用します。一枚目はWikiMedia Creative Commons (Alan Light)から取り寄せられ、二枚目はPexels.comからのものです。

まず、正式な写真家に撮影されているレッドカーペットイベントの例を見てみましょう。

次に、顔検出を使用して、Amazon Rekognitionで見つかった顔を見てみましょう。

ご覧の通り、二つの大きくて目立つ顔があり、背景に三つの他の顔があります。それでは二枚目の写真で見つかった顔を見てみましょう。

ご覧のとおり、背景に、おそらく私たちが索引に使いたくないぼやけた顔があります。

二つのユースケースを見てみます: (i) 目立つ、高品質の顔のみを索引したいのですが、背景に顔がない(一枚目の写真). (ii) You want to index 画像の中のすべての「良い」質の顔を索引したい(二枚目の写真).顔フィルターを使用してどのようにこれができるかを見てみましょう。

手順 3 – 顔フィルターを使用して、狙った顔をコレクションに索引する

先ほど説明したユースケース向けに、新しいAmazon Rekognition顔フィルター機能で、単にIndexFacesAPIリクエスト内で、新しいMaxFacesおよびQualityFilterの属性の適切な値を指定できます。

MaxFacesは、索引する顔の最大数を指定するために使用され、 1以上でなければなりません。IndexFacesは、たとえMaxFacesで100以上の値を指定しても、一枚の画像で100以上の検出された顔を返さないことにご注意ください。その一方で、QualityFilterは質の低い顔のフィルターをトグルするために使用されます。「自動」を指定した場合、Amazon Rekognitionは自動的に質の低い顔を見つけ、索引の外に置きます。「フィルターなし」を指定した場合、フィルターは行われず、すべての見つかった顔が質に関係なく索引されます。フィルターされた顔は索引されません。良い質の顔だけが索引されることを確実にするため、デフォルトで「自動」に設定されています。

一番目のユースケースで、簡単に以下の設定を使用できます:

シンタックスをリクエストする

boto3をインポートする

collection_name = "TestCollection"
image_file = "TestImage.jpg"
external_image_id = "TestImage"

def index_faces():
    # awsのデフォルト位置およびクレデンシャルを仮定する
    rekognition_client = boto3.client('rekognition')
    with open(image_file, 'rb') as image:
        #  QualityFilterを「自動」に初期設定する
        rekognition_response = rekognition_client.index_faces(
            Image={'Bytes': image.read()},
            CollectionId=collection_name,
            ExternalImageId=external_image_id,
            MaxFaces=2)
    print(rekognition_response)

index_faces()

MaxFacesを2に設定したので、Amazon Rekognitionは最高の検出確信度で、二つの最も大きな顔を選び、その二つの顔だけを索引します。この画像で、前列のこの男性と女性の顔は索引されますが、背景の顔は索引されません。

MaxFaces を5に変更する場合は、他の三つの目立つ顔も索引されます:

二つ目のユースケースで、単にデフォルト設定を使用し、QualityFilterのままにすればこれを行えます。

シンタックスをリクエストする

boto3をインポートする

collection_name = "TestCollection"
image_file = "TestImage.jpg"
external_image_id = "TestImage"

def index_faces():
    # awsのデフォルト位置およびクレデンシャルを仮定する
    rekognition_client = boto3.client('rekognition')
    with open(image_file, 'rb') as image:
        #  QualityFilterを「自動」に初期設定する
        rekognition_response = rekognition_client.index_faces(
            Image={'Bytes': image.read()},
            CollectionId=collection_name,
            ExternalImageId=external_image_id)
    print(rekognition_response)

index_faces()

この場合は、背景のぼやけた顔のみがフィルターにかかり、手前の目立つ顔は索引されます。

それぞれのIndexFacesコールで、検出されるが索引されない顔はUnindexedFacesと呼ばれるアレイに返されます。顔は以下のような理由で索引されないことがあります:

  • 検出された顔の数がMaxFacesリクエストパラメータの値を超える。
  • 顔が過度にぼやけている。
  • 顔が過度に暗い。
  • その顔の人がカメラの方を向いていないなどの極端なポーズをとっている
  • 顔が画像寸法と比べて小さすぎる。

UnindexedFacesについての詳細は、これを参照してください。すべての顔がお好みのフィルターオプションで索引された後、DescribeCollectionAPIアクションを使用することにより、コレクションに保存された顔の数を確認できます。

手順 4 – コレクション内の顔を検索する

コレクションの準備が整っているとき、画像内の顔の検索および 映像内の顔の検索で概説されている手順を使って、その中で検索を始めることができます。上記の例で、画像を処理しているので、以下のコードを使用できます。

boto3をインポートする

collection_name = "TestCollection"
image_file = "TestImage.jpg"


def search_faces_by_image():
    # awsのデフォルト位置およびクレデンシャルを仮定する
    rekognition_client = boto3.client('rekognition')
    with open(image_file, 'rb') as image:
        rekognition_response = rekognition_client.search_faces_by_image(
            Image={'Bytes': image.read()},
            CollectionId=collection_name)
    print(rekognition_response)

search_faces_by_image()

まとめ

このブログ掲載で、新しいAmazon Rekognition顔フィルター機能を使って、顔を認識するために顔コレクションに索引する顔の質と量を管理する方法を学びました。これはコレクションに索引される顔を、コードを書き込むことにより質の低い顔を管理するために費やす時間を節約し、顔の数を制御することによりコストを減らし、そしてほとんどの場合で顔検索の精度を向上させるのに役立ちます。

顔フィルターは、Amazon Rekognitionが利用できる、すべてのサポート対象のAWS Regionsで、追加費用なしで使用できます。詳細については、このドキュメントのページにアクセスしてください。AWS SDKの最新バージョンをダウンロードして開始できます。

Amazon Rekognitionを使用した顔認識のいくつかの面白いユースケースを閲覧するためには、ID認証 および 人身売買に立ち向かうのブログをご覧ください。


著者について

Venkatesh Bagariaは Amazon Rekognitionの上級製品マネージャーです。彼はAWSの顧客向けに、力強くても簡単に使えるディープラーニングベースの画像および映像分析サービスの構築に焦点を当てています。彼は空いた時間に、大量のスタンダップコメディスペシャルと映画を見たり、スパイシーなインド料理を作ったり、ギターを弾けるふりをしたりしています。

 

 

Keith Johnson はAmazon Rekognitionのソフトウェアエンジニアです。  彼は空いた時間に読書をしたり、料理したり、バスケットボールの試合を見たりしています。

 

 

 

 

Yash Singh はAmazon Rekognitionのソフトウェアエンジニアです。彼はコンピュータービジョンの困難な問題の答えを見つけるために情熱的です。彼は空いた時間に、読書を愛し、音楽を作ったり、家族と一緒に過ごしたりします。

 

 

 

Vivek Bhadauria はAmazon Rekognitionの上級ソフトウェアエンジニアです。 彼はAWSの顧客向けに、ディープラーニングベースのコンピュータービジョンのソリューションを構築することに焦点を当てています。休みの日、Vivekは長旅をしたりクリケットをフォローすることを楽しみます。