ouvir-para-ver / app.py
mileski-dev
ajustar para pt-br com helsinki 3.2
5a17e2f
from io import BytesIO
from PIL import Image
import gradio as gr
from transformers import BlipProcessor, BlipForConditionalGeneration, pipeline
# 1) Carrega processor e modelo BLIP
processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-base")
model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-base")
# 2) Carrega pipeline de tradução Inglês → Português
translator = pipeline("translation", model="Helsinki-NLP/opus-mt-tc-big-en-pt")
def infer_caption(image):
# 1) Redimensiona mantendo proporção para max 1024×1024
max_size = 1024
w, h = image.size
if max(w, h) > max_size:
ratio = max_size / max(w, h)
new_size = (int(w * ratio), int(h * ratio))
image = image.resize(new_size, Image.LANCZOS)
# 2) Gera legenda em inglês com BLIP
inputs = processor(image, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs)
english_caption = processor.decode(outputs[0], skip_special_tokens=True)
# 3) Traduz para português (pt-BR)
translated = translator(english_caption, max_length=128)
portuguese_caption = translated[0]["translation_text"]
return portuguese_caption
# 3) Cria interface Gradio
interface = gr.Interface(
fn=infer_caption,
inputs=gr.Image(type="pil"),
outputs="text",
title="Ouvir Para Ver",
description="Envie uma imagem e receba a descrição."
)
if __name__ == "__main__":
interface.launch(server_name="0.0.0.0", share=False)