画像から情報を収集する能力は、ビジネスに大きな可能性を秘めています。そして、それは単に楽しいことでもあります。この記事では、画像から情報を収集する能力をどのように活用したかを概説します。
簡単に言えば、画像オブジェクト検出とは、特定の画像内のエンティティに関する情報を検出して抽出するプロセスです。これには、オブジェクト、アクティビティ、場所、動物、製品などの検出が含まれます。
画像オブジェクト検出は、さまざまな業界で幅広い使用例があります。銀行、保険、ソーシャル メディア、出会い系アプリ、報道機関、FinTech などの主要セクターでは、何らかの形でオブジェクト検出を使用しています。
最近、私たちはソーシャル メディアのスタートアップ企業向けに画像オブジェクト検出機能を構築するという任務を負いました。ユースケースはシンプルで、ユーザーがお気に入りの写真をいくつか選択して送信し、スタートアップ企業のソーシャル メディア ページで紹介できるようにするというものでした。
ソーシャル メディア マーケティング チームには、海の写真、人気のランドマーク、動物、音楽コンサートなど、特定のテーマの画像投稿を検索する方法が必要でした。
画像を分析し、画像内の風景や物体に基づいて分類するのは簡単な作業ではありません。人間の視覚は驚異的で、物体を検出する脳の能力を再現できるアプリケーションを構築するのは非常に複雑です。まさにそれを行うために、コンピューター ビジョン業界全体が存在します。
オブジェクト検出を最初から実行するには、通常、次のような複数のステップから成るプロセスが必要です。
この機能の目的は、プロジェクトの他のすべての機能と同様に、迅速に構築し、できるだけ早く実稼働環境でその有効性をテストすることでした。さらに、既存のクラウド サービスを活用できる場合、ソリューションをゼロから構築するために開発リソースを費やしたくありませんでした。
Cue Serverless — スタートアップのバックエンド全体が完全にサーバーレスでイベント駆動型です。このアーキテクチャにより、ソーシャル メディア アプリを他のアプリと差別化する機能にのみ集中できる開発者チームを編成できます。また、サーバーレスにより、使用した分だけを支払うだけで、非常にスケーラブルなサービスを構築できます。これは、拡大するスタートアップにとって重要な考慮事項です。
そこで、この機能を実現するために、完全にサーバーレスな画像およびビデオ分析サービスである Amazon Rekognition を使用しました。Rekognition を使用することで、この複雑で重要なワークフローをわずか数時間で開発することができました。詳しく見ていきましょう。
Amazon Rekognition は、ディープラーニングを使用して画像とビデオの分析を実行する AWS サーバーレス サービスです。完全にサーバーレスであるため、Rekognition では基盤となるインフラストラクチャの複雑さを心配する必要がありません。使用した分だけ支払い、画像とビデオの分析タスク用に事前に作成されたソフトウェアが提供されます。Rekognition は、画像ラベル検出、顔検出、有名人検出、コンテンツ モデレーション、テキスト検出など、さまざまな機能を提供します。
最も優れている点は、Rekognition がディープラーニング モデルの構築、トレーニング、分析という面倒な作業を抽象化してくれることです。画像とビデオの分析は迅速かつ簡単で、必要なセットアップは最小限です。独自のデータセットの構築とトレーニング、およびサービスの拡張のためのサーバー容量のプロビジョニングについて心配する必要はありませんでした。心配する必要があったのは統合だけでした。
アーキテクチャは簡単です。モバイル アプリは、ユーザーの携帯電話から S3 バケットに画像をアップロードします。次に、S3 へのアップロードによって Lambda 関数がトリガーされ、Rekognition API が呼び出され、クエリのために結果が DynamoDB に保存されます。
AWS を使用したサーバーレス画像オブジェクト検出アーキテクチャ図
コードを書くのは楽しいですよね? 少ないコードを書くと、さらに楽しくなります。
Rekognitionは、画像データを送信して分析を実行し、結果を返す一連のAPIを公開しています。私たちのユースケースでは、
サーバーレス フレームワークの Infrastructure as Code ファイルの簡略化されたバージョンは次のようになります。
//serverless.yamlfunctions: imageLabelDetection: handler: image-label-detection.handler events: - s3: bucket: my-image-bucket event: s3:ObjectCreated:* existing: true iamRoleStatements: - Effect: Allow Action: rekognition:DetectLabels Resource: "*" - Effect: Allow Action: s3:GetObject Resource: arn:aws:s3:::my-image-bucket
LambdaコードはRekognition APIを呼び出して結果をDynamoDBに保存するだけですが、ユースケースに合ったものなら何でも使用できます。S3イベントからS3バケット名と画像のオブジェクト名を取得し、それらをdetectLabels関数に渡します。
また、信頼レベルのしきい値と返されるラベルの最大数を指定するために、2 つのオプション パラメータ (MaxLabels と MinConfidence) を渡します。以下の例では、応答で取得されるラベルは最大 20 個のみで、すべてのラベルの信頼レベルは 80% を超えます。
//image-label-detecion.jsconst AWS = require("aws-sdk");const rekognition = new AWS.Rekognition();exports.handler = async (event) => { const imageDetails = event.Records[0].s3; const bucketName = imageDetails.bucket.name; const objectKey = imageDetails.object.key; const rekognitionResp = await rekognition .detectLabels({ Image: { S3Object: { Bucket: bucketName, Name: objectKey, }, }, MaxLabels: 20, MinConfidence: 80, }) .promise(); // Send to data store, eg DynamoDB // ... };
犬の写真を嫌いな人はいないでしょう。以下は、S3 バケットにアップロードした画像に対する応答です。ご覧のとおり、Rekognition は、屋外の砂利道にいる犬の画像であると正しく判定しています (また、画像内のどこに犬がいるかも示しています)。
認識応答(左)、アップロードされた画像(右)。
では、Rekognition を数か月間本番環境で使用した後の感想は何でしょうか? 重要なポイントを以下にリストします。
TLDR: Rekognition により、正確かつ高速でスケーラブルな画像オブジェクト検出機能を迅速に構築できるようになりました。