RenanOF commited on
Commit
f310aaf
·
verified ·
1 Parent(s): a36023b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -8
app.py CHANGED
@@ -3,12 +3,13 @@ from transformers import pipeline
3
  from pydub import AudioSegment
4
  from pydub.utils import make_chunks
5
  import tempfile
 
6
 
7
- # Inicialize o modelo Whisper com um modelo menor para CPUs
8
  transcriber = pipeline(
9
  "automatic-speech-recognition",
10
- model="openai/whisper-tiny", # Troque para `whisper-base` se necessário
11
- device="cpu" # Garante que a CPU será usada
12
  )
13
 
14
  # Função para dividir áudios longos em trechos menores (30 segundos)
@@ -17,13 +18,28 @@ def split_audio(audio_path, chunk_length=30_000):
17
  chunks = make_chunks(audio, chunk_length) # Divide em trechos de 30 segundos
18
  return chunks
19
 
 
 
 
 
 
 
 
 
20
  # Função para transcrever o áudio
21
  def transcribe(audio_file):
22
  try:
 
 
 
 
 
 
 
23
  # Divida o áudio em partes
24
- chunks = split_audio(audio_file)
25
  full_transcription = []
26
-
27
  # Processar cada parte separadamente
28
  for i, chunk in enumerate(chunks):
29
  with tempfile.NamedTemporaryFile(suffix=".wav", delete=True) as temp_chunk:
@@ -41,7 +57,7 @@ with gr.Blocks() as demo:
41
 
42
  with gr.Row():
43
  with gr.Column(scale=1):
44
- gr.Markdown("### 1️⃣ Envie seu áudio (máx. 5 minutos)")
45
  audio_input = gr.Audio(type="filepath", label="Envie um arquivo de áudio")
46
 
47
  with gr.Column(scale=1):
@@ -53,6 +69,6 @@ with gr.Blocks() as demo:
53
  # Vincular ação ao botão
54
  transcribe_button.click(transcribe, inputs=[audio_input], outputs=[transcription_output])
55
 
56
- # Rodar a aplicação
57
- demo.launch(share=True)
58
 
 
3
  from pydub import AudioSegment
4
  from pydub.utils import make_chunks
5
  import tempfile
6
+ import os
7
 
8
+ # Inicialize o modelo Whisper com um modelo otimizado para CPU
9
  transcriber = pipeline(
10
  "automatic-speech-recognition",
11
+ model="openai/whisper-tiny", # Use modelos menores para maior velocidade
12
+ device="cpu" # Certifique-se de usar CPU, que está na versão gratuita
13
  )
14
 
15
  # Função para dividir áudios longos em trechos menores (30 segundos)
 
18
  chunks = make_chunks(audio, chunk_length) # Divide em trechos de 30 segundos
19
  return chunks
20
 
21
+ # Função para comprimir áudio (ajustar taxa de amostragem, etc.)
22
+ def compress_audio(audio_path):
23
+ audio = AudioSegment.from_file(audio_path)
24
+ compressed_audio = audio.set_frame_rate(16000).set_channels(1).set_sample_width(2)
25
+ compressed_path = tempfile.NamedTemporaryFile(suffix=".wav", delete=False).name
26
+ compressed_audio.export(compressed_path, format="wav")
27
+ return compressed_path
28
+
29
  # Função para transcrever o áudio
30
  def transcribe(audio_file):
31
  try:
32
+ # Verifique o tamanho do arquivo (máx. 5 MB)
33
+ if os.path.getsize(audio_file) > 5 * 1024 * 1024:
34
+ return "Erro: O arquivo excede o limite de 5 MB. Por favor, envie um áudio menor."
35
+
36
+ # Comprimir o áudio antes de processar
37
+ compressed_audio = compress_audio(audio_file)
38
+
39
  # Divida o áudio em partes
40
+ chunks = split_audio(compressed_audio)
41
  full_transcription = []
42
+
43
  # Processar cada parte separadamente
44
  for i, chunk in enumerate(chunks):
45
  with tempfile.NamedTemporaryFile(suffix=".wav", delete=True) as temp_chunk:
 
57
 
58
  with gr.Row():
59
  with gr.Column(scale=1):
60
+ gr.Markdown("### 1️⃣ Envie seu áudio (máx. 5 MB e 5 minutos)")
61
  audio_input = gr.Audio(type="filepath", label="Envie um arquivo de áudio")
62
 
63
  with gr.Column(scale=1):
 
69
  # Vincular ação ao botão
70
  transcribe_button.click(transcribe, inputs=[audio_input], outputs=[transcription_output])
71
 
72
+ # Rodar a aplicação com tempo limite aumentado
73
+ demo.launch(share=True, server_timeout=300)
74