IA-Toolbox-Hub / app.py
DHEIVER's picture
Update app.py
c357e49 verified
raw
history blame
7.96 kB
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)