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

Intelligent Media Management:顔検出

最終更新日:Nov 09, 2025

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

概要

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

image

シナリオ

  • ユーザー認証: 顔検出は、顔の類似性比較と連携してユーザー認証を実装できます。ユーザー認証は、主に携帯電話の顔認証ロック解除に必要です。

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

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

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

前提条件

  • AccessKey ペアが作成され、取得されていること。詳細については、「AccessKey ペアの作成」をご参照ください。

  • OSS が有効化され、バケットが作成され、オブジェクトがバケットにアップロードされていること。詳細については、「オブジェクトのアップロード」をご参照ください。

  • IMM が有効化されていること。詳細については、「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 Secret を使用してクライアントを初期化します。
        @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 操作に対する権限を持っています。これらの資格情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することをお勧めします。
        # プロジェクトコードに AccessKey ペア (AccessKey ID と AccessKey Secret) を含めないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。
        # この例では、環境変数から AccessKey ペアを読み取って、API アクセスの ID 検証を実装します。環境変数の設定方法については、https://www.alibabacloud.com/help/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 操作に対する権限を持っています。これらの資格情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することをお勧めします。
        # プロジェクトコードに AccessKey ペア (AccessKey ID と AccessKey Secret) を含めないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。
        # この例では、環境変数から AccessKey ペアを読み取って、API アクセスの ID 検証を実装します。環境変数の設定方法については、https://www.alibabacloud.com/help/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:])

課金

顔検出中に、OSS 側と IMM 側の両方で次の課金項目が生成されます。

  • OSS 側: 料金の詳細については、OSS の料金をご参照ください。

    API

    課金項目

    説明

    GetObject

    GET リクエスト

    成功したリクエストの数に基づいてリクエスト料金が課金されます。

    IA オブジェクトのデータ取得

    IA オブジェクトが取得された場合、取得された IA オブジェクトのサイズに基づいて IA データ取得料金が課金されます。

    アーカイブダイレクトリードからのデータ取得容量

    リアルタイムアクセスが有効になっているバケット内のアーカイブオブジェクトが取得された場合、取得されたアーカイブオブジェクトのサイズに基づいてアーカイブデータ取得料金が課金されます。

    転送アクセラレーション

    転送アクセラレーションを有効にし、アクセラレーションエンドポイントを使用してバケットにアクセスする場合、データサイズに基づいて転送アクセラレーション料金が課金されます。

    HeadObject

    GET リクエスト

    成功したリクエストの数に基づいてリクエスト料金が課金されます。

  • IMM 側: 料金の詳細については、「IMM の課金項目」をご参照ください。

    重要

    2025 年 7 月 28 日 11:00 (UTC + 08:00) から、IMM 顔検出サービスは画像検出サービスに統合され、課金項目は基本的な顔画像から画像検出に変更されます。詳細については、「IMM 課金調整のお知らせ」をご参照ください。

    API

    課金項目

    説明

    DetectImageFaces

    ImageDetect

    成功したリクエストの数に基づいて顔検出料金が課金されます。