中国公安当局が採用するAI「Face++」を試してわかった、UIとしての画像認識

このエントリーをはてなブックマークに追加


膨大な資金をもとに積極的なAI導入を進める中国。

オフィス受付や改札、監視カメラに人物一致が導入され、すでに画像認識技術が日常のいたるところで使われています。

そして、画像認識技術において中国で頭ひとつ抜き出ているのがMegviiが展開するプラットフォーム「Face++」

Face++の顔認識技術は、中国公安当局にも採用され、犯罪捜査において、指名手配犯5000人の逮捕に貢献しているといいます。

今回は、Face++が提供するジェスチャー認識「Gesture Recognition」目線の認識「Gaze Estimation」の精度を実際に試してみました。

「Gesture Recognition」 ── 19種類のジュスチャーに分類する

ジェスチャーを認識するGesture API。19種類のジェスチャーに対応した学習モデルから、画像のジェスチャーが何であるか判定します。

さっそく、こちらの画像をGesture Recognitionに認識させてみます。

{
    "hands": [
        {
            "gesture": {
                "thumb_up": 0,
                "namaste": 0,
                "ok": 100,
                "beg": 0,
                "unknown": 0,
                "index_finger_up": 0,
                "thanks": 0,
                "phonecall": 0,
                "palm_up": 0,
                "big_v": 0,
                "double_finger_up": 0,
                "thumb_down": 0,
                "fist": 0,
                "rock": 0,
                "heart_d": 0,
                "hand_open": 0,
                "heart_b": 0,
                "heart_c": 0,
                "victory": 0,
                "heart_a": 0
            },
            "hand_rectangle": {
                "width": 319,
                "top": 284,
                "height": 478,
                "left": 240
            }
        }
    ]
}

※json結果は一部省略

うえのような結果が返ってきました。
画像中のジェスチャーがどの学習モデルに近いか、0.0〜100までの信頼度で出力し、手の位置や大きさも数値で出してくれます。

うえの画像では、100%の信頼度でジェスチャーが“ok”だと判定されました。

では、ジェスチャーを少し斜めから撮影した画像はどうでしょう?

“thanks”を意味する、こちらのジェスチャーで試してみます。

{
    "hands": [
        {
            "gesture": {
                "thumb_up": 0.007,
                "namaste": 1.117,
                "ok": 0.332,
                "beg": 0.024,
                "unknown": 48.357,
                "index_finger_up": 0.003,
                "thanks": 12.22,
                "phonecall": 1.436,
                "palm_up": 1.761,
                "big_v": 0.004,
                "double_finger_up": 33.389,
                "thumb_down": 0.082,
                "fist": 0.33,
                "rock": 0.027,
                "heart_d": 0.189,
                "hand_open": 0.414,
                "heart_b": 0.161,
                "heart_c": 0.029,
                "victory": 0.047,
                "heart_a": 0.071
            },
        }
    ]
}

※json結果は一部省略

“unknown”(定義されていない)の信頼度が1番高いという結果でした。斜めから撮影し、拳の部分が写っていないことが原因でしょう。

それでも3番目に高い信頼度12.22%で“thanks”と認識しており、真正面から撮影した画像でなくとも、ある程度は認識してくれるようです。

続いて、登録されていないジェスチャーがどのように認識されるか試してみます。

{
    "hands": [
        {
            "gesture": {
                "thumb_up": 0,
                "namaste": 0.003,
                "ok": 0.826,
                "beg": 0.006,
                "unknown": 0,
                "index_finger_up": 0.027,
                "thanks": 0,
                "phonecall": 0.002,
                "palm_up": 0,
                "big_v": 78.005,
                "double_finger_up": 0.005,
                "thumb_down": 0,
                "fist": 0.197,
                "rock": 17.138,
                "heart_d": 0.494,
                "hand_open": 0.011,
                "heart_b": 0.007,
                "heart_c": 0.136,
                "victory": 3.132,
                "heart_a": 0.012
            },
        }
    ]
}

※json結果は一部省略

1番高い信頼度が出たのは、“big_v”の78.005%。そして、2番目が“rock”の17.138%

登録されていないジェスチャーの場合、確率が高いほかの候補を提示してくれます。

Gesture Recognition、撮影環境や学習モデルにより精度は変わってきますが、正面からの基本的な画像であれば、実用レベルの精度はでています。さすが、中国公安当局に採用されているだけあります。

そのほか、手話の自動通訳入力手段のひとつとしても活用できそうです。

「Gaze Estimation」 ── 人がどこを見ているかを読み取る

Gaze Estimationを含むFace Detection APIは、顔の画像を認識して以下の項目の信頼度を返してくれます。

  • 顔の位置、大きさ
  • 目や鼻といったランドマーク
  • 目線の方向
  • 性別やメガネの着用有無
  • 感情
  • ビューティースコア

今回は、ほかの画像認識ではあまり見かけない、「目線の方向」をみていきます。

目線の方向は、

  • “vector_x_component”:写真右向き
  • “vector_y_component”:写真上向き
  • “vector_z_component”:写真正面向き

とベクトルで表示されています。

では、こちらの画像を認識させてみます。

{
    "faces": [
        {
            "attributes": {
                "eyegaze": {
                    "right_eye_gaze": {
                        "position_x_coordinate": 0.624,
                        "vector_z_component": 0.853,
                        "vector_x_component": 0.496,
                        "vector_y_component": 0.165,
                        "position_y_coordinate": 0.415
                    },
                    "left_eye_gaze": {
                        "position_x_coordinate": 0.686,
                        "vector_z_component": 0.713,
                        "vector_x_component": 0.683,
                        "vector_y_component": 0.159,
                        "position_y_coordinate": 0.427
                    }
                }
            }
        }
    ]
}

右上手前を見ていると、正しく認識されているようです。

続いて、顔の向きが目線の向きに影響しているかどうか、こちらの画像で検証します。

{
    "faces": [
        {
            "attributes": {
                "eyegaze": {
                    "right_eye_gaze": {
                        "position_x_coordinate": 0.495,
                        "vector_z_component": 0.859,
                        "vector_x_component": -0.386,
                        "vector_y_component": 0.336,
                        "position_y_coordinate": 0.461
                    },
                    "left_eye_gaze": {
                        "position_x_coordinate": 0.525,
                        "vector_z_component": 0.946,
                        "vector_x_component": 0.318,
                        "vector_y_component": 0.062,
                        "position_y_coordinate": 0.371
                    }
                }
            }
        }
    ]
}

右目は左方向を、左目は左方向を向いていると認識されています。画像では正面を向いていませんが、信頼度が高くなっているので、まだまだ認識しきれない点もあるよう。

ただ、こちらも実用の範囲内の精度には達しているのではないでしょうか。

目線の方向から怪しい動きを察知したり、どの商品・広告を見ているかなど、マーケティングにも応用できそうです。

また、喋れない、体の自由がきかない患者が、目を使って意思疎通する際、Gaze Estimationを使えばよりスムーズなコミュニケーションが実現しそうです。

ジェスチャーと目線は新たなUIとなるか?

ジェスチャーと目線を認識する「Gesture Recognition」と「Gaze Estimation」。

どちらも精度が高く、マーケティングや防犯、介護、日常生活などさまざまな場面での活用が期待できます。

Google HomeやAlexaを始めとするスマートスピーカーでは、音声によって機器を操作しますが、ジェスチャーや目線で機器の操作がおこなわれるようになるかもしれません。