Setelah membuat dataset di Intelligent Media Management (IMM), Anda dapat membuat indeks metadata untuk file yang disimpan di layanan seperti Object Storage Service (OSS) dan Photo and Drive Service. Pengindeksan metadata memungkinkan pengelolaan dan pengambilan file media secara efisien. Topik ini menjelaskan cara membuat dan mengelola indeks metadata untuk mempercepat pencarian, penyaringan, dan pengelolaan file.
Prasyarat
Dataset telah dibuat. Untuk informasi lebih lanjut, lihat Buat dataset.
Ikhtisar
Pengindeksan metadata memungkinkan pengorganisasian dan pengindeksan informasi kunci tentang file media. Dengan cara ini, Anda dapat mengelola dan mengambil file media secara efisien. Metadata mencakup tetapi tidak terbatas pada judul file, penulis, kata kunci, tanggal pembuatan, ukuran, format, dan resolusi. Pengindeksan metadata memungkinkan pengambilan, penyaringan, dan pengelolaan file media secara efisien menggunakan kata kunci, atribut, dan informasi deskriptif lainnya.
Metode pengindeksan
Anda dapat membuat indeks metadata secara otomatis untuk semua objek dalam Bucket OSS atau membuat indeks metadata secara manual untuk data tertentu di OSS atau Photo and Drive Service.
Buat indeks metadata secara otomatis untuk semua objek dalam Bucket OSS
Untuk membuat indeks metadata secara otomatis untuk semua objek dalam bucket, panggil operasi CreateBinding untuk memetakan dataset ke bucket. Setelah pemetaan ditetapkan, IMM melakukan pemindaian penuh untuk semua data yang ada di bucket, mengekstrak metadata, dan membuat indeks metadata. Setelah pemindaian penuh awal, IMM terus memantau bucket untuk data tambahan, mengekstrak metadata, dan mengindeks data tersebut.
Ketika pemetaan ditetapkan, IMM melakukan pemindaian penuh untuk data yang ada atau pemindaian tambahan untuk data baru di bucket. Jumlah objek dalam bucket berbanding lurus dengan biaya pengumpulan metadata. Untuk informasi lebih lanjut, lihat Item yang dikenakan biaya. Jika ingin mencoba pengindeksan metadata pada Bucket OSS, disarankan menggunakan bucket dengan jumlah objek kecil dan hati-hati memilih template alur kerja untuk menghindari biaya tak terduga.
Contoh berikut menunjukkan cara membuat indeks metadata di dataset test-dataset dari proyek test-project untuk semua objek di bucket test-bucket.
Panggil operasi CreateBinding untuk memetakan dataset ke bucket.
Contoh permintaan
{ "ProjectName": "test-project", "URI": "oss://test-bucket", "DatasetName": "test-dataset" }Contoh respons
{ "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-****" }Contoh kode lengkap (IMM SDK untuk Python)
# -*- 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 AccessKey ID dan Rahasia AccessKey Anda untuk menginisialisasi klien. @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 memiliki izin untuk semua Operasi API. Untuk mencegah risiko keamanan, kami sarankan Anda memanggil Operasi API atau melakukan O&M rutin sebagai pengguna RAM. # Kami sarankan Anda tidak menyertakan pasangan AccessKey (ID AccessKey dan Rahasia AccessKey) dalam kode proyek Anda. Jika tidak, pasangan AccessKey mungkin bocor dan keamanan semua sumber daya dalam akun Anda mungkin terganggu. # Dalam contoh ini, pasangan AccessKey dibaca dari variabel lingkungan untuk mengimplementasikan verifikasi identitas untuk akses API. Untuk informasi tentang cara mengonfigurasi variabel lingkungan, kunjungi 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. dataset_name='test-dataset', # Tentukan URI bucket. uri='oss://test-bucket' ) runtime = util_models.RuntimeOptions() try: # Cetak respons dari Operasi API. response = client.create_binding_with_options(create_binding_request, runtime) print(response.body.to_map()) except Exception as error: # Cetak pesan kesalahan jika perlu. UtilClient.assert_as_string(error.message) print(error) if __name__ == '__main__': Sample.main()
(Opsional) Panggil operasi GetBinding untuk menanyakan status pemetaan.
Contoh permintaan
{ "ProjectName": "test-project", "URI": "oss://test-bucket", "DatasetName": "test-dataset" }Contoh respons
{ "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-****" }CatatanJika nilai bidang Phase adalah IncrementalScanning, IMM telah membuat indeks metadata untuk semua objek yang ada di bucket dan sedang memindai objek tambahan untuk pengindeksan.
Jika nilai bidang State adalah Running, pemetaan sedang ditetapkan.
Contoh kode lengkap (IMM SDK untuk Python 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 AccessKey ID dan Rahasia AccessKey Anda untuk menginisialisasi klien. @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 memiliki izin untuk semua Operasi API. Untuk mencegah risiko keamanan, kami sarankan Anda memanggil Operasi API atau melakukan O&M rutin sebagai pengguna RAM. # Kami sarankan Anda tidak menyertakan pasangan AccessKey (ID AccessKey dan Rahasia AccessKey) dalam kode proyek Anda. Jika tidak, pasangan AccessKey mungkin bocor dan keamanan semua sumber daya dalam akun Anda mungkin terganggu. # Dalam contoh ini, pasangan AccessKey dibaca dari variabel lingkungan untuk mengimplementasikan verifikasi identitas untuk akses API. Untuk informasi tentang cara mengonfigurasi variabel lingkungan, kunjungi 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. dataset_name='test-dataset', # Tentukan URI bucket. uri='oss://test-bucket' ) runtime = util_models.RuntimeOptions() try: # Cetak respons dari Operasi API. response = client.get_binding_with_options(get_binding_request, runtime) print(response.body.to_map()) except Exception as error: # Cetak pesan kesalahan jika perlu. UtilClient.assert_as_string(error.message) print(error) if __name__ == '__main__': Sample.main()
Buat indeks metadata secara manual untuk data tertentu di Bucket OSS atau Photo and Drive Service
Untuk membuat indeks metadata secara manual untuk data tertentu di Bucket OSS atau Photo and Drive Service, panggil operasi BatchIndexFileMeta atau IndexFileMeta.
Panggil operasi BatchIndexFileMeta
Kode sampel berikut membuat indeks metadata di dataset test-dataset dari proyek test-project untuk objek OSS oss://test-bucket/test-object1.jpg dan oss://test-bucket/test-object2.jpg:
Contoh permintaan
{ "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" } } }Contoh respons
{ "RequestId": "0D4CB096-EB44-02D6-A4E9-****", "EventId": "16C-1KoeYbdckkiOObpyzc****" }Contoh pesan Message Service (Untuk informasi lebih lanjut tentang SDK Message Service, lihat Langkah 4: Terima dan hapus pesan)
{ "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": "" } ] }CatatanJika nilai bidang Success adalah true, indeks metadata telah dibuat.
Elemen Files berisi URI dan informasi kesalahan setiap objek. Jika nilai bidang Error kosong, objek tersebut telah diindeks.
Contoh kode lengkap (IMM SDK untuk Python)
# -*- coding: utf-8 -*- # File ini dihasilkan secara otomatis, jangan edit. 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 AccessKey ID dan Rahasia AccessKey Anda untuk menginisialisasi klien. @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 memiliki izin untuk semua Operasi API. Untuk mencegah risiko keamanan, kami sarankan Anda memanggil Operasi API atau melakukan O&M rutin sebagai pengguna RAM. # Kami sarankan Anda tidak menyertakan pasangan AccessKey (ID AccessKey dan Rahasia AccessKey) dalam kode proyek Anda. Jika tidak, pasangan AccessKey mungkin bocor dan keamanan semua sumber daya dalam akun Anda mungkin terganggu. # Dalam contoh ini, pasangan AccessKey dibaca dari variabel lingkungan untuk mengimplementasikan verifikasi identitas untuk akses API. Untuk informasi tentang cara mengonfigurasi variabel lingkungan, kunjungi 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': '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: # Tulis kode Anda untuk mencetak respons dari Operasi API jika perlu. client.batch_index_file_meta_with_options(batch_index_file_meta_request, runtime) except Exception as error: # Cetak pesan kesalahan jika perlu. UtilClient.assert_as_string(error.message) @staticmethod async def main_async( args: List[str], ) -> None: # Pasangan AccessKey dari akun Alibaba Cloud memiliki izin untuk semua Operasi API. Untuk mencegah risiko keamanan, kami sarankan Anda memanggil Operasi API atau melakukan O&M rutin sebagai pengguna RAM. # Kami sarankan Anda tidak menyertakan pasangan AccessKey (ID AccessKey dan Rahasia AccessKey) dalam kode proyek Anda. Jika tidak, pasangan AccessKey mungkin bocor dan keamanan semua sumber daya dalam akun Anda mungkin terganggu. # Dalam contoh ini, pasangan AccessKey dibaca dari variabel lingkungan untuk mengimplementasikan verifikasi identitas untuk akses API. Untuk informasi tentang cara mengonfigurasi variabel lingkungan, kunjungi 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': '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: # Tulis kode Anda untuk mencetak respons dari Operasi API jika perlu. await client.batch_index_file_meta_with_options_async(batch_index_file_meta_request, runtime) except Exception as error: # Cetak pesan kesalahan jika perlu. UtilClient.assert_as_string(error.message) if __name__ == '__main__': Sample.main(sys.argv[1:])
Panggil operasi IndexFileMeta
Kode sampel berikut membuat indeks metadata di dataset test-dataset dari proyek test-project untuk objek OSS oss://test-bucket/test-object1.jpg:
Contoh permintaan
{ "ProjectName": "test-project", "DatasetName": "test-dataset", "File": { "URI": "oss://test-bucket/test-object1.jpg", "CustomLabels": { "category": "Persons" } }, "Notification": { "MNS": { "TopicName": "test-topic" } } }Contoh respons
{ "RequestId": "5AA694AD-3D10-0B6A-85B2-****", "EventId": "17C-1Kofq1mlJxRYF7vAGF****" }Contoh pesan Message Service (Untuk informasi lebih lanjut tentang SDK Message Service, lihat Langkah 4: Terima dan hapus pesan)
{ "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": "" } ] }CatatanJika nilai bidang Success adalah true, indeks metadata telah dibuat.
Elemen Files berisi URI dan informasi kesalahan setiap objek. Jika nilai bidang Error kosong, objek tersebut telah diindeks.
Contoh kode lengkap (IMM SDK untuk Python)
# -*- coding: utf-8 -*- # File ini dihasilkan secara otomatis, jangan edit. 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 AccessKey ID dan Rahasia AccessKey Anda untuk menginisialisasi klien. @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 memiliki izin untuk semua Operasi API. Untuk mencegah risiko keamanan, kami sarankan Anda memanggil Operasi API atau melakukan O&M rutin sebagai pengguna RAM. # Kami sarankan Anda tidak menyertakan pasangan AccessKey (ID AccessKey dan Rahasia AccessKey) dalam kode proyek Anda. Jika tidak, pasangan AccessKey mungkin bocor dan keamanan semua sumber daya dalam akun Anda mungkin terganggu. # Dalam contoh ini, pasangan AccessKey dibaca dari variabel lingkungan untuk mengimplementasikan verifikasi identitas untuk akses API. Untuk informasi tentang cara mengonfigurasi variabel lingkungan, kunjungi 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': '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: # Tulis kode Anda untuk mencetak respons dari Operasi API jika perlu. client.index_file_meta_with_options(index_file_meta_request, runtime) except Exception as error: # Cetak pesan kesalahan jika perlu. UtilClient.assert_as_string(error.message) @staticmethod async def main_async( args: List[str], ) -> None: # Pasangan AccessKey dari akun Alibaba Cloud memiliki izin untuk semua Operasi API. Untuk mencegah risiko keamanan, kami sarankan Anda memanggil Operasi API atau melakukan O&M rutin sebagai pengguna RAM. # Kami sarankan Anda tidak menyertakan pasangan AccessKey (ID AccessKey dan Rahasia AccessKey) dalam kode proyek Anda. Jika tidak, pasangan AccessKey mungkin bocor dan keamanan semua sumber daya dalam akun Anda mungkin terganggu. # Dalam contoh ini, pasangan AccessKey dibaca dari variabel lingkungan untuk mengimplementasikan verifikasi identitas untuk akses API. Untuk informasi tentang cara mengonfigurasi variabel lingkungan, kunjungi 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': '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: # Tulis kode Anda untuk mencetak respons dari Operasi API jika perlu. await client.index_file_meta_with_options_async(index_file_meta_request, runtime) except Exception as error: # Cetak pesan kesalahan jika perlu. UtilClient.assert_as_string(error.message) if __name__ == '__main__': Sample.main(sys.argv[1:])