from transformers import BlipProcessor, BlipForQuestionAnswering
from PIL import Image
import gradio as gr

processor = BlipProcessor.from_pretrained("Salesforce/blip-vqa-base")
model = BlipForQuestionAnswering.from_pretrained("Salesforce/blip-vqa-base")

def predict(image, question):
  inputs = processor(text=question, images=image, return_tensors="pt")
  out = model.generate(**inputs, max_new_tokens=100, num_beams=10, temperature=0.7) 
  answer = processor.decode(out[0], skip_special_tokens=True)
  return answer

iface = gr.Interface(
    fn=predict,
    inputs=[
        gr.Image(type="pil"),
        gr.Textbox(lines=2, placeholder="Faça sua pergunta sobre a imagem"),
    ],
    outputs="text",
    title="Resposta Visual a Perguntas com BLIP",
    description="Faça upload de uma imagem e faça uma pergunta sobre ela. O modelo BLIP tentará responder!",
)

iface.launch(share=True)