Spaces:
Sleeping
Sleeping
File size: 4,045 Bytes
eb3cdc8 ff5f53a eb3cdc8 ff5f53a eb3cdc8 ff5f53a eb3cdc8 6f58142 eb3cdc8 6f58142 eb3cdc8 ff5f53a eb3cdc8 ff5f53a eb3cdc8 ff5f53a eb3cdc8 ff5f53a eb3cdc8 6f58142 eb3cdc8 ff5f53a eb3cdc8 6f58142 ff5f53a eb3cdc8 ff5f53a eb3cdc8 ff5f53a eb3cdc8 6f58142 eb3cdc8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
import streamlit as st
import os
import tempfile
import whisper
import speech_recognition as sr
from pydub import AudioSegment
from audio_recorder_streamlit import audio_recorder
# Function to convert mp3 file to wav
def convert_mp3_to_wav(mp3_path):
audio = AudioSegment.from_mp3(mp3_path)
wav_path = mp3_path.replace('.mp3', '.wav')
audio.export(wav_path, format="wav")
return wav_path
# Function to transcribe audio using OpenAI Whisper
def transcribe_whisper(model_name, file_path):
model = whisper.load_model(model_name)
result = model.transcribe(file_path)
return result["text"]
# Function to transcribe audio using Google Speech API
def transcribe_speech_recognition(file_path):
r = sr.Recognizer()
with sr.AudioFile(file_path) as source:
r.adjust_for_ambient_noise(source, duration=0.25) # Adjust ambient noise threshold
audio = r.record(source)
try:
result = r.recognize_google(audio, language='es')
return result
except sr.UnknownValueError:
return "No se pudo reconocer ning煤n texto en el audio."
# Function to perform transcription based on selected method
def perform_transcription(transcription_method, model_name, audio_path):
if transcription_method == 'OpenAI Whisper':
return transcribe_whisper(model_name, audio_path)
else:
return transcribe_speech_recognition(audio_path)
# Function to handle uploaded file transcription
def handle_uploaded_file(uploaded_file, transcription_method, model_name):
file_details = {"FileName": uploaded_file.name, "FileType": uploaded_file.type, "FileSize": uploaded_file.size}
st.write(file_details)
# Save uploaded file to temp directory
os.makedirs("temp", exist_ok=True) # Create temp directory if it doesn't exist
file_path = os.path.join("temp", uploaded_file.name)
with open(file_path, "wb") as f:
f.write(uploaded_file.getbuffer())
with st.spinner('Transcribiendo...'):
if uploaded_file.name.endswith('.mp3') and transcription_method != 'OpenAI Whisper':
# Convert mp3 to wav if Google Speech API is selected and file is in mp3 format
file_path = convert_mp3_to_wav(file_path)
# Perform transcription
transcript = perform_transcription(transcription_method, model_name, file_path)
st.text_area('Resultado de la Transcripci贸n:', transcript, height=200)
def main():
st.title('Transcriptor de Audio')
# Choose the transcription method and model
option = st.selectbox('Escoger Modelo de Transcripci贸n', ('Subir un archivo', 'Grabar audio en tiempo real'))
transcription_method = st.selectbox('Escoge el m茅todo de transcripci贸n', ('OpenAI Whisper', 'Google Speech API'))
model_name = None # Initialize model_name with a default value
if transcription_method == 'OpenAI Whisper':
model_name = st.selectbox('Escoge el modelo de Whisper', ('base', 'small', 'medium', 'large', 'tiny'))
if option == 'Subir un archivo':
uploaded_file = st.file_uploader("Sube tu archivo de audio para transcribir", type=['wav', 'mp3'])
if uploaded_file is not None:
handle_uploaded_file(uploaded_file, transcription_method, model_name)
elif option == 'Grabar audio en tiempo real':
audio_bytes = audio_recorder(pause_threshold=5, sample_rate=16_000)
if audio_bytes:
st.write("Grabaci贸n finalizada. Transcribiendo...")
with st.spinner('Transcribiendo...'):
# Save recorded audio to a temporary file
with tempfile.NamedTemporaryFile(suffix='.wav', delete=False) as temp_audio:
temp_path = temp_audio.name
temp_audio.write(audio_bytes)
# Perform transcription
transcript = perform_transcription(transcription_method, model_name, temp_path)
st.text_area('Resultado de la Transcripci贸n:', transcript, height=200)
if __name__ == "__main__":
main()
|