Spaces:
Sleeping
Sleeping
import gradio as gr | |
from transformers import pipeline | |
import torch | |
import warnings | |
import numpy as np | |
from PIL import Image | |
warnings.filterwarnings('ignore') | |
device = "cuda" if torch.cuda.is_available() else "cpu" | |
# Dicionário expandido de modelos | |
models = { | |
'transcription': pipeline("automatic-speech-recognition", model="openai/whisper-small", device=device), | |
'translation': pipeline("translation", model="facebook/mbart-large-50-many-to-many-mmt", device=device), | |
'summarization': pipeline("summarization", model="facebook/bart-large-cnn", device=device), | |
'sentiment': pipeline("sentiment-analysis", model="nlptown/bert-base-multilingual-uncased-sentiment", device=device), | |
'question_answering': pipeline("question-answering", model="deepset/roberta-base-squad2", device=device), | |
'chat': pipeline("text-generation", model="facebook/opt-125m", device=device), | |
'image_caption': pipeline("image-to-text", model="Salesforce/blip-image-captioning-base", device=device), | |
'text_to_speech': pipeline("text-to-audio", model="facebook/mms-tts-eng", device=device), | |
'zero_shot': pipeline("zero-shot-classification", model="facebook/bart-large-mnli", device=device), | |
'ner': pipeline("token-classification", model="dslim/bert-base-NER", device=device) | |
} | |
def process_transcription(audio): | |
if not audio: | |
return "Por favor, forneça um arquivo de áudio." | |
return models['transcription'](audio)["text"] | |
def process_translation(text, direction): | |
if not text: | |
return "Por favor, forneça um texto para tradução." | |
return models['translation'](text, | |
src_lang="pt" if direction=="pt_en" else "en", | |
tgt_lang="en" if direction=="pt_en" else "pt")[0]['translation_text'] | |
def process_summarization(text): | |
if not text: | |
return "Por favor, forneça um texto para resumir." | |
return models['summarization'](text, max_length=130, min_length=30)[0]['summary_text'] | |
def process_sentiment(text): | |
if not text: | |
return "Por favor, forneça um texto para análise." | |
result = models['sentiment'](text)[0] | |
return f"Sentimento: {result['label']} (Score: {result['score']:.2f})" | |
def process_qa(question, context): | |
if not question or not context: | |
return "Por favor, forneça tanto a pergunta quanto o contexto." | |
return models['question_answering'](question=question, context=context)['answer'] | |
def process_chat(message, history): | |
if not message: | |
return "", history | |
response = models['chat'](message, max_length=100, do_sample=True)[0]['generated_text'] | |
history = history + [(message, response)] | |
return "", history | |
def process_image_caption(image): | |
if image is None: | |
return "Por favor, forneça uma imagem." | |
return models['image_caption'](image)[0]['generated_text'] | |
def process_tts(text): | |
if not text: | |
return None | |
return models['text_to_speech'](text) | |
def process_zero_shot(text, labels): | |
if not text or not labels: | |
return "Por favor, forneça texto e categorias." | |
result = models['zero_shot'](text, labels.split(',')) | |
return f"Classificação: {result['labels'][0]} (Confiança: {result['scores'][0]:.2f})" | |
def process_ner(text): | |
if not text: | |
return "Por favor, forneça um texto para análise." | |
results = models['ner'](text) | |
entities = [] | |
for result in results: | |
entities.append(f"{result['word']}: {result['entity']}") | |
return "\n".join(entities) | |
with gr.Blocks(theme=gr.themes.Soft()) as demo: | |
gr.HTML(open("index.html").read()) | |
with gr.Tabs(): | |
# Aba de Processamento de Áudio | |
with gr.TabItem("🎤 Áudio"): | |
with gr.Tabs(): | |
with gr.TabItem("Transcrição"): | |
audio_input = gr.Audio(type="filepath") | |
transcribe_button = gr.Button("Transcrever") | |
transcription_output = gr.Textbox(label="Resultado") | |
transcribe_button.click(process_transcription, inputs=audio_input, outputs=transcription_output) | |
with gr.TabItem("Texto para Fala"): | |
tts_input = gr.Textbox(label="Texto para Converter") | |
tts_button = gr.Button("Converter para Áudio") | |
tts_output = gr.Audio(label="Áudio Gerado") | |
tts_button.click(process_tts, inputs=tts_input, outputs=tts_output) | |
# Aba de Processamento de Texto | |
with gr.TabItem("📝 Texto"): | |
with gr.Tabs(): | |
with gr.TabItem("Tradução"): | |
with gr.Row(): | |
text_to_translate = gr.Textbox(label="Texto") | |
translation_direction = gr.Radio(["en_pt", "pt_en"], value="en_pt", label="Direção") | |
translate_button = gr.Button("Traduzir") | |
translation_output = gr.Textbox(label="Resultado") | |
translate_button.click(process_translation, inputs=[text_to_translate, translation_direction], outputs=translation_output) | |
with gr.TabItem("Resumo"): | |
text_sum = gr.Textbox(label="Texto", lines=5) | |
sum_button = gr.Button("Resumir") | |
sum_output = gr.Textbox(label="Resultado") | |
sum_button.click(process_summarization, inputs=text_sum, outputs=sum_output) | |
with gr.TabItem("Perguntas e Respostas"): | |
qa_context = gr.Textbox(label="Contexto", lines=5) | |
qa_question = gr.Textbox(label="Pergunta") | |
qa_button = gr.Button("Obter Resposta") | |
qa_output = gr.Textbox(label="Resposta") | |
qa_button.click(process_qa, inputs=[qa_question, qa_context], outputs=qa_output) | |
# Aba de Análise | |
with gr.TabItem("📊 Análise"): | |
with gr.Tabs(): | |
with gr.TabItem("Sentimento"): | |
text_sent = gr.Textbox(label="Texto") | |
sent_button = gr.Button("Analisar Sentimento") | |
sent_output = gr.Textbox(label="Resultado") | |
sent_button.click(process_sentiment, inputs=text_sent, outputs=sent_output) | |
with gr.TabItem("Entidades Nomeadas"): | |
ner_input = gr.Textbox(label="Texto") | |
ner_button = gr.Button("Identificar Entidades") | |
ner_output = gr.Textbox(label="Entidades Identificadas") | |
ner_button.click(process_ner, inputs=ner_input, outputs=ner_output) | |
with gr.TabItem("Classificação Zero-Shot"): | |
zero_text = gr.Textbox(label="Texto") | |
zero_labels = gr.Textbox(label="Categorias (separadas por vírgula)") | |
zero_button = gr.Button("Classificar") | |
zero_output = gr.Textbox(label="Resultado") | |
zero_button.click(process_zero_shot, inputs=[zero_text, zero_labels], outputs=zero_output) | |
# Aba de IA Avançada | |
with gr.TabItem("🤖 IA Avançada"): | |
with gr.Tabs(): | |
with gr.TabItem("Chat"): | |
chatbot = gr.Chatbot() | |
msg = gr.Textbox(label="Mensagem") | |
clear = gr.Button("Limpar Conversa") | |
msg.submit(process_chat, inputs=[msg, chatbot], outputs=[msg, chatbot]) | |
clear.click(lambda: None, None, chatbot, queue=False) | |
with gr.TabItem("Descrição de Imagens"): | |
image_input = gr.Image() | |
caption_button = gr.Button("Gerar Descrição") | |
caption_output = gr.Textbox(label="Descrição") | |
caption_button.click(process_image_caption, inputs=image_input, outputs=caption_output) | |
demo.launch(share=True) |