cesar commited on
Commit
450515e
·
verified ·
1 Parent(s): f452077

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +17 -13
app.py CHANGED
@@ -17,10 +17,13 @@ except KeyError:
17
  client_options = ClientOptions(api_key=API_KEY)
18
  client = speech.SpeechClient(client_options=client_options)
19
 
20
- def get_sample_rate(file_path):
21
- """Obtiene la tasa de muestreo (sample rate) de un archivo de audio."""
22
- with wave.open(file_path, "rb") as wf:
23
- return wf.getframerate()
 
 
 
24
 
25
  def convert_to_wav(input_file):
26
  """Convierte archivos de audio a WAV LINEAR16 con la tasa de muestreo correcta."""
@@ -41,17 +44,13 @@ def transcribe(audio_file=None):
41
  if not audio_file.endswith(".wav"):
42
  audio_file = convert_to_wav(audio_file)
43
 
44
- # Verificar el tamaño del archivo (máximo 10MB)
45
- if os.path.getsize(audio_file) > 10 * 1024 * 1024:
46
- return "Error: El archivo de audio supera los 10MB. Usa un archivo más pequeño.", ""
47
-
48
- # Obtener la tasa de muestreo real del archivo convertido
49
- sample_rate = get_sample_rate(audio_file)
50
 
51
  # Configuración de la solicitud
52
  config = speech.RecognitionConfig(
53
  encoding=speech.RecognitionConfig.AudioEncoding.LINEAR16,
54
- sample_rate_hertz=sample_rate, # Usamos la tasa de muestreo detectada automáticamente
55
  audio_channel_count=1,
56
  language_code="es-AR",
57
  )
@@ -61,8 +60,12 @@ def transcribe(audio_file=None):
61
  content = file.read()
62
  audio = speech.RecognitionAudio(content=content)
63
 
64
- # Realiza la transcripción
65
- response = client.recognize(config=config, audio=audio)
 
 
 
 
66
 
67
  transcript = []
68
  confidence = []
@@ -87,3 +90,4 @@ demo = gr.Interface(
87
  )
88
 
89
  demo.launch()
 
 
17
  client_options = ClientOptions(api_key=API_KEY)
18
  client = speech.SpeechClient(client_options=client_options)
19
 
20
+ def get_audio_duration(file_path):
21
+ """Obtiene la duración del archivo de audio en segundos."""
22
+ result = subprocess.run(
23
+ ["ffprobe", "-i", file_path, "-show_entries", "format=duration", "-v", "quiet", "-of", "csv=p=0"],
24
+ capture_output=True, text=True
25
+ )
26
+ return float(result.stdout.strip())
27
 
28
  def convert_to_wav(input_file):
29
  """Convierte archivos de audio a WAV LINEAR16 con la tasa de muestreo correcta."""
 
44
  if not audio_file.endswith(".wav"):
45
  audio_file = convert_to_wav(audio_file)
46
 
47
+ # Obtener la duración del archivo
48
+ duration = get_audio_duration(audio_file)
 
 
 
 
49
 
50
  # Configuración de la solicitud
51
  config = speech.RecognitionConfig(
52
  encoding=speech.RecognitionConfig.AudioEncoding.LINEAR16,
53
+ sample_rate_hertz=48000,
54
  audio_channel_count=1,
55
  language_code="es-AR",
56
  )
 
60
  content = file.read()
61
  audio = speech.RecognitionAudio(content=content)
62
 
63
+ if duration <= 60:
64
+ # Si el audio dura menos de 1 minuto, usamos transcripción síncrona
65
+ response = client.recognize(config=config, audio=audio)
66
+ else:
67
+ # Si el audio dura más de 1 minuto, mostramos un error (se necesita Google Cloud Storage)
68
+ return "Error: El audio es muy largo para la transcripción síncrona. Se necesita Google Cloud Storage.", ""
69
 
70
  transcript = []
71
  confidence = []
 
90
  )
91
 
92
  demo.launch()
93
+