File size: 4,068 Bytes
abde4b3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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()