Procesamiento por lotes de imágenes

Además del procesamiento en streaming, puedes elegir el procesamiento por lotes para obtener información a partir de los datos. Este modo de procesamiento sin streaming te permite crear aplicaciones para admitir otros tipos de contenido multimedia.

Puedes procesar por lotes archivos de imagen almacenados en Cloud Storage con modelos concretos. La salida se almacena en Cloud Storage.

Modelos admitidos

Los siguientes modelos admiten el procesamiento por lotes:

  • Reconocedor de etiquetas
  • Reconocedor de productos

Tipos de datos admitidos

En esta página se describe cómo procesar por lotes los siguientes tipos de datos:

  • Datos de imagen

Antes de empezar

Recorrido del usuario

Para procesar datos de imagen por lotes, sigue estos pasos generales:

  1. Habilita la API Vision de Vertex AI.

  2. Crea un procesador compatible (reconocedor de productos o de etiquetas).

  3. Crea una aplicación.

    1. Entrada: añade un nodo de entrada universal que especifique los archivos que se van a procesar en Cloud Storage.

    2. Procesando: añade el nodo del modelo.

    3. Salida: añade el nodo de almacenamiento de salida que especifica dónde se almacenan los datos procesados en Cloud Storage.

  4. Crea instancias por lotes de tu aplicación. Cada instancia corresponde a una ubicación de entrada de un segmento de Cloud Storage.

  5. Implementa la aplicación y las instancias de la aplicación.

  6. Una vez que finalice la instancia de procesamiento por lotes, examina la salida almacenada en Cloud Storage.

Procesar imágenes por lotes

Los pasos para enviar una solicitud de procesamiento por lotes varían de un modelo a otro. Sigue las instrucciones de tu modelo de destino para procesar imágenes por lotes.

Modelo de reconocedor de productos

Usa estas muestras para procesar por lotes imágenes con un modelo de reconocedor de productos.

Consola

Crea una solicitud de procesamiento por lotes de imágenes en la Google Cloud consola.

Crear una aplicación

  1. Abre la pestaña Aplicaciones del panel de control de Vertex AI Vision.

    Ve a la pestaña Aplicaciones.

  2. Haz clic en el botón Crear.

  3. Escribe el nombre de una aplicación y elige tu región.

  4. Haz clic en Continuar.

  5. Elige tu método de facturación. Para obtener más información sobre la facturación mensual y la modalidad de pago por uso, consulta la página de precios.

  6. Haz clic en Crear.

Especificar las entradas del procesamiento por lotes

  1. En la página del creador de aplicaciones de gráficos, haz clic en el nodo Entrada universal.

  2. En el panel lateral Entrada universal, haz clic en Seleccionar fuentes de entrada.

  3. En la página Seleccionar fuentes de entrada, elija Predicción por lotes.

  4. Haz clic en Continuar.

  5. En el panel Fuentes, haga clic en Explorar en el campo del selector de ubicación para indicar dónde se encuentran sus archivos en Cloud Storage.

  6. Opcional. Para especificar más fuentes, haz clic en Añadir un elemento y repite el paso anterior.

  7. Haz clic en Enviar.

Añadir el modelo

  1. En la página de creación de aplicaciones de gráficos, haga clic en el nodo del modelo Reconocedor de productos de la sección Modelos especializados.

  2. En el panel Reconocedor de productos, haga clic en Seleccionar modelo.

  3. Selecciona Seleccionar modelo de reconocedor de productos.

    Si necesitas crear un modelo o un índice, selecciona la opción correspondiente para crear los recursos.

  4. Elige el modelo de la lista.

  5. Haz clic en Seleccionar.

  6. Opcional. Modifica el umbral de confianza.

  7. Haz clic en Aplicar configuración.

Añadir un destino de salida

  1. En la página del creador de aplicaciones de gráficos, haz clic en el nodo del modelo Cloud Storage (Almacenamiento en Cloud) de la sección Output (Salida).

  2. En el panel Cloud Storage (Cloud Storage), haz clic en Browse (Examinar) para seleccionar el destino de salida de la predicción por lotes en Cloud Storage.

Desplegar la aplicación

  1. En la página del creador de aplicaciones de gráficos, haz clic en Implementar.

REST Y LÍNEA DE COMANDOS

Sigue estos pasos para enviar tu solicitud de procesamiento por lotes de imágenes.

  1. Crea un modelo de reconocimiento de productos con el método projects.locations.processors.create.

    Esta solicitud incluye referencias a los recursos Catalog y ProductRecognitionIndex. Para obtener información sobre cómo crear recursos de Catalog y ProductRecognitionIndex, consulte la guía del modelo de reconocedor de productos.

    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. Crea una aplicación con el modelo de reconocedor de productos que acabas de crear. Esta solicitud usa el método projects.locations.applications.create.

    Cuerpo de la solicitud (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"
          }
        ]
      }
    }
    

    Solicitud:

    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. Crea instancias de tu aplicación con el método projects.locations.applications.createApplicationInstances.

    Cuerpo de la solicitud (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"
         }
       ]
     }
    

    Solicitud:

    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. Despliega la aplicación.

     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. Obtener instancias de la aplicación. Esta información indica cuándo se completa el procesamiento por lotes.

    En concreto, el campo state muestra cuándo se ha completado el procesamiento: "state": "FINISHED". Una vez que se haya completado la instancia, no podrás modificarla.

    Puedes usar el método projects.locations.applications.instances.list para hacer un seguimiento de las instancias. Del mismo modo, para quitar instancias de esta lista, usa el método projects.locations.applications.deleteApplicationInstances.

    Solicitud:

     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'
    

    Respuesta de ejemplo:

     {
       "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"
         }
     }
    

Modelo de reconocedor de etiquetas

Usa estas muestras para procesar por lotes imágenes con un modelo de reconocedor de etiquetas.

REST Y LÍNEA DE COMANDOS

Sigue estos pasos para enviar tu solicitud de procesamiento por lotes de imágenes.

  1. Crea un modelo de reconocedor de etiquetas con el método projects.locations.processors.create.

    Para ello, debes especificar el nombre del recurso del modelo original alojado en la plataforma 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. Crea una aplicación con el modelo de reconocimiento de etiquetas que acabas de crear. Esta solicitud usa el método projects.locations.applications.create.

    Cuerpo de la solicitud (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"
           }
         ]
       }
     }
    

    Solicitud:

    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. Crea instancias de tu aplicación con el método projects.locations.applications.createApplicationInstances.

    Cuerpo de la solicitud (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"
         }
       ]
     }
    

    Solicitud:

    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. Despliega la aplicación.

     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. Obtener instancias de la aplicación. Esta información indica cuándo se completa el procesamiento por lotes.

    En concreto, el campo state muestra cuándo se ha completado el procesamiento: "state": "FINISHED". Una vez que se haya completado la instancia, no podrás modificarla.

    Puedes usar el método projects.locations.applications.instances.list para hacer un seguimiento de las instancias. Del mismo modo, para quitar instancias de esta lista, usa el método projects.locations.applications.deleteApplicationInstances.

    Solicitud:

     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'
    

    Respuesta de ejemplo:

     {
       "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"
         }
     }