Los LLMs no solo sirven para generar texto. También es posible generar imágenes a partir de descripciones de texto. Tener imágenes como modalidad puede ser muy útil en diversas áreas como MedTech, arquitectura, turismo, desarrollo de videojuegos y más. En este capítulo, exploraremos los dos modelos de generación de imágenes más populares: DALL-E y Midjourney.
En esta lección, cubriremos:
- La generación de imágenes y por qué es útil.
- DALL-E y Midjourney, qué son y cómo funcionan.
- Cómo construir una aplicación de generación de imágenes.
Después de completar esta lección, serás capaz de:
- Construir una aplicación de generación de imágenes.
- Definir límites para tu aplicación con meta prompts.
- Trabajar con DALL-E y Midjourney.
Las aplicaciones de generación de imágenes son una excelente manera de explorar las capacidades de la IA Generativa. Pueden ser utilizadas, por ejemplo, para:
-
Edición y síntesis de imágenes. Puedes generar imágenes para una variedad de casos de uso, como edición y síntesis de imágenes.
-
Aplicación en diversas industrias. También pueden ser utilizadas para generar imágenes en diversas industrias como MedTech, Turismo, Desarrollo de videojuegos y más.
Como parte de esta lección, continuaremos trabajando con nuestra startup, Edu4All. Los estudiantes crearán imágenes para sus evaluaciones; qué imágenes crear dependerá de ellos, pero podrían ser ilustraciones para su propio cuento de hadas, crear un nuevo personaje para su historia o ayudarles a visualizar sus ideas y conceptos.
Esto es un ejemplo de lo que los estudiantes de Edu4All podrían generar si están trabajando en clase sobre monumentos:
usando un prompt como:
"Perro junto a la Torre Eiffel en la luz del sol de la mañana"
DALL-E y Midjourney son dos de los modelos de generación de imágenes más populares, que permiten usar prompts para generar imágenes.
Comencemos con DALL-E, que es un modelo de IA Generativa que genera imágenes a partir de descripciones de texto.
DALL-E es una combinación de dos modelos, CLIP y atención difusa.
-
CLIP, es un modelo que genera embeddings, que son representaciones numéricas de datos, a partir de imágenes y texto.
-
Atención difusa, es un modelo que genera imágenes a partir de embeddings. DALL-E está entrenado con un conjunto de datos de imágenes y texto y puede ser utilizado para generar imágenes a partir de descripciones de texto. Por ejemplo, DALL-E puede ser utilizado para generar imágenes de un gato con sombrero o un perro con un mohawk.
Midjourney funciona de manera similar a DALL-E, generando imágenes a partir de prompts de texto. Midjourney también puede ser utilizado para generar imágenes con prompts como "un gato con sombrero" o "un perro con un mohawk".
Crédito de la imagen: Wikipedia, imagen generada por Midjourney
Primero, DALL-E. DALL-E es un modelo de IA Generativa basado en la arquitectura transformer con un transformer autoregresivo.
Un transformer autoregresivo define cómo un modelo genera imágenes a partir de descripciones de texto, generando un píxel a la vez y luego utilizando los píxeles generados para generar el siguiente píxel. Pasando por múltiples capas en una red neuronal, hasta que la imagen esté completa.
Con este proceso, DALL-E controla atributos, objetos, características y más en la imagen que genera. Sin embargo, DALL-E 2 y 3 tienen más control sobre la imagen generada.
Entonces, ¿qué se necesita para construir una aplicación de generación de imágenes? Necesitas las siguientes bibliotecas:
- python-dotenv, se recomienda encarecidamente usar esta biblioteca para mantener tus secretos en un archivo .env separado del código.
- openai, esta biblioteca es la que usarás para interactuar con la API de OpenAI.
- pillow, para trabajar con imágenes en Python.
- requests, para ayudarte a realizar solicitudes HTTP.
Si aún no lo has hecho, sigue las instrucciones en la página de Microsoft Learn para crear un recurso y modelo de Azure OpenAI. Selecciona DALL-E 3 como modelo.
-
Crea un archivo .env con el siguiente contenido:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key> AZURE_OPENAI_DEPLOYMENT="dall-e-3"Localiza esta información en el Portal de Azure OpenAI Foundry para tu recurso en la sección "Deployments".
-
Reúne las bibliotecas anteriores en un archivo llamado requirements.txt de la siguiente manera:
python-dotenv openai pillow requests -
Luego, crea un entorno virtual e instala las bibliotecas:
python3 -m venv venv source venv/bin/activate pip install -r requirements.txtPara Windows, utiliza los siguientes comandos para crear y activar tu entorno virtual:
python3 -m venv venv venv\Scripts\activate.bat
-
Agrega el siguiente código en un archivo llamado app.py:
import openai import os import requests from PIL import Image import dotenv from openai import OpenAI, AzureOpenAI # import dotenv dotenv.load_dotenv() # configure Azure OpenAI service client client = AzureOpenAI( azure_endpoint = os.environ["AZURE_OPENAI_ENDPOINT"], api_key=os.environ['AZURE_OPENAI_API_KEY'], api_version = "2024-02-01" ) try: # Create an image by using the image generation API generation_response = client.images.generate( prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', size='1024x1024', n=1, model=os.environ['AZURE_OPENAI_DEPLOYMENT'] ) # Set the directory for the stored image image_dir = os.path.join(os.curdir, 'images') # If the directory doesn't exist, create it if not os.path.isdir(image_dir): os.mkdir(image_dir) # Initialize the image path (note the filetype should be png) image_path = os.path.join(image_dir, 'generated-image.png') # Retrieve the generated image image_url = generation_response.data[0].url # extract image URL from response generated_image = requests.get(image_url).content # download the image with open(image_path, "wb") as image_file: image_file.write(generated_image) # Display the image in the default image viewer image = Image.open(image_path) image.show() # catch exceptions except openai.InvalidRequestError as err: print(err)
Expliquemos este código:
-
Primero, importamos las bibliotecas que necesitamos, incluyendo la biblioteca de OpenAI, la biblioteca dotenv, la biblioteca requests y la biblioteca Pillow.
import openai import os import requests from PIL import Image import dotenv
-
Luego, cargamos las variables de entorno desde el archivo .env.
# import dotenv dotenv.load_dotenv()
-
Después, configuramos el cliente del servicio Azure OpenAI.
# Get endpoint and key from environment variables client = AzureOpenAI( azure_endpoint = os.environ["AZURE_OPENAI_ENDPOINT"], api_key=os.environ['AZURE_OPENAI_API_KEY'], api_version = "2024-02-01" )
-
A continuación, generamos la imagen:
# Create an image by using the image generation API generation_response = client.images.generate( prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', size='1024x1024', n=1, model=os.environ['AZURE_OPENAI_DEPLOYMENT'] )
El código anterior responde con un objeto JSON que contiene la URL de la imagen generada. Podemos usar la URL para descargar la imagen y guardarla en un archivo.
-
Por último, abrimos la imagen y usamos el visor de imágenes estándar para mostrarla:
image = Image.open(image_path) image.show()
Veamos el código que genera la imagen con más detalle:
generation_response = client.images.generate(
prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils',
size='1024x1024', n=1,
model=os.environ['AZURE_OPENAI_DEPLOYMENT']
)- prompt, es el texto que se utiliza para generar la imagen. En este caso, estamos usando el prompt "Conejo en caballo, sosteniendo una piruleta, en un prado con niebla donde crecen narcisos".
- size, es el tamaño de la imagen que se genera. En este caso, estamos generando una imagen de 1024x1024 píxeles.
- n, es el número de imágenes que se generan. En este caso, estamos generando dos imágenes.
- temperature, es un parámetro que controla la aleatoriedad del resultado de un modelo de IA Generativa. La temperatura es un valor entre 0 y 1 donde 0 significa que el resultado es determinista y 1 significa que el resultado es aleatorio. El valor predeterminado es 0.7.
Hay más cosas que puedes hacer con las imágenes que cubriremos en la siguiente sección.
Hasta ahora has visto cómo pudimos generar una imagen usando unas pocas líneas en Python. Sin embargo, hay más cosas que puedes hacer con las imágenes.
También puedes hacer lo siguiente:
- Realizar ediciones. Proporcionando una imagen existente, una máscara y un prompt, puedes alterar una imagen. Por ejemplo, puedes agregar algo a una parte de una imagen. Imagina nuestra imagen del conejo, puedes agregarle un sombrero. Para hacerlo, debes proporcionar la imagen, una máscara (identificando la parte del área para el cambio) y un prompt de texto que indique qué se debe hacer.
Nota: esto no es compatible con DALL-E 3.
Aquí hay un ejemplo usando GPT Image:
response = client.images.edit(
model="gpt-image-1",
image=open("sunlit_lounge.png", "rb"),
mask=open("mask.png", "rb"),
prompt="A sunlit indoor lounge area with a pool containing a flamingo"
)
image_url = response.data[0].urlLa imagen base solo contendría el salón con piscina, pero la imagen final tendría un flamenco:
-
Crear variaciones. La idea es que tomes una imagen existente y pidas que se creen variaciones. Para crear una variación, proporcionas una imagen y un prompt de texto y un código como este:
response = openai.Image.create_variation( image=open("bunny-lollipop.png", "rb"), n=1, size="1024x1024" ) image_url = response['data'][0]['url']
Nota, esto solo es compatible con OpenAI.
La temperatura es un parámetro que controla la aleatoriedad del resultado de un modelo de IA Generativa. La temperatura es un valor entre 0 y 1 donde 0 significa que el resultado es determinista y 1 significa que el resultado es aleatorio. El valor predeterminado es 0.7.
Veamos un ejemplo de cómo funciona la temperatura, ejecutando este prompt dos veces:
Prompt : "Conejo en caballo, sosteniendo una piruleta, en un prado con niebla donde crecen narcisos"
Ahora ejecutemos el mismo prompt nuevamente para ver que no obtendremos la misma imagen dos veces:
Como puedes ver, las imágenes son similares, pero no idénticas. Probemos cambiar el valor de la temperatura a 0.1 y veamos qué sucede:
generation_response = client.images.create(
prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here
size='1024x1024',
n=2
)Intentemos hacer que la respuesta sea más determinista. Pudimos observar en las dos imágenes generadas que en la primera imagen hay un conejo y en la segunda imagen hay un caballo, por lo que las imágenes varían bastante.
Por lo tanto, cambiemos nuestro código y establezcamos la temperatura en 0, de esta manera:
generation_response = client.images.create(
prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here
size='1024x1024',
n=2,
temperature=0
)Ahora, cuando ejecutes este código, obtendrás estas dos imágenes:
Aquí puedes ver claramente cómo las imágenes se parecen más entre sí.
Con nuestra demostración, ya podemos generar imágenes para nuestros clientes. Sin embargo, necesitamos crear algunos límites para nuestra aplicación.
Por ejemplo, no queremos generar imágenes que no sean apropiadas para el trabajo o que no sean adecuadas para niños.
Podemos hacer esto con metaprompts. Los metaprompts son prompts de texto que se utilizan para controlar el resultado de un modelo de IA Generativa. Por ejemplo, podemos usar metaprompts para controlar el resultado y asegurarnos de que las imágenes generadas sean apropiadas para el trabajo o adecuadas para niños.
Ahora, ¿cómo funcionan los metaprompts?
Los metaprompts son prompts de texto que se utilizan para controlar el resultado de un modelo de IA Generativa. Se colocan antes del prompt de texto y se utilizan para controlar el resultado del modelo, integrándose en las aplicaciones para controlar el resultado del modelo. Encapsulan la entrada del prompt y la entrada del metaprompt en un solo prompt de texto.
Un ejemplo de un metaprompt sería el siguiente:
You are an assistant designer that creates images for children.
The image needs to be safe for work and appropriate for children.
The image needs to be in color.
The image needs to be in landscape orientation.
The image needs to be in a 16:9 aspect ratio.
Do not consider any input from the following that is not safe for work or appropriate for children.
(Input)
Ahora, veamos cómo podemos usar metaprompts en nuestra demostración.
disallow_list = "swords, violence, blood, gore, nudity, sexual content, adult content, adult themes, adult language, adult humor, adult jokes, adult situations, adult"
meta_prompt =f"""You are an assistant designer that creates images for children.
The image needs to be safe for work and appropriate for children.
The image needs to be in color.
The image needs to be in landscape orientation.
The image needs to be in a 16:9 aspect ratio.
Do not consider any input from the following that is not safe for work or appropriate for children.
{disallow_list}
"""
prompt = f"{meta_prompt}
Create an image of a bunny on a horse, holding a lollipop"
# TODO add request to generate imageEn el prompt anterior, puedes ver cómo todas las imágenes creadas consideran el metaprompt.
Introdujimos Edu4All al inicio de esta lección. Ahora es momento de habilitar a los estudiantes para que generen imágenes para sus evaluaciones.
Los estudiantes crearán imágenes para sus evaluaciones que contengan monumentos; exactamente qué monumentos será decisión de los estudiantes. Se les pide que usen su creatividad en esta tarea para colocar estos monumentos en diferentes contextos.
Aquí tienes una posible solución:
import openai
import os
import requests
from PIL import Image
import dotenv
from openai import AzureOpenAI
# import dotenv
dotenv.load_dotenv()
# Get endpoint and key from environment variables
client = AzureOpenAI(
azure_endpoint = os.environ["AZURE_OPENAI_ENDPOINT"],
api_key=os.environ['AZURE_OPENAI_API_KEY'],
api_version = "2024-02-01"
)
disallow_list = "swords, violence, blood, gore, nudity, sexual content, adult content, adult themes, adult language, adult humor, adult jokes, adult situations, adult"
meta_prompt = f"""You are an assistant designer that creates images for children.
The image needs to be safe for work and appropriate for children.
The image needs to be in color.
The image needs to be in landscape orientation.
The image needs to be in a 16:9 aspect ratio.
Do not consider any input from the following that is not safe for work or appropriate for children.
{disallow_list}
"""
prompt = f"""{meta_prompt}
Generate monument of the Arc of Triumph in Paris, France, in the evening light with a small child holding a Teddy looks on.
""""
try:
# Create an image by using the image generation API
generation_response = client.images.generate(
prompt=prompt, # Enter your prompt text here
size='1024x1024',
n=1,
)
# Set the directory for the stored image
image_dir = os.path.join(os.curdir, 'images')
# If the directory doesn't exist, create it
if not os.path.isdir(image_dir):
os.mkdir(image_dir)
# Initialize the image path (note the filetype should be png)
image_path = os.path.join(image_dir, 'generated-image.png')
# Retrieve the generated image
image_url = generation_response.data[0].url # extract image URL from response
generated_image = requests.get(image_url).content # download the image
with open(image_path, "wb") as image_file:
image_file.write(generated_image)
# Display the image in the default image viewer
image = Image.open(image_path)
image.show()
# catch exceptions
except openai.BadRequestError as err:
print(err)Después de completar esta lección, consulta nuestra colección de aprendizaje sobre IA generativa para seguir mejorando tus conocimientos sobre IA generativa.
Dirígete a la Lección 10, donde veremos cómo crear aplicaciones de IA con poco código
Descargo de responsabilidad:
Este documento ha sido traducido utilizando el servicio de traducción automática Co-op Translator. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que surjan del uso de esta traducción.








