Intelligent Media Management(IMM)でデータセットを作成した後、Object Storage Service(OSS)やドライブおよびフォトサービスなどのサービスに保存されているファイルのメタデータインデックスを作成できます。メタデータのインデックス作成により、メディアファイルを効率的に管理および取得できます。このトピックでは、ファイルの検索、フィルタリング、および管理を高速化するためのメタデータインデックスの作成および管理方法について説明します。
前提条件
データセットが作成されていること。詳細については、「データセットの作成」をご参照ください。
概要
メタデータのインデックス作成により、メディアファイルに関する主要な情報を構造化およびインデックス化できます。これにより、メディアファイルを効率的に管理および取得できます。メタデータには、ファイルのタイトル、作成者、キーワード、作成日、サイズ、形式、解像度などが含まれます。メタデータのインデックス作成により、キーワード、属性、その他のメディア情報を使用して、メディアファイルを効率的に取得、フィルタリング、および管理できます。
使用方法
OSSバケット内のすべてのオブジェクトに対してメタデータインデックスを自動的に作成するか、OSSまたはドライブおよびフォトサービスの指定されたデータに対してメタデータインデックスを手動で作成できます。
OSSバケット内のすべてのオブジェクトに対してメタデータインデックスを自動的に作成する
OSSバケット内のすべてのオブジェクトに対してメタデータインデックスを自動的に作成するには、CreateBinding操作を呼び出してOSSバケットをデータセットにバインドするか、IMM コンソールでデータソースをデータセットに追加します。バインディングが確立されると、IMM はバケット内のすべての既存データのフルスキャンを実行し、メタデータを抽出してメタデータインデックスを作成します。最初のフルスキャンの後、IMM はバケットを増分データについて継続的に監視し、メタデータを抽出して増分データをインデックス化します。
バインディングが確立されると、IMM はバケット内の既存データと増分データをスキャンします。バケット内のオブジェクトの数は、メタデータ収集料金に正比例します。詳細については、「課金対象項目」をご参照ください。OSSバケットでメタデータのインデックス作成を試す場合は、少数のオブジェクトを含むバケットを使用し、ワークフローテンプレートを慎重に選択して、予期しない料金が発生しないようにすることをお勧めします。
API 操作の呼び出し
次の例では、「test-project」プロジェクトの「test-dataset」データセットに、「test-bucket」バケット内のすべてのオブジェクトのメタデータインデックスを作成します:
CreateBinding 操作を呼び出して、データセットをバケットにバインドします。
リクエスト例
{ "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-****" }
完全なサンプルコード(Python 用 IMM SDK)
# -*- 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 シークレットを使用してクライアントを初期化します。 @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() -> None: # Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。API 操作の呼び出しや日常の O&M の実行には、RAM ユーザーを使用することをお勧めします。 # セキュリティ上の理由から、AccessKey ペアをプロジェクトコードに埋め込まないことをお勧めします。 # この例では、API アクセスのための ID 検証を実装するために、環境変数から AccessKey ペアを取得しています。環境変数の設定方法については、https://www.alibabacloud.com/help/ja/imm/developer-reference/configure-environment-variables を参照してください。 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()
(オプション)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-****" }
説明Phase フィールドの値が IncrementalScanning の場合、IMM はバケット内のすべての既存オブジェクトのメタデータインデックスを作成し、増分オブジェクトをスキャンしています。
State フィールドの値が Running の場合、バインディングは進行中です。
完全なサンプルコード(Python 1.27.3 用 IMM SDK)
# -*- 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 シークレットを使用してクライアントを初期化します。 @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 ) # IMM エンドポイントを指定します。 config.endpoint = f'imm.cn-beijing.aliyuncs.com' return imm20200930Client(config) @staticmethod def main() -> None: # Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。API 操作の呼び出しや日常の O&M の実行には、RAM ユーザーを使用することをお勧めします。 # セキュリティ上の理由から、AccessKey ペアをプロジェクトコードに埋め込まないことをお勧めします。 # この例では、API アクセスのための ID 検証を実装するために、環境変数から AccessKey ペアを取得しています。環境変数の設定方法については、https://www.alibabacloud.com/help/ja/imm/developer-reference/configure-environment-variables を参照してください。 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()
IMM コンソールの使用
データセットが作成されたプロジェクトに入り、[データ管理とインデックス作成] > [データセットリスト] に移動します。データリストで、作成したデータセット(この例では test-dataset)を見つけます。
データセットの名前をクリックします。データセットの詳細ページで、[データアクセス] をクリックします。[データソース] タブで、[新しいデータソース] をクリックします。
[新しいデータソース] ダイアログボックスで、データセットにバインドするバケットを選択し、[OK] をクリックします。
説明データソースが追加されると、IMM はバケット内のすべての既存オブジェクトからメタデータを抽出し、バケット内の増分オブジェクトを継続的に監視し、検出された増分オブジェクトからメタデータを抽出します。メタデータの抽出には料金が発生します。詳細については、「課金概要」をご参照ください。最初に少数のオブジェクトを含むバケットでメタデータのインデックス作成をテストすることをお勧めします。
指定されたデータに対してメタデータインデックスを手動で作成する
IMM API の使用
OSSバケットまたはドライブおよびフォトサービスの指定されたデータに対してメタデータインデックスを手動で作成するには、BatchIndexFileMeta または IndexFileMeta 操作を呼び出します。
BatchIndexFileMeta 操作の呼び出し
次のサンプルコードは、「test-project」プロジェクトの「test-dataset」データセットに、「oss://test-bucket/test-object1.jpg」および「oss://test-bucket/test-object2.jpg」OSS オブジェクトのメタデータインデックスを作成します:
リクエスト例
{ "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****" }
Simple Message Queue メッセージの例(Simple Message Queue 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 の場合、メタデータインデックスが作成されます。
Files 要素には、各オブジェクトの URI とエラー情報が含まれています。Error フィールドの値が空の場合、オブジェクトはインデックス化されています。
完全なサンプルコード(Python 用 IMM SDK)
# -*- 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 シークレットを使用してクライアントを初期化します。 @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 ペアをプロジェクトコードに埋め込まないことをお勧めします。 # この例では、API アクセスのための ID 検証を実装するために、環境変数から AccessKey ペアを取得しています。環境変数の設定方法については、https://www.alibabacloud.com/help/ja/imm/developer-reference/configure-environment-variables を参照してください。 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 操作に対する権限を持っています。API 操作の呼び出しや日常の O&M の実行には、RAM ユーザーを使用することをお勧めします。 # セキュリティ上の理由から、AccessKey ペアをプロジェクトコードに埋め込まないことをお勧めします。 # この例では、API アクセスのための ID 検証を実装するために、環境変数から AccessKey ペアを取得しています。環境変数の設定方法については、https://www.alibabacloud.com/help/ja/imm/developer-reference/configure-environment-variables を参照してください。 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 操作の呼び出し
次のサンプルコードは、「test-project」プロジェクトの「test-dataset」データセットに、「oss://test-bucket/test-object1.jpg」OSS オブジェクトのメタデータインデックスを作成します:
リクエスト例
{ "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****" }
Simple Message Queue メッセージの例(Simple Message Queue 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": "" } ] }
説明Success フィールドの値が true の場合、メタデータインデックスが作成されます。
Files 要素には、各オブジェクトの URI とエラー情報が含まれています。Error フィールドの値が空の場合、オブジェクトはインデックス化されています。
完全なサンプルコード(Python 用 IMM SDK)
# -*- 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 シークレットを使用してクライアントを初期化します。 @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 ペアをプロジェクトコードに埋め込まないことをお勧めします。 # この例では、API アクセスのための ID 検証を実装するために、環境変数から AccessKey ペアを取得しています。環境変数の設定方法については、https://www.alibabacloud.com/help/ja/imm/developer-reference/configure-environment-variables を参照してください。 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 操作に対する権限を持っています。API 操作の呼び出しや日常の O&M の実行には、RAM ユーザーを使用することをお勧めします。 # セキュリティ上の理由から、AccessKey ペアをプロジェクトコードに埋め込まないことをお勧めします。 # この例では、API アクセスのための ID 検証を実装するために、環境変数から AccessKey ペアを取得しています。環境変数の設定方法については、https://www.alibabacloud.com/help/ja/imm/developer-reference/configure-environment-variables を参照してください。 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:])
IMM コンソールの使用
IMM コンソールを使用して、OSS バケット内の指定されたオブジェクトのメタデータをデータセットにインデックス化できます。IMM はワークフローを非同期的に実行して、増分オブジェクトのメタデータを抽出してインデックス化します。ワークフローは非同期タスクを開始します。タスク情報を受信するように通知設定を構成できます。タスク実行結果を受信するための Simple Message Queue トピックの指定方法については、「非同期メッセージの例」をご参照ください。
データセットが作成されたプロジェクトに入り、[データ管理とインデックス作成] > [データセットリスト] に移動します。データリストで、作成したデータセット(この例では test-dataset)を見つけます。
データセットの名前をクリックします。データセットの詳細ページで、[データアクセス] をクリックします。[一括追加] をクリックします。
[一括追加] タブで、[データセットにファイルを追加] をクリックします。[データセットにファイルを追加] パネルで、Simple Message Queue トピックを指定し、[ファイルを選択] をクリックしてメタデータをインデックス化するオブジェクトを選択し、[OK] をクリックします。