全部產品
Search
文件中心

:建立中繼資料索引

更新時間:Oct 30, 2024

建立資料集後,您可以為儲存在Object Storage Service、相簿與網盤服務(PDS)等產品中的檔案建立中繼資料索引。通過建立中繼資料索引,您可以更有效地管理和檢索大量的媒體檔案。本文將介紹如何建立和管理中繼資料索引,以便於快速搜尋、篩選和管理您的媒體資源。

前提條件

已建立資料集。具體操作,請參見建立資料集

概述

中繼資料索引是指對媒體檔案中的關鍵資訊進行結構化和索引化,以便有效地管理和檢索這些媒體檔案。這些中繼資料可以包括但不限於媒體檔案的標題、作者、關鍵詞、描述、建立日期、大小、格式、解析度等資訊。通過建立中繼資料索引,使用者可以方便地通過關鍵詞、屬性或其他標識快速地檢索、篩選和管理大量的媒體檔案,使媒體資源的利用更加高效和便捷。

操作步驟

您可以選擇自動為OSS Bucket中所有檔案建立中繼資料索引或者手動為OSS Bucket或PDS中的指定檔案建立中繼資料索引。

自動為OSS Bucket中所有檔案建立中繼資料索引

如果您需要自動為OSS Bucket中所有檔案建立中繼資料索引,請調用介面CreateBinding - 建立綁定任務建立資料集和OSS Bucket的綁定關係。綁定關聯建立後,Intelligent Media Management會先對OSS Bucket中已有的資料進行全量掃描,並抽取檔案中繼資料資訊進行索引。完成後,繼續對OSS中新增的檔案進行即時的增量追蹤掃描、抽取以及索引。

警告

重要:一旦綁定任務建立成功,將會對您對應OSS Bucket內的檔案進行存量或增量掃描,當您 Bucket 中的 Object 數量越多時,中繼資料掃描時產生的費用將越多,詳情請查看 IMM計費說明。如果您尚未確定其效果,或進行中測試,請選擇檔案數量較少的OSS Bucket,並謹慎選擇工作流程範本,以免給您帶來非預期費用。

如下以在test-project專案下的test-dataset資料集,為test-bucket中的所有檔案建立中繼資料索引為例。

  1. 調用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()
  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-****"
      }
      說明
      • 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.jpgoss://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": ""
              }
          ]
      }
      說明
      • Successtrue表示建立中繼資料索引任務執行成功。

      • 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:])
  • 調用IndexFileMeta - 檔案元資訊建立索引介面

    如下以在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": ""
              }
          ]
      }
      說明
      • Successtrue表示建立中繼資料索引任務執行成功。

      • 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:])