Azure Media Analytics の新機能 Face Detection と Emotion Detection を発表

執筆者: Richard Li (Program Manager, Azure Media Services)

このポストは、4 月 20 日に投稿された Announcing face and emotion detection for Azure Media Analytics の翻訳です。

 

Azure Media Analytics は、複数の音声サービスと動画分析サービスを集約した包括的なエンタープライズ向けソリューションであり、コンプライアンスやセキュリティに対応し、全世界でご利用いただけます。Azure Media Analytics から提供される各サービスは、Azure Media Services プラットフォームのコア コンポーネントを使用して構築されており、単体で大規模なメディア処理に対応しています。Milan Gadas の Azure Media Analytics の概要に関するブログ記事 (英語) では、今回の発表した分を含め他のメディア プロセッサについても紹介しているのでぜひご覧ください。

マイクロソフトは、Azure Media Face Detector のパブリック プレビューを発表しました。このプレビューは無償提供されます。この記事では、その使用方法と出力の詳細についてご説明します。このメディア プロセッサは、人数のカウントや動きの追跡に使用できるほか、顔の表情から観客の関心の度合いや反応を測定することもできます。この機能には、新しい Azure ポータル、API と下記のプリセット、無料の Azure Media Services Explorer ツールのいずれかからアクセスできます。Azure Media Face Detector には、Face Detection と Emotion Detection という 2 つの機能が含まれます。以下のセクションでは、各機能の詳細を順番にご説明します。

Face Detection

Face Detection は、動画内の人間の顔を検出して追跡する機能です。複数の顔を検出し、動きに合わせて追跡することが可能で、JSON ファイルに時間と位置のメタデータが返されます。画面内を動き回る人物の追跡中には、顔ごとに ID が割り当てられます。顔が隠れたり、フレーム外に出たりしても、少しの間であれば ID は変わりません。

注: このサービスでは顔認識は行われません。長時間フレーム外に出たり、顔が隠れたりした場合は、顔が再び映った際に新しい ID が割り当てられます。

入力プリセット

以下に、Face Detection のみを利用する場合の JSON 形式の構成プリセットを示します。

 {"version":"1.0"}

入力ビデオ

 

JSON 形式の出力

(抜粋)

 Download full

 {
"version": 1,
"timescale": 30000,
"offset": 0,
"framerate": 29.97,
"width": 1280,
"height": 720,
"fragments": [
{
"start": 0,
"duration": 60060
},
{
"start": 60060,
"duration": 60060,
"interval": 1001,
"events": [
[
{
"id": 0,
"x": 0.519531,
"y": 0.180556,
"width": 0.0867188,
"height": 0.154167
}
],
[
{
"id": 0,
"x": 0.517969,
"y": 0.181944,
"width": 0.0867188,
"height": 0.154167
}
],

Emotion Detection

Emotion Detection は Face Detection Media Processor のオプションのコンポーネントで、検出した顔から喜び、悲しみ、恐れ、怒りなどいくつもの感情の属性を分析して返します。現時点では、このデータは指定した時間全体の集計値として返されます。時間および間隔はカスタマイズすることが可能です。

入力の構成

JSON 形式のプリセットのサンプルは以下のとおりです。

{
'version': '1.0',
'options': {
'aggregateEmotionWindowMs': '987',
'mode': 'aggregateEmotion',
'aggregateEmotionIntervalMs': '342'
}
}

属性名 説明
Mode Faces: Face Detection のみAggregateEmotion: フレーム内のすべての顔の感情の値の平均値を返します。
AggregateEmotionWindowMs AggregateEmotion モードを選択した場合に使用します。各集計結果の生成に使用する動画の長さをミリ秒単位で指定します。
AggregateEmotionIntervalMs AggregateEmotion モードを選択した場合に使用します。集計結果を生成する頻度を指定します。

集計の既定値

集計に使用する時間と間隔の設定の推奨値は以下のとおりです。時間は間隔よりも長くする必要があります。

既定値 (秒) 最大値 (秒) 最小値 (秒)
時間 2 3 1
間隔 0.5 1 0.25

出力

AggregateEmotion の JSON 形式の出力

(抜粋)

 Download Full

{
"version": 1,
"timescale": 30000,
"offset": 0,
"framerate": 29.97,
"width": 1280,
"height": 720,
"fragments": [
{
"start": 0,
"duration": 60060,
"interval": 15015,
"events": [
[
{
"windowFaceDistribution": {
"neutral": 0,
"happiness": 0,
"surprise": 0,
"sadness": 0,
"anger": 0,
"disgust": 0,
"fear": 0,
"contempt": 0
},
"windowMeanScores": {
"neutral": 0,
"happiness": 0,
"surprise": 0,
"sadness": 0,
"anger": 0,
"disgust": 0,
"fear": 0,
"contempt": 0
}
}
],

出力の意味

この顔の検出と追跡用の API では、高精度な顔の位置の検出と追跡が可能で、動画に含まれる最大 64 の人間の顔を検出することができます。顔が正面を向いている場合に最適な結果が得られる一方、横顔やサイズが小さい (24 x 24 ピクセル以下) 場合には正確な結果を得ることが困難です。

顔が検出、追跡されると、画像内の顔の位置をピクセル数で表した座標 (左、上、幅、高さ) とその人物を追跡する顔の ID 番号が返されます。フレーム内の顔が正面以外を向いたり、重なったりすると、顔の ID 番号はリセットされる場合があるため、結果として同一人物に複数の ID が割り当てられる可能性があります。

JSON リファレンス

顔の検出と追跡の処理の出力結果には、指定したファイルに含まれる顔のメタデータが JSON 形式で返されます。

顔の検出と追跡の JSON には、以下の属性が含まれます。

  • Version: Video API のバージョン。
  • Timescale: 動画の 1 秒あたりの “ティック” 数。
  • Offset: タイムスタンプのオフセット。Video API バージョン0 では、この値は常に 0 です。今後対応するシナリオでは、この値が変更される可能性があります。
  • Framerate: 動画の 1 秒あたりのフレーム数。
  • Fragments: メタデータはフラグメントと呼ばれる複数のセグメントに分割されます。各フラグメントには、開始時間、長さ、間隔、イベントが含まれます。
  • Start: 最初のイベントの開始時間 (単位は “ティック”)。
  • Duration: フラグメントの長さ (単位は “ティック”)。
  • Interval: フラグメント内の各イベント エントリの間隔 (単位は “ティック”)。
  • Events: 各イベントには、指定した時間内に検出、追跡された顔が含まれます。イベントは 2 次元配列として表されます。外側の配列は特定の時間間隔を表します。内側の配列にはその時点で発生した 0 個以上のイベントが含まれ、空白のかっこ [ ] は顔が検出されなかったことを表します。
  • ID: 追跡されている顔の ID。顔を検出できなくなった場合には、この番号が変更される可能性があります。同一人物には動画全体を通じて 1 つの ID が割り当てられることが望ましいものの、検出アルゴリズムの制約 (顔が隠れる場合など) によってこれを保証することはできません。
  • X Y: 顔の境界ボックスの左上の XY 座標。0.0 ~ 1.0 の間で正規化された数値で表されます。
    • XY 座標は常に横長の画面の相対位置であるため、縦長 (または iOS の場合は上下逆) の動画の場合は、座標を適宜変換する必要があります。
  • Width Height: 顔の境界ボックスの幅と高さ。0.0 ~ 1.0 の間で正規化された数値で表されます。
  • facesDetected: JSON 形式の結果の最後に表示され、動画から検出された顔の数を表します。顔を検出できなくなった場合 (顔が画面外に出たり、カメラ以外の方向を向いたりした場合など) には、ID がリセットされる可能性があるため、この数値は動画に含まれる実際の顔の数と一致しない場合があります。

JSON を上記のような形式にしたのは、API が今後のシナリオに対応できるようにするためです。今後のシナリオでは、メタデータを迅速に取得し、大量の結果のストリームを管理することが重要になります。フラグメント化の手法により、メタデータを時間ベースのチャンクに分割し、必要な部分のみをダウンロードできるようにすると共に、セグメント化の手法により、イベントのサイズが大きくなりすぎた場合に分割できるようにしています。データは簡単な計算によって変換することができます。たとえば、あるイベントにおいて、Start の値が 6300 (ティック)、Timescale が 2997 (ティック/秒)、Framerate が 29.97 (フレーム/秒) の場合、以下の式が成立します。

  • Start/Timescale = 2.1 秒
  • Start x (Framerate/Timescale) = 63 フレーム

以下は、顔の検出と追跡の JSON を抽出してフレーム単位の形式に変換する簡単な例です。

 var faceDetectionResultJsonString = operationResult.ProcessingResult;
var faceDetecionTracking =
JsonConvert.DeserializeObject<FaceDetectionResult>(faceDetectionResultJsonString, settings);

使用を開始するには

このサービスを利用するには、Azure サブスクリプションに Media Services アカウントを作成して REST API/SDK を使用するか、Azure Media Services Explorer (英語) を使用してください。

サンプル コードについては、Milan Gada の Azure Media Analytics の概要に関するブログ記事 (英語) を参照し、上記のプリセットを使用してください。

制限事項

  • サポート対象の入力ビデオ形式は MP4、MOV、WMV です。
  • 検出可能な顔のサイズは 24 x 24 ~ 2048 x 2048 ピクセルです。この範囲外の顔は検出されません。
  • 各動画に対して返される顔の最大数は 64 です。
  • 顔の向き (頭部姿勢) が正面から大きくずれている場合や、顔の大部分が隠れている場合などは、技術的な問題により顔が検出されない場合があります。最適な結果が得られるのは、正面またはそれに準ずる向きの顔です。

参照情報、お問い合わせ先

Face Detection Media Processor および Media Analytics の取り組みの最新情報については、Azure Media Services ブログ (英語) をご確認ください。

Media Analytics サービスについてご不明な点がある場合は、amsanalytics@microsoft.com までお問い合わせください。