Este artigo explora a implementação prática de um sistema de IA industrial que combina reconhecimento óptico de caracteres (OCR) e geração de imagens especializadas. O foco está no uso de um modelo de IA chamado Nano-Banana, otimizado para criar diagramas técnicos como visões explosivas (exploded views) e layouts de peças (knolling).
Conceito do Nano-Banana Engine
Nano-Banana é um modelo de geração de imagens baseado em difusão (diffusion) que foi refinado com técnicas de ajuste fino (fine-tuning), especificamente utilizando um LoRA (Low-Rank Adaptation) especializado. Este ajuste foca em estilos de representação técnica industrial, permitindo que o modelo produza visualizações limpas e padronizadas de componentes mecânicos ou eletrônicos dispostos de maneira organizada.
Parâmetros Essenciais para Controle da Geração
Dois parâmetros são críticos para direcionar a saída do modelo:
- Peso do LoRA: Controla a intensidade da injeção do estilo especializado. Valores entre 0.7 e 0.9 geralmente oferecem um equilíbrio ideal entre fidelidade ao estilo e clareza visual.
- Escala de Orientação (CFG): Determina o quão estritamente a geração segue a descrição textual. Valores moderados (7-8) equilibram aderência ao prompt e naturalidade.
Ajustes nestes parâmetros permitem variar desde diagramas técnicos precisos até composições artísticas com separação exagerada de peças.
Construindo uma Pipeline Automatizada com OCR
Para aumentar a eficiência, é possível integrar o OCR para extrair informações textuais de imagens de projetos ou fotos de equipamentos, e utilizá-las como entrada para o gerador de imagens.
1. Extração de Texto com OCR
Bibliotecas como o pytesseract em Python podem ser utilizadas. O código a seguir demonstra uma extração básica:
import pytesseract
from PIL import Image
def recuperar_texto_da_imagem(caminho_arquivo):
"""Realiza OCR em uma imagem e retorna o texto encontrado."""
imagem = Image.open(caminho_arquivo)
# Configurar idioma conforme necessidade, ex: lang='por'
texto = pytesseract.image_to_string(imagem, lang='eng')
return texto
# Exemplo de uso
texto_bruto = recuperar_texto_da_imagem("foto_maquina.jpg")
print(texto_bruto)
2. Processamento do Prompt para Geração
O texto extraído precisa ser limpo e transformado em uma instrução eficaz para o modelo de geração de imagens. Uma abordagem é filtrar palavras-chave relevantes.
import re
def construir_prompt_para_desmontagem(texto_bruto):
"""Filtra e estrutura o texto OCR para criar um prompt de geração de imagens."""
# Remove caracteres indesejados e espaços extras
texto_limpo = re.sub(r'[^a-zA-ZÀ-ÿ0-9\s]', '', texto_bruto)
texto_limpo = ' '.join(texto_limpo.split())
# Separa possíveis identificadores de peças (ex: P1, B-02, COMPONENTE_X)
padrao_peças = r'\b[A-Z]{1,3}[-_]?\d{1,4}\b'
ids_encontrados = re.findall(padrao_peças, texto_limpo, re.IGNORECASE)
# Monta o prompt base com palavras-chave e o estilo desejado
palavras_chave = set(texto_limpo.split())
prompt_base = f"diagrama de desmontagem de motor, peças como {', '.join(ids_encontrados[:4])},"
prompt_estilo = " fundo branco limpo, ilustração técnica, perspectiva isométrica, alta detalhe"
return prompt_base + prompt_estilo
prompt_final = construir_prompt_para_desmontagem(texto_bruto)
print("Prompt gerado:", prompt_final)
3. Invocação do Modelo de Geração
Com o prompt estruturado, a próxima etapa é enviar a solicitação à API do Nano-Banana. A implementação exata dependerá da interface de serviço utilizada (ex: API REST compatível com interfaces como o Stable Diffusion WebUI).
import requests
import base64
from io import BytesIO
def gerar_imagem_de_desmontagem(prompt, parametros):
"""Envia a solicitação para a API do modelo de geração de imagens."""
endpoint_api = "http://localhost:7860/sdapi/v1/txt2img"
payload = {
"prompt": prompt,
"steps": parametros.get("passos", 30),
"cfg_scale": parametros.get("cfg", 7.5),
"width": 768,
"height": 768
}
# Nota: A estrutura exata do payload varia. O LoRA costuma ser ativado no prompt ou via configuração de modelos.
try:
resposta = requests.post(endpoint_api, json=payload)
dados = resposta.json()
if 'images' in dados:
imagem_base64 = dados['images'][0]
if ',' in imagem_base64:
imagem_base64 = imagem_base64.split(',', 1)[1]
bytes_imagem = base64.b64decode(imagem_base64)
imagem = Image.open(BytesIO(bytes_imagem))
nome_arquivo = "resultado_desmontagem.png"
imagem.save(nome_arquivo)
return nome_arquivo
except Exception as e:
print(f"Falha na chamada da API: {e}")
return None
# Parâmetros recomendados
parametros_de_saida = {"passos": 30, "cfg": 7.5}
arquivo_resultante = gerar_imagem_de_desmontagem(prompt_final, parametros_de_saida)
Considerações sobre a Pipeline
A integração dessas tecnologias cria um fluxo automatizado: Imagem com Texto → OCR → Estruturação de Prompt → Geração de Diagrama Técnico. Esta abordagem é particularmente valiosa para a documentação técnica automatizada, manuais de manutenção e materiais de treinamento. O sucesso da pipeline depende de uma etapa de pré-processamento das imagans de entrada e da calibração cuidadosa dos parâmetros do modelo de geração para garantir que os diagramas resultantes sejam visualmente claros e informativos.