|
import os |
|
import torch |
|
from PIL import Image |
|
import gradio as gr |
|
from transformers import BlipProcessor, BlipForConditionalGeneration |
|
|
|
|
|
MODEL_DIR = "Frame_30K_gpu_01_pto" |
|
|
|
|
|
|
|
processor = BlipProcessor.from_pretrained(MODEL_DIR) |
|
model = BlipForConditionalGeneration.from_pretrained(MODEL_DIR) |
|
|
|
|
|
device = torch.device("cuda" if torch.cuda.is_available() else "cpu") |
|
model.to(device) |
|
|
|
def generate_caption(image): |
|
""" |
|
Gera uma legenda para a imagem fornecida usando o modelo BLIP finetuned. |
|
|
|
Args: |
|
image (PIL.Image.Image): Imagem carregada. |
|
|
|
Returns: |
|
str: Legenda gerada. |
|
""" |
|
if image is None: |
|
return "Nenhuma imagem fornecida." |
|
|
|
|
|
inputs = processor(images=image, return_tensors="pt").to(device) |
|
|
|
|
|
out = model.generate( |
|
**inputs, |
|
max_length=200, |
|
num_beams=5, |
|
no_repeat_ngram_size=2 |
|
) |
|
caption = processor.decode(out[0], skip_special_tokens=True) |
|
|
|
return caption |
|
|
|
|
|
iface = gr.Interface( |
|
fn=generate_caption, |
|
inputs=gr.Image(type="pil", label="Enviar Imagem"), |
|
outputs=gr.Textbox( |
|
label="Legenda Gerada", |
|
lines=4, |
|
max_lines=10, |
|
interactive=False |
|
), |
|
title="BLIP Português - Geração de Legendas para Imagens", |
|
description="Envie uma imagem e o modelo BLIP finetuned em português irá gerar uma legenda descritiva para ela.", |
|
examples=[ |
|
["examples/image1.jpg"], |
|
["examples/image2.jpg"], |
|
["examples/image3.jpg"], |
|
], |
|
allow_flagging="never" |
|
) |
|
|
|
if __name__ == "__main__": |
|
iface.launch() |
|
|