CA MOBILE TECH BLOG

株式会社シーエー・モバイルのエンジニア・デザイナーの活動を綴るブログです

株式会社シーエー・モバイルの技術広報による、
技術に特化したブログです。
エンジニアとデザイナーの活動や思想を綴ってゆきます。

Amazon Rekognition導入事例: マッチングアプリで「写真から探す」機能を作ってみた

f:id:cam-engineer:20180528163544p:plain

こんにちは。マッチングサービスアプリ「mimi」のPMを担当している、Y崎です。

以前「Amazon Rekogniton」で顔を比較する記事を書きました。

今回は、RekognitonのAPIを用いて「写真で探す」機能を開発・リリースしましたので、簡単に技術的な内容について紹介したいと思います。

顔検索について

Rekognitonでは、顔インデックスというものを用意し、インデックス内に保存されているものと一致する顔がないか、画像/保存済みビデオ/ストリーミングビデオから検索することができます。

今回は画像から画像を検索する用途で利用しました。使用したAPIは[SearchFacesByImage]です。

ちなみに、SearchFacesByImage のユースケースとして、「大量の画像から本人に一致する画像を探す」という用途で使われるケースがほとんどだと思いますが、今回のケースでは「大量の画像から本人に似た画像を探す」という用途で使用しています。

「似ているかどうか」は、前回ブログで紹介したSimilarityの値を参考にしています。 ちょっと変わった使い方かもしれません(汗)

検索の流れ

Amazon Rekognition を使用して顔で人を識別するには、ざっくり次の 3つのステップが必要です。

(1)あらかじめ顔インデックス(コレクション)を作成しておく。

(2)顔インデックスに写真を登録する。

(3)顔インデックス内の写真を検索する。

1.あらかじめ顔インデックス(コレクション)を作成しておく。

まず空のインデックスを作っておく必要があります。

APIもしくはAWSコマンドで作成可能です。

collection-id は任意のコレクション名です。

▼ コマンドラインの場合

aws rekognition create-collection --collection-id "****" --profile ****

APIの場合 https://docs.aws.amazon.com/ja_jp/rekognition/latest/dg/API_CreateCollection.html

2.顔インデックスに写真を登録する。

インデックスに顔を登録するには、「IndexFaces」というオペレーションが必要です。

mimiではユーザーが自分の顔の登録を完了するタイミングでキュー(SQS)に流し、順次バッチでインデックスに追加されます。

external-image-id でアプリケーション側が管理しているIDなどの外部キーを登録できます。

▼ コマンドラインの場合

aws rekognition index-faces --image '{"S3Object":{"Bucket":"****","Name":"****"}}' 
      --collection-id "****" 
      --detection-attributes "ALL" 
      --external-image-id "****" 
      --profile ****

APIの場合 https://docs.aws.amazon.com/rekognition/latest/dg/API_IndexFaces.html 例えはAPIで登録すると、下記のようにFaceId というものが返却されます。

これがインデックスされた顔のIDです。

また、Emotions(感情) や Eyeglasses(メガネ) など写真から読み取れる情報も取得できます。

{
   "FaceModelVersion":"2.0",
   "FaceRecords":[
      {
        "Face":{
            "BoundingBox":{
               "Height":0.22206704318523407,
               "Left":0.503333330154419,
               "Top":0.21229049563407898,
               "Width":0.17666666209697723
            },
            "Confidence":99.9996566772461,
            "FaceId":"11111111-2222-3333-4444-555555555555",
            "ImageId":"11111111-2222-3333-4444-555555555555"
        },
        ...
        "Emotions": [ 
           { 
              "Confidence": number,
              "Type": "string"
           }
        ],
        "Eyeglasses": { 
           "Confidence": number,
           "Value": boolean
        },
        "EyesOpen": { 
           "Confidence": number,
           "Value": boolean
        },
        "Gender": { 
           "Confidence": number,
           "Value": "string"
        },
         ...
      }
    ]
}

3.顔インデックス内の写真を検索する。

写真からインデックス内の顔を検索するには、「SearchFacesByImage」というオペレーションが必要です。 ※多分APIのみの操作です。(違ってたらすいません)

APIの場合 https://docs.aws.amazon.com/ja_jp/rekognition/latest/dg/API_SearchFacesByImage.html 下記のようなレスポンスが返却されます。

{
   "FaceMatches": [ 
      { 
         "Face": { 
            "BoundingBox": { 
               "Height": number,
               "Left": number,
               "Top": number,
               "Width": number
            },
            "Confidence": number,
            "ExternalImageId": "string",
            "FaceId": "string",
            "ImageId": "string"
         },
         "Similarity": number
      }
   ],
   "FaceModelVersion": "string",
   "SearchedFaceBoundingBox": { 
      "Height": number,
      "Left": number,
      "Top": number,
      "Width": number
   },
   "SearchedFaceConfidence": number
}

Similarity の値が「似ている度」です。

この値は、Rekognition内のモデルのアップデートなどで、返却値が変わったりします。

費用例

◆ 10万人の顔コレクションに対し、顔検索を1ヶ月100万回実行した際の料金 API料金 1コールあたり 0.001ドル

◆ 顔コレクションで保存されるストレージ料金 1画像あたり 0.00001/月 ドル

◆ 10万人の顔コレクション作成  10,0000 × 0.001 = 100 ドル

◆ 顔検索100万回  100,0000 × 0.001 = 1000 ドル

◆ 顔コレクションで保存されるストレージ料金 10,0000 × 0.00001 = 1 ドル

計: だいたい1,110ドル/月 くらいです。

検索の流れ

ざっくりと検索の流れを図にしてみました。

f:id:cam-engineer:20180528161303p:plain

f:id:cam-engineer:20180528161201p:plain

mimiでは、Rekognitionをこんな感じで使っています。

機械学習系のサービスはAWSだけでも数多く提供されていますし、以前ならコストが相当かかりそうな機能でも、格段に敷居が低くなっているのでおすすめです。

「写真で探す」は、芸能人に似ている人、初恋の人に似ている人などに出会えるかもしれないステキな機能なのでぜひ使ってみてください。

mimiのダウンロードはこちらから! mimi-lab.jp