建立資料集後,您可以為儲存在Object Storage Service、相簿與網盤服務(PDS)等產品中的檔案建立中繼資料索引。通過建立中繼資料索引,您可以更有效地管理和檢索大量的媒體檔案。本文將介紹如何建立和管理中繼資料索引,以便於快速搜尋、篩選和管理您的媒體資源。
前提條件
已建立資料集。具體操作,請參見建立資料集。
概述
中繼資料索引是指對媒體檔案中的關鍵資訊進行結構化和索引化,以便有效地管理和檢索這些媒體檔案。這些中繼資料可以包括但不限於媒體檔案的標題、作者、關鍵詞、描述、建立日期、大小、格式、解析度等資訊。通過建立中繼資料索引,使用者可以方便地通過關鍵詞、屬性或其他標識快速地檢索、篩選和管理大量的媒體檔案,使媒體資源的利用更加高效和便捷。
操作步驟
您可以選擇自動為OSS Bucket中所有檔案建立中繼資料索引或者手動為OSS Bucket或PDS中的指定檔案建立中繼資料索引。
自動為OSS Bucket中所有檔案建立中繼資料索引
如果您需要自動為OSS Bucket中所有檔案建立中繼資料索引,請調用介面CreateBinding - 建立綁定任務建立資料集和OSS Bucket的綁定關係。綁定關聯建立後,Intelligent Media Management會先對OSS Bucket中已有的資料進行全量掃描,並抽取檔案中繼資料資訊進行索引。完成後,繼續對OSS中新增的檔案進行即時的增量追蹤掃描、抽取以及索引。
如下以在test-project專案下的test-dataset資料集,為test-bucket中的所有檔案建立中繼資料索引為例。
調用CreateBinding - 建立綁定任務介面為資料集和OSS 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-****" }
完整範例程式碼(以Python 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 Secret初始化帳號Client。 @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: # 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。 # 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。 # 本樣本通過從環境變數中讀取AccessKey,來實現API訪問的身分識別驗證。如何配置環境變數,請參見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', # 填寫IMM資料集名稱。 dataset_name='test-dataset', # 填寫需要綁定的OSS Bucket地址。 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表示OSS Bucket歷史資料建立中繼資料索引已經完成,IMM在掃描增量檔案,為增量檔案建立中繼資料索引。
State(綁定狀態)為Running,表示綁定任務正在運行中。
完整範例程式碼(以1.27.3版本的Python 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 Secret初始化帳號Client。 @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: # 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。 # 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。 # 本樣本通過從環境變數中讀取AccessKey,來實現API訪問的身分識別驗證。如何配置環境變數,請參見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', # 填寫IMM資料集名稱。 dataset_name='test-dataset', # 填寫綁定的OSS Bucket地址。 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 Bucket或PDS中指定檔案建立中繼資料索引
如果您需要手動為OSS Bucket或PDS中指定檔案建立中繼資料索引,請調用BatchIndexFileMeta - 批量索引檔案元資訊或者IndexFileMeta - 索引檔案元資訊介面為檔案建立中繼資料索引。
調用BatchIndexFileMeta - 批量索引檔案元資訊介面
如下以在test-project專案下的test-dataset資料集,為OSS檔案oss://test-bucket/test-object1.jpg和oss://test-bucket/test-object2.jpg建立中繼資料索引為例。
請求樣本
{ "ProjectName": "test-project", "DatasetName": "test-dataset", "Files": [ { "URI": "oss://test-bucket/test-object1.jpg", "CustomLabels": { "category": "人物" } }, { "URI": "oss://test-bucket/test-object2.jpg", "CustomLabels": { "category": "寵物" } } ], "Notification": { "MNS": { "TopicName": "test-topic" } } }
返回樣本
{ "RequestId": "0D4CB096-EB44-02D6-A4E9-****", "EventId": "16C-1KoeYbdckkiOObpyzc****" }
MNS訊息(結果在MNS訊息中返回,關於MNS SDK的詳細資料,請參見步驟四:接收和刪除訊息。)
{ "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": "人物" }, "Error": "" }, { "URI": "oss://test-bucket/test-object2.jpg", "CustomLabels": { "category": "寵物" }, "Error": "" } ] }
說明Success為true表示建立中繼資料索引任務執行成功。
Files中返回了每一個檔案的URI和錯誤資訊,當Error為空白時表示該檔案建立中繼資料索引成功。
完整範例程式碼(以Python 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 Secret初始化帳號Client。 @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: # 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。 # 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。 # 本樣本通過從環境變數中讀取AccessKey,來實現API訪問的身分識別驗證。如何配置環境變數,請參見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': '人物' } 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': '寵物' } 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: # 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。 # 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。 # 本樣本通過從環境變數中讀取AccessKey,來實現API訪問的身分識別驗證。如何配置環境變數,請參見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': '人物' } 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': '寵物' } 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:])
如下以在test-project專案下的test-dataset資料集,為OSS檔案oss://test-bucket/test-object1.jpg建立中繼資料索引為例。
請求樣本
{ "ProjectName": "test-project", "DatasetName": "test-dataset", "File": { "URI": "oss://test-bucket/test-object1.jpg", "CustomLabels": { "category": "人物" } }, "Notification": { "MNS": { "TopicName": "test-topic" } } }
返回樣本
{ "RequestId": "5AA694AD-3D10-0B6A-85B2-****", "EventId": "17C-1Kofq1mlJxRYF7vAGF****" }
MNS訊息(結果在MNS訊息中返回,關於MNS SDK的詳細資料,請參見步驟四:接收和刪除訊息。)
{ "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": "人物" }, "Error": "" } ] }
說明Success為true表示建立中繼資料索引任務執行成功。
Files中返迴文件的URI和錯誤資訊,當Error為空白時表示該檔案建立中繼資料索引成功。
完整範例程式碼(以Python 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 Secret初始化帳號Client。 @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: # 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。 # 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。 # 本樣本通過從環境變數中讀取AccessKey,來實現API訪問的身分識別驗證。如何配置環境變數,請參見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': '人物' } 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: # 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。 # 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。 # 本樣本通過從環境變數中讀取AccessKey,來實現API訪問的身分識別驗證。如何配置環境變數,請參見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': '人物' } 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:])