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

Intelligent Media Management:顔検索

最終更新日:Jan 28, 2026

データセットを作成し、その中にイメージのインデックスを作成した後、顔検索機能を使用して、指定したイメージに最も類似する上位 N 個のイメージをデータセットから取得できます。この機能は、VIP の本人確認などのシナリオで役立ちます。

利用シーン

スマートセキュリティ監視

顔認識技術を使用して、工場、学校、ショッピングモール、レストランなどの混雑した場所を監視できます。この技術は、群衆を自動的にカウント、識別、追跡できます。また、潜在的なセキュリティリスクのある動作やエリアをマークし、アラートを送信することもできます。これにより、情報に基づいたセキュリティ管理が強化され、手動での監視コストが削減されます。

工場の安全生産

この機能は、生産安全監視のためのソフトウェアとハ​​ードウェアを組み合わせたソリューションを提供します。このソリューションは、工場エリアや作業場のカメラからのイメージを使用して侵入者を検出し、セキュリティリスクを低減します。

顔認識によるアクセスコントロール

顔認識をアクセスゲートに統合し、顔情報を迅速に登録して、安全で信頼性の高い顔データベースを作成できます。ユーザーは顔をスキャンするだけで通過できます。これにより、ID カードの忘れや不正アクセスなどの問題が解決され、さまざまな企業、商業、住宅環境でのアクセスコントロールが可能になります。

スマート顔認識勤怠

この機能は、モバイル、カメラベースのシームレス、およびオールインワンマシンの 3 つの勤怠ソリューションを提供します。これらのソリューションは、1 秒以内にユーザーの最も類似した顔を迅速に検索できます。これにより、正確なチェックインが保証され、代理打刻などの不正行為が防止され、企業のセキュリティ管理が強化されます。

前提条件

ステップ 1:ファイルのアップロード

OSS コンソールを使用して、比較したい写真をバインドされたバケットにアップロードします。

image

ステップ 2:データセットへの写真の追加

image

image

  • または、オブジェクトメタデータのバッチインデックス作成 API を使用して、顔写真の情報を集中データストレージにバッチで書き込むこともできます。これは非同期プロセスです。メッセージの Notification パラメーターを設定して、タスク情報を取得できます。

    コード例:

    # -*- coding: utf-8 -*-
    # このファイルは自動生成されたものです。編集しないでください。
    import os
    import sys
    
    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() -> imm20200930Client:
            """
            AccessKey ID と AccessKey Secret を使用してクライアントを初期化します。
            @return: Client
            @throws Exception
            """
            # プロジェクトコードが漏洩すると、AccessKey が公開され、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。以下のコードは参照用です。
            # Security Token Service (STS) などのより安全な方法で認証することを推奨します。認証方式の詳細については、https://www.alibabacloud.com/help/document_detail/378659.html をご参照ください。
            config = open_api_models.Config(
                # 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
                access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                # 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
                access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
            )
            # エンドポイントについては、https://api.aliyun.com/product/imm をご参照ください。
            config.endpoint = f'imm.cn-hangzhou.aliyuncs.com'
            return imm20200930Client(config)
    
        @staticmethod
        def main(
            args: List[str],
        ) -> None:
            client = Sample.create_client()
            notification_mns = imm_20200930_models.MNS(
                topic_name='test-mns-topic'
            )
            notification = imm_20200930_models.Notification(
                mns=notification_mns
            )
            input_file_0 = imm_20200930_models.InputFile(
                uri='''[
        {
            "URI": "oss://test-bucket/test-object-1.jpg"
        },
        {
            "URI": "oss://test-bucket/test-object-2.jpg"
        },
        {
            "URI": "oss://test-bucket/test-object-3.jpg"
        }
    ]'''
            )
            batch_index_file_meta_request = imm_20200930_models.BatchIndexFileMetaRequest(
                project_name='test-project',
                dataset_name='test-dataset',
                files=[
                    input_file_0
                ],
                notification=notification
            )
            runtime = util_models.RuntimeOptions()
            try:
                # コードをコピーして実行する場合は、API の戻り値を出力してください。
                client.batch_index_file_meta_with_options(batch_index_file_meta_request, runtime)
            except Exception as error:
                # これは出力とデモンストレーションのみを目的としています。例外は慎重に処理してください。プロジェクトで例外を無視しないでください。
                # エラーメッセージ
                print(error.message)
                # 診断アドレス
                print(error.data.get("Recommend"))
                UtilClient.assert_as_string(error.message)
    
        @staticmethod
        async def main_async(
            args: List[str],
        ) -> None:
            client = Sample.create_client()
            notification_mns = imm_20200930_models.MNS(
                topic_name='test-mns-topic'
            )
            notification = imm_20200930_models.Notification(
                mns=notification_mns
            )
            input_file_0 = imm_20200930_models.InputFile(
                uri='''[
        {
            "URI": "oss://test-bucket/1.jpg"
        },
        {
            "URI": "oss://test-bucket/2.jpg"
        },
        {
            "URI": "oss://test-bucket/3.jpg"
        },
        {
            "URI": "oss://test-bucket/4.jpg"
        },
        {
            "URI": "oss://test-bucket/5.jpg"
        },
        {
            "URI": "oss://test-bucket/6.jpg"
        }
    ]'''
            )
            batch_index_file_meta_request = imm_20200930_models.BatchIndexFileMetaRequest(
                project_name='test-project',
                dataset_name='test-dataset',
                files=[
                    input_file_0
                ],
                notification=notification
            )
            runtime = util_models.RuntimeOptions()
            try:
                # コードをコピーして実行する場合は、API の戻り値を出力してください。
                await client.batch_index_file_meta_with_options_async(batch_index_file_meta_request, runtime)
            except Exception as error:
                # これは出力とデモンストレーションのみを目的としています。例外は慎重に処理してください。プロジェクトで例外を無視しないでください。
                # エラーメッセージ
                print(error.message)
                # 診断アドレス
                print(error.data.get("Recommend"))
                UtilClient.assert_as_string(error.message)
    
    
    if __name__ == '__main__':
        Sample.main(sys.argv[1:])

    応答例:

    {
      'EventId':'049-1udsgM0nr0leAdDBAOxe4kDLYM5',
      'RequestId': 'D4C150A6-D8EF-502B-9F30-645346388E13'
     }

    Message Service (MNS) メッセージ例:

    {
        "TopicOwner": "14133977656xxxxx",
        "Message": "{\"id\":\"077-1x2s0rqA6ZOENW6gjAiN5Dl796T\",\"source\":\"acs.imm\",\"type\":\"imm:FileMeta:Index\",\"subject\":\"acs:imm:cn-hangzhou:14133977656xxxxx:test-project/imm:FileMeta:Index\",\"time\":\"1729564297965\",\"content\":\"{\\\"ProjectName\\\":\\\"test-project\\\",\\\"DatasetName\\\":\\\"test-dataset\\\",\\\"RequestId\\\":\\\"7FE8A307-1649-6B0D-1AB8-0600C9D4877B\\\",\\\"StartTime\\\":\\\"2024-10-22T10:31:37.787209251+08:00\\\",\\\"EndTime\\\":\\\"2024-10-22T10:31:37.965992728+08:00\\\",\\\"Success\\\":true,\\\"Message\\\":\\\"\\\",\\\"Files\\\":[{\\\"URI\\\":\\\"[\\\\n    {\\\\n        \\\\\\\"URI\\\\\\\": \\\\\\\"oss://test-bucket/test-object-1.jpg\\\\\\\"\\\\n    },\\\\n    {\\\\n        \\\\\\\"URI\\\\\\\": \\\\\\\"oss://test-bucket/test-object-2.jpg\\\\\\\"\\\\n    },\\\\n    {\\\\n        \\\\\\\"URI\\\\\\\": \\\\\\\"oss://test-bucket/test-object-3.jpg\\\\\\\"\\\\n    }\\\\n],\\\"UserData\\\":\\\"\\\"}\"}",
        "Subscriber": "14133977656xxxxx",
        "PublishTime": "1729564298068",
        "SubscriptionName": "test-mns-subscription",
        "MessageMD5": "9921327B25E01FB38151781B81042BA7",
        "TopicName": "tf-test-mns-queue",
        "MessageId": "129D772E14277FA6182D6E67D354D069"
    }

ステップ 3:類似顔検索タスクの作成

CreateFacesSearchingTask - イメージ顔検索 操作を呼び出して、指定されたイメージ内の最大の顔に最も類似する上位 N 枚の写真を検索できます。次の例は、test-dataset データセット内で、OSS アドレス oss://test-bucket/test-object.jpg にあるイメージに類似するイメージを検索する方法を示しています。

リクエスト例

説明
  • TopicName パラメーターは MNS トピック名を指定します。この例では、トピックは tf-test-mns-queue です。

  • MaxResults パラメーターは、返される類似イメージの数を指定します。このパラメーターはオプションです。デフォルト値は 5 です。値は 0 から 100 までの整数である必要があります。

{
  "ProjectName": "test-project",
  "DatasetName": "test-dataset",
  "Sources": [{"URI": "oss://test-bucket/test-object.jpg"}],
  "Notification": {"MNS": {"TopicName": "tf-test-mns-topic"}},
  "MaxResult": 100
}

応答例

{
    "TaskId": "CreateFacesSearchingTask-dedf1bd9-7edc-4d16-97f2-bbb2a4fc****",
    "RequestId": "BB9C38A3-BB7A-53B7-A168-6DBC1CF6****",
    "EventId": "0DA-1TAZO4ClNnKbn4Ungls8SOk****"
}
説明

サンプルの応答は、類似顔検索タスクが作成されたことを示します。

サンプルコード

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

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
        )
        # アクセスするドメイン名を指定します。
        config.endpoint = f'imm.cn-hangzhou.aliyuncs.com'
        return imm20200930Client(config)

    @staticmethod
    def main(
        args: List[str],
    ) -> None:
        # Alibaba Cloud アカウントの AccessKey は、すべての API に対する完全な権限を持っています。API 呼び出しや日常の O&M (運用保守) には、RAM ユーザーを使用することを推奨します。
        # AccessKey ID と AccessKey Secret をプロジェクトコードに保存しないことを強く推奨します。これにより、AccessKey が漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。
        # この例では、認証のために環境変数から AccessKey を読み取ります。環境変数の設定方法については、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)
        notification_mns = imm_20200930_models.MNS(
            topic_name='tf-test-mns-topic'
        )
        notification = imm_20200930_models.Notification(
            mns=notification_mns
        )
        sources_0 = imm_20200930_models.CreateFacesSearchingTaskRequestSources(
            uri='''oss://test-bucket/test-object.jpg
'''
        )
        create_faces_searching_task_request = imm_20200930_models.CreateFacesSearchingTaskRequest(
            project_name='test-project',
            dataset_name='test-dataset',
            sources=[
                sources_0
            ],
            notification=notification,
            max_result=100
        )
        runtime = util_models.RuntimeOptions()
        try:
            # コードをコピーして実行する場合は、API の戻り値を出力してください。
            client.create_faces_searching_task_with_options(create_faces_searching_task_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 ID と AccessKey Secret をプロジェクトコードに保存しないことを強く推奨します。これにより、AccessKey が漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。
        # この例では、認証のために環境変数から AccessKey を読み取ります。環境変数の設定方法については、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)
        notification_mns = imm_20200930_models.MNS(
            topic_name='tf-test-mns-topic'
        )
        notification = imm_20200930_models.Notification(
            mns=notification_mns
        )
        sources_0 = imm_20200930_models.CreateFacesSearchingTaskRequestSources(
            uri='''oss://test-bucket/test-object.jpg
'''
        )
        create_faces_searching_task_request = imm_20200930_models.CreateFacesSearchingTaskRequest(
            project_name='test-project',
            dataset_name='test-dataset',
            sources=[
                sources_0
            ],
            notification=notification,
            max_result=100
        )
        runtime = util_models.RuntimeOptions()
        try:
            # コードをコピーして実行する場合は、API の戻り値を出力してください。
            await client.create_faces_searching_task_with_options_async(create_faces_searching_task_request, runtime)
        except Exception as error:
            # 必要に応じて、エラーメッセージを出力します。
            UtilClient.assert_as_string(error.message)


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

ステップ 4:類似顔検索結果の表示

顔検索タスクが作成された後、MNS サービスからタスク情報を取得できます。次の例は、Python SDK を使用してタスク情報を取得する方法を示しています。詳細については、「ステップ 4:メッセージの受信と削除」をご参照ください。

  1. サンプルフォルダで、次のコマンドを実行します。

    python recvdelmessage.py tf-test-mns-queue

  2. コンソールで返される JSON 形式の結果をフォーマットします。次のコードは、Message フィールドの内容のみを示しています。

    {
        "ProjectName": "test-project",
        "DatasetName": "test-dataset",
        "RequestId": "BB9C38A3-BB7A-53B7-A168-6DBC1CF6****",
        "StartTime": "2023-01-04T05:08:28.582Z",
        "EndTime": "2023-01-04T05:08:28.785Z",
        "UserData": "",
        "TaskType": "FacesSearching",
        "TaskId": "CreateFacesSearchingTask-dedf1bd9-7edc-4d16-97f2-bbb2a4fc****",
        "Status": "Succeeded",
        "Code": "",  // Code フィールドが空の場合は、タスクが成功したことを示します。
        "Message": "Success",
        "SimilarFaces": [
            {
                "URI": "oss://test-bucket/test-object.jpg",
                "Boundary": {
                    "Width": 109,
                    "Height": 150,
                    "Left": 69,
                    "Top": 49
                },
                // 類似顔のリスト。
                "SimilarFaces": [
                    {
                        "URI": "oss://test-bucket/test-object-1.jpg",
                        "FigureId": "4cacbb71-52fd-4d3f-9d14-0840fecee0bf",
                        "Similarity": 0.73321015
                    },
                    {
                        "URI": "oss://test-bucket/test-object-2.jpg",
                        "FigureId": "7a4cd08d-bcd0-4bc4-93f4-1291075819cf",
                        "Similarity": 0.77035695
                    },
                    {
                        "URI": "oss://test-bucket/test-object-3.jpg",
                        "FigureId": "da920124-410a-4493-9fd3-1a3b366dca86",
                        "Similarity": 0.9836307
                    }
                ]
            }
        ]
    }
    
    説明

    メッセージの内容は、test-dataset データセット内で、次の 3 つのイメージにクエリイメージの顔と類似する顔が含まれていることを示しています:

    • イメージ 1:OSS URI は oss://test-bucket/test-object-1.jpg です。このイメージの顔とクエリイメージの顔との類似度スコアは 0.73321015 です。

    • イメージ 2:OSS URI は oss://test-bucket/test-object-2.jpg です。このイメージの顔とクエリイメージの顔との類似度スコアは 0.77035695 です。

    • イメージ 3:OSS URI は oss://test-bucket/test-object-3.jpg です。このイメージの顔とクエリイメージの顔との類似度スコアは 0.9836307 です。