Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from transformers import pipeline | |
| from pydub import AudioSegment | |
| from pydub.utils import make_chunks | |
| import tempfile | |
| import os | |
| # Inicialize o modelo Whisper com um modelo otimizado para CPU | |
| transcriber = pipeline( | |
| "automatic-speech-recognition", | |
| model="openai/whisper-tiny", # Use modelos menores para maior velocidade | |
| device="cpu" # Certifique-se de usar CPU, já que está na versão gratuita | |
| ) | |
| # Função para dividir áudios longos em trechos menores (30 segundos) | |
| def split_audio(audio_path, chunk_length=30_000): | |
| audio = AudioSegment.from_file(audio_path) | |
| chunks = make_chunks(audio, chunk_length) # Divide em trechos de 30 segundos | |
| return chunks | |
| # Função para comprimir áudio (ajustar taxa de amostragem, etc.) | |
| def compress_audio(audio_path): | |
| audio = AudioSegment.from_file(audio_path) | |
| compressed_audio = audio.set_frame_rate(16000).set_channels(1).set_sample_width(2) | |
| compressed_path = tempfile.NamedTemporaryFile(suffix=".wav", delete=False).name | |
| compressed_audio.export(compressed_path, format="wav") | |
| return compressed_path | |
| # Função para transcrever o áudio | |
| def transcribe(audio_file): | |
| try: | |
| # Verifique o tamanho do arquivo (máx. 60 MB) | |
| if os.path.getsize(audio_file) > 60 * 1024 * 1024: | |
| return "Erro: O arquivo excede o limite de 60 MB. Por favor, envie um áudio menor." | |
| # Comprimir o áudio antes de processar | |
| compressed_audio = compress_audio(audio_file) | |
| # Divida o áudio em partes | |
| chunks = split_audio(compressed_audio) | |
| full_transcription = [] | |
| # Processar cada parte separadamente | |
| for i, chunk in enumerate(chunks): | |
| with tempfile.NamedTemporaryFile(suffix=".wav", delete=True) as temp_chunk: | |
| chunk.export(temp_chunk.name, format="wav") | |
| transcription = transcriber(temp_chunk.name, return_timestamps=False)["text"] | |
| full_transcription.append(f"[Parte {i+1}]: {transcription}") | |
| return "\n".join(full_transcription) | |
| except Exception as e: | |
| return f"Erro ao processar áudio: {str(e)}" | |
| # Interface gráfica com Gradio | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# 🎙️ Whisper Transcription - Suporte a Áudios Longos (60 Minutos / 60 MB)") | |
| with gr.Row(): | |
| with gr.Column(scale=1): | |
| gr.Markdown("### 1️⃣ Envie seu áudio (máx. 60 MB e 60 minutos)") | |
| audio_input = gr.Audio(type="filepath", label="Envie um arquivo de áudio") | |
| with gr.Column(scale=1): | |
| gr.Markdown("### 2️⃣ Resultado da transcrição") | |
| transcription_output = gr.Textbox(label="Transcrição", lines=15, interactive=False) | |
| transcribe_button = gr.Button("🚀 Transcrever") | |
| # Vincular ação ao botão | |
| transcribe_button.click(transcribe, inputs=[audio_input], outputs=[transcription_output]) | |
| # Rodar a aplicação | |
| demo.launch(share=True) | |