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

Intelligent Media Management:イメージクラスタリング

最終更新日:Feb 28, 2026

イメージクラスタリングは、視覚的なコンテンツを分析し、視覚的に類似する画像をクラスターに整理することで、画像をグループ化します。これにより、大規模な画像コレクションの検索、管理、重複排除に役立ちます。一般的なユースケースとしては、連写モードで撮影された写真のフィルター処理があり、多くのほぼ同一の画像をソートおよびグループ化する必要があります。

シナリオ

イメージクラスタリングは、次のユースケースをサポートします。

  • オンラインストレージとフォトアルバム管理:よりパーソナライズされたアルバム整理のために、類似画像のクラスターを自動的に作成します。たとえば、手動ソートなしで、シーンや主題ごとに旅行写真をグループ化します。

  • 画像の重複排除:ご利用のアプリケーションまたはアルバム全体で類似画像を識別し、重複排除することで、ストレージ使用量とコストを削減します。

前提条件

イメージクラスタリングタスクを作成する前に、次のステップを完了します。

  • ご利用のアプリケーションシナリオのメタデータに基づいてインデックスを作成します。詳細については、「メタデータインデックスの作成」をご参照ください。

  • データセットを作成する際に、[Official:ImageManagement] ワークフローテンプレートを使用します。

イメージクラスタリングタスクの作成

CreateSimilarImageClusteringTask 操作を呼び出して、指定されたデータセット内のファイルを増分的に処理し、類似するイメージをクラスターにグループ化する非同期クラスタリング タスクを作成します。

以下の例では、[test-project] プロジェクトの [test-dataset] データセットにイメージクラスタリングタスクを作成します。

説明

イメージクラスタリングには API 呼び出し料金が発生します。詳細については、「課金項目」をご参照ください。

サンプルリクエスト

{
  "ProjectName": "test-project",
  "DatasetName": "test-dataset"
}

サンプル応答

{
  "TaskId": "SimilarImageClustering-3b4ce06c-f19e-43ba-8ae9-29a4ba617eac",
  "RequestId": "0FA88E7A-85C8-5016-8182-80FA2A711D29",
  "EventId": "3BF-1mc8MI8FsJWMMgJhDO6O98mepq1"
}

サンプルコード

# -*- 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(
            # (必須) ご利用の AccessKey ID を指定します。
            access_key_id=access_key_id,
            # (必須) ご利用の AccessKey Secret を指定します。
            access_key_secret=access_key_secret
        )
        # IMM エンドポイントを指定します。エンドポイントの詳細については、https://api.aliyun.com/product/imm をご参照ください。
        config.endpoint = f'imm.cn-beijing.aliyuncs.com'
        return imm20200930Client(config)

    @staticmethod
    def main(
        args: List[str],
    ) -> None:
        # ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        # プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、ご利用のアカウント内のリソースのセキュリティが侵害される可能性があります。以下の行は、環境変数から AccessKey ペアを取得し、AccessKey ペアを使用して API 操作を呼び出す方法を示しています。セキュリティを強化するために、STS アクセス認証情報を使用することを推奨します。詳細については、https://www.alibabacloud.com/help/document_detail/378659.html をご参照ください。
        client = Sample.create_client(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'])
        create_similar_image_clustering_task_request = imm_20200930_models.CreateSimilarImageClusteringTaskRequest(
            project_name='test-project',
            dataset_name='test-dataset'
        )
        runtime = util_models.RuntimeOptions()
        try:
            # 必要に応じて、API 操作の応答を出力するコードを記述します。
            client.create_similar_image_clustering_task_with_options(create_similar_image_clustering_task_request, runtime)
        except Exception as error:
            # 実際のビジネスシナリオでは例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例では、エラーメッセージがコンソールに出力されます。
            # エラーメッセージを出力します。
            print(error.message)
            # トラブルシューティングのための URL を表示します。
            print(error.data.get("Recommend"))
            UtilClient.assert_as_string(error.message)

    @staticmethod
    async def main_async(
        args: List[str],
    ) -> None:
        # ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        # プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、ご利用のアカウント内のリソースのセキュリティが侵害される可能性があります。以下の行は、環境変数から AccessKey ペアを取得し、AccessKey ペアを使用して API 操作を呼び出す方法を示しています。セキュリティを強化するために、STS アクセス認証情報を使用することを推奨します。詳細については、https://www.alibabacloud.com/help/document_detail/378659.html をご参照ください。
        client = Sample.create_client(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'])
        create_similar_image_clustering_task_request = imm_20200930_models.CreateSimilarImageClusteringTaskRequest(
            project_name='test-project',
            dataset_name='test-dataset'
        )
        runtime = util_models.RuntimeOptions()
        try:
            # 必要に応じて、API 操作の応答を出力するコードを記述します。
            await client.create_similar_image_clustering_task_with_options_async(create_similar_image_clustering_task_request, runtime)
        except Exception as error:
            # 実際のビジネスシナリオでは例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例では、エラーメッセージがコンソールに出力されます。
            # エラーメッセージを出力します。
            print(error.message)
            # トラブルシューティングのための URL を表示します。
            print(error.data.get("Recommend"))
            UtilClient.assert_as_string(error.message)


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

イメージクラスターのクエリ

クラスタリングタスクが完了したら、QuerySimilarImageClusters 操作を呼び出して、イメージクラスターをクエリします。

次の例では、[test-project] プロジェクトの [test-dataset] データセット内のイメージクラスターをクエリします。

サンプルリクエスト

{
  "ProjectName": "test-project",
  "DatasetName": "test-dataset"
}

サンプル応答

{
  "SimilarImageClusters": [
    {
      "ObjectId": "SimilarImageCluster-e5cdfdad-c02a-4093-aa58-400ff2e4520b",
      "CreateTime": "2024-03-07T14:57:13.047481088+08:00",
      "UpdateTime": "2024-03-07T14:57:13.047481088+08:00",
      "Files": [
        {
          "ImageScore": 0.749,
          "URI": "oss://test-ivanivan/p637447.jpeg"
        },
        {
          "ImageScore": 0.749,
          "URI": "oss://test-ivanivan/p637448.jpeg"
        }
      ]
    },
    {
      "ObjectId": "SimilarImageCluster-3350bbcf-a044-42f2-bedc-57eede4d476f",
      "CreateTime": "2024-03-07T14:57:12.955958016+08:00",
      "UpdateTime": "2024-03-07T14:57:12.955958016+08:00",
      "Files": [
        {
          "ImageScore": 0.736,
          "URI": "oss://test-ivanivan/hanhong.png"
        },
        {
          "ImageScore": 0.736,
          "URI": "oss://test-ivanivan/hanhong2.png"
        }
      ]
    },
    {
      "ObjectId": "SimilarImageCluster-4c239671-5504-4910-90f6-03cd863f686e",
      "CreateTime": "2024-03-07T14:57:12.886128896+08:00",
      "UpdateTime": "2024-03-07T14:57:12.886128896+08:00",
      "Files": [
        {
          "ImageScore": 0.692,
          "URI": "oss://test-ivanivan/dir1/mp4_png.png"
        },
        {
          "ImageScore": 0.67,
          "URI": "oss://test-ivanivan/dir1/demo.gif"
        }
      ]
    },
    {
      "ObjectId": "SimilarImageCluster-e77ac1ad-44b4-49d5-baa7-ad871efd0503",
      "CreateTime": "2024-03-07T14:57:12.817118976+08:00",
      "UpdateTime": "2024-03-07T14:57:12.817118976+08:00",
      "Files": [
        {
          "ImageScore": 0.717,
          "URI": "oss://test-ivanivan/OIP-C.jpeg"
        },
        {
          "ImageScore": 0.717,
          "URI": "oss://test-ivanivan/OIP-C1.jpeg"
        }
      ]
    },
    {
      "ObjectId": "SimilarImageCluster-315751c6-5b69-43b4-8c37-00e7ad2ec0e6",
      "CreateTime": "2024-03-07T14:57:12.745981952+08:00",
      "UpdateTime": "2024-03-07T14:57:12.745981952+08:00",
      "Files": [
        {
          "ImageScore": 0.714,
          "URI": "oss://test-ivanivan/A6.jpg"
        },
        {
          "ImageScore": 0.709,
          "URI": "oss://test-ivanivan/A4 (1).jpg"
        }
      ]
    },
    {
      "ObjectId": "SimilarImageCluster-140d3e92-7e67-4b9d-8066-3aea778e5898",
      "CreateTime": "2024-03-07T14:57:12.65400192+08:00",
      "UpdateTime": "2024-03-07T14:57:12.65400192+08:00",
      "Files": [
        {
          "ImageScore": 0.709,
          "URI": "oss://test-ivanivan/A1 (1).jpg"
        },
        {
          "ImageScore": 0.709,
          "URI": "oss://test-ivanivan/A2 (1).jpg"
        }
      ]
    }
  ],
  "RequestId": "5830FFD2-C2E5-5431-9180-EBBACCC2FECE",
  "NextToken": ""
}

サンプルコード

# -*- 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(
            # (必須) ご利用の AccessKey ID を指定します。
            access_key_id=access_key_id,
            # (必須) ご利用の AccessKey Secret を指定します。
            access_key_secret=access_key_secret
        )
        # IMM エンドポイントを指定します。エンドポイントの詳細については、https://api.aliyun.com/product/imm をご参照ください。
        config.endpoint = f'imm.cn-beijing.aliyuncs.com'
        return imm20200930Client(config)

    @staticmethod
    def main(
        args: List[str],
    ) -> None:
        # ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        # プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、ご利用のアカウント内のリソースのセキュリティが侵害される可能性があります。以下の行は、環境変数から AccessKey ペアを取得し、AccessKey ペアを使用して API 操作を呼び出す方法を示しています。セキュリティを強化するために、STS アクセス認証情報を使用することを推奨します。詳細については、https://www.alibabacloud.com/help/document_detail/378659.html をご参照ください。
        client = Sample.create_client(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'])
        query_similar_image_clusters_request = imm_20200930_models.QuerySimilarImageClustersRequest(
            dataset_name='test-dataset',
            project_name='test-project'
        )
        runtime = util_models.RuntimeOptions()
        try:
            # 必要に応じて、API 操作の応答を出力するコードを記述します。
            client.query_similar_image_clusters_with_options(query_similar_image_clusters_request, runtime)
        except Exception as error:
            # 実際のビジネスシナリオでは例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例では、エラーメッセージがコンソールに出力されます。
            # エラーメッセージを出力します。
            print(error.message)
            # トラブルシューティングのための URL を表示します。
            print(error.data.get("Recommend"))
            UtilClient.assert_as_string(error.message)

    @staticmethod
    async def main_async(
        args: List[str],
    ) -> None:
        # ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        # プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、ご利用のアカウント内のリソースのセキュリティが侵害される可能性があります。以下の行は、環境変数から AccessKey ペアを取得し、AccessKey ペアを使用して API 操作を呼び出す方法を示しています。セキュリティを強化するために、STS アクセス認証情報を使用することを推奨します。詳細については、https://www.alibabacloud.com/help/document_detail/378659.html をご参照ください。
        client = Sample.create_client(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'])
        query_similar_image_clusters_request = imm_20200930_models.QuerySimilarImageClustersRequest(
            dataset_name='test-dataset',
            project_name='test-project'
        )
        runtime = util_models.RuntimeOptions()
        try:
            # 必要に応じて、API 操作の応答を出力するコードを記述します。
            await client.query_similar_image_clusters_with_options_async(query_similar_image_clusters_request, runtime)
        except Exception as error:
            # 実際のビジネスシナリオでは例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例では、エラーメッセージがコンソールに出力されます。
            # エラーメッセージを出力します。
            print(error.message)
            # トラブルシューティングのための URL を表示します。
            print(error.data.get("Recommend"))
            UtilClient.assert_as_string(error.message)


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