Setelah membuat dataset, Anda dapat membuat indeks metadata untuk file di layanan seperti Object Storage Service (OSS) dan Drive and Photo Service (PDS) guna mengelola serta mengambil volume besar file media secara efisien.
Prasyarat
Anda telah membuat dataset. Untuk informasi selengkapnya, lihat Create a dataset.
Overview
Indeks metadata memungkinkan Anda mencari, menyaring, dan mengelola koleksi besar file media berdasarkan kata kunci, atribut, atau pengenal lainnya.
Prosedur
Anda dapat mengindeks semua file dalam bucket OSS secara otomatis atau mengindeks file tertentu secara manual di bucket OSS atau PDS.
Automatically index all files in an OSS bucket
Untuk mengindeks semua file dalam bucket OSS secara otomatis, buat binding antara dataset dan bucket tersebut dengan memanggil API atau menambahkan sumber data di IMM console. Setelah binding dibuat, Intelligent Media Management (IMM) melakukan pemindaian penuh terhadap data yang ada di bucket, mengekstraksi metadata file, lalu mengindeksnya. IMM kemudian memantau bucket tersebut terhadap file baru dan melakukan pemindaian inkremental secara real-time untuk mengekstraksi serta mengindeks metadata-nya.
Penting: Setelah binding berhasil dibuat, IMM akan memulai pemindaian terhadap file yang sudah ada atau file baru di bucket OSS yang Anda tentukan. Semakin banyak objek dalam bucket Anda, semakin tinggi biaya pemindaian metadata. Untuk informasi selengkapnya, lihat Billing IMM. Jika Anda sedang menguji fitur ini atau belum yakin dengan hasilnya, kami menyarankan agar menggunakan bucket OSS yang hanya berisi sedikit file dan memilih workflow template dengan cermat untuk menghindari biaya tak terduga.
API
Contoh berikut mengindeks semua file di bucket test-bucket, menyimpan indeks di dataset test-dataset dalam proyek test-project.
-
Panggil CreateBinding untuk membuat binding antara dataset dan bucket OSS.
-
Permintaan contoh
{ "ProjectName": "test-project", "URI": "oss://test-bucket", "DatasetName": "test-dataset" } -
Tanggapan contoh
{ "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-****" } -
Kode contoh (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: """ Gunakan ID AccessKey dan rahasia AccessKey untuk menginisialisasi 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 ) # Tentukan titik akhir. config.endpoint = f'imm.cn-beijing.aliyuncs.com' return imm20200930Client(config) @staticmethod def main() -> None: # Pasangan AccessKey dari Akun Alibaba Cloud memberikan akses penuh ke semua API. Untuk keamanan yang lebih baik, kami menyarankan Anda menggunakan RAM user untuk panggilan API dan operasi harian. # Untuk mencegah risiko keamanan, jangan hard-code ID AccessKey dan rahasia AccessKey Anda dalam kode proyek. # Contoh ini menunjukkan cara membaca pasangan AccessKey dari variabel lingkungan untuk otentikasi. Untuk informasi selengkapnya tentang cara mengonfigurasi variabel lingkungan, lihat 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( # Tentukan nama proyek IMM. project_name='test-project', # Tentukan nama dataset IMM. dataset_name='test-dataset', # Tentukan URI bucket OSS yang akan di-bind. uri='oss://test-bucket' ) runtime = util_models.RuntimeOptions() try: # Cetak respons API. response = client.create_binding_with_options(create_binding_request, runtime) print(response.body.to_map()) except Exception as error: # Jika terjadi kesalahan, cetak pesan kesalahan. UtilClient.assert_as_string(error.message) print(error) if __name__ == '__main__': Sample.main()
-
-
Opsional: Panggil GetBinding untuk menanyakan status binding.
-
Permintaan contoh
{ "ProjectName": "test-project", "URI": "oss://test-bucket", "DatasetName": "test-dataset" } -
Tanggapan contoh
{ "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-****" }Catatan-
Jika nilai parameter Phase adalah IncrementalScanning, IMM telah selesai mengindeks data yang ada di bucket OSS dan sedang melakukan pemindaian inkremental terhadap file baru.
-
Jika nilai parameter State adalah Running, binding tersebut aktif.
-
-
Kode contoh (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: """ Gunakan ID AccessKey dan rahasia AccessKey untuk menginisialisasi 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 ) # Tentukan titik akhir. config.endpoint = f'imm.cn-beijing.aliyuncs.com' return imm20200930Client(config) @staticmethod def main() -> None: # Pasangan AccessKey dari Akun Alibaba Cloud memberikan akses penuh ke semua API. Untuk keamanan yang lebih baik, kami menyarankan Anda menggunakan RAM user untuk panggilan API dan operasi harian. # Untuk mencegah risiko keamanan, jangan hard-code ID AccessKey dan rahasia AccessKey Anda dalam kode proyek. # Contoh ini menunjukkan cara membaca pasangan AccessKey dari variabel lingkungan untuk otentikasi. Untuk informasi selengkapnya tentang cara mengonfigurasi variabel lingkungan, lihat 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( # Tentukan nama proyek IMM. project_name='test-project', # Tentukan nama dataset IMM. dataset_name='test-dataset', # Tentukan URI bucket OSS yang telah di-bind. uri='oss://test-bucket' ) runtime = util_models.RuntimeOptions() try: # Cetak respons API. response = client.get_binding_with_options(get_binding_request, runtime) print(response.body.to_map()) except Exception as error: # Jika terjadi kesalahan, cetak pesan kesalahan. UtilClient.assert_as_string(error.message) print(error) if __name__ == '__main__': Sample.main()
-
Add data source
-
Di proyek Anda, temukan dataset test-dataset.
Di panel navigasi kiri, pilih Data Management & Indexing > Datasets. Anda dapat menemukan test-dataset dalam daftar.
-
Klik dataset test-dataset, pilih tab Data access, lalu klik New Data Source.
-
Pilih bucket yang ingin Anda bind lalu klik OK.
CatatanSetelah Anda menambahkan sumber data, IMM pertama-tama membuat tugas ekstraksi metadata untuk file yang sudah ada di bucket tersebut. Kemudian, IMM terus memantau sumber data terhadap event dan membuat tugas baru sesuai kebutuhan. Tugas-tugas ini dikenai biaya. Untuk informasi selengkapnya, lihat Billing overview. Kami menyarankan Anda menguji fitur ini dengan bucket yang berisi sedikit data.
Manually index specific files
API
Untuk mengindeks file tertentu secara manual di bucket OSS atau PDS, panggil operasi BatchIndexFileMeta atau IndexFileMeta.
-
Panggil operasi BatchIndexFileMeta
Contoh berikut mengindeks file OSS oss://test-bucket/test-object1.jpg dan oss://test-bucket/test-object2.jpg di dataset test-dataset dalam proyek test-project.
-
Permintaan contoh
{ "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" } } } -
Tanggapan contoh
{ "RequestId": "0D4CB096-EB44-02D6-A4E9-****", "EventId": "16C-1KoeYbdckkiOObpyzc****" } -
Pesan Simple Message Queue (MNS). Hasil dikembalikan dalam pesan MNS. Untuk informasi selengkapnya tentang MNS SDK, lihat Step 4: Receive and delete messages.
{ "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": "" } ] }Catatan-
Jika parameter Success bernilai true, tugas pengindeksan metadata berhasil.
-
Array Files mengembalikan URI dan informasi kesalahan untuk setiap file. Jika bidang Error kosong, metadata file tersebut berhasil diindeks.
-
-
Kode contoh (Python SDK)
# -*- coding: utf-8 -*- # File ini di-generate secara otomatis, jangan diedit. Terima kasih. 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: """ Gunakan ID AccessKey dan rahasia AccessKey untuk menginisialisasi 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 ) # Tentukan titik akhir. config.endpoint = f'imm.cn-beijing.aliyuncs.com' return imm20200930Client(config) @staticmethod def main( args: List[str], ) -> None: # Pasangan AccessKey dari Akun Alibaba Cloud memberikan akses penuh ke semua API. Untuk keamanan yang lebih baik, kami menyarankan Anda menggunakan RAM user untuk panggilan API dan operasi harian. # Untuk mencegah risiko keamanan, jangan hard-code ID AccessKey dan rahasia AccessKey Anda dalam kode proyek. # Contoh ini menunjukkan cara membaca pasangan AccessKey dari variabel lingkungan untuk otentikasi. Untuk informasi selengkapnya tentang cara mengonfigurasi variabel lingkungan, lihat 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: # Kirim permintaan untuk memulai tugas pengindeksan asinkron. client.batch_index_file_meta_with_options(batch_index_file_meta_request, runtime) except Exception as error: # Jika terjadi kesalahan, cetak pesan kesalahan. UtilClient.assert_as_string(error.message) @staticmethod async def main_async( args: List[str], ) -> None: # Pasangan AccessKey dari Akun Alibaba Cloud memberikan akses penuh ke semua API. Untuk keamanan yang lebih baik, kami menyarankan Anda menggunakan RAM user untuk panggilan API dan operasi harian. # Untuk mencegah risiko keamanan, jangan hard-code ID AccessKey dan rahasia AccessKey Anda dalam kode proyek. # Contoh ini menunjukkan cara membaca pasangan AccessKey dari variabel lingkungan untuk otentikasi. Untuk informasi selengkapnya tentang cara mengonfigurasi variabel lingkungan, lihat 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: # Saat menjalankan kode, cetak respons API. await client.batch_index_file_meta_with_options_async(batch_index_file_meta_request, runtime) except Exception as error: # Jika terjadi kesalahan, cetak pesan kesalahan. UtilClient.assert_as_string(error.message) if __name__ == '__main__': Sample.main(sys.argv[1:])
-
-
Panggil operasi IndexFileMeta
Contoh berikut mengindeks file OSS oss://test-bucket/test-object1.jpg di dataset test-dataset dalam proyek test-project.
-
Permintaan contoh
{ "ProjectName": "test-project", "DatasetName": "test-dataset", "File": { "URI": "oss://test-bucket/test-object1.jpg", "CustomLabels": { "category": "People" } }, "Notification": { "MNS": { "TopicName": "test-topic" } } } -
Tanggapan contoh
{ "RequestId": "5AA694AD-3D10-0B6A-85B2-****", "EventId": "17C-1Kofq1mlJxRYF7vAGF****" } -
Pesan Simple Message Queue (MNS). Hasil dikembalikan dalam pesan MNS. Untuk informasi selengkapnya tentang MNS SDK, lihat Step 4: Receive and delete messages.
{ "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": "" } ] }Catatan-
Jika parameter Success bernilai true, tugas pengindeksan metadata berhasil.
-
Array Files mengembalikan URI dan informasi kesalahan untuk file tersebut. Jika bidang Error kosong, metadata file tersebut berhasil diindeks.
-
-
Kode contoh (Python SDK)
# -*- coding: utf-8 -*- # File ini di-generate secara otomatis, jangan diedit. Terima kasih. 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: """ Gunakan ID AccessKey dan rahasia AccessKey untuk menginisialisasi 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 ) # Tentukan titik akhir. config.endpoint = f'imm.cn-beijing.aliyuncs.com' return imm20200930Client(config) @staticmethod def main( args: List[str], ) -> None: # Pasangan AccessKey dari Akun Alibaba Cloud memberikan akses penuh ke semua API. Untuk keamanan yang lebih baik, kami menyarankan Anda menggunakan RAM user untuk panggilan API dan operasi harian. # Untuk mencegah risiko keamanan, jangan hard-code ID AccessKey dan rahasia AccessKey Anda dalam kode proyek. # Contoh ini menunjukkan cara membaca pasangan AccessKey dari variabel lingkungan untuk otentikasi. Untuk informasi selengkapnya tentang cara mengonfigurasi variabel lingkungan, lihat 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: # Saat menjalankan kode, cetak respons API. client.index_file_meta_with_options(index_file_meta_request, runtime) except Exception as error: # Jika terjadi kesalahan, cetak pesan kesalahan. UtilClient.assert_as_string(error.message) @staticmethod async def main_async( args: List[str], ) -> None: # Pasangan AccessKey dari Akun Alibaba Cloud memberikan akses penuh ke semua API. Untuk keamanan yang lebih baik, kami menyarankan Anda menggunakan RAM user untuk panggilan API dan operasi harian. # Untuk mencegah risiko keamanan, jangan hard-code ID AccessKey dan rahasia AccessKey Anda dalam kode proyek. # Contoh ini menunjukkan cara membaca pasangan AccessKey dari variabel lingkungan untuk otentikasi. Untuk informasi selengkapnya tentang cara mengonfigurasi variabel lingkungan, lihat 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: # Saat menjalankan kode, cetak respons API. await client.index_file_meta_with_options_async(index_file_meta_request, runtime) except Exception as error: # Jika terjadi kesalahan, cetak pesan kesalahan. UtilClient.assert_as_string(error.message) if __name__ == '__main__': Sample.main(sys.argv[1:])
-
Batch add
Anda dapat menambahkan beberapa file dari bucket OSS ke dataset dalam satu operasi batch. IMM kemudian menjalankan alur kerja asinkron untuk mengekstraksi dan mengindeks metadata file-file baru tersebut. Alur kerja ini mendukung notifikasi pesan, sehingga saat menambahkan file, tentukan topik MNS untuk menerima hasil tugas. Untuk informasi selengkapnya, lihat Asynchronous notification message format.
-
Di proyek Anda, temukan dataset test-dataset.
-
Klik dataset test-dataset, pilih tab Data access, lalu klik Batch Add.
-
Di panel Add File to Dataset, masukkan nama topik Simple Message Queue (MNS) untuk menerima hasil, lalu klik Select File untuk menambahkan file yang ingin Anda indeks.
Setelah file ditambahkan, Anda dapat melihat catatan file OSS yang ditambahkan dalam daftar. Klik Edit Labels untuk menambahkan label kustom ke file, atau klik Delete untuk menghapus file.