CoolFace
Apppublic

LuanInter/Whisper

sourceHugging Facemitupdated 2y agoView on Hugging Face
0likes
app.py63 linesDownload Raw Back to root
1import streamlit as st2from groq import Groq3import tempfile4import os5from pydub import AudioSegment6 7GROQ_API_KEY = os.environ["GROQ_API_KEY"] 8os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"9 10st.title("Transcrição usando Groq Whisper 🤖")11 12# Carregar o cliente Groq uma vez ao iniciar a página13@st.cache_resource14def load_client():15    with st.spinner("Carregando cliente Groq..."):16        client = Groq(api_key=GROQ_API_KEY)17        st.text("Cliente Groq Carregado ✅")18        return client19 20client = load_client()21 22def split_audio(file_path, chunk_length_ms=60000):23    """Divide o arquivo de áudio em pedaços menores."""24    audio = AudioSegment.from_file(file_path)25    chunks = [audio[i:i + chunk_length_ms] for i in range(0, len(audio), chunk_length_ms)]26    return chunks27 28audio_file = st.file_uploader("Upload Audio/Vídeo", type=["wav", "mp3", "mp4"])29 30if st.sidebar.button("Transcrever vídeo/áudio"):31    if audio_file is not None:32        # Cria um arquivo temporário para salvar o arquivo carregado33        with tempfile.NamedTemporaryFile(delete=False) as temp_file:34            temp_file.write(audio_file.read())35            temp_file_path = temp_file.name36 37        with st.spinner("Transcrevendo arquivo..."):38            # Divide o arquivo de áudio em pedaços menores39            chunks = split_audio(temp_file_path)40            transcription_text = ""41            42            for i, chunk in enumerate(chunks):43                chunk_path = f"{temp_file_path}_chunk{i}.wav"44                chunk.export(chunk_path, format="wav")45                46                with open(chunk_path, "rb") as file:47                    transcription = client.audio.transcriptions.create(48                        file=(chunk_path, file.read()),49                        model="whisper-large-v3",50                    )51                    transcription_text += transcription.text + " "52 53        st.sidebar.success("Arquivo transcrito com sucesso! 🦾")54        st.markdown(transcription_text)55        56        st.download_button(57            label="Download .txt",58            data=transcription_text,59            file_name=f"{audio_file.name.split('.')[0]}.txt",60            mime='text/plain'61        )62    else:63        st.sidebar.error("Por favor, carregue um arquivo de áudio")