LuanInter/Whisper
0
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")