production.log

株式会社リブセンスでエンジニアをやっている星直史のブログです。

AWS Rekognitionで画像内の物体名を取得する方法

概要

AWS re:Invent 2016で発表された新機能の中にAWS Rekognitionという画像内の物体、シーン、および顔を検出するサービスが発表されました。
今更感ありますが、Rekognitionで画像内の物体名を取得する方法を書きます。

Lambdaでの処理

'use strict';
const AWS = require("aws-sdk");
AWS.config.region = 'us-west-2';
AWS.config.apiVersions = { 
  rekognition: '2016-06-27',
};
const rekognition = new AWS.Rekognition();

module.exports.handle = (event, context, callback) => {

  var params = { 
    Image: {
      S3Object: {
        Bucket: "BUCKET_NAME",
        Name: "OBJECT_KEY"
      }   
    }   
  };  
  rekognition.detectLabels(params, function(err, data) {
    if (err) console.log(err, err.stack); // an error occurred
    else     console.log(data);           // successful response
  });
};

こんだけ!!
基本的にはS3のバケットとオブジェクトのキーをparamsに指定するだけです。
処理速度は2秒かかることもあるので、バッチ処理以外ではあまり使えなさそうです。
また、当たり前ですが、固有名詞は出てきませんし、返却されるラベルは全て英語です。
そのため、例えば、東京タワーの画像を解析した場合BuildingとかTowerというラベルが返却されます。

注意事項

Rekognitionは使用できるリージョンがとても少ないです。記事投稿時点では下記の3リージョンでしか使用できません。

  • us-east-1
  • us-west-2
  • eu-west-2

Tokyoリージョンに来ることを期待!

まとめ

たった数十行で画像内の物体を検出できるとは、未来に生きている気がしました。

Rekognitionは他にも、人物の顔を認識して傾きとかを検出したり、人物画像同士の比較をし、同一人物かを検出したり、アダルト画像か検出したりできます。価格も100万枚まで1,000枚あたり1.00USDだったり、低価格なのも魅力です。

一方GCPのVision APIはAWSと比較して高機能である代わりに1,000ユニットあたり$1.50 と多少割高になります。

Rekognitionに存在しない機能を使いたい時はGCPを使う感じですかね。