データセットを作成した後、Object Storage Service (OSS) や Drive and Photo Service (PDS) などのサービス内のファイルに対してメタデータインデックスを作成し、大量のメディアファイルを効率的に管理および取得できます。
前提条件
データセットが作成されている必要があります。詳細については、「データセットの作成」をご参照ください。
概要
メタデータインデックスを使用すると、キーワード、属性、またはその他の識別子によって、メディアファイルの大規模なコレクションを検索、フィルタリング、管理できます。
操作手順
OSS バケット内のすべてのファイルを自動的にインデックス化するか、OSS バケットまたは PDS 内の指定されたファイルを手動でインデックス化できます。
OSS バケット内の全ファイルの自動インデックス作成
OSS バケット内のすべてのファイルを自動的にインデックス化するには、API を呼び出すか、IMM コンソールでデータソースを追加して、データセットとバケット間のバインディングを作成します。バインディングが作成されると、Intelligent Media Management (IMM) はバケット内の既存データのフルスキャンを実行し、ファイルメタデータを抽出してインデックス化します。その後、IMM はバケット内の新しいファイルを監視し、リアルタイムの増分スキャンを実行してメタデータを抽出およびインデックス化します。
重要:バインディングが正常に作成されると、IMM は指定された OSS バケット内の既存または新規のファイルのスキャンを開始します。バケットに含まれるオブジェクトが多いほど、メタデータスキャンのコストは高くなります。詳細については、IMM の「課金」をご参照ください。この機能をテストする場合や結果が不明な場合は、ファイル数が少ない OSS バケットを使用し、予期しない料金が発生しないようにワークフローテンプレートを慎重に選択することを推奨します。
API
次の例では、test-bucket バケット内のすべてのファイルをインデックス化し、インデックスをtest-project プロジェクト内のtest-dataset データセットに格納します。
-
CreateBinding API を呼び出して、データセットと OSS バケット間のバインディングを作成します。
-
サンプルリクエスト
{ "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 SDK 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_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 へのフルアクセスを許可します。セキュリティを向上させるために、API 呼び出しや日常の操作には RAM ユーザーを使用することを推奨します。 # セキュリティリスクを防ぐため、プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。 # この例では、認証のために環境変数から 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', # IMM データセットの名前を指定します。 dataset_name='test-dataset', # バインドする OSS バケットの 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 API を呼び出して、バインディングのステータスをクエリします。
-
サンプルリクエスト
{ "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 は OSS バケット内の既存データのインデックス作成が完了し、新しいファイルの増分スキャンを実行しています。
-
State パラメーターの値が [実行中] の場合、バインディングはアクティブです。
-
-
サンプルコード (Python SDK 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_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 へのフルアクセスを許可します。セキュリティを向上させるために、API 呼び出しや日常の操作には RAM ユーザーを使用することを推奨します。 # セキュリティリスクを防ぐため、プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。 # この例では、認証のために環境変数から 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', # IMM データセットの名前を指定します。 dataset_name='test-dataset', # バインドされた OSS バケットの 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()
-
データソースの追加
-
プロジェクトで、データセット test-dataset を見つけます。
左側メニューで、データ管理とインデックス作成 > データセット を選択します。リストに test-dataset が表示されます。
-
データセット test-dataset をクリックし、[データアクセス] タブを選択して、[新しいデータソース] をクリックします。
-
バインドするバケットを選択し、[OK] をクリックします。
説明データソースを追加すると、IMM はまずバケット内の既存のファイルに対してメタデータ抽出タスクを作成します。その後、IMM は継続的にデータソースのイベントを監視し、それに応じて新しいタスクを作成します。これらのタスクには料金が発生します。詳細については、「課金の概要」をご参照ください。少量のデータを含むバケットでこの機能をテストすることを推奨します。
特定のファイルの手動インデックス作成
API
OSS バケットまたは PDS 内の特定のファイルを手動でインデックス化するには、BatchIndexFileMeta API または IndexFileMeta API を呼び出します。
-
BatchIndexFileMeta API の呼び出し
次の例では、OSS ファイル oss://test-bucket/test-object1.jpg と oss://test-bucket/test-object2.jpg をtest-project プロジェクト内のtest-dataset データセットにインデックス化します。
-
サンプルリクエスト
{ "ProjectName": "test-project", "DatasetName": "test-dataset", "Files": [ { "URI": "oss://test-bucket/test-object1.jpg", "CustomLabels": { "category": "People" } }, { "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 (MNS) メッセージ。結果は MNS メッセージで返されます。MNS 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": "People" }, "Error": "" }, { "URI": "oss://test-bucket/test-object2.jpg", "CustomLabels": { "category": "Pets" }, "Error": "" } ] }説明-
Success パラメーターが true の場合、メタデータインデックス作成タスクは成功しました。
-
Files 配列は、各ファイルの URI とエラー情報を返します。Error フィールドが空の場合、ファイルのメタデータは正常にインデックス化されました。
-
-
サンプルコード (Python SDK 1.27.3)
# -*- 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 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 へのフルアクセスを許可します。セキュリティを向上させるために、API 呼び出しや日常の操作には RAM ユーザーを使用することを推奨します。 # セキュリティリスクを防ぐため、プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。 # この例では、認証のために環境変数から 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': 'People' } 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: # リクエストを送信して非同期インデックス作成タスクを開始します。 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 呼び出しや日常の操作には RAM ユーザーを使用することを推奨します。 # セキュリティリスクを防ぐため、プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。 # この例では、認証のために環境変数から 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': 'People' } 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 API の呼び出し
次の例では、OSS ファイル oss://test-bucket/test-object1.jpg をtest-project プロジェクト内のtest-dataset データセットにインデックス化します。
-
サンプルリクエスト
{ "ProjectName": "test-project", "DatasetName": "test-dataset", "File": { "URI": "oss://test-bucket/test-object1.jpg", "CustomLabels": { "category": "People" } }, "Notification": { "MNS": { "TopicName": "test-topic" } } } -
サンプルレスポンス
{ "RequestId": "5AA694AD-3D10-0B6A-85B2-****", "EventId": "17C-1Kofq1mlJxRYF7vAGF****" } -
Simple Message Queue (MNS) メッセージ。結果は MNS メッセージで返されます。MNS 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": "People" }, "Error": "" } ] }説明-
Success パラメーターが true の場合、メタデータインデックス作成タスクは成功しました。
-
Files 配列は、ファイルの URI とエラー情報を返します。Error フィールドが空の場合、ファイルのメタデータは正常にインデックス化されました。
-
-
サンプルコード (Python SDK 1.27.3)
# -*- 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 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 へのフルアクセスを許可します。セキュリティを向上させるために、API 呼び出しや日常の操作には RAM ユーザーを使用することを推奨します。 # セキュリティリスクを防ぐため、プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。 # この例では、認証のために環境変数から 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': 'People' } 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 呼び出しや日常の操作には RAM ユーザーを使用することを推奨します。 # セキュリティリスクを防ぐため、プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。 # この例では、認証のために環境変数から 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': 'People' } 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:])
-
一括追加
OSS バケットからデータセットに複数のファイルを一括で追加できます。IMM は非同期ワークフローを実行して、これらの新しいファイルのメタデータを抽出し、インデックス化します。このワークフローはメッセージ通知をサポートしているため、ファイルを追加するときは、タスクの結果を受信するための MNS トピックを指定してください。詳細については、「非同期通知メッセージの形式」をご参照ください。
-
プロジェクトで、データセット test-dataset を見つけます。
-
データセット test-dataset をクリックし、[データアクセス] タブを選択して、[一括追加] をクリックします。
-
[データセットにファイルを追加] パネルで、結果を受信するための MNS トピックの名前を入力し、[ファイルの選択] をクリックしてインデックス化するファイルを追加します。
ファイルが追加されると、追加された OSS ファイルのレコードがリストに表示されます。ラベルの編集 をクリックしてファイルにカスタムラベルを追加するか、削除 をクリックしてファイルを削除します。