非構造化画像データから分析要素を抽出する(1)- 顔の検出
重要:個人情報や機密情報の使用に関する注意喚起(必ずお読みください)
当検証で紹介している技術やサービスの使用は、読者の皆様自身の判断と責任で行ってください。特に、個人情報や機密情報を含むデータの取り扱いについては、最大限の注意を払い、適切なセキュリティ対策を講じることが不可欠です。
検証や実際の利用を行う際には、常にプライバシー保護の法律、規制、およびベストプラクティスを遵守するよう心掛けてください。また、第三者のデータを使用する場合は、必要な同意を得ること、及びそのデータの使用が法律に準じていることを確認することが重要です。
本ブログや筆者、所属する団体は、紹介する技術を用いて行われるいかなる活動から生じる直接的または間接的な損害に対して、責任を負いかねます。技術を使用することによって生じ得るリスクを理解し、自己の責任で慎重にご活用ください。
ご不明点や懸念がある場合は、クラウドベンダーや専門家に相談することをお勧めします。
当検証の情報を活用することで、読者の皆様が新たな知識やスキルを安全に身に付け、ビジネスでの活用をすすめていただければ幸いです。

データ分析基盤の分野では、画像解析の要求も高まっています。本テーマでは、画像解析に関連する技術を2回に分けて解説および検証します。
今回の投稿では、「顔の検出」という画像内の特定の特徴を認識する技術に焦点を当てます。
顔を検出する技術
顔の検出は、画像認識技術の一つで、画像や動画の中から人間の顔を自動的に識別し、位置を特定する技術です。このサービスは、セキュリティ、マーケティング、写真編集、ソーシャルメディアなど、さまざまな分野で活用されています。
顔検出サービスの主な特徴は以下の通りです:
- 顔の検出 画像内に存在する顔の位置と大きさを検出します。
- リアルタイム処理 ビデオストリームなどのリアルタイムデータに対して、顔を素早く検出します。
- 複数顔の検出 一つの画像内に複数の顔がある場合でも、それぞれを個別に検出することが可能です。
- 顔の向きの認識 顔が正面を向いているだけでなく、横向きや斜めなど、さまざまな角度で顔を検出することができます。
顔の検出サービスは、さらに進んだ技術である顔認識(特定の人物の顔を識別する)や表情認識(感情を読み取る)などにも応用されています。
顔を検出するサービス
顔を検出するサービスは多くの企業やオープンソースプロジェクトによって提供されており、それぞれに特徴があります。その中で、3大クラウドベンダーからは次のサービスが提供されています。
- Amazon Rekognition Amazon Web Servicesが提供する画像とビデオ分析サービスです。顔検出の他にも、顔の分析や顔認識などの機能があります。
- Microsoft Azure Face API Microsoft Azureの顔認識サービスで、顔検出の他に顔の属性分析や顔認識などの機能が提供されます。
- Google Cloud Vision API Google Cloudが提供する画像分析サービスです。顔検出の他に、ラベル検出、テキスト検出などの機能もあります。
顔を検出する機能の検証
本投稿では、前述のサービスの中でAmazon Rekognitionのdetect_faces APIを使用した顔の検出技術を検証します。
検証の環境と構成
次の構成で検証を実施します。
- AWS Lambda関数として機能を実装します。
- 入力となる画像をS3にアップロードし、そのイベントをトリガーに関数を実行します。
- 実行結果は、コンソールに出力し、CloudWatchから内容を抽出します。

APIによる顔の詳細情報の抽出(ひとりの場合)
次の写真をもとに、顔の詳細情報を抽出します。

ソースコードは次の通りです。AWSのLambdaでは、様々なサービスを使用するためのテンプレートが用意されており、Rekognitionのテンプレートも備わっています。次のコードは、テンプレートの一部を変更したものです。
Lambda関数の実行結果(JSON)は次の通りです。
この実行結果からは、次のことがわかります。
キー① | キー② | 意味 | 値 |
---|---|---|---|
顔の位置の概要 | |||
BoundingBox | Width | 境界の幅(画像内を顔の幅が占める割合) | 0.21001151204109192 |
Height | 境界の高さ(画像内を顔の高さが占める割合) | 0.42569229006767273 | |
Left | 画面左端からの顔左端の位置 | 0.3881930708885193 | |
Top | 画面上端からの顔上端の位置 | 0.13909980654716492 | |
属性情報 | |||
AgeRange | 推定年齢 | 'Low': 25, 'High': 33 | |
Smile | Value | 笑っているか | False |
Confidence | その信頼度 | 98.85700988769531 | |
Eyeglasses | Value | 眼鏡をしているか | False |
Confidence | その信頼度 | 99.99993133544922 | |
Sunglasses | Value | サングラスをしているか | False |
Confidence | その信頼度 | 99.99999237060547 | |
Gender | Value | 性別 | Male |
Confidence | その信頼度 | 99.99974060058594 | |
Beard | Value | あごひげを生やしているか | True |
Confidence | その信頼度 | 99.98367309570312 | |
Mustache | Value | 口ひげを生やしているか | True |
Confidence | その信頼度 | 88.15026092529297 | |
EyesOpen | Value | 目を開けているか | True |
Confidence | その信頼度 | 98.5711669921875 | |
MouthOpen | Value | 口を開けているか | False |
Confidence | その信頼度 | 99.33467864990234 | |
感情・表情の情報 | |||
CALM | 冷静である信頼度 | 99.4140625 | |
CONFUSED | 混乱している信頼度 | 0.27904510498046875 | |
SAD | 悲しんでいる信頼度 | 0.004255771636962891 | |
SURPRISED | 驚いている信頼度 | 0.002130866050720215 | |
HAPPY | 幸せを感じている信頼度 | 0.0017623106250539422 | |
ANGRY | 怒っている信頼度 | 0.0003039836883544922 | |
DISGUSTED | うんざりしている信頼度 | 0.00000596046 | |
FEAR | 恐れている信頼度 | 0.00000596046 | |
身体や目線の情報 | |||
Pose | 身体の向き | 'Roll': -5.9225993156433105, 'Yaw': -2.1570489406585693, 'Pitch': 2.8039565086364746 | |
EyeDirection | 目線の向き | 'Yaw': 0.06892717629671097, 'Pitch': -14.322129249572754 | |
その信頼度 | 99.99107360839844 |
このほかにも、次のような詳細な顔の各パーツの座標情報が抽出されています。
- 両目の中心と左右上下端
- 鼻の中心と左右端
- 口の中心と左右上下端
- 両眉の左右端
- 両目の瞳
- 左右の上あご中あごあご先端
APIによる顔の詳細情報の抽出(複数人の場合)
次の写真をもとに、顔の詳細情報を抽出します。

ソースコードは、前述のものと同じです。
Lambda関数の実行結果(JSON)は次の通りです。
画像に映っている全員分のデータが抽出されます。
まとめ
今回は、AWS Rekognitionのdetect_facesというAPIを使用して顔の特徴を検出する機能を検証し、紹介しました。データ分析基盤での活用には次のようなものが考えられます。
- 顧客行動分析 小売店舗での顧客の動きや表情を分析し、顧客満足度や購買行動の理解を深める。
- 広告効果測定 公共の場での広告看板に対する視聴者の反応(表情や注目度)を分析する。
- 感情分析 顧客の表情から感情を読み取り、サービスや商品のフィードバックを得る。
- 年齢・性別推定 顧客の顔から年齢や性別を推定し、ターゲットマーケティングに活用する。
- 人物識別 特定の人物を画像や動画から識別し、個人認証や特定の顧客に対するサービス提供に利用する。