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

Intelligent Media Management:メタデータインデックスの作成

最終更新日:Mar 01, 2026

Intelligent Media Management (IMM) でデータセットを作成した後、Object Storage Service (OSS) または Drive and Photo Service に格納されたファイルに対してメタデータインデックスを作成します。メタデータインデックスは、メディアファイルの重要な情報を構造化し、タイトル、作成者、キーワード、作成日時、サイズ、フォーマット、解像度などを整理します。これにより、検索、フィルター、管理を効率的に行えます。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

  • IMM プロジェクト内にデータセットが作成済みであること。詳細については、「データセットの作成」をご参照ください。

インデックス作成方法

IMM では、以下の 2 種類のインデックス作成方法をサポートしています。

方法対象範囲API 操作推奨用途
自動OSS バケット内のすべてのオブジェクトCreateBindingフルバケットインデックス作成と継続的な増分更新
手動OSS または Drive and Photo Service 内の指定ファイルBatchIndexFileMeta / IndexFileMeta特定ファイルの選択的インデックス作成

自動インデックス作成

CreateBinding を呼び出して、データセットと OSS バケットをマッピングします。マッピングが確立されると、IMM はバケット内の既存のすべてのオブジェクトをフルスキャンし、メタデータを抽出してメタデータインデックスを作成します。その後、増分データを継続的にモニターし、新しいオブジェクトを自動的にインデックス化します。

警告

メタデータインデックス作成には、スキャン対象のオブジェクト数に比例した料金が発生します。詳細については、「課金項目」をご参照ください。メタデータインデックス作成機能を試用する場合は、オブジェクト数が少ないバケットを使用し、予期しない課金を避けるため、ワークフローテンプレート を慎重に選択してください。

ステップ 1:バインディングの作成

以下の例では、test-dataset データセット(test-project プロジェクト内)を test-bucket バケットにマッピングします。

リクエスト

{
    "ProjectName": "test-project",
    "URI": "oss://test-bucket",
    "DatasetName": "test-dataset"
}

応答

{
    "Binding": {
        "Phase": "",
        "ProjectName": "test-project",
        "DatasetName": "test-dataset",
        "State": "Ready",
        "CreateTime": "2022-07-06T07:03:28.054762739+08:00",
        "UpdateTime": "2022-07-06T07:03:28.054762739+08:00",
        "URI": "oss://test-bucket"
    },
    "RequestId": "090D2AC5-8450-0AA8-A1B1-****"
}

完全なサンプルコード(IMM SDK for Python)

# -*- coding: utf-8 -*-

import os
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-beijing.aliyuncs.com'
        return imm20200930Client(config)

    @staticmethod
    def main() -> None:
        # Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持ちます。セキュリティリスクを防止するため、RAM ユーザーとして API 操作を実行または日常的な運用・保守(O&M)を行うことを推奨します。
        # AccessKey ペア(AccessKey ID および AccessKey Secret)をプロジェクトコード内に直接記述しないことを推奨します。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが脅かされる可能性があります。
        # この例では、API アクセス時の本人確認を実現するために、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)
        create_binding_request = imm_20200930_models.CreateBindingRequest(
            # IMM プロジェクト名を指定します。
            project_name='test-project',
            # データセット名を指定します。
            dataset_name='test-dataset',
            # バケットの URI を指定します。
            uri='oss://test-bucket'
        )
        runtime = util_models.RuntimeOptions()
        try:
            # API 操作の応答を出力します。
            response = client.create_binding_with_options(create_binding_request, runtime)
            print(response.body.to_map())
        except Exception as error:
            # 必要に応じてエラーメッセージを出力します。
            UtilClient.assert_as_string(error.message)
            print(error)


if __name__ == '__main__':
    Sample.main()

ステップ 2(任意):バインディングのステータス確認

GetBinding を呼び出して、マッピングのステータスを照会します。

リクエスト

{
    "ProjectName": "test-project",
    "URI": "oss://test-bucket",
    "DatasetName": "test-dataset"
}

応答

{
    "Binding": {
        "Phase": "IncrementalScanning",
        "ProjectName": "test-project",
        "DatasetName": "test-dataset",
        "State": "Running",
        "CreateTime": "2022-07-06T07:04:05.105182822+08:00",
        "UpdateTime": "2022-07-06T07:04:13.302084076+08:00",
        "URI": "oss://test-bucket"
    },
    "RequestId": "B5A9F54B-6C54-03C9-B011-****"
}

主な応答フィールド:

フィールド意味
PhaseIncrementalScanningIMM が既存のすべてのオブジェクトのインデックス作成を完了し、増分オブジェクトのスキャンを開始しています
StateRunningマッピングが確立中です

完全なサンプルコード(IMM SDK for Python 1.27.3)

# -*- coding: utf-8 -*-

import os
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_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-beijing.aliyuncs.com'
        return imm20200930Client(config)

    @staticmethod
    def main() -> None:
        # Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持ちます。セキュリティリスクを防止するため、RAM ユーザーとして API 操作を実行または日常的な運用・保守(O&M)を行うことを推奨します。
        # AccessKey ペア(AccessKey ID および AccessKey Secret)をプロジェクトコード内に直接記述しないことを推奨します。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが脅かされる可能性があります。
        # この例では、API アクセス時の本人確認を実現するために、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)
        get_binding_request = imm_20200930_models.GetBindingRequest(
            # IMM プロジェクト名を指定します。
            project_name='test-project',
            # データセット名を指定します。
            dataset_name='test-dataset',
            # バケットの URI を指定します。
            uri='oss://test-bucket'
        )
        runtime = util_models.RuntimeOptions()
        try:
            # API 操作の応答を出力します。
            response = client.get_binding_with_options(get_binding_request, runtime)
            print(response.body.to_map())
        except Exception as error:
            # 必要に応じてエラーメッセージを出力します。
            UtilClient.assert_as_string(error.message)
            print(error)


if __name__ == '__main__':
    Sample.main()

手動インデックス作成

OSS または Drive and Photo Service 内の特定のファイルをインデックス化するには、BatchIndexFileMeta(複数ファイル)または IndexFileMeta(単一ファイル)を呼び出します。いずれの操作も、カスタムラベルおよび Message Service (MNS) 通知をサポートしています。

複数ファイルのインデックス作成(BatchIndexFileMeta)

以下の例では、oss://test-bucket/test-object1.jpg および oss://test-bucket/test-object2.jpg の 2 つのファイルを、test-dataset データセット(test-project プロジェクト内)に対して、カスタムラベルを付与してインデックス化します。

リクエスト

{
  "ProjectName": "test-project",
  "DatasetName": "test-dataset",
  "Files": [
    {
      "URI": "oss://test-bucket/test-object1.jpg",
      "CustomLabels": {
        "category": "Persons"
      }
    },
    {
      "URI": "oss://test-bucket/test-object2.jpg",
      "CustomLabels": {
        "category": "Pets"
      }
    }
  ],
  "Notification": {
    "MNS": {
      "TopicName": "test-topic"
    }
  }
}

応答

{
    "RequestId": "0D4CB096-EB44-02D6-A4E9-****",
    "EventId": "16C-1KoeYbdckkiOObpyzc****"
}

MNS 通知メッセージ

Message Service SDK の詳細については、「ステップ 4:メッセージの受信と削除」をご参照ください。

{
    "ProjectName": "test-project",
    "DatasetName": "test-dataset",
    "RequestId": "658FFD57-B495-07C0-B24B-B64CC52993CB",
    "StartTime": "2022-07-06T07:18:18.664770352+08:00",
    "EndTime": "2022-07-06T07:18:20.762465221+08:00",
    "Success": true,
    "Message": "",
    "Files": [
        {
            "URI": "oss://test-bucket/test-object1.jpg",
            "CustomLabels": {
                "category": "Persons"
            },
            "Error": ""
        },
        {
            "URI": "oss://test-bucket/test-object2.jpg",
            "CustomLabels": {
                "category": "Pets"
            },
            "Error": ""
        }
    ]
}

結果の確認方法:

  • Success の値が true の場合:メタデータインデックスが正常に作成されています。

  • 特定のファイルについて Error の値が空の場合:そのファイルのインデックス作成が正常に完了しています。

完全なサンプルコード(IMM SDK for Python)

# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
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
        )
        # エンドポイントを指定します。
        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 ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが脅かされる可能性があります。
        # この例では、API アクセス時の本人確認を実現するために、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='test-topic'
        )
        notification = imm_20200930_models.Notification(
            mns=notification_mns
        )
        input_file_0custom_labels = {
            'category': 'Persons'
        }
        input_file_0 = imm_20200930_models.InputFile(
            uri='oss://test-bucket/test-object1.jpg',
            custom_labels=input_file_0custom_labels
        )
        input_file_1custom_labels = {
            'category': 'Pets'
        }
        input_file_1 = imm_20200930_models.InputFile(
            uri='oss://test-bucket/test-object2.jpg',
            custom_labels=input_file_1custom_labels
        )
        batch_index_file_meta_request = imm_20200930_models.BatchIndexFileMetaRequest(
            project_name='test-project',
            dataset_name='test-dataset',
            files=[
                input_file_0,
                input_file_1
            ],
            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:
            # 必要に応じてエラーメッセージを出力します。
            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 ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが脅かされる可能性があります。
        # この例では、API アクセス時の本人確認を実現するために、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='test-topic'
        )
        notification = imm_20200930_models.Notification(
            mns=notification_mns
        )
        input_file_0custom_labels = {
            'category': 'Persons'
        }
        input_file_0 = imm_20200930_models.InputFile(
            uri='oss://test-bucket/test-object1.jpg',
            custom_labels=input_file_0custom_labels
        )
        input_file_1custom_labels = {
            'category': 'Pets'
        }
        input_file_1 = imm_20200930_models.InputFile(
            uri='oss://test-bucket/test-object2.jpg',
            custom_labels=input_file_1custom_labels
        )
        batch_index_file_meta_request = imm_20200930_models.BatchIndexFileMetaRequest(
            project_name='test-project',
            dataset_name='test-dataset',
            files=[
                input_file_0,
                input_file_1
            ],
            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:
            # 必要に応じてエラーメッセージを出力します。
            UtilClient.assert_as_string(error.message)


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

単一ファイルのインデックス作成(IndexFileMeta)

以下の例では、oss://test-bucket/test-object1.jpg を、test-dataset データセット(test-project プロジェクト内)に対してインデックス化します。

リクエスト

{
  "ProjectName": "test-project",
  "DatasetName": "test-dataset",
  "File": {
    "URI": "oss://test-bucket/test-object1.jpg",
    "CustomLabels": {
      "category": "Persons"
    }
  },
  "Notification": {
    "MNS": {
      "TopicName": "test-topic"
    }
  }
}

応答

{
    "RequestId": "5AA694AD-3D10-0B6A-85B2-****",
    "EventId": "17C-1Kofq1mlJxRYF7vAGF****"
}

MNS 通知メッセージ

Message Service SDK の詳細については、「ステップ 4:メッセージの受信と削除」をご参照ください。

{
    "ProjectName": "test-project",
    "DatasetName": "test-dataset",
    "RequestId": "658FFD57-B495-07C0-B24B-B64CC52993CB",
    "StartTime": "2022-07-06T07:18:18.664770352+08:00",
    "EndTime": "2022-07-06T07:18:20.762465221+08:00",
    "Success": true,
    "Message": "",
    "Files": [
        {
            "URI": "oss://test-bucket/test-object1.jpg",
            "CustomLabels": {
                "category": "Persons"
            },
            "Error": ""
        }
    ]
}

結果を確認します:

  • 成功true: メタデータ インデックスが作成されました。

  • 特定のファイルについて Error の値が空の場合:そのファイルのインデックス作成が正常に完了しています。

完全なサンプルコード(IMM SDK for Python)

# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
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
        )
        # エンドポイントを指定します。
        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 ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが脅かされる可能性があります。
        # この例では、API アクセス時の本人確認を実現するために、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='test-topic'
        )
        notification = imm_20200930_models.Notification(
            mns=notification_mns
        )
        input_file_custom_labels = {
            'category': 'Persons'
        }
        input_file = imm_20200930_models.InputFile(
            uri='oss://test-bucket/test-object1.jpg',
            custom_labels=input_file_custom_labels
        )
        index_file_meta_request = imm_20200930_models.IndexFileMetaRequest(
            project_name='test-project',
            dataset_name='test-dataset',
            file=input_file,
            notification=notification
        )
        runtime = util_models.RuntimeOptions()
        try:
            # 必要に応じて、API 操作の応答を出力するコードを記述します。
            client.index_file_meta_with_options(index_file_meta_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 ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが脅かされる可能性があります。
        # この例では、API アクセス時の本人確認を実現するために、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='test-topic'
        )
        notification = imm_20200930_models.Notification(
            mns=notification_mns
        )
        input_file_custom_labels = {
            'category': 'Persons'
        }
        input_file = imm_20200930_models.InputFile(
            uri='oss://test-bucket/test-object1.jpg',
            custom_labels=input_file_custom_labels
        )
        index_file_meta_request = imm_20200930_models.IndexFileMetaRequest(
            project_name='test-project',
            dataset_name='test-dataset',
            file=input_file,
            notification=notification
        )
        runtime = util_models.RuntimeOptions()
        try:
            # 必要に応じて、API 操作の応答を出力するコードを記述します。
            await client.index_file_meta_with_options_async(index_file_meta_request, runtime)
        except Exception as error:
            # 必要に応じてエラーメッセージを出力します。
            UtilClient.assert_as_string(error.message)


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

参考情報