Personalización controlada

La personalización controlada te permite crear imágenes nuevas a partir de una imagen de origen o de una señal de imagen de origen (contorno de Canny o garabato). En esta página se explica cómo enviar dos tipos de solicitudes de personalización controlada:

  1. Personalización controlada de Imagen 3 (función de GA)

    Ver la tarjeta del modelo Imagen for Editing and Customization

  2. Imagen 2: personalización controlada: señal de imagen de origen de contorno nítido o garabato (función de vista previa)

Casos prácticos

Imagen 3 Controlled Customization ofrece peticiones de estilo libre, lo que puede darte la impresión de que el modelo puede hacer más de lo que está entrenado para hacer. En las siguientes secciones se describen casos prácticos y ejemplos de Imagen 3 Controlled Customization.

El modelo se ha entrenado con los casos prácticos que proporcionamos, por lo que esperamos que obtengas buenos resultados al usar la personalización controlada de Imagen 3. Si le pides al modelo que responda de formas inesperadas, no obtendrás buenos resultados.

Ejemplos de casos prácticos previstos

Estos son algunos casos prácticos para los que se ha entrenado la personalización controlada de Imagen 3 y para los que ofrece buenos resultados:

  • Genera una imagen que siga la petición y las imágenes de control de contorno.

  • Genera una imagen que siga la petición y las imágenes de garabatos.

  • Estiliza una foto de una persona sin cambiar su expresión facial.

Ejemplos de casos prácticos no previstos

A continuación, se indican los casos prácticos para los que no se ha entrenado la personalización controlada de Imagen 3 y para los que produce resultados de baja calidad:

  • Genera una imagen con el estilo especificado en la petición.

  • Genera una imagen a partir de texto que siga un estilo específico proporcionado por una imagen de referencia, con cierto nivel de control sobre la composición de la imagen mediante una imagen de control.

  • Genera una imagen a partir de texto que siga un estilo específico proporcionado por una imagen de referencia, con cierto nivel de control sobre la composición de la imagen mediante un garabato de control.

  • Generar una imagen a partir de texto que siga un estilo específico proporcionado por la imagen de referencia, con cierto nivel de control sobre la composición de la imagen mediante una imagen de control. La persona de la imagen tiene una expresión facial concreta.

  • Estiliza una foto de dos o más personas y conserva sus expresiones faciales.

  • Estiliza una foto de una mascota y conviértela en un dibujo. Conservar o especificar la composición de la imagen (por ejemplo, acuarela).

Antes de empezar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Vertex AI API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Vertex AI API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  8. Configura la autenticación de tu entorno.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    REST

    Para usar las muestras de la API REST de esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la CLI de gcloud.

      Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    Para obtener más información, consulta el artículo Autenticarse para usar REST de la documentación sobre autenticación de Google Cloud .

    Redacción de peticiones de personalización

    La petición que uses con la personalización de Imagen 3 puede afectar a la calidad de las imágenes generadas. Usa las siguientes plantillas de peticiones como punto de partida para escribir peticiones de personalización. Es posible que tengas que enviar varias solicitudes para obtener el resultado que buscas.

    Caso práctico Imágenes de referencia Plantilla de petición Ejemplo
    Personalización controlada Mapa de garabatos (1) Genera una imagen que se ajuste al scribble map [1] para que coincida con la descripción: ${STYLE_PROMPT} ${PROMPT}. Genera una imagen que se ajuste a las scribble map [1] para que coincida con la descripción: La imagen debe tener el estilo de una pintura al óleo impresionista con pinceladas relajadas. Tiene un ambiente iluminado de forma natural y pinceladas visibles. Vista lateral de un coche. El coche está aparcado en una carretera mojada y reflectante, con las luces de la ciudad reflejándose en los charcos.
    Personalización controlada Imagen de control inteligente (1) Genera una imagen que se ajuste al edge map [1] para que coincida con la descripción: ${STYLE_PROMPT} ${PROMPT} Genera una imagen que se ajuste a la edge map [1] para que coincida con la descripción: la imagen debe tener el estilo de una pintura al óleo impresionista, con pinceladas relajadas. Tiene un ambiente iluminado de forma natural y pinceladas visibles. Vista lateral de un coche. El coche está aparcado en una carretera mojada y reflectante, con las luces de la ciudad reflejándose en los charcos.
    Estilización de la imagen de una persona con la entrada FaceMesh Imagen del sujeto (1-3)

    Imagen de control de FaceMesh (1)
    Crea una imagen sobre SUBJECT_DESCRIPTION [1] en la postura de CONTROL_IMAGE [2] para que coincida con la descripción: un retrato de SUBJECT_DESCRIPTION [1] ${PROMPT} Crea una imagen de a woman with short hair [1] en la postura de control image [2] para que coincida con la descripción: un retrato de a woman with short hair [1] con un estilo de dibujos animados en 3D y un fondo desenfocado. Un personaje bonito y adorable, con una cara sonriente, mirando a la cámara, tonos pastel, alta calidad, 4K, obra maestra, superdetalles, textura de la piel, mapeado de texturas, sombras suaves, iluminación suave y realista, colores vivos
    Estilización de la imagen de una persona con la entrada FaceMesh Imagen del sujeto (1-3)

    Imagen de control de FaceMesh (1)
    Crea una imagen ${STYLE_PROMPT} sobre SUBJECT_DESCRIPTION [1] en la postura de CONTROL_IMAGE [2] para que coincida con la descripción: un retrato de SUBJECT_DESCRIPTION [1] ${PROMPT} Crea una imagen de estilo de dibujo animado en 3D sobre a woman with short hair [1] en la postura de control image [2] para que coincida con la descripción: un retrato de a woman with short hair [1] en estilo de dibujo animado en 3D con un fondo desenfocado. Un personaje bonito y adorable con una cara sonriente, mirando a la cámara, tonos pastel, alta calidad, 4K, obra maestra, superdetalles, textura de la piel, mapeado de texturas, sombras suaves, iluminación suave y realista, colores vivos

    Enviar una solicitud de personalización controlada de Imagen 3

    Usa los siguientes ejemplos para enviar una solicitud de personalización controlada de Imagen 3:

    REST

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: tu Google Cloud ID de proyecto.
    • LOCATION: la región de tu proyecto. Por ejemplo, us-central1, europe-west2 o asia-northeast3. Para ver una lista de las regiones disponibles, consulta Ubicaciones de la IA generativa en Vertex AI.
    • TEXT_PROMPT: La petición de texto indica qué imágenes genera el modelo. Para usar la personalización controlada de Imagen 3, incluye el referenceId de la imagen de referencia del control que proporciones en el formato [$referenceId]. Por ejemplo:
      • Genera una imagen que se ajuste al mapa de garabatos [1] para que coincida con la descripción: [image description].
    • BASE64_CONTROL_IMAGE: la imagen de control base (boceto). La imagen debe especificarse como una cadena de bytes codificada en Base64.
      En CONTROL_TYPE_SCRIBBLE: la imagen de control de garabato esperada tiene un fondo negro y una línea de garabato blanca. Imagen de muestra del control de garabatos
      Para CONTROL_TYPE_CANNY: la imagen de control de contorno nítido esperada tiene un fondo negro y contornos nítidos blancos. Imagen de ejemplo de control de contornos de Canny
    • CONTROL_TYPE: el tipo de señal de control. Usa CONTROL_TYPE_CANNY para bordes definidos. Usa CONTROL_TYPE_SCRIBBLE para escribir a mano.
    • enableControlImageComputation: asigna el valor false si proporcionas tu propia imagen de control. En este caso, B64_BASE_IMAGE debe ser la imagen de la señal de control. Selecciona true si quieres que Imagen calcule la imagen de control a partir de la imagen de referencia. En este caso, B64_BASE_IMAGE debe ser la imagen RGB sin procesar.
    • IMAGE_COUNT: número de imágenes generadas. Valores enteros aceptados: del 1 al 4. Valor predeterminado: 4.

    Método HTTP y URL:

    POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/imagen-3.0-capability-001:predict

    Cuerpo JSON de la solicitud:

    {
      "instances": [
        {
          "prompt": "TEXT_PROMPT",
          "referenceImages": [
            {
              "referenceType": "REFERENCE_TYPE_CONTROL",
              "referenceId": 1,
              "referenceImage": {
                "bytesBase64Encoded": "BASE64_CONTROL_IMAGE"
              },
              "controlImageConfig": {
                "controlType": "CONTROL_TYPE",
                "enableControlImageComputation": false
              }
            }
          ]
        }
      ],
      "parameters": {
        "sampleCount": IMAGE_COUNT
      }
    }
    

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/imagen-3.0-capability-001:predict"

    PowerShell

    Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/imagen-3.0-capability-001:predict" | Select-Object -Expand Content
    La siguiente respuesta de ejemplo corresponde a una solicitud con "sampleCount": 2. La respuesta devuelve dos objetos de predicción con los bytes de la imagen generada codificados en Base64.
    {
      "predictions": [
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        },
        {
          "mimeType": "image/png",
          "bytesBase64Encoded": "BASE64_IMG_BYTES"
        }
      ]
    }
    

    Python

    Garabatear

    from google import genai
    from google.genai.types import (
        ControlReferenceConfig,
        ControlReferenceImage,
        EditImageConfig,
        Image,
    )
    
    client = genai.Client()
    
    # TODO(developer): Update and un-comment below line
    # output_gcs_uri = "gs://your-bucket/your-prefix"
    
    # Create a reference image out of an existing scribble image signal
    # using https://storage.googleapis.com/cloud-samples-data/generative-ai/image/car_scribble.png
    control_reference_image = ControlReferenceImage(
        reference_id=1,
        reference_image=Image(gcs_uri="gs://cloud-samples-data/generative-ai/image/car_scribble.png"),
        config=ControlReferenceConfig(control_type="CONTROL_TYPE_SCRIBBLE"),
    )
    
    image = client.models.edit_image(
        model="imagen-3.0-capability-001",
        prompt="an oil painting showing the side of a red car[1]",
        reference_images=[control_reference_image],
        config=EditImageConfig(
            edit_mode="EDIT_MODE_CONTROLLED_EDITING",
            number_of_images=1,
            safety_filter_level="BLOCK_MEDIUM_AND_ABOVE",
            person_generation="ALLOW_ADULT",
            output_gcs_uri=output_gcs_uri,
        ),
    )
    
    # Example response:
    # gs://your-bucket/your-prefix
    print(image.generated_images[0].image.gcs_uri)

    Borde de Canny

    from google import genai
    from google.genai.types import (
        ControlReferenceConfig,
        ControlReferenceImage,
        EditImageConfig,
        Image,
    )
    
    client = genai.Client()
    
    # TODO(developer): Update and un-comment below line
    # output_gcs_uri = "gs://your-bucket/your-prefix"
    
    # Create a reference image out of an existing canny edge image signal
    # using https://storage.googleapis.com/cloud-samples-data/generative-ai/image/car_canny.png
    control_reference_image = ControlReferenceImage(
        reference_id=1,
        reference_image=Image(gcs_uri="gs://cloud-samples-data/generative-ai/image/car_canny.png"),
        config=ControlReferenceConfig(control_type="CONTROL_TYPE_CANNY"),
    )
    
    image = client.models.edit_image(
        model="imagen-3.0-capability-001",
        prompt="a watercolor painting of a red car[1] driving on a road",
        reference_images=[control_reference_image],
        config=EditImageConfig(
            edit_mode="EDIT_MODE_CONTROLLED_EDITING",
            number_of_images=1,
            safety_filter_level="BLOCK_MEDIUM_AND_ABOVE",
            person_generation="ALLOW_ADULT",
            output_gcs_uri=output_gcs_uri,
        ),
    )
    
    # Example response:
    # gs://your-bucket/your-prefix
    print(image.generated_images[0].image.gcs_uri)

    Enviar una solicitud de personalización controlada de Imagen 2

    Imagen de entrada Otros parámetros Imagen de salida
    entrada de ajedrez
    Imagen de entrada. Fuente de la imagen: Alec Cutter en Unsplash.

    Petición: "versión de arte digital"

    Petición negativa: "blanco y negro"

    Tipo de imagen guía: RGB estándar

    Condición de control: detección de contornos con Canny

    Escala de control de Imagen: 0,95

    resultados estilizados
    entrada de ajedrez
    Imagen de entrada. Fuente de la imagen: Alec Cutter en Unsplash
    (se ha aplicado la detección de contornos).

    Petición: "versión de arte digital"

    Petición negativa: "blanco y negro"

    Tipo de imagen guía: borde de Canny

    Escala de control de Imagen: 0,95

    resultados estilizados

    Usa los siguientes ejemplos para enviar una solicitud de personalización controlada de Imagen 2:

    Consola

    1. En la Google Cloud consola, ve a la página Vertex AI > Media Studio .

      Ir a Media Studio

    2. En el panel de tareas inferior, haz clic en Editar imagen.

    3. Haz clic en Subir para seleccionar la imagen almacenada localmente que quieras editar.

    4. En la sección Modo del panel Parámetros, haga clic en Control.

    5. Opcional. Modifica el Número de resultados, proporciona una Petición negativa o modifica las Opciones avanzadas > Región.

    6. En la sección Opciones avanzadas, selecciona el tipo de imagen guía: RGB estándar, Contorno de Canny o Garabato.

    7. En la sección Opciones avanzadas, selecciona la Condición de control: Contorno inteligente o Garabato.

    8. En el campo de petición (Escribe tu petición...), escribe una petición de texto.

    9. Haz clic en Generar.

    REST

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: tu Google Cloud ID de proyecto.
    • TEXT_PROMPT: la petición de texto que indica qué imágenes debe generar el modelo. Este campo es obligatorio tanto para generar como para editar.
    • B64_BASE_IMAGE: la imagen base que quieres editar o aumentar de resolución. La imagen debe especificarse como una cadena de bytes codificada en Base64. Tamaño máximo: 10 MB.
    • EDIT_IMAGE_COUNT: número de imágenes editadas. Valor predeterminado: 4.
    • NEGATIVE_PROMPT: una petición negativa para ayudar a generar las imágenes. Por ejemplo: "animales" (quita los animales), "borroso" (hace que la imagen sea más nítida), "texto" (quita el texto) o "recortado" (quita las imágenes recortadas).
    • CONDITION: string. El tipo de señal de imagen de control proporcionada. Valores: cannyEdges o scribble.
    • CONTROL_SCALE: float. La intensidad de la señal de la imagen de control. Valores: 0.0 - 1.0. Valor predeterminado: 0.95. Intervalo recomendado: 0.9 - 1.0.
    • SAMPLING_STEPS: integer. Número de pasos de muestreo. Valores: 1 - 30. Valor predeterminado: 16.
    • COMPUTE_CONDITION_MAP: boolean. Indica si se debe calcular un mapa de condiciones a partir de la imagen de entrada base. Si se define como false, el servicio espera que la imagen de entrada sea un garabato o bordes de Canny, y la imagen se proporciona directamente al modelo. Si se define como true, el servicio espera que la imagen de entrada sea una imagen RGB y el servicio calcula los bordes de Canny o la información de garabatos de la imagen de entrada en función de conditionName. A continuación, el servicio proporciona el mapa de condiciones procesado al modelo para editar la imagen. Cuando proporciones imágenes de garabatos, deben tener un fondo negro y líneas blancas que representen el objeto que se va a generar. Valor predeterminado: false.

    Método HTTP y URL:

    POST https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/imagen-2.0-edit-preview-0627:predict

    Cuerpo JSON de la solicitud:

    {
      "instances": [
        {
          "prompt": "TEXT_PROMPT",
          "image": {
            "bytesBase64Encoded": "B64_BASE_IMAGE"
          }
        }
      ],
      "parameters": {
        "sampleCount": EDIT_IMAGE_COUNT,
        "negativePrompt": "NEGATIVE_PROMPT",
        "controlPluginConfig":  {
          "conditions": [
            {
              "conditionName": "CONDITION",
              "controlScale": CONTROL_SCALE,
              "samplingSteps": SAMPLING_STEPS,
              "computeConditionMap": COMPUTE_CONDITION_MAP
            }
          ]
        }
      }
    }
    

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/imagen-2.0-edit-preview-0627:predict"

    PowerShell

    Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/imagen-2.0-edit-preview-0627:predict" | Select-Object -Expand Content
    La siguiente respuesta de ejemplo corresponde a una solicitud con "sampleCount": 2. La respuesta devuelve dos objetos de predicción con los bytes de la imagen generada codificados en Base64.
    {
      "predictions": [
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        },
        {
          "mimeType": "image/png",
          "bytesBase64Encoded": "BASE64_IMG_BYTES"
        }
      ]
    }
    

    Uso del producto

    Para ver los estándares de uso y las restricciones de contenido asociados a Imagen en Vertex AI, consulta las directrices de uso.

    Versiones del modelo

    Puedes usar varios modelos de generación de imágenes. Para obtener más información, consulta Modelos de imagen.

    Siguientes pasos

    Consulta artículos sobre Imagen y otros productos de IA generativa en Vertex AI: