Après avoir créé un jeu de données, vous pouvez créer un index de métadonnées pour les fichiers stockés dans des services tels que Object Storage Service (OSS) et Drive and Photo Service (PDS). Cette opération permet de gérer et de récupérer efficacement de grands volumes de fichiers multimédias.
Prérequis
Vous avez créé un jeu de données. Pour plus d'informations, consultez la rubrique Créer un jeu de données.
Présentation
Un index de métadonnées vous permet de rechercher, filtrer et gérer de grandes collections de fichiers multimédias à l'aide de mots-clés, d'attributs ou d'autres identifiants.
Procédure
Vous pouvez indexer automatiquement tous les fichiers d'un bucket OSS, ou indexer manuellement des fichiers spécifiques dans un bucket OSS ou sur PDS.
Indexer automatiquement tous les fichiers d'un bucket OSS
Pour indexer automatiquement tous les fichiers d'un bucket OSS, créez une liaison entre un jeu de données et le bucket en appelant une API ou en ajoutant une source de données dans la console IMM. Une fois la liaison créée, Intelligent Media Management (IMM) analyse l'intégralité des données existantes dans le bucket, extrait les métadonnées des fichiers et les indexe. IMM surveille ensuite le bucket pour détecter les nouveaux fichiers et effectue des analyses incrémentielles en temps réel afin d'extraire et d'indexer leurs métadonnées.
Important : Après la création réussie d'une liaison, IMM lance une analyse des fichiers existants ou nouveaux dans votre bucket OSS spécifié. Plus votre bucket contient d'objets, plus les coûts d'analyse des métadonnées sont élevés. Pour plus d'informations, consultez la section Facturation d'IMM. Si vous testez cette fonctionnalité ou si vous n'êtes pas certain du résultat, nous vous recommandons d'utiliser un bucket OSS contenant peu de fichiers et de sélectionner avec soin un modèle de workflow afin d'éviter des frais imprévus.
API
L'exemple suivant indexe tous les fichiers du bucket test-bucket et stocke l'index dans le jeu de données test-dataset au sein du projet test-project.
-
Appelez l'opération CreateBinding pour créer une liaison entre le jeu de données et le bucket OSS.
-
Exemple de requête
{ "ProjectName": "test-project", "URI": "oss://test-bucket", "DatasetName": "test-dataset" } -
Exemple de réponse
{ "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-****" } -
Exemple de code (SDK 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: """ Use an AccessKey ID and AccessKey secret to initialize a 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 ) # Specify the endpoint. config.endpoint = f'imm.cn-beijing.aliyuncs.com' return imm20200930Client(config) @staticmethod def main() -> None: # The AccessKey pair of an Alibaba Cloud account grants full access to all APIs. For better security, we recommend that you use a RAM user for API calls and daily operations. # To prevent security risks, do not hard-code your AccessKey ID and AccessKey secret in your project code. # This example shows how to read the AccessKey pair from environment variables for authentication. For more information about how to configure environment variables, see 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( # Specify the name of the IMM project. project_name='test-project', # Specify the name of the IMM dataset. dataset_name='test-dataset', # Specify the URI of the OSS bucket to bind. uri='oss://test-bucket' ) runtime = util_models.RuntimeOptions() try: # Print the API response. response = client.create_binding_with_options(create_binding_request, runtime) print(response.body.to_map()) except Exception as error: # If an error occurs, print the error message. UtilClient.assert_as_string(error.message) print(error) if __name__ == '__main__': Sample.main()
-
-
Facultatif : Appelez l'opération GetBinding pour interroger l'état de la liaison.
-
Exemple de requête
{ "ProjectName": "test-project", "URI": "oss://test-bucket", "DatasetName": "test-dataset" } -
Exemple de réponse
{ "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-****" }RemarqueSi la valeur du paramètre Phase est IncrementalScanning, cela signifie qu'IMM a terminé l'indexation des données existantes dans le bucket OSS et qu'il analyse désormais de manière incrémentielle les nouveaux fichiers.
Si la valeur du paramètre State est Running, la liaison est active.
-
Exemple de code (SDK 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: """ Use an AccessKey ID and AccessKey secret to initialize a 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 ) # Specify the endpoint. config.endpoint = f'imm.cn-beijing.aliyuncs.com' return imm20200930Client(config) @staticmethod def main() -> None: # The AccessKey pair of an Alibaba Cloud account grants full access to all APIs. For better security, we recommend that you use a RAM user for API calls and daily operations. # To prevent security risks, do not hard-code your AccessKey ID and AccessKey secret in your project code. # This example shows how to read the AccessKey pair from environment variables for authentication. For more information about how to configure environment variables, see 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( # Specify the name of the IMM project. project_name='test-project', # Specify the name of the IMM dataset. dataset_name='test-dataset', # Specify the URI of the bound OSS bucket. uri='oss://test-bucket' ) runtime = util_models.RuntimeOptions() try: # Print the API response. response = client.get_binding_with_options(get_binding_request, runtime) print(response.body.to_map()) except Exception as error: # If an error occurs, print the error message. UtilClient.assert_as_string(error.message) print(error) if __name__ == '__main__': Sample.main()
-
Ajouter une source de données
-
Dans votre projet, localisez le jeu de données test-dataset.
Dans le volet de navigation de gauche, sélectionnez Data Management & Indexing > Datasets. Vous trouverez test-dataset dans la liste.
Cliquez sur le jeu de données test-dataset, sélectionnez l'onglet Data access, puis cliquez sur New Data Source.
-
Sélectionnez le bucket que vous souhaitez lier, puis cliquez sur OK.
RemarqueAprès l'ajout d'une source de données, IMM crée d'abord des tâches d'extraction de métadonnées pour les fichiers existants dans le bucket. Ensuite, IMM surveille en continu la source de données pour détecter les événements et crée de nouvelles tâches en conséquence. Ces tâches entraînent des frais. Pour plus d'informations, consultez la rubrique Présentation de la facturation. Nous vous recommandons de tester cette fonctionnalité avec un bucket contenant peu de données.
Indexer manuellement des fichiers spécifiques
API
Pour indexer manuellement des fichiers spécifiques dans un bucket OSS ou sur PDS, appelez l'opération BatchIndexFileMeta ou IndexFileMeta.
-
Appel de l'opération BatchIndexFileMeta
L'exemple suivant indexe les fichiers OSS oss://test-bucket/test-object1.jpg et oss://test-bucket/test-object2.jpg dans le jeu de données test-dataset au sein du projet test-project.
-
Exemple de requête
{ "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" } } } -
Exemple de réponse
{ "RequestId": "0D4CB096-EB44-02D6-A4E9-****", "EventId": "16C-1KoeYbdckkiOObpyzc****" } -
Message Simple Message Queue (MNS). Le résultat est renvoyé dans un message MNS. Pour plus d'informations sur le SDK MNS, consultez la rubrique Étape 4 : Recevoir et supprimer des 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": "" } ] }RemarqueSi la valeur du paramètre Success est true, la tâche d'indexation des métadonnées a réussi.
Le tableau Files renvoie l'URI et les informations d'erreur pour chaque fichier. Si le champ Error est vide, les métadonnées du fichier ont été indexées avec succès.
-
Exemple de code (SDK 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: """ Use an AccessKey ID and AccessKey secret to initialize a 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 ) # Specify the endpoint. config.endpoint = f'imm.cn-beijing.aliyuncs.com' return imm20200930Client(config) @staticmethod def main( args: List[str], ) -> None: # The AccessKey pair of an Alibaba Cloud account grants full access to all APIs. For better security, we recommend that you use a RAM user for API calls and daily operations. # To prevent security risks, do not hard-code your AccessKey ID and AccessKey secret in your project code. # This example shows how to read the AccessKey pair from environment variables for authentication. For more information about how to configure environment variables, see 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: # Send the request to start the asynchronous indexing task. client.batch_index_file_meta_with_options(batch_index_file_meta_request, runtime) except Exception as error: # If an error occurs, print the error message. UtilClient.assert_as_string(error.message) @staticmethod async def main_async( args: List[str], ) -> None: # The AccessKey pair of an Alibaba Cloud account grants full access to all APIs. For better security, we recommend that you use a RAM user for API calls and daily operations. # To prevent security risks, do not hard-code your AccessKey ID and AccessKey secret in your project code. # This example shows how to read the AccessKey pair from environment variables for authentication. For more information about how to configure environment variables, see 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: # When you run the code, print the API response. await client.batch_index_file_meta_with_options_async(batch_index_file_meta_request, runtime) except Exception as error: # If an error occurs, print the error message. UtilClient.assert_as_string(error.message) if __name__ == '__main__': Sample.main(sys.argv[1:])
-
-
Appel de l'opération IndexFileMeta
L'exemple suivant indexe le fichier OSS oss://test-bucket/test-object1.jpg dans le jeu de données test-dataset au sein du projet test-project.
-
Exemple de requête
{ "ProjectName": "test-project", "DatasetName": "test-dataset", "File": { "URI": "oss://test-bucket/test-object1.jpg", "CustomLabels": { "category": "People" } }, "Notification": { "MNS": { "TopicName": "test-topic" } } } -
Exemple de réponse
{ "RequestId": "5AA694AD-3D10-0B6A-85B2-****", "EventId": "17C-1Kofq1mlJxRYF7vAGF****" } -
Message Simple Message Queue (MNS). Le résultat est renvoyé dans un message MNS. Pour plus d'informations sur le SDK MNS, consultez la rubrique Étape 4 : Recevoir et supprimer des 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": "" } ] }RemarqueSi la valeur du paramètre Success est true, la tâche d'indexation des métadonnées a réussi.
Le tableau Files renvoie l'URI et les informations d'erreur pour le fichier. Si le champ Error est vide, les métadonnées du fichier ont été indexées avec succès.
-
Exemple de code (SDK 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: """ Use an AccessKey ID and AccessKey secret to initialize a 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 ) # Specify the endpoint. config.endpoint = f'imm.cn-beijing.aliyuncs.com' return imm20200930Client(config) @staticmethod def main( args: List[str], ) -> None: # The AccessKey pair of an Alibaba Cloud account grants full access to all APIs. For better security, we recommend that you use a RAM user for API calls and daily operations. # To prevent security risks, do not hard-code your AccessKey ID and AccessKey secret in your project code. # This example shows how to read the AccessKey pair from environment variables for authentication. For more information about how to configure environment variables, see 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: # When you run the code, print the API response. client.index_file_meta_with_options(index_file_meta_request, runtime) except Exception as error: # If an error occurs, print the error message. UtilClient.assert_as_string(error.message) @staticmethod async def main_async( args: List[str], ) -> None: # The AccessKey pair of an Alibaba Cloud account grants full access to all APIs. For better security, we recommend that you use a RAM user for API calls and daily operations. # To prevent security risks, do not hard-code your AccessKey ID and AccessKey secret in your project code. # This example shows how to read the AccessKey pair from environment variables for authentication. For more information about how to configure environment variables, see 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: # When you run the code, print the API response. await client.index_file_meta_with_options_async(index_file_meta_request, runtime) except Exception as error: # If an error occurs, print the error message. UtilClient.assert_as_string(error.message) if __name__ == '__main__': Sample.main(sys.argv[1:])
-
Ajout par lot
Vous pouvez ajouter plusieurs fichiers d'un bucket OSS à un jeu de données en une seule opération par lot. IMM exécute ensuite un workflow asynchrone pour extraire et indexer les métadonnées de ces nouveaux fichiers. Ce workflow prend en charge les notifications de messages ; par conséquent, lors de l'ajout des fichiers, spécifiez une rubrique MNS pour recevoir les résultats de la tâche. Pour plus d'informations, consultez la rubrique Format des messages de notification asynchrone.
Dans votre projet, localisez le jeu de données test-dataset.
Cliquez sur le jeu de données test-dataset, sélectionnez l'onglet Data access, puis cliquez sur Batch Add.
-
Dans le panneau Add File to Dataset, saisissez le nom de la rubrique Simple Message Queue (MNS) destinée à recevoir les résultats, puis cliquez sur Select File pour ajouter les fichiers que vous souhaitez indexer.
Une fois les fichiers ajoutés, vous pouvez consulter les enregistrements des fichiers OSS ajoutés dans la liste. Cliquez sur Edit Labels pour ajouter des libellés personnalisés à un fichier, ou sur Delete pour supprimer un fichier.