Intelligent Media Management (IMM) でデータセットを作成した後、オブジェクトストレージサービス (OSS) やフォトアンドドライブサービスなどのサービスに保存されているファイルのメタデータインデックスを作成できます。メタデータのインデックス作成により、メディアファイルを効率的に管理および取得できます。このトピックでは、ファイルの検索、フィルタリング、および管理を高速化するためのメタデータインデックスの作成および管理方法について説明します。
前提条件
データセットが作成されていること。詳細については、データセットの作成を参照してください。
概要
メタデータのインデックス作成を使用すると、メディアファイルに関する重要な情報を構造化およびインデックス化できます。これにより、メディアファイルを効率的に管理および取得できます。メタデータには、ファイルのタイトル、作成者、キーワード、作成日、サイズ、形式、解像度などが含まれます(ただし、これらに限定されません)。メタデータのインデックス作成を使用すると、キーワード、属性、およびその他の記述情報を使用して、メディアファイルを効率的に取得、フィルタリング、および管理できます。
インデックス作成方法
OSSバケット内のすべてのオブジェクトに対してメタデータインデックスを自動的に作成するか、OSSまたはフォトアンドドライブサービス内の指定されたデータに対してメタデータインデックスを手動で作成できます。
OSSバケット内のすべてのオブジェクトに対してメタデータインデックスを自動的に作成する
バケット内のすべてのオブジェクトに対してメタデータインデックスを自動的に作成するには、CreateBindingオペレーションを呼び出して、データセットをバケットにマッピングします。マッピングが確立されると、IMMはバケット内のすべての既存データのフルスキャンを実行し、メタデータを抽出して、メタデータインデックスを作成します。最初のフルスキャンの後、IMMはバケットを継続的に監視して増分データを検出し、メタデータを抽出して、増分データのインデックスを作成します。
マッピングが確立されると、IMMはバケット内の既存データのフルスキャンまたは増分データの増分スキャンを実行します。バケット内のオブジェクトの数は、メタデータ収集料金に正比例します。詳細については、課金対象項目を参照してください。OSSバケットでメタデータのインデックス作成を試す場合は、少数のオブジェクトを含むバケットを使用し、ワークフローテンプレートを慎重に選択して、予期しない料金が発生しないようにすることをお勧めします。
次の例は、test-datasetデータセットのtest-projectプロジェクトで、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 ) # エンドポイントを指定します。 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シークレット)をプロジェクトコードに含めないことをお勧めします。そうしないと、AccessKeyペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。 # この例では、APIアクセスのためのID検証を実装するために、環境変数からAccessKeyペアを読み取ります。環境変数の設定方法については、https://help.aliyun.com/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()
(オプション)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 ) # エンドポイントを指定します。 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シークレット)をプロジェクトコードに含めないことをお勧めします。そうしないと、AccessKeyペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。 # この例では、APIアクセスのためのID検証を実装するために、環境変数からAccessKeyペアを読み取ります。環境変数の設定方法については、https://help.aliyun.com/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バケットまたはフォトアンドドライブサービス内の指定されたデータに対してメタデータインデックスを手動で作成する
OSSバケットまたはフォトアンドドライブサービス内の指定されたデータに対してメタデータインデックスを手動で作成するには、BatchIndexFileMetaまたはIndexFileMetaオペレーションを呼び出します。
BatchIndexFileMetaオペレーションを呼び出す
次のサンプルコードは、test-datasetデータセットのtest-projectプロジェクトで、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****" }
メッセージサービスのメッセージ例(メッセージサービス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 -*- # このファイルは自動生成されています。編集しないでください。ありがとうございます。 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 ) # エンドポイントを指定します。 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シークレット)をプロジェクトコードに含めないことをお勧めします。そうしないと、AccessKeyペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。 # この例では、APIアクセスのためのID検証を実装するために、環境変数からAccessKeyペアを読み取ります。環境変数の設定方法については、https://help.aliyun.com/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シークレット)をプロジェクトコードに含めないことをお勧めします。そうしないと、AccessKeyペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。 # この例では、APIアクセスのためのID検証を実装するために、環境変数からAccessKeyペアを読み取ります。環境変数の設定方法については、https://help.aliyun.com/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オペレーションを呼び出す
次のサンプルコードは、test-datasetデータセットのtest-projectプロジェクトで、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****" }
メッセージサービスのメッセージ例(メッセージサービス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 -*- # このファイルは自動生成されています。編集しないでください。ありがとうございます。 import sys import os from typing import List from alibabacloud_imm20200930.client import Client asimm20200930Client 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 ) # エンドポイントを指定します。 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シークレット)をプロジェクトコードに含めないことをお勧めします。そうしないと、AccessKeyペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。 # この例では、APIアクセスのためのID検証を実装するために、環境変数からAccessKeyペアを読み取ります。環境変数の設定方法については、https://help.aliyun.com/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シークレット)をプロジェクトコードに含めないことをお勧めします。そうしないと、AccessKeyペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。 # この例では、APIアクセスのためのID検証を実装するために、環境変数からAccessKeyペアを読み取ります。環境変数の設定方法については、https://help.aliyun.com/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:])