Gradie / app.py
Sheilosa's picture
Create app.py
abde4b3 verified
import gradio as gr
from transformers import (
BlipProcessor, BlipForConditionalGeneration,
WhisperProcessor, WhisperForConditionalGeneration,
AutoTokenizer, AutoModelForCausalLM
)
from diffusers import StableDiffusionPipeline
import torch
import librosa
import subprocess
from gtts import gTTS
import os
# Carregar modelos
blip_processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-base")
blip_model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-base")
sd_pipe = StableDiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", torch_dtype=torch.float16).to("cuda")
whisper_processor = WhisperProcessor.from_pretrained("openai/whisper-small")
whisper_model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-small")
# Modelo de chatbot (OpenAssistant em português)
tokenizer = AutoTokenizer.from_pretrained("OpenAssistant/oasst-sft-4-pythia-12b-epoch-3.5")
chatbot_model = AutoModelForCausalLM.from_pretrained("OpenAssistant/oasst-sft-4-pythia-12b-epoch-3.5")
# Funções principais
def gerar_imagem(prompt):
imagem = sd_pipe(prompt).images[0]
return imagem
def descrever_imagem(imagem):
inputs = blip_processor(imagem, return_tensors="pt")
out = blip_model.generate(**inputs)
return blip_processor.decode(out[0], skip_special_tokens=True)
def transcrever_audio(audio):
speech, _ = librosa.load(audio, sr=16000)
input_features = whisper_processor(speech, sampling_rate=16000, return_tensors="pt").input_features
predicted_ids = whisper_model.generate(input_features)
return whisper_processor.batch_decode(predicted_ids, skip_special_tokens=True)[0]
def responder_chat(prompt):
inputs = tokenizer(prompt, return_tensors="pt")
outputs = chatbot_model.generate(**inputs, max_length=100)
return tokenizer.decode(outputs[0], skip_special_tokens=True)
def executar_comando(comando):
try:
resultado = subprocess.run(comando, shell=True, capture_output=True, text=True)
return resultado.stdout or "Comando executado!"
except Exception as e:
return f"Erro: {str(e)}"
def texto_para_voz(texto):
tts = gTTS(texto, lang='pt-br')
tts.save("resposta.mp3")
return "resposta.mp3"
# Interface Gradio
with gr.Blocks() as demo:
gr.Markdown("# 🤖 IA Multimodal Completa")
with gr.Tab("Gerar Imagem"):
texto_imagem = gr.Textbox(label="Descreva a imagem que deseja gerar")
saida_imagem = gr.Image(label="Imagem Gerada")
btn_imagem = gr.Button("Gerar")
with gr.Tab("Descrever Imagem"):
entrada_imagem = gr.Image(label="Envie uma imagem", type="pil")
texto_descricao = gr.Textbox(label="Descrição Gerada")
btn_descricao = gr.Button("Descrever")
with gr.Tab("Transcrever Áudio"):
entrada_audio = gr.Audio(label="Grave ou envie um áudio", type="filepath")
texto_transcricao = gr.Textbox(label="Transcrição")
btn_transcricao = gr.Button("Transcrever")
with gr.Tab("Chatbot"):
chatbot_input = gr.Textbox(label="Pergunte algo")
chatbot_output = gr.Textbox(label="Resposta")
chatbot_audio = gr.Audio(label="Resposta em Áudio", visible=True)
chatbot_btn = gr.Button("Enviar")
with gr.Tab("Executar Comandos"):
comando_input = gr.Textbox(label="Comando (ex: pip install numpy)")
comando_output = gr.Textbox(label="Resultado")
comando_btn = gr.Button("Executar")
# Conexões
btn_imagem.click(gerar_imagem, inputs=texto_imagem, outputs=saida_imagem)
btn_descricao.click(descrever_imagem, inputs=entrada_imagem, outputs=texto_descricao)
btn_transcricao.click(transcrever_audio, inputs=entrada_audio, outputs=texto_transcricao)
chatbot_btn.click(responder_chat, inputs=chatbot_input, outputs=chatbot_output)
chatbot_btn.click(texto_para_voz, inputs=chatbot_output, outputs=chatbot_audio)
comando_btn.click(executar_comando, inputs=comando_input, outputs=comando_output)
demo.launch()