Amazon Web Services ブログ

Amazon Rekognition とグラフデータベースを使って映画スターのソーシャルネットワークを理解する

Amazon Rekognition は、イメージの分析をアプリケーションに簡単に追加できるようにする AWS サービスです。ディープラーニングを活用したこのコンピュータビジョン向け API に追加された最新機能が、有名人の認識です。この使いやすい機能は、各分野の有名人や著名人を多数検出、認識します。このツールにより、ユーザーは自身の関心に基づいて有名人のデジタルイメージライブラリのインデックスを作成し、検索することができます。

当社のお客様が個人に関するデータの保存に用いる一般的な方法の 1 つが、グラフデータベースです。過去のブログ投稿で詳しく説明したとおり、Facebook や LinkedIn、Twitter といった企業は巨大な関係性ネットワークの管理能力を通じ、社会が相互に関わり合う方法を革新してきました。このブログ投稿の目的は、Rekognition の有名人の認識および顔認識機能をグラフデータベースに保存された関係情報に組み合わせるのがいかに簡単かをご紹介することです。

これらのテクノロジーを組み合わせることで、お客様は 1 枚の写真を通じて、その写真に含まれる人物が他の関心対象である人物とどのように関連しているかを把握できます。さらに、2 枚の写真を送信し、それぞれの写真に含まれる人々の間にどのような相互関係があるかを素早く見極めることも可能です。この関係マッピングを活かしたコミカルな例が、有名な Six Degrees of Kevin Bacon (ケヴィン・ベーコンとの六次の隔たり) ゲームです。しかし、このようなアプリケーションのビジネス価値は実に大きなものです。法執行機関は 2 枚の写真を基に Rekognition を活用して各人物の身元を特定し、グラフデータベースを参照して関心対象である 2 名の人物が知り合いかどうかを突き止めることができます。同様に、ホスピタリティ企業は Rekognition とグラフデータベースを使って敷地内にいる有名人を素早く特定し、その人物の知り合いである他の有名人のうち、近隣に宿泊している人物を把握できます。

このブログ投稿では、グラフデータベース (ここでは Neo4j Community Edition を使用) を採用した Rekognition と、D3.js ライブラリを使用した Jupyter Notebook の併用方法のデモンストレーションをご紹介します。

設定

このテクノロジーの組み合わせの使用を開始するには、まず AWS ラボの Github リポジトリからプロジェクトのコピーを取得します。  プロジェクト構成には 2 つの主なエリアが含まれます。

  • <project root> – ここに、実際の Jupyter Notebook がすべての依存関係とともに保存されています。
  • <project root>/cft – インフラストラクチャを作成するための AWS CloudFormation テンプレートおよびサンプルプロパティ、サンプルコマンド。

ここに新たな/既存の ssh キーを追加する必要があります。AWS CloudFormation テンプレートが Neo4j Community Edition をインストールし、Rekognition を操作するための Python コード例を含む Jupyter Notebook を AWS ラボからダウンロードして、スピーディな利用開始に必要となるその他の Amazon EC2 設定を構成します。また、Cloud Formation テンプレートが Neo4j ブラウザまたは Jupyter Notebook のいずれかのクエリ対象となる一般的なムービーグラフデータベースを自動的にロードします。

rek-neo4j-blogpost-git.template という名前の AWS CloudFormation テンプレートを実行します。このテンプレートに必要な情報はユーザーの ssh EC2 キー名 (以下を参照) のみです。

aws cloudformation create-stack –-stack-name rekognitionblog \
  --template-body file://rek-neo4j-blogpost-git.template \
  --parameters ParameterKey=KeyName,ParameterValue=<ここにキーを挿入> \
  --capabilities CAPABILITY_NAMED_IAM

数分間待って AWS CloudFormation のインストールが完了したら、以下を実行してレスポンスの出力セクション (サンプルは以下を参照) を表示させることで、新たなサーバーの DNS と IP アドレスを取得できます。

> aws cloudformation describe-stacks –-stack-name rekognitionblog
. . .
. . .
“Outputs”: [
	{
		“OutputKey”:”IPPublicInstance”,
		“OutputValue”:”54.172.52.208”
},
	{
		“OutputKey”:”DNSPublicInstance”,
		“OutputValue”:”ec2-54-172-52-208.compute-1.amazonaws.com”
}

. . . 

今後使用する場合に備え、新たなサーバーの IP アドレスと DNS を覚えておいてください。

お好みのブラウザに <public DNS>:7474 と入力し、新たに作成した EC2 インスタンスのポート 7474 を参照します。neo4j/neo4j を使って初回ログインを行うと、パスワードの変更を求めるメッセージが表示されます。これが、ノートブックで使用するパスワードとなります (このデモで使用するパスワードは password ですが、自由な組み合わせでより安全なパスワードを作成できます)。Neo4j インスタンスを参照できない場合は、Neo4j ブラウザを開けないことが原因であれば VPN をログアウトしてみてください。

Notebook へのアクセス

この演習では、Jupyter Notebook の参照を可能にするため EC2 インスタンスへのトンネルに ssh を使用します。インスタンスのデフォルトユーザーは「ubuntu」ですが、インスタンスを設定する際は、必ず自身が指定した ssh キーを使用してください。

> sudo ssh –I <your-pubic-key> -N -L 8888:localhost:8888 ubuntu@<publicDNS>

次に、EC2 インスタンス内で以下のコマンドを使用し、ノートブックの置かれたロケーションから Jupyter Notebook を起動します。

> cd /opt/notebook
> jupyter notebook –no-browser
. . . 
. . .
初回接続時は、この URL をお使いのブラウザにコピー/ペーストして
   次のトークンでログインします。
        http://localhost:8888/?token=0b640d92e8114965441a8cac2af61864dbf99086afcd6762

フィードバックとして返されたトークンを書き留め、新たなブラウザで localhost8888/?token=<トークン> をナビゲートすることで、好みのブラウザでこのトークンを使用します。

これで Python の使用例を含む Jupyter Notebook が開き、Rekognition API を操作することができます。コードは以下のような構造になっています。

  1. 必要な Python モジュールをダウンロードおよびインストール、インポートします。
  2. 目的のイメージを取得し、オブジェクトを「image1.jpg」として保存します。
  3. Rekognition API を使ってイメージ内に含まれるそれぞれの顔 (有名人かどうかは問いません) を検出し、顔の周囲に境界ボックスをプリントしたら、そのイメージ内に含まれる最も大きな顔のクロップ画像の印刷を実演します。Rekognition は、最も大きなものから順に顔の特定を行います。1 点のイメージにつき特定可能な顔の数は最大 15 点です。
  4. Rekognition API を使ってイメージ内に有名人が含まれているかどうかを特定し、各有名人の名前とその人物に関する追加情報へのリンクを印刷します。
  5. Neo4j データベースへの認証を行い、グラフオブジェクトを作成します。
  6. ケヴィン・ベーコンと image1.jpg. に含まれる映画スターの間に何段階の隔たりがあるかを問い合わせることで、ムービーグラフデータベースがアクセス可能であることを確認します。Rekognition はあらゆる業界・分野に属する有名人を特定しますが、ムービーグラフデータベースはテレビや映画に出演したことのある人物の情報のみを保存する点に注意してください。デフォルトコードでは、image1.jpg は Amazon オリジナル作品の『Patriot (パトリオット ~特命諜報員 ジョン・タヴナー~)』に出演したマイケル・ドーマンを示しています。
  7. 2 つ目の写真を image2.jpg として保存し、ダウンロードしたオブジェクトを印刷します。
  8. Rekognition API を使って検出を行い、image2.jpg に含まれる有名人の名前を印刷します。デフォルトコードでは、Amazon のオリジナル作品『BOSCH / ボッシュ』に出演したタイタス・ウェリヴァーとジェイミー・ヘクターの検出が実演されます。
  9. Neo4j ムービーグラフデータベースに、image1.jpg と image2.jpg に含まれる各映画スターの間の関係性を問い合わせます。追加のボーナスとして、このコードはインタラクティブな d3.js を使って関係性を可視化します。

まとめ

このブログ投稿は、Python を使った Rekognition API の操作方法、Rekognition 出力を用いた Neo4j データベースへの問い合わせ方法、インタラクティブな Jupyter Notebook での d3.js 可視化のレンダリング方法を実演するものです。これらのテクノロジーを組み合わせることで、写真に含まれる人物が誰かという情報だけでなく、その人物が関心対象である別の人物とどのように関連しているかを特定できます。このようなソリューションは、法執行機関からホスピタリティ企業に至る広範な分野のお客様に大きな影響をもたらします。

ご不明の点またはご提案があればコメントをお寄せください。


その他の参考資料

オレゴン州のワシントン郡では、法執行機関による容疑者の特定に Amazon の Rekognition が用いられています


今回のブログの投稿者について


derek_graeber_90_1Derek Graeber は、AWS プロフェッショナルサービスの Big Data & Analytics シニアコンサルタントです。
法人のお客様を担当し、ビッグデータプロジェクトをリードすることで AWS の運用を通じたお客様のビジネス目標達成をサポートしています。余暇は妻や家族とともに過ごし、時にはゴルフに出かけることも。ただし、ゴルフの腕はなかなか上達しないんだとか。

Kyle Johnson は AWS プロフェッショナルサービスのデータサイエンティストです。 お客様のビジネス関連の問題解決を目的とした、再現可能な人工知能ソリューションを構築することにやりがいを感じています。余暇には家族と Phipps Conservatory に出かけたり、Amazon Rekognition 対応のハロウィンデコレーションのアイデアを練っているそうです。