Personalización controlada

La personalización controlada te permite crear imágenes nuevas a partir de una imagen fuente o un indicador de imagen fuente (borde nítido o garabato). En esta página, se muestra cómo enviar dos tipos de solicitudes de personalización controlada:

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

    Consulta la tarjeta del modelo de Imagen for Editing and Customization

  2. Personalización controlada de Imagen 2: Indicador de imagen fuente de borde nítido o garabato (función de vista previa)

Casos de uso

La personalización controlada de Imagen 3 ofrece instrucciones de formato 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 de uso y ejemplos de la personalización controlada de Imagen 3.

El modelo se entrenó en los casos de uso que proporcionamos, y esperamos buenos resultados cuando uses la personalización controlada de Imagen 3. Si presionas al modelo para que responda de formas inesperadas, no obtendrás buenos resultados.

Ejemplos de casos de uso previstos

A continuación, se incluyen casos de uso para los que se entrenó la personalización controlada de Imagen 3 y para los que produce buenos resultados:

  • Genera una imagen que siga la instrucción y las imágenes de control de bordes de Canny.

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

  • Estiliza una foto de una persona y conserva su expresión facial.

Ejemplos de casos de uso no previstos

A continuación, se incluyen casos de uso para los que no se entrenó la personalización controlada de Imagen 3 y para los que produce resultados deficientes:

  • Genera una imagen con un estilo especificado en la instrucción.

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

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

  • Genera una imagen a partir de texto que sigue un estilo específico proporcionado por la imagen de referencia, con cierto nivel de control sobre la composición de la imagen a través de una imagen de control. La persona de la imagen tiene una expresión facial específica.

  • 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. Conserva o especifica la composición de la imagen (por ejemplo, acuarela).

Antes de comenzar

  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 para 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 de REST en esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a gcloud CLI.

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

      gcloud init

      Si usas un proveedor de identidad externo (IdP), primero debes acceder a gcloud CLI con tu identidad federada.

    Para obtener más información, consulta Autentícate para usar REST en la documentación de autenticación de Google Cloud .

    Cómo escribir instrucciones de personalización

    La instrucción que uses con la personalización de Imagen 3 podría afectar la calidad de las imágenes generadas. Usa las siguientes plantillas de instrucciones como punto de partida para escribir instrucciones de personalización. Es posible que debas enviar varias solicitudes para obtener el resultado deseado.

    Caso de uso Imágenes de referencia Plantilla de instrucciones Ejemplo
    Personalización controlada Mapa de boceto (1) Genera una imagen que se alinee con scribble map [1] para que coincida con la descripción: ${STYLE_PROMPT} ${PROMPT}. Genera una imagen que se alinee con 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. Posee un ambiente iluminado de forma natural y pinceladas notables. Vista lateral de un auto. El automóvil está estacionado sobre una superficie de la ruta mojada y reflectante, con las luces de la ciudad reflejándose en los charcos.
    Personalización controlada Imagen de control de Canny (1) Genera una imagen que se alinee con edge map [1] para que coincida con la descripción: ${STYLE_PROMPT} ${PROMPT} Genera una imagen que se alinee con 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. Posee un ambiente iluminado de forma natural y pinceladas notables. Vista lateral de un automóvil. El automóvil está estacionado sobre una superficie de la ruta mojada y reflectante, con las luces de la ciudad reflejándose en los charcos.
    Estilización de imágenes de personas con entrada de FaceMesh Imagen del sujeto (1 a 3)

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

    Imagen de control de FaceMesh (1)
    Crea una imagen de ${STYLE_PROMPT} sobre SUBJECT_DESCRIPTION [1] en la pose 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 pose 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 lindo y encantador con una cara sonriente, mirando a la cámara, tono de color pastel, alta calidad, 4k, obra maestra, súper detalles, textura de la piel, mapeo de textura, sombras suaves, iluminación realista suave, colores vibrantes

    Envía 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 cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: El Google Cloud ID del proyecto.
    • LOCATION: La región del proyecto. Por ejemplo, us-central1, europe-west2 o asia-northeast3. Para obtener una lista de las regiones disponibles, consulta IA generativa en ubicaciones de Vertex AI.
    • TEXT_PROMPT: El mensaje de texto guía qué imágenes genera el modelo. Para usar la personalización controlada de Imagen 3, incluye el referenceId de la imagen de referencia de control que proporcionas en el formato [$referenceId]. Por ejemplo:
      • Genera una imagen que se alinee con el mapa de boceto [1] para que coincida con la descripción: [image description].
    • BASE64_CONTROL_IMAGE: Es la imagen de control base (boceto). La imagen debe especificarse como una cadena de bytes codificada en base64.
      Para 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 bordes nítidos esperada tiene un fondo negro y bordes nítidos blancos. Imagen de control de bordes nítidos de muestra
    • CONTROL_TYPE: Es el tipo de señal de control. Usa CONTROL_TYPE_CANNY para el borde de Canny. Usa CONTROL_TYPE_SCRIBBLE para escribir a mano.
    • enableControlImageComputation: Se establece en false si proporcionas tu propia imagen de control. En este caso, B64_BASE_IMAGE debe ser la imagen de la señal de control. Se establece en true si deseas 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: La cantidad de imágenes generadas. Valores de números enteros aceptados: de 1 a 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 muestra es para una solicitud con "sampleCount": 2. La respuesta muestra dos objetos de predicción, con los bytes de imagen generados 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)

    Bordes definidos

    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)

    Envía 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.

    Instrucción: “versión de arte digital”

    Instrucción negativa: “en blanco y negro”

    Tipo de imagen de la guía: RGB estándar

    Condición de control: Bordes definidos

    Escala de control de imagen: 0.95

    salida estilizada
    entrada de ajedrez
    Imagen de entrada. Fuente de la imagen: Alec Cutter en Unsplash
    (se aplicó la detección de bordes nítidos).

    Instrucción: “versión de arte digital”

    Instrucción negativa: “en blanco y negro”

    Tipo de imagen de guía: Bordes nítidos

    Escala de control de imagen: 0.95

    salida estilizada

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

    Console

    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 elegir la imagen almacenada de forma local y, luego, editarla.

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

    5. Opcional. Modifica la Cantidad de resultados, proporciona una Instrucción negativa o modifica Opciones avanzadas > Región.

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

    7. En la sección Opciones avanzadas, selecciona la Condición de control: Canny edge o Scribble.

    8. En el campo de instrucción (Escribe tu instrucción…), proporciona una instrucción de texto.

    9. Haz clic en Generar .

    REST

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_ID: El Google Cloud ID del proyecto.
    • TEXT_PROMPT: Es la instrucción de texto que guía qué imágenes genera el modelo. Este campo es obligatorio para la generación y la edición.
    • B64_BASE_IMAGE: La imagen base que se editará o mejorará. La imagen debe especificarse como una cadena de bytes codificada en base64. Límite de tamaño: 10 MB.
    • EDIT_IMAGE_COUNT: la cantidad de imágenes editadas. El valor predeterminado es 4.
    • NEGATIVE_PROMPT: una instrucción negativa para ayudar a generar las imágenes. Por ejemplo: “animales” (quita los animales), “difuminar” (hace que la imagen sea más clara), “texto” (quita el texto) o “recortada” (quita las imágenes recortadas).
    • CONDITION: string. Es el tipo de indicador de imagen de control proporcionado. 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. Rango recomendado: 0.9 - 1.0.
    • SAMPLING_STEPS: integer. Es la cantidad de pasos de muestreo. Valores: 1 - 30. Valor predeterminado: 16.
    • COMPUTE_CONDITION_MAP: boolean. Si se debe calcular un mapa de condiciones a partir de tu imagen de entrada base. Cuando se establece en false, el servicio espera que la imagen de entrada sea un garabato o bordes nítidos, y la imagen se proporciona directamente al modelo. Cuando se establece en true, el servicio espera que la imagen de entrada sea una imagen RGB y calcula los bordes nítidos o la información de garabato de la imagen de entrada según conditionName. Luego, el servicio proporciona el mapa de condiciones procesado al modelo para la edición de imágenes. Cuando proporciones imágenes de garabatos, estas deben tener un fondo negro y líneas blancas que representen el objeto que se 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 muestra es para una solicitud con "sampleCount": 2. La respuesta muestra dos objetos de predicción, con los bytes de imagen generados codificados en base64.
    {
      "predictions": [
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        },
        {
          "mimeType": "image/png",
          "bytesBase64Encoded": "BASE64_IMG_BYTES"
        }
      ]
    }
    

    Uso de productos

    Para ver los estándares de uso y las restricciones de contenido asociadas con Imagen en Vertex AI, consulta los lineamientos de uso.

    Versiones del modelo

    Existen varios modelos de generación de imágenes que puedes usar. Para obtener más información, consulta Modelos de Imagen.

    ¿Qué sigue?

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