Entrada

OpenAI tu primera imagen generada

Pedirle a OpenAI que genere una imagen es realmente sencillo, otra cosa es como salga la imagen, ahí ya entramos en diseño de prompts y eso casi es tema para otro artículo.

Como en casi todos los servicios API first tenemos siempre dos opciones:

  • Usar la API directamente a través de peticiones HTTP
  • Usar un SDK

Y aquí es casi así, casi, porque no hay un sdk oficial, pero si que hay una librería que nos facilita la vida, OpenAI-DotNet.

Pero mejor veamos primero como es la API de OpenAI para entender que hace el SDK por debajo.

OpenAI Create Image

Título en inglés, pero es que así lo vas a encontrar en la documentación de OpenAI. La API de creación de imágenes es super sencilla, consta de una llamada POST a la siguiente URL:

https://api.openai.com/v1/images/generations

Y como parámetros de entrada tenemos:

  • prompt: string El texto que usará el modelo para generar la imagen. Es el único parámetro obligatorio y tiene una longitud máxima de 1000 carácteres.
  • n: integer Número de imágenes a generar. Por defecto es 1.
  • size: string Tamaño de la imagen a generar. Por defecto es “1024x1024”. Los valores posibles son “256x256”, “512x512” o “1024x1024”.
  • response_format: string Formato de la imagen a generar. Por defecto es “url”. Los valores posibles son “url” o “b64_json”. “url” nos devuelve una url a un blob storage y es temporal, “b64_json” nos devuelve la imagen en base64.
  • user: string Identificador del usuario final, es un parámetro opcional que ayuda a OpenAI a detectar y monitorizar abusos.

Sólo quedaría un último parametro, pero esta vez en el Header debemos pasar en “Authorization” el token de nuestra cuenta de OpenAI de la forma Bearer {token}.

Con todo esto hacemos una petición y si queda saldo y nuestro token es válido OpenAI nos respondería con un json que contiene la fecha de creación y una lista “data” que contendrá las url o base64 de las imágenes generadas.

OpenAI-DotNet

La opción del SDK nos abstrae de las peticiones, que aunque no son complicadas, son repetitivas y aumentan el código, nosotros mismos seguro que lo abstraeriamos a una función.

En el caso de esta librería (no voy a mencionar la parte de incluirla al proyecto) sólo tendríamos dos pasos:

Crear el cliente de OpenAI

Tratándose del primer artículo, voy a explicar esta parte ya que podemos usar OpenAI con key, key-organización e incluso nos enseñan a cargar las claves de un fichero de claves.

1
2
3
4
var api = new OpenAIClient("key");

var api = new OpenAIClient(new OpenAIAuthentication("key", "organization"));

En mi repositorio podrás ver la carga desde fichero que a mi me parece que es la solución más elegante y la más real en el día a día.

Generar imagen

Una vez tenemos el cliente, generar la imagen es muy sencillo, para ello contamos con el método “GenerateImageAsync” que recibe como parámetros los vistos en la petición HTTP.

1
var result = await api.ImagesEndpoint.GenerateImageAsync("prompt", 1, "1024x1024", "url", "user");

Sustituimos lo que necesitemos, en el caso del prompt lo podríamos pedir por consola como hago en el ejemplo del repositorio, la imagen, para pruebas la pequeña esta bien. Incluso podéis no enviar más que el prompt.

1
var result = await api.ImagesEndpoint.GenerateImageAsync("prompt");

Para el tamaño de la imagen esta librería nos proporciona un enumerable ImageSize que contiene los valores: Small, Medium y Large. Personalmente me parece más legible que el string.

Para terminar, o bien recorréis la lista de resultados (el sdk nos quita el created) o si habéis pedido uno sólo, cogéis el primer elemento.

Repositorio

Os dejo en mi repositorio un ejemplo de aplicación de consola que podéis ejecutar ya mismo.

Y si has llegado hasta aquí, te dejo mi “Diego Zapico writting C# code”.

Diego Zapico writting C# code

Esta entrada está licenciada bajo CC BY 4.0 por el autor.