Programa
Há algumas semanas, o ChatGPT se tornou viral com seu novo modelo de geração de imagens. Esse modelo é, de longe, o melhor que já vi. Sua capacidade de editar imagens é o que o diferencia. Ele é incrivelmente preciso e torna extremamente fácil dar vida à imaginação. Outros modelos também podem fazer isso, mas não com o mesmo grau de precisão.
Gerar imagens em sua interface é fácil, pois só precisamos fornecer um prompt de texto. No entanto, como programador, eu estava ansioso para que ele viesse para a API, de modo que eu pudesse interagir com ele de forma programática. Esse dia finalmente chegou, e estou escrevendo este blog para ensinar a você como usá-lo com Python.
Se você estiver interessado apenas em aprender a usá-lo na interface de bate-papo, escrevi anteriormente este Guia de geração de imagens GPT-4o com oito exemplos práticos.
Desenvolver aplicativos de IA
Configuração da API GPT-Image-1
O novo modelo de imagem GPT é protegido, o que significa que são necessárias verificações adicionais para que você possa usá-lo. Nesta seção, descreveremos como configurar a API. Se você já tiver uma chave de API, poderá pular a primeira etapa.
Etapa 1: Gerar uma chave de API
A primeira etapa é gerar uma chave de API. Podemos criar uma fazendo login na plataforma deles e navegando até a página página de chaves de API. Em seguida, clicamos no botão "Create new secret key" (Criar nova chave secreta).
Depois que a chave for gerada, crie um arquivo chamado .env
e copie-o com o seguinte formato:
OPENAI_API_KEY=<paste_your_api_key_here>
Etapa 2: Verificação de nossa organização
Uma grande diferença em relação aos outros modelos da OpenAI é que, ao usar a API de imagem GPT, você precisa verificar nossa organização. A razão para isso é que a GPT-Image-1 pode gerar imagens realistas e detalhadas, o que levanta preocupações sobre o possível uso indevido, como a criação de deepfakes ou conteúdo inadequado. Ao verificar as organizações, a OpenAI pode monitorar melhor o uso e aplicar suas políticas de segurança.
Você pode verificar sua organização mesmo que não tenha uma empresa. No entanto, observe que esse processo exige que você forneça seu documento de identidade oficial e conclua a verificação facial.
Para realizar a verificação, navegue até a guia guia geral na plataforma da API da OpenAI e clique no botão na seção "Verificações".
O processo é realizado por um terceiro e consiste em:
- Carregamento de uma imagem de um documento de identificação.
- Use a câmera do seu dispositivo móvel para verificar se a sua identidade corresponde ao documento fornecido.
O processo leva apenas alguns minutos para ser concluído e, em seguida, cerca de 15 minutos para ser processado.
Configuração do Python
Para este tutorial, instalaremos os seguintes pacotes Python:
openai
: O pacote oficial da OpenAI que nos permite interagir com sua API.dotenv
: Um pacote Python que facilita o carregamento seguro da chave de API do arquivo.env
que criamos acima.
Você pode instalá-los usando o comando:
pip install openai dotenv
Geração de nossa primeira imagem com a GPT-Image-1
Vamos ver como você pode gerar uma imagem com gpt-image-1
. Comece criando um novo arquivo Python, por exemplo, generate_image.py
, na mesma pasta que o arquivo .env.
Em seguida, importe os pacotes necessários:
# Import the packages
from openai import OpenAI
from dotenv import load_dotenv
import os
import base64
import time
Observe que os
e base64
são pacotes integrados do Python e não precisam ser instalados.
Em seguida, carregamos a chave da API e inicializamos o cliente OpenAI:
# Load the API key
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
# Initialize the OpenAI client
client = OpenAI(api_key=api_key)
Em seguida, pedimos ao usuário que insira um prompt de texto usando a função integrada input()
e enviamos uma solicitação de geração de imagem para a API:
# Ask the user to input a prompt in the terminal
print("What do you want to generate?")
prompt = input("> ")
print("Generating image...")
# Send the prompt to the API
img = client.images.generate(
model="gpt-image-1",
prompt=prompt,
background="auto",
n=1,
quality="high",
size="1024x1024",
output_format="png",
moderation="auto",
)
Por fim, salvamos a imagem gerada em um arquivo:
# Save the image into a file
image_bytes = base64.b64decode(img.data[0].b64_json)
with open(f"output_{int(time.time())}.png", "wb") as f:
f.write(image_bytes)
O roteiro completo pode ser encontrado aqui. Para executar esse script, use o comando:
python generate_image.py
Aqui está um exemplo com o resultado:
GPT-Image 1-parâmetros
Nesta seção, descrevemos os parâmetros mais relevantes do modelo gpt-image-1
:
prompt
: A instrução textual que descreve a imagem que queremos que o modelo gere.background
: O tipo de plano de fundo da imagem. Ele deve ser um dos seguintes:"transparent"
,"opaque"
ou"auto"
. O valor padrão é"auto"
, no qual o modelo decidirá, com base no conteúdo, qual é o melhor tipo de plano de fundo. Observe que as imagens JPEG não são compatíveis com fundos transparentes.n
: O número de imagens a serem geradas. Deve ser um número de 1 a 10.quality
: A qualidade da imagem gerada. Deve ser um dos endereços"high"
,"medium"
ou"low"
, sendo que o padrão é"high"
.size
: O tamanho da imagem em pixels. Ele deve ser um dos seguintes:"1024x1024"
(quadrado),"1536x1024"
(paisagem),"1024x1536"
(retrato).output_format
: O formato da imagem. Ele deve ser um dos seguintes:"png"
,"jpeg"
ou"webp"
. O padrão é"png"
.moderation
: O nível de moderação de conteúdo. Deve ser"low"
para um filtro menos restritivo ou"auto"
, que é o padrão.
Cobrimos os parâmetros mais importantes disponíveis para o modelo gpt-image-1
. Para obter mais detalhes e uma lista completa de parâmetros, consulte a documentação oficial da API.
Efeitos do parâmetro de qualidade
Aqui está uma comparação lado a lado de imagens geradas usando o mesmo prompt com qualidades diferentes:
Vemos que o primeiro gato (com a qualidade mais baixa) tem alguns artefatos ao redor dos olhos e que a imagem se torna significativamente mais realista à medida que a qualidade aumenta.
Aqui está outro exemplo com uma saída em estilo de desenho animado:
Nesse caso, também notamos que quanto maior a qualidade, mais polida é a imagem. Na minha opinião, porém, isso é menos relevante para o conteúdo que não deve ser realista.
Lembre-se de que quanto maior for a qualidade, maior será o custo e o tempo de computação, portanto, é uma boa ideia encontrar um bom equilíbrio, dependendo do caso de uso. Eu recomendaria que você experimentasse os parâmetros de baixo a alto para ver o valor mínimo que oferece resultados aceitáveis para cada caso de uso.
Parâmetro de fundo
Em meus experimentos, descobri que o modelo ignorava principalmente esse parâmetro. Aqui estão exemplos lado a lado em que variei os parâmetros do background
e as instruções de transparência no prompt:
No primeiro exemplo, o parâmetro de transparência foi ignorado. Na segunda, adicionei as instruções de transparência ao prompt e funcionou um pouco melhor. No último, solicitei um plano de fundo opaco, mas especifiquei que queria um adesivo no prompt e recebi um plano de fundo transparente.
Ainda recomendo usar o parâmetro para corresponder ao que você deseja, mas certifique-se de especificar também o resultado desejado no prompt para reforçá-lo.
Edição de imagens com GPT-Image-1
Como mencionei na introdução, a parte mais interessante do GPT-Image-1 é sua capacidade de editar imagens. Vamos começar aprendendo como solicitar que ele edite uma imagem e, em seguida, explorar alguns casos de uso.
Para editar imagens, a maior parte do código pode ser reutilizada. A única parte que muda é que, em vez de usar a função client.images.generate()
, usamos a função client.images.edit()
.
Aqui está um exemplo:
img = client.images.edit(
model="gpt-image-1",
image=[
open("my-image.jpg", "rb"),
],
prompt=prompt,
n=1,
quality="high",
size="1024x1536",
)
O novo parâmetro é image
. Essa é uma lista de imagens de entrada a serem usadas na edição. Nesse caso, fornecemos apenas uma imagem chamada my-image.jpg
localizada na mesma pasta do script.
Aqui está um exemplo de uso do GPT Image 1 para editar uma de minhas fotos:
Observe que, como a imagem original tem uma proporção de retrato, usei o tamanho de retrato 1024x1536
. No entanto, essa não é a mesma proporção da imagem original. Mesmo no modo de edição, o modelo só pode produzir imagens nos três tamanhos especificados acima.
O script de edição completo pode ser encontrado aqui.
Usando máscaras
O modo de edição fornece um parâmetro mask
que pode ser usado para especificar as áreas em que a imagem deve ser editada. A máscara deve ser uma imagem PNG de no máximo 4 MB e ter o mesmo tamanho da imagem. As áreas com 100% de transparência correspondem às áreas que o GPT Image 1 tem permissão para editar.
Fornecemos a máscara da mesma forma que a imagem, exceto pelo fato de não ser uma lista nesse caso:
img = client.images.edit(
model="gpt-image-1",
image=[
open(sys.argv[1], "rb"),
],
# We provide the mask like this
mask=open("mask.png", "rb"),
prompt=prompt,
n=1,
quality="high",
size="1536x1024",
)
No entanto, quando experimentei, não funcionou muito bem, e vi relatos on-line de pessoas com problemas semelhantes.
Aqui está um exemplo:
Também tentei usá-lo para adicionar elementos em locais específicos, mas não funcionou de forma consistente. Assim como o uso do parâmetro background
para geração de imagens, descobri que descrever o que quero no prompt funciona melhor.
Uso de várias imagens
O modelo pode processar e combinar várias imagens de uma só vez. No exemplo abaixo, usamos esse recurso para criar um pôster de marketing combinando as imagens dessas três bebidas individuais:
Fornecemos as três imagens como uma lista no parâmetro image
, como segue:
prompt = """
Create a vibrant and eye-catching marketing poster to
promote the cold drinks offerings at our coffee shop.
"""
img = client.images.edit(
model="gpt-image-1",
# We can provide multiple images at once
image=[
open("latte.png", "rb"),
open("americano.png", "rb"),
open("icetea.png", "rb"),
],
prompt=prompt,
size="1536x1024",
)
Aqui está o resultado:
Preços da GPT-Image-1
A geração de imagens é cobrada com base em:
- O número de tokens no prompt de texto.
- O número de tokens nas imagens de entrada.
- O número de tokens na imagem de saída.
Às vezes é difícil ter uma ideia do que esses custos representam porque não sabemos em quantos tokens uma imagem consiste.
Como as dimensões das imagens de saída são conhecidas, sabemos quantos tokens são necessários para cada uma delas, portanto, podemos fornecer valores precisos para o preço dos tokens da imagem de saída (que é a parte mais cara):
Esse preço depende da qualidade da imagem e do tamanho. Para obter mais detalhes, consulte a página de preços do Página de preços da imagem GPT 1.
Quando geramos uma imagem, a API retorna o número de tokens usados, de modo que podemos combiná-lo com as informações acima para saber exatamente quanto custa.
Podemos exibir a quantidade de tokens usados imprimindo o campo usage
do resultado:
img = client.images.generate(
model="gpt-image-1",
prompt=prompt,
background="transparent",
n=1,
quality="medium",
size="1024x1024",
moderation="auto",
output_format="png",
)
# Add this to see the usage
print("Prompt tokens:", img.usage.input_tokens_details.text_tokens)
print("Input images tokens:", img.usage.input_tokens_details.image_tokens)
print("Output image tokens:", img.usage.output_tokens)
Saída:
Prompt tokens: 8
Input images tokens: 0
Output image tokens: 272
Conclusão
Apesar de algumas deficiências da API, como o mascaramento e a transparência não serem suficientemente confiáveis, o modelo pode executar com alta precisão as instruções fornecidas no prompt.
Acho que esse modelo abre muitas possibilidades de construção em torno dele. Neste tutorial, você aprendeu os conceitos básicos de como usá-lo. Aqui estão algumas ideias que você pode querer explorar para desenvolver o que aprendeu aqui:
- Simplificando a conversão de fotos de alimentos tiradas por telefone em belas fotografias de alimentos para serem usadas por restaurantes em seus cardápios.
- Com base na foto de um amigo ou em uma selfie, crie um pacote de adesivos que expresse várias emoções para ser usado em aplicativos de bate-papo.
- Crie uma ferramenta que, com base nas descrições de cenas individuais, crie uma tira de história em quadrinhos a partir dessas cenas.