Traitement par lot des images

En plus du traitement par flux, vous pouvez choisir le traitement par lot pour obtenir des informations à partir des données. Ce mode de traitement non en streaming vous permet de créer des applications compatibles avec d'autres types de médias.

Vous pouvez traiter par lot des fichiers image stockés dans Cloud Storage avec certains modèles. La sortie est stockée dans Cloud Storage.

Modèles compatibles

Les modèles suivants sont compatibles avec le traitement par lot:

  • Outil de reconnaissance de tags
  • Reconnaissance de produits

Types de données acceptés

Cette page explique comment traiter par lot les types de données suivants:

  • Données d'image

Avant de commencer

Parcours utilisateur

Pour traiter par lot les données d'image, procédez comme suit:

  1. Activez l'API Vertex AI Vision.

  2. Créez un outil de traitement compatible (outil de reconnaissance de produits ou de tags).

  3. Créez une application.

    1. Entrée: ajoutez un nœud d'entrée universel qui spécifie les fichiers à traiter dans Cloud Storage.

    2. Traitement: ajoutez votre nœud de modèle.

    3. Sortie: ajoutez le nœud de stockage de sortie en spécifiant l'emplacement où les données traitées sont stockées dans Cloud Storage.

  4. Créez des instances par lot de votre application, chaque instance correspondant à un emplacement d'entrée de bucket Cloud Storage.

  5. Déployez l'application et ses instances.

  6. Une fois l'instance de traitement par lot terminée, examinez la sortie stockée dans Cloud Storage.

Traiter des images par lot

La procédure d'envoi d'une requête de traitement par lot varie d'un modèle à l'autre. Suivez les instructions de votre modèle cible pour traiter les images par lot.

Modèle de reconnaissance de produits

Utilisez ces exemples pour traiter des images par lot à l'aide d'un modèle de reconnaissance de produits.

Console

Créez une requête de traitement par lot d'images dans la console Google Cloud .

Créer une application

  1. Ouvrez l'onglet Applications du tableau de bord Vertex AI Vision.

    Accéder à l'onglet "Applications"

  2. Cliquez sur le bouton Créer.

  3. Saisissez le nom d'une application et choisissez votre région.

  4. Cliquez sur Continuer.

  5. Choisissez votre mode de facturation. Pour en savoir plus sur le paiement à l'utilisation et la facturation mensuelle, consultez la page des tarifs.

  6. Cliquez sur Créer.

Spécifier les entrées de traitement par lot

  1. Sur la page de l'outil de création d'applications graphiques, cliquez sur le nœud Entrée universelle.

  2. Dans le volet Saisie universelle latéral, cliquez sur Sélectionner des sources de saisie.

  3. Sur la page Sélectionner des sources d'entrée, sélectionnez Prédiction par lots.

  4. Cliquez sur Continuer.

  5. Dans le volet Sources, cliquez sur Parcourir dans le champ du sélecteur d'emplacement pour indiquer l'emplacement de vos fichiers dans Cloud Storage.

  6. Facultatif. Pour spécifier d'autres sources, cliquez sur Ajouter un élément et répétez l'étape précédente.

  7. Cliquez sur Envoyer.

Ajouter le modèle

  1. Sur la page de l'outil de création d'applications de graphiques, cliquez sur le nœud de modèle Détecteur de produits dans la section Modèles spécialisés.

  2. Dans le volet Outil de reconnaissance de produits, cliquez sur Sélectionner un modèle.

  3. Sélectionnez Sélectionner un modèle de reconnaissance de produits existant.

    Si vous devez créer un modèle ou un indice, sélectionnez l'option correspondante pour créer les ressources.

  4. Choisissez le modèle dans la liste.

  5. Cliquez sur Sélectionner.

  6. Facultatif. Modifiez le seuil de confiance.

  7. Cliquez sur Appliquer les paramètres.

Ajouter une destination de sortie

  1. Sur la page de l'outil de création d'applications graphiques, cliquez sur le nœud de modèle Cloud Storage dans la section Sortie.

  2. Dans le volet Cloud Storage, cliquez sur Parcourir pour sélectionner la destination de sortie de vos prédictions par lot dans Cloud Storage.

Déployer l'application

  1. Sur la page de l'outil de création d'applications graphiques, cliquez sur Déployer.

API REST et ligne de commande

Pour envoyer votre requête de traitement par lot d'images, procédez comme suit :

  1. Créez un modèle de reconnaissance de produits à l'aide de la méthode projects.locations.processors.create.

    Cette requête inclut une référence aux ressources Catalog et ProductRecognitionIndex. Pour en savoir plus sur la création de ressources Catalog et ProductRecognitionIndex, consultez le guide du modèle de reconnaissance des produits.

    curl -X POST \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json" \
     https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/LOCATION_ID/processors?processor_id=product-recognition-model1 \
     -d '{
       "display_name": "DISPLAY_NAME",
       "model_type": PRODUCT_RECOGNIZER,
       "custom_processor_source_info": {
         "source_type": PRODUCT_RECOGNIZER,
         "product_recognizer_artifact": {
           "retail_product_recognition_index":"projects/PROJECT_ID/locations/LOCATION_ID/retailCatalogs/CATALOG_ID/retailProductRecognitionIndexes/INDEX_ID",
         }
       }
     }'
    
  2. Créez une application avec le modèle de reconnaissance de produits nouvellement créé. Cette requête utilise la méthode projects.locations.applications.create.

    Corps de la requête (app.json):

    {
      "applicationConfigs": {
        "nodes": [
          {
            "displayName": "Universal Input",
            "name": "universal-input-0",
            "processor": "builtin:universal-input"
          },
          {
            "displayName": "Product Recognition",
            "name": "product-recognition",
            "nodeConfig": {
              "product_recognizer_config": {
                "recognition_confidence_threshold": 0.75
              }
            },
            "parents": [
              {
                "parentNode": "universal-input-0"
              }
            ],
            "processor": "projects/PROJECT_ID/locations/LOCATION_ID/processors/product-recognition-model1"
          },
          {
            "displayName": "Storage output",
            "name": "gcs-output",
            "nodeConfig": {
              "gcs_output_config": {
                "gcs_path":"gs://product_recognizer_app_output"
              }
            },
            "parents": [
              {
                "parentNode": "product-recognition"
              }
            ],
            "processor": "builtin:gcs-output"
          }
        ]
      }
    }
    

    Requête :

    curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -d @app.json  \
      'https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/LOCATION_ID/applications?application_id=product-recognition-app'
    
  3. Créez des instances de votre application à l'aide de la méthode projects.locations.applications.createApplicationInstances.

    Corps de la requête (instances.json):

     {
       "applicationInstances": [
         {
           "instance": { 
             "instanceType": "BATCH_PREDICTION",
             "inputResources": [
               {
                 "consumerNode": "universal-input-0",
                 "dataType": "IMAGE",
                 "inputResource": "gs://product_recognition_input"
               }
             ]
           },
           "instanceId": "instance1"
         },
         {
           "instance": { 
             "instanceType":"BATCH_PREDICTION",
             "inputResources": [
               {
                 "consumerNode": "universal-input-0",
                 "dataType": "IMAGE",
                 "inputResource": "gs://product_recognition_input2"
               }
             ]
           },
           "instanceId": "instance2"
         }
       ]
     }
    

    Requête :

    curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -d @instances.json \
      'https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/LOCATION_ID/applications/product-recognition-app:createApplicationInstances'
    
  4. Déployez l'application.

     curl -X POST \
       -H "Authorization: Bearer $(gcloud auth print-access-token)" \
       -H "Content-Type: application/json" \
       -d '{}' \
       'https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/LOCATION_ID/applications/product-recognition-app:deploy'
    
  5. Obtenez des instances d'application. Ces informations vous indiquent quand le traitement par lot est terminé.

    En particulier, le champ state indique quand le traitement est terminé: "state": "FINISHED". Une fois l'instance terminée, vous ne pouvez plus la modifier.

    Vous pouvez utiliser la méthode projects.locations.applications.instances.list pour suivre les instances. De même, pour supprimer des instances de cette liste, utilisez la méthode projects.locations.applications.deleteApplicationInstances.

    Requête :

     curl -X GET \
       -H "Authorization: Bearer $(gcloud auth print-access-token)" \
       -H "Content-Type: application/json"  \
       'https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/LOCATION_ID/applications/product-recognition-app/instances'
    

    Exemple de réponse:

     {
       "instances": [
         {
           "name": "projects/PROJECT_ID/locations/LOCATION_ID/applications/product-recognition-app/instances/instance1",
           "createTime": "2023-03-30T18:30:51.991004265Z",
           "inputResources": [
             {
               "inputResource": "gs://product_recognition_input",
               "consumerNode": "universal-input-0",
               "dataType": "IMAGE"
             }
           ],
           "outputResources": [
             {
               "outputResource": "gs://product_recognition_output/instance1",
               "producerNode": "product-recognition",
               "autogen": true
             }
           ],
           "updateTime": "2023-04-18T04:58:18.592092259Z",
           "state": "FINISHED",
           "instanceType": "BATCH_PREDICTION"
         }
     }
    

Modèle de reconnaissance de tags

Utilisez ces exemples pour traiter des images par lot avec un modèle de reconnaissance de tags.

API REST et ligne de commande

Pour envoyer votre requête de traitement par lot d'images, procédez comme suit :

  1. Créez un modèle de reconnaissance de tags avec la méthode projects.locations.processors.create.

    Pour ce faire, vous devez spécifier le nom de la ressource du modèle d'origine hébergé sur la plate-forme Vertex AI (vertex_model).

    curl -X POST \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json" \
     https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/LOCATION_ID/processors?processor_id=tag-recognition-model1 \
     -d '{
       "display_name": "DISPLAY_NAME",
       "model_type": TAG_RECOGNIZER,
       "custom_processor_source_info": {
         "source_type": VERTEX_AUTOML,
         "vertex_model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID"
       }
     }'
    
  2. Créez une application avec le modèle de reconnaissance de tags nouvellement créé. Cette requête utilise la méthode projects.locations.applications.create.

    Corps de la requête (app.json):

     {
       "applicationConfigs": {
         "nodes": [
           {
             "displayName": "Universal Input",
             "name": "universal-input-0",
             "processor": "builtin:universal-input"
           },
           {
             "displayName": "Tag Recognition",
             "name": "tag-recognition",
             "nodeConfig": {
               "tag_recognizer_config": {
                 "tag_parsing_config": {
                   "entity_parsing_configs": [
                     {
                       "entity_class": "price",
                       "regex": "\\$\\d+\\.\\d{2}",
                       "entity_matching_strategy": "MAX_OVERLAP_AREA"
                     }
                   ]
                 },
                 "entity_detection_confidence_threshold": 0.0
               }
             },
             "parents": [
               {
                 "parentNode": "universal-input-0"
               }
             ],
             "processor": "projects/PROJECT_ID/locations/LOCATION_ID/processors/tag-recognition-model1"
           },
           {
             "displayName": "Storage output",
             "name": "gcs-output",
             "nodeConfig": {
               "gcs_output_config": {
                 "gcs_path": "gs://tag_recognizer_app_output"
               }
             },
             "parents": [
               {
                 "parentNode": "tag-recognition"
               }
             ],
             "processor": "builtin:gcs-output"
           }
         ]
       }
     }
    

    Requête :

    curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -d @app.json  \
      'https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/LOCATION_ID/applications?application_id=tag-recognition-app'
    
  3. Créez des instances de votre application à l'aide de la méthode projects.locations.applications.createApplicationInstances.

    Corps de la requête (instances.json):

     {
       "applicationInstances": [
         {
           "instance": { 
             "instanceType": "BATCH_PREDICTION",
             "inputResources": [
               {
                 "consumerNode": "universal-input-0",
                 "dataType": "IMAGE",
                 "inputResource": "gs://tag_recognition_input"
               }
             ]
           },
           "instanceId": "instance1"
         },
         {
           "instance": { 
             "instanceType":"BATCH_PREDICTION",
             "inputResources": [
               {
                 "consumerNode": "universal-input-0",
                 "dataType": "IMAGE",
                 "inputResource": "gs://tag_recognition_input2"
               }
             ]
           },
           "instanceId": "instance2"
         }
       ]
     }
    

    Requête :

    curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -d @instances.json \
      'https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/LOCATION_ID/applications/tag-recognition-app:createApplicationInstances'
    
  4. Déployez l'application.

     curl -X POST \
       -H "Authorization: Bearer $(gcloud auth print-access-token)" \
       -H "Content-Type: application/json" \
       -d '{}' \
       'https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/LOCATION_ID/applications/tag-recognition-app:deploy'
    
  5. Obtenez des instances d'application. Ces informations vous indiquent quand le traitement par lot est terminé.

    En particulier, le champ state indique quand le traitement est terminé: "state": "FINISHED". Une fois l'instance terminée, vous ne pouvez plus la modifier.

    Vous pouvez utiliser la méthode projects.locations.applications.instances.list pour suivre les instances. De même, pour supprimer des instances de cette liste, utilisez la méthode projects.locations.applications.deleteApplicationInstances.

    Requête :

     curl -X GET \
       -H "Authorization: Bearer $(gcloud auth print-access-token)" \
       -H "Content-Type: application/json"  \
       'https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/LOCATION_ID/applications/tag-recognition-app/instances'
    

    Exemple de réponse:

     {
       "instances": [
         {
           "name": "projects/PROJECT_ID/locations/LOCATION_ID/applications/tag-recognition-app/instances/instance1",
           "createTime": "2023-03-30T18:30:51.991004265Z",
           "inputResources": [
             {
               "inputResource": "gs://tag_recognition_input",
               "consumerNode": "universal-input-0",
               "dataType": "IMAGE"
             }
           ],
           "outputResources": [
             {
               "outputResource": "gs://tag_recognition_output/instance1",
               "producerNode": "tag-recognition",
               "autogen": true
             }
           ],
           "updateTime": "2023-04-18T04:58:18.592092259Z",
           "state": "FINISHED",
           "instanceType": "BATCH_PREDICTION"
         }
     }