Merlintxu commited on
Commit
e35f365
·
verified ·
1 Parent(s): fee5647

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +41 -6
app.py CHANGED
@@ -2,14 +2,49 @@ import gradio as gr
2
  from transformers import Wav2Vec2ForCTC, Wav2Vec2Processor
3
  import torch
4
  import librosa
 
 
5
 
6
- # Cargar el modelo y el procesador de Hugging Face
7
- processor = Wav2Vec2Processor.from_pretrained("facebook/wav2vec2-base-960h")
8
- model = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-base-960h")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
 
10
  def transcribe_audio(audio):
11
- # Cargar el audio usando librosa
12
- speech, rate = librosa.load(audio, sr=16000)
 
 
 
 
 
 
 
 
 
 
 
13
 
14
  # Procesar el audio
15
  input_values = processor(speech, return_tensors="pt", sampling_rate=rate).input_values
@@ -32,7 +67,7 @@ iface = gr.Interface(
32
  fn=transcribe_audio,
33
  inputs=gr.Audio(type="filepath"),
34
  outputs=gr.File(),
35
- title="Audio Transcriber",
36
  description="Sube un archivo de audio y obtén la transcripción en un archivo de texto."
37
  )
38
 
 
2
  from transformers import Wav2Vec2ForCTC, Wav2Vec2Processor
3
  import torch
4
  import librosa
5
+ import subprocess
6
+ from langdetect import detect
7
 
8
+ # Modelos por idioma
9
+ MODELS = {
10
+ "es": "jonatasgrosman/wav2vec2-large-xlsr-53-spanish",
11
+ "en": "facebook/wav2vec2-large-960h", # Puedes añadir más modelos aquí según sea necesario
12
+ # Añadir más modelos por idioma si es necesario
13
+ }
14
+
15
+ def convert_audio_to_wav(audio_path):
16
+ wav_path = "converted_audio.wav"
17
+ command = ["ffmpeg", "-i", audio_path, "-ac", "1", "-ar", "16000", wav_path]
18
+ subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
19
+ return wav_path
20
+
21
+ def detect_language(audio_path):
22
+ # Cargar los primeros 15 segundos del audio
23
+ speech, _ = librosa.load(audio_path, sr=16000, duration=15)
24
+ # Convertir audio a texto usando el modelo inglés como predeterminado para detección
25
+ processor = Wav2Vec2Processor.from_pretrained("facebook/wav2vec2-large-960h")
26
+ model = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-large-960h")
27
+ input_values = processor(speech, return_tensors="pt", sampling_rate=16000).input_values
28
+ with torch.no_grad():
29
+ logits = model(input_values).logits
30
+ predicted_ids = torch.argmax(logits, dim=-1)
31
+ transcription = processor.batch_decode(predicted_ids)[0]
32
+ return detect(transcription)
33
 
34
  def transcribe_audio(audio):
35
+ # Convertir audio a formato WAV
36
+ wav_audio = convert_audio_to_wav(audio)
37
+
38
+ # Detectar el idioma del audio
39
+ language = detect_language(wav_audio)
40
+ model_name = MODELS.get(language, "facebook/wav2vec2-large-960h") # Modelo predeterminado en caso de que no se detecte el idioma
41
+
42
+ # Cargar el modelo y el procesador adecuados
43
+ processor = Wav2Vec2Processor.from_pretrained(model_name)
44
+ model = Wav2Vec2ForCTC.from_pretrained(model_name)
45
+
46
+ # Cargar el audio completo
47
+ speech, rate = librosa.load(wav_audio, sr=16000)
48
 
49
  # Procesar el audio
50
  input_values = processor(speech, return_tensors="pt", sampling_rate=rate).input_values
 
67
  fn=transcribe_audio,
68
  inputs=gr.Audio(type="filepath"),
69
  outputs=gr.File(),
70
+ title="Transcriptor de Audio Multilingüe",
71
  description="Sube un archivo de audio y obtén la transcripción en un archivo de texto."
72
  )
73