Setelah membuat dataset di Intelligent Media Management (IMM), buat indeks metadata untuk file yang disimpan di Object Storage Service (OSS) atau Drive and Photo Service. Indeks metadata menyusun informasi penting tentang file media Anda—seperti judul, penulis, kata kunci, tanggal pembuatan, ukuran, format, dan resolusi—sehingga memungkinkan pencarian, penyaringan, dan pengelolaan yang efisien.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Membuat dataset dalam proyek IMM Anda. Untuk informasi selengkapnya, lihat Buat dataset.
Metode pengindeksan
IMM mendukung dua metode pengindeksan:
| Method | Scope | API operation | Best for |
|---|---|---|---|
| Automatic | Semua objek dalam bucket OSS | CreateBinding | Pengindeksan seluruh bucket dengan pembaruan inkremental berkelanjutan |
| Manual | File tertentu di OSS atau Drive and Photo Service | BatchIndexFileMeta / IndexFileMeta | Pengindeksan selektif terhadap file tertentu |
Pengindeksan otomatis
Panggil CreateBinding untuk memetakan dataset ke bucket OSS. Setelah pemetaan dibuat, IMM melakukan pemindaian penuh terhadap semua objek di bucket tersebut, mengekstraksi metadata, dan membuat indeks metadata. Selanjutnya, IMM secara terus-menerus memantau bucket tersebut terhadap data inkremental dan mengindeks objek baru secara otomatis.
Pengindeksan metadata dikenai biaya yang sebanding dengan jumlah objek yang dipindai. Untuk detailnya, lihat Billing items. Untuk mencoba pengindeksan metadata, gunakan bucket dengan jumlah objek yang sedikit dan pilih workflow template dengan cermat agar tidak menimbulkan biaya tak terduga.
Langkah 1: Buat binding
Contoh berikut memetakan dataset test-dataset dalam proyek test-project ke bucket test-bucket.
Request
{
"ProjectName": "test-project",
"URI": "oss://test-bucket",
"DatasetName": "test-dataset"
}Response
{
"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 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 ID AccessKey dan rahasia AccessKey Anda 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 endpoint.
config.endpoint = f'imm.cn-beijing.aliyuncs.com'
return imm20200930Client(config)
@staticmethod
def main() -> None:
# Pasangan Kunci Akses Akun Alibaba Cloud memiliki izin atas semua operasi API. Untuk mencegah risiko keamanan, kami menyarankan Anda memanggil operasi API atau melakukan O&M rutin sebagai RAM user.
# Kami menyarankan agar Anda tidak menyertakan pasangan Kunci Akses (ID AccessKey dan Rahasia AccessKey) dalam kode proyek Anda. Jika tidak, pasangan Kunci Akses tersebut dapat bocor dan keamanan semua sumber daya dalam akun Anda dapat terganggu.
# Dalam contoh ini, pasangan Kunci Akses dibaca dari variabel lingkungan untuk menerapkan verifikasi identitas 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 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 diperlukan.
UtilClient.assert_as_string(error.message)
print(error)
if __name__ == '__main__':
Sample.main()Langkah 2 (opsional): Periksa status binding
Panggil GetBinding untuk menanyakan status pemetaan.
Request
{
"ProjectName": "test-project",
"URI": "oss://test-bucket",
"DatasetName": "test-dataset"
}Response
{
"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-****"
}Bidang respons utama:
| Field | Value | Meaning |
|---|---|---|
| Phase | IncrementalScanning | IMM telah selesai mengindeks semua objek yang ada dan kini sedang memindai objek inkremental |
| State | Running | Pemetaan sedang dalam proses pembentukan |
Kode contoh 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 ID AccessKey dan rahasia AccessKey Anda 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 endpoint.
config.endpoint = f'imm.cn-beijing.aliyuncs.com'
return imm20200930Client(config)
@staticmethod
def main() -> None:
# Pasangan Kunci Akses Akun Alibaba Cloud memiliki izin atas semua operasi API. Untuk mencegah risiko keamanan, kami menyarankan Anda memanggil operasi API atau melakukan O&M rutin sebagai RAM user.
# Kami menyarankan agar Anda tidak menyertakan pasangan Kunci Akses (ID AccessKey dan Rahasia AccessKey) dalam kode proyek Anda. Jika tidak, pasangan Kunci Akses tersebut dapat bocor dan keamanan semua sumber daya dalam akun Anda dapat terganggu.
# Dalam contoh ini, pasangan Kunci Akses dibaca dari variabel lingkungan untuk menerapkan verifikasi identitas 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 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 diperlukan.
UtilClient.assert_as_string(error.message)
print(error)
if __name__ == '__main__':
Sample.main()Pengindeksan manual
Untuk mengindeks file tertentu di OSS atau Drive and Photo Service, panggil BatchIndexFileMeta (beberapa file) atau IndexFileMeta (satu file). Kedua operasi ini mendukung label kustom dan notifikasi Message Service (MNS).
Indeks beberapa file (BatchIndexFileMeta)
Contoh berikut mengindeks oss://test-bucket/test-object1.jpg dan oss://test-bucket/test-object2.jpg dalam dataset test-dataset pada proyek test-project dengan label kustom.
Request
{
"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"
}
}
}Response
{
"RequestId": "0D4CB096-EB44-02D6-A4E9-****",
"EventId": "16C-1KoeYbdckkiOObpyzc****"
}Pesan notifikasi MNS
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": ""
}
]
}Verifikasi hasil:
Success bernilai
true: indeks metadata berhasil dibuat.Error kosong untuk suatu file: file tersebut berhasil diindeks.
Kode contoh lengkap (IMM SDK untuk Python)
# -*- 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:
"""
Gunakan ID AccessKey dan rahasia AccessKey Anda 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 endpoint.
config.endpoint = f'imm.cn-beijing.aliyuncs.com'
return imm20200930Client(config)
@staticmethod
def main(
args: List[str],
) -> None:
# Pasangan Kunci Akses Akun Alibaba Cloud memiliki izin atas semua operasi API. Untuk mencegah risiko keamanan, kami menyarankan Anda memanggil operasi API atau melakukan O&M rutin sebagai RAM user.
# Kami menyarankan agar Anda tidak menyertakan pasangan Kunci Akses (ID AccessKey dan Rahasia AccessKey) dalam kode proyek Anda. Jika tidak, pasangan Kunci Akses tersebut dapat bocor dan keamanan semua sumber daya dalam akun Anda dapat terganggu.
# Dalam contoh ini, pasangan Kunci Akses dibaca dari variabel lingkungan untuk menerapkan verifikasi identitas 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 operasi API jika diperlukan.
client.batch_index_file_meta_with_options(batch_index_file_meta_request, runtime)
except Exception as error:
# Cetak pesan kesalahan jika diperlukan.
UtilClient.assert_as_string(error.message)
@staticmethod
async def main_async(
args: List[str],
) -> None:
# Pasangan Kunci Akses Akun Alibaba Cloud memiliki izin atas semua operasi API. Untuk mencegah risiko keamanan, kami menyarankan Anda memanggil operasi API atau melakukan O&M rutin sebagai RAM user.
# Kami menyarankan agar Anda tidak menyertakan pasangan Kunci Akses (ID AccessKey dan Rahasia AccessKey) dalam kode proyek Anda. Jika tidak, pasangan Kunci Akses tersebut dapat bocor dan keamanan semua sumber daya dalam akun Anda dapat terganggu.
# Dalam contoh ini, pasangan Kunci Akses dibaca dari variabel lingkungan untuk menerapkan verifikasi identitas 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 operasi API jika diperlukan.
await client.batch_index_file_meta_with_options_async(batch_index_file_meta_request, runtime)
except Exception as error:
# Cetak pesan kesalahan jika diperlukan.
UtilClient.assert_as_string(error.message)
if __name__ == '__main__':
Sample.main(sys.argv[1:])Indeks satu file (IndexFileMeta)
Contoh berikut mengindeks oss://test-bucket/test-object1.jpg dalam dataset test-dataset pada proyek test-project.
Request
{
"ProjectName": "test-project",
"DatasetName": "test-dataset",
"File": {
"URI": "oss://test-bucket/test-object1.jpg",
"CustomLabels": {
"category": "Persons"
}
},
"Notification": {
"MNS": {
"TopicName": "test-topic"
}
}
}Response
{
"RequestId": "5AA694AD-3D10-0B6A-85B2-****",
"EventId": "17C-1Kofq1mlJxRYF7vAGF****"
}Pesan notifikasi MNS
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": ""
}
]
}Verifikasi hasil:
Success bernilai
true: indeks metadata berhasil dibuat.Error kosong untuk suatu file: file tersebut berhasil diindeks.
Kode contoh lengkap (IMM SDK untuk Python)
# -*- 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:
"""
Gunakan ID AccessKey dan rahasia AccessKey Anda 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 endpoint.
config.endpoint = f'imm.cn-beijing.aliyuncs.com'
return imm20200930Client(config)
@staticmethod
def main(
args: List[str],
) -> None:
# Pasangan Kunci Akses Akun Alibaba Cloud memiliki izin atas semua operasi API. Untuk mencegah risiko keamanan, kami menyarankan Anda memanggil operasi API atau melakukan O&M rutin sebagai RAM user.
# Kami menyarankan agar Anda tidak menyertakan pasangan Kunci Akses (ID AccessKey dan Rahasia AccessKey) dalam kode proyek Anda. Jika tidak, pasangan Kunci Akses tersebut dapat bocor dan keamanan semua sumber daya dalam akun Anda dapat terganggu.
# Dalam contoh ini, pasangan Kunci Akses dibaca dari variabel lingkungan untuk menerapkan verifikasi identitas 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 operasi API jika diperlukan.
client.index_file_meta_with_options(index_file_meta_request, runtime)
except Exception as error:
# Cetak pesan kesalahan jika diperlukan.
UtilClient.assert_as_string(error.message)
@staticmethod
async def main_async(
args: List[str],
) -> None:
# Pasangan Kunci Akses Akun Alibaba Cloud memiliki izin atas semua operasi API. Untuk mencegah risiko keamanan, kami menyarankan Anda memanggil operasi API atau melakukan O&M rutin sebagai RAM user.
# Kami menyarankan agar Anda tidak menyertakan pasangan Kunci Akses (ID AccessKey dan Rahasia AccessKey) dalam kode proyek Anda. Jika tidak, pasangan Kunci Akses tersebut dapat bocor dan keamanan semua sumber daya dalam akun Anda dapat terganggu.
# Dalam contoh ini, pasangan Kunci Akses dibaca dari variabel lingkungan untuk menerapkan verifikasi identitas 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 operasi API jika diperlukan.
await client.index_file_meta_with_options_async(index_file_meta_request, runtime)
except Exception as error:
# Cetak pesan kesalahan jika diperlukan.
UtilClient.assert_as_string(error.message)
if __name__ == '__main__':
Sample.main(sys.argv[1:])