すべてのプロダクト
Search
ドキュメントセンター

Intelligent Media Management:顔検出

最終更新日:Dec 27, 2024

コンピュータービジョンによって実現される顔検出は、画像または動画内の人間の顔を識別して特定するために使用されます。顔検出は、認証、システム監視、インテリジェントアルバム管理、顧客行動分析など、さまざまなシナリオで使用できます。このトピックでは、顔検出機能の使用方法、およびこの機能を使用して画像内の顔とそれに関連する特徴を識別する方法について説明します。

概要

顔検出機能は、画像AI技術に基づいています。画像内の1つ以上の顔と顔情報を検出できます。画像に複数の顔が含まれている場合、システムはこれらの顔と顔情報を検出します。顔情報には、顔ID、年齢、性別、気分、魅力度、顔の質、顔の属性が含まれます。顔の属性には、顔の位置、頭の向き、眼鏡、ひげ、マスクが含まれます。

シナリオ

  • ユーザー認証:顔検出は、顔の類似度比較と連携してユーザー認証を実装できます。ユーザー認証は、主に携帯電話の顔認証解除に必要です。顔の類似度比較の詳細については、顔の類似度比較を参照してください。

  • 表情分析:表情は、顔検出と表情認識技術を使用して分析されます。表情分析は、感情分析、拡張現実(AR)、バーチャルキャラクターなどのシナリオに適用されます。

説明
  • 背景の乱雑さ:複雑な背景は顔の特徴と混同され、検出結果に影響を与える可能性があります。

  • 画像に複数の顔が含まれている場合、顔が隠れている可能性があり、顔検出アルゴリズムのパフォーマンスが低下する可能性があります。

前提条件

  • AccessKeyペアが作成され、取得されています。詳細については、AccessKeyペアの作成を参照してください。

  • OSSがアクティブ化され、バケットが作成され、オブジェクトがバケットにアップロードされています。詳細については、オブジェクトのアップロードを参照してください。

  • IMMがアクティブ化されています。詳細については、IMMのアクティブ化を参照してください。

  • IMMコンソールでプロジェクトが作成されています。詳細については、プロジェクトの作成を参照してください。

    説明
    • CreateProjectオペレーションを呼び出して、プロジェクトを作成できます。詳細については、CreateProjectを参照してください。

    • ListProjectsオペレーションを呼び出して、特定のリージョンにある既存のプロジェクトをクエリできます。詳細については、ListProjectsを参照してください。

使用方法

DetectImageFacesオペレーションを呼び出して、画像内の顔と、年齢や性別などの顔情報を検出します。

  • IMMプロジェクト:test-project

  • 画像の場所:oss://test-bucket/test-object.jpg

  • 画像:

    test-object

リクエストの例

{
    "ProjectName": "test-project",
    "SourceURI": "oss://test-bucket/test-object.jpg",
}

レスポンスの例

{
  "RequestId": "47449201-245D-58A7-B56B-BDA483874B20",
  "Faces": [
    {
      "Beard": "none",
      "MaskConfidence": 0.724,
      "Gender": "male",
      "Boundary": {
        "Left": 138,
        "Top": 102,
        "Height": 19,
        "Width": 17
      },
      "BeardConfidence": 0.801,
      "FigureId": "b6525b63-cb12-4fab-a9f4-9c7de08b80c3",
      "Mouth": "close",
      "Emotion": "none",
      "Age": 36,
      "MouthConfidence": 0.984,
      "FigureType": "face",
      "GenderConfidence": 0.999,
      "HeadPose": {
        "Pitch": -9.386,
        "Roll": -3.478,
        "Yaw": 14.624
      },
      "Mask": "none",
      "EmotionConfidence": 0.998,
      "HatConfidence": 0.794,
      "GlassesConfidence": 0.999,
      "Sharpness": 0.025,
      "FigureClusterId": "figure-cluster-id-unavailable",
      "FaceQuality": 0.3,
      "Attractive": 0.002,
      "AgeSD": 8,
      "Glasses": "none",
      "FigureConfidence": 0.998,
      "Hat": "none"
    },
    {
      "Beard": "none",
      "MaskConfidence": 0.649,
      "Gender": "male",
      "Boundary": {
        "Left": 85,
        "Top": 108,
        "Height": 18,
        "Width": 14
      },
      "BeardConfidence": 0.975,
      "FigureId": "798ab164-ae05-4a9f-b8c9-4b69ca183c3f",
      "Mouth": "close",
      "Emotion": "none",
      "Age": 34,
      "MouthConfidence": 0.97,
      "FigureType": "face",
      "GenderConfidence": 0.917,
      "HeadPose": {
        "Pitch": -0.946,
        "Roll": -1.785,
        "Yaw": -39.264
      },
      "Mask": "mask",
      "EmotionConfidence": 0.966,
      "HatConfidence": 0.983,
      "GlassesConfidence": 1,
      "Sharpness": 0.095,
      "FigureClusterId": "figure-cluster-id-unavailable",
      "FaceQuality": 0.3,
      "Attractive": 0.022,
      "AgeSD": 9,
      "Glasses": "none",
      "FigureConfidence": 0.998,
      "Hat": "none"
    },
    {
      "Beard": "none",
      "MaskConfidence": 0.534,
      "Gender": "female",
      "Boundary": {
        "Left": 245,
        "Top": 128,
        "Height": 16,
        "Width": 13
      },
      "BeardConfidence": 0.998,
      "FigureId": "b9fb1552-cc98-454a-ac7c-18e5c55cc5bf",
      "Mouth": "close",
      "Emotion": "none",
      "Age": 6,
      "MouthConfidence": 0.999,
      "FigureType": "face",
      "GenderConfidence": 0.972,
      "HeadPose": {
        "Pitch": 21.686,
        "Roll": 16.806,
        "Yaw": 50.348
      },
      "Mask": "mask",
      "EmotionConfidence": 0.991,
      "HatConfidence": 0.999,
      "GlassesConfidence": 1,
      "Sharpness": 0.389,
      "FigureClusterId": "figure-cluster-id-unavailable",
      "FaceQuality": 0.3,
      "Attractive": 0.046,
      "AgeSD": 6,
      "Glasses": "none",
      "FigureConfidence": 0.991,
      "Hat": "none"
    },
    {
      "Beard": "none",
      "MaskConfidence": 0.654,
      "Gender": "male",
      "Boundary": {
        "Left": 210,
        "Top": 130,
        "Height": 18,
        "Width": 15
      },
      "BeardConfidence": 0.738,
      "FigureId": "a00154ad-6e5a-48a8-b79e-4cd3699e3281",
      "Mouth": "close",
      "Emotion": "none",
      "Age": 24,
      "MouthConfidence": 0.999,
      "FigureType": "face",
      "GenderConfidence": 0.999,
      "HeadPose": {
        "Pitch": -3.356,
        "Roll": 1.734,
        "Yaw": 12.431
      },
      "Mask": "none",
      "EmotionConfidence": 0.993,
      "HatConfidence": 1,
      "GlassesConfidence": 0.984,
      "Sharpness": 0.449,
      "FigureClusterId": "figure-cluster-id-unavailable",
      "FaceQuality": 0.3,
      "Attractive": 0.005,
      "AgeSD": 15,
      "Glasses": "none",
      "FigureConfidence": 0.985,
      "Hat": "none"
    }
  ]
}
説明

サンプルレスポンスは、現在の画像に4つの顔が含まれており、性別、年齢、気分など、各顔の情報が提供されていることを示しています。

サンプルコード

次のサンプルコードは、Python向けIMM SDKを使用して顔を検出する方法の例を示しています。

# -*- coding: utf-8 -*-
# このファイルは自動生成されています。編集しないでください。
import sys
import os
from typing import List

from alibabacloud_imm20200930.client import Client as imm20200930Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_imm20200930 import models as imm_20200930_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient


class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client(
        access_key_id: str,
        access_key_secret: str,
    ) -> imm20200930Client:
        """
        AccessKey IDとAccessKeyシークレットを使用してクライアントを初期化します。
        @param access_key_id:
        @param access_key_secret:
        @return: Client
        @throws Exception
        """
        config = open_api_models.Config(
            access_key_id=access_key_id,
            access_key_secret=access_key_secret
        )
        # IMMエンドポイントを指定します。
        config.endpoint = f'imm.cn-beijing.aliyuncs.com'
        return imm20200930Client(config)

    @staticmethod
    def main(
        args: List[str],
    ) -> None:
        # Alibaba CloudアカウントのAccessKeyペアは、すべてのAPI操作に対する権限を持っています。セキュリティリスクを防ぐため、API操作の呼び出しや日常のO&MはRAMユーザーとして実行することをお勧めします。
        # AccessKeyペア(AccessKey IDとAccessKeyシークレット)をプロジェクトコードに含めないことをお勧めします。そうしないと、AccessKeyペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
        # この例では、APIアクセスのためのID検証を実装するために、環境変数からAccessKeyペアを読み取ります。環境変数の設定方法の詳細については、https://help.aliyun.com/document_detail/2361894.htmlを参照してください。
        imm_access_key_id = os.getenv("AccessKeyId")
        imm_access_key_secret = os.getenv("AccessKeySecret")
        client = Sample.create_client(imm_access_key_id, imm_access_key_secret)
        detect_image_faces_request = imm_20200930_models.DetectImageFacesRequest(
            project_name='test-project',
            source_uri='oss://test-bucket/test-object.jpg'
        )
        runtime = util_models.RuntimeOptions()
        try:
            # API操作のレスポンスを出力することができます。
            client.detect_image_faces_with_options(detect_image_faces_request, runtime)
        except Exception as error:
            # 必要に応じてエラーメッセージを出力します。
            UtilClient.assert_as_string(error.message)

    @staticmethod
    async def main_async(
        args: List[str],
    ) -> None:
        # Alibaba CloudアカウントのAccessKeyペアは、すべてのAPI操作に対する権限を持っています。セキュリティリスクを防ぐため、API操作の呼び出しや日常のO&MはRAMユーザーとして実行することをお勧めします。
        # AccessKeyペア(AccessKey IDとAccessKeyシークレット)をプロジェクトコードに含めないことをお勧めします。そうしないと、AccessKeyペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
        # この例では、APIアクセスのためのID検証を実装するために、環境変数からAccessKeyペアを読み取ります。環境変数の設定方法の詳細については、https://help.aliyun.com/document_detail/2361894.htmlを参照してください。
        imm_access_key_id = os.getenv("AccessKeyId")
        imm_access_key_secret = os.getenv("AccessKeySecret")
        client = Sample.create_client(imm_access_key_id, imm_access_key_secret)
        detect_image_faces_request = imm_20200930_models.DetectImageFacesRequest(
            project_name='test-project',
            source_uri='oss://test-bucket/test-object.jpg'
        )
        runtime = util_models.RuntimeOptions()
        try:
            # API操作のレスポンスを出力することができます。
            await client.detect_image_faces_with_options_async(detect_image_faces_request, runtime)
        except Exception as error:
            # 必要に応じてエラーメッセージを出力します。
            UtilClient.assert_as_string(error.message)


if __name__ == '__main__':
    Sample.main(sys.argv[1:])