marcosremar2 commited on
Commit
c65250a
·
1 Parent(s): bb2c339

Fix Gradio compatibility issues - use stable version and simple interface

Browse files
Files changed (3) hide show
  1. README.md +1 -1
  2. app.py +47 -97
  3. requirements.txt +1 -3
README.md CHANGED
@@ -4,7 +4,7 @@ emoji: 🎵
4
  colorFrom: blue
5
  colorTo: purple
6
  sdk: gradio
7
- sdk_version: 4.44.1
8
  app_file: app.py
9
  pinned: false
10
  license: mit
 
4
  colorFrom: blue
5
  colorTo: purple
6
  sdk: gradio
7
+ sdk_version: 4.32.0
8
  app_file: app.py
9
  pinned: false
10
  license: mit
app.py CHANGED
@@ -1,11 +1,9 @@
1
  import gradio as gr
2
  import torch
3
- import torchaudio
4
  import numpy as np
5
  from transformers import AutoModel, Wav2Vec2Processor
6
  import librosa
7
  import matplotlib.pyplot as plt
8
- import seaborn as sns
9
 
10
  # Configurar o modelo
11
  MODEL_NAME = "marcosremar2/wavlm-large-deploy"
@@ -27,10 +25,10 @@ processor, model = load_model()
27
  def process_audio(audio_file):
28
  """Processa o arquivo de áudio e extrai features"""
29
  if audio_file is None:
30
- return "Por favor, carregue um arquivo de áudio.", None, None
31
 
32
  if processor is None or model is None:
33
- return "Erro: Modelo não foi carregado corretamente. Verifique os logs.", None, None
34
 
35
  try:
36
  # Carregar áudio
@@ -51,119 +49,71 @@ def process_audio(audio_file):
51
  # Informações sobre o áudio
52
  duration = len(audio) / sr
53
  audio_info = f"""
54
- 📊 **Informações do Áudio:**
55
- - Duração: {duration:.2f} segundos
56
- - Taxa de amostragem: {sr} Hz
57
- - Número de amostras: {len(audio)}
58
-
59
- 🧠 **Saída do Modelo WavLM-Large:**
60
- - Shape das features: {hidden_states.shape}
61
- - Dimensões: {hidden_states.shape[1]} frames × {hidden_states.shape[2]} features
62
- - Modelo: {MODEL_NAME}
63
-
64
- ✅ **Status:** Processamento concluído com sucesso!
65
  """
66
 
67
  # Criar visualização das features
68
  features = hidden_states.squeeze(0).cpu().numpy()
69
 
70
  # Plot 1: Waveform
71
- fig1, ax1 = plt.subplots(figsize=(12, 4))
72
  time_axis = np.linspace(0, duration, len(audio))
73
  ax1.plot(time_axis, audio, color='blue', linewidth=0.5)
74
- ax1.set_title('Forma de Onda do Áudio', fontsize=14, fontweight='bold')
75
  ax1.set_xlabel('Tempo (s)')
76
  ax1.set_ylabel('Amplitude')
77
  ax1.grid(True, alpha=0.3)
78
- ax1.set_facecolor('#f8f9fa')
79
 
80
- # Plot 2: Features heatmap (primeiras 50 features)
81
- fig2, ax2 = plt.subplots(figsize=(12, 8))
82
- features_subset = features[:, :50].T # Transpor para ter features nas linhas
83
- sns.heatmap(features_subset, ax=ax2, cmap='viridis', cbar_kws={'label': 'Valor da Feature'})
84
- ax2.set_title('Mapa de Calor das Features WavLM (primeiras 50 dimensões)', fontsize=14, fontweight='bold')
85
  ax2.set_xlabel('Frame Temporal')
86
  ax2.set_ylabel('Dimensão da Feature')
 
 
87
 
88
  return audio_info, fig1, fig2
89
 
90
  except Exception as e:
91
- return f"❌ **Erro ao processar áudio:** {str(e)}\n\nVerifique se o arquivo é um áudio válido.", None, None
92
 
93
- def create_demo():
94
- """Cria a interface do Gradio"""
 
 
 
 
 
 
 
 
 
 
95
 
96
- with gr.Blocks(title="WavLM-Large Demo", theme=gr.themes.Soft()) as demo:
97
- gr.Markdown("""
98
- # 🎵 WavLM-Large Demo
99
-
100
- Este é uma demonstração do modelo **WavLM-Large** da Microsoft, disponibilizado por marcosremar2.
101
-
102
- O WavLM é um modelo de aprendizado auto-supervisionado para processamento de fala que pode:
103
- - Extrair representações ricas de áudio
104
- - Ser usado para reconhecimento de fala
105
- - Classificação de áudio
106
- - Verificação de locutor
107
- - E muito mais!
108
-
109
- ## 📁 Como usar:
110
- 1. Carregue um arquivo de áudio (WAV, MP3, etc.)
111
- 2. Clique em "Processar Áudio"
112
- 3. Veja as informações extraídas e visualizações das features
113
- """)
114
-
115
- with gr.Row():
116
- with gr.Column(scale=1):
117
- audio_input = gr.Audio(
118
- label="Carregar Arquivo de Áudio",
119
- type="filepath"
120
- )
121
- process_btn = gr.Button(
122
- "🎯 Processar Áudio",
123
- variant="primary",
124
- size="lg"
125
- )
126
-
127
- gr.Markdown("""
128
- ### 💡 Dicas:
129
- - Arquivos de até 30 segundos (será cortado automaticamente)
130
- - O modelo espera áudio em 16kHz (convertido automaticamente)
131
- - Formatos suportados: WAV, MP3, FLAC, M4A
132
- - Para melhores resultados, use áudio de fala limpo
133
- """)
134
-
135
- with gr.Column(scale=2):
136
- info_output = gr.Markdown(label="Informações do Processamento")
137
-
138
- with gr.Row():
139
- waveform_plot = gr.Plot(label="Forma de Onda")
140
- features_plot = gr.Plot(label="Features Extraídas")
141
-
142
- # Event handlers
143
- process_btn.click(
144
- fn=process_audio,
145
- inputs=[audio_input],
146
- outputs=[info_output, waveform_plot, features_plot]
147
- )
148
-
149
- gr.Markdown("""
150
- ---
151
- ### 📚 Sobre o WavLM-Large:
152
- - **Modelo**: microsoft/wavlm-large
153
- - **Parâmetros**: ~317M
154
- - **Treinado em**: 94k horas de áudio (Libri-Light, GigaSpeech, VoxPopuli)
155
- - **Paper**: [WavLM: Large-Scale Self-Supervised Pre-Training for Full Stack Speech Processing](https://arxiv.org/abs/2110.13900)
156
- - **Repositório**: [marcosremar2/wavlm-large-deploy](https://huggingface.co/marcosremar2/wavlm-large-deploy)
157
-
158
- ### ⚙️ Detalhes Técnicos:
159
- - **Arquitetura**: Transformer de 24 camadas
160
- - **Hidden Size**: 1024
161
- - **Attention Heads**: 16
162
- - **Taxa de Amostragem**: 16kHz
163
- """)
164
 
165
- return demo
 
 
 
 
 
 
166
 
167
  if __name__ == "__main__":
168
- demo = create_demo()
169
- demo.launch()
 
1
  import gradio as gr
2
  import torch
 
3
  import numpy as np
4
  from transformers import AutoModel, Wav2Vec2Processor
5
  import librosa
6
  import matplotlib.pyplot as plt
 
7
 
8
  # Configurar o modelo
9
  MODEL_NAME = "marcosremar2/wavlm-large-deploy"
 
25
  def process_audio(audio_file):
26
  """Processa o arquivo de áudio e extrai features"""
27
  if audio_file is None:
28
+ return "Por favor, carregue um arquivo de áudio.", None, None
29
 
30
  if processor is None or model is None:
31
+ return "Erro: Modelo não foi carregado corretamente. Verifique os logs.", None, None
32
 
33
  try:
34
  # Carregar áudio
 
49
  # Informações sobre o áudio
50
  duration = len(audio) / sr
51
  audio_info = f"""
52
+ ## 📊 Informações do Áudio:
53
+ - **Duração**: {duration:.2f} segundos
54
+ - **Taxa de amostragem**: {sr} Hz
55
+ - **Número de amostras**: {len(audio)}
56
+
57
+ ## 🧠 Saída do Modelo WavLM-Large:
58
+ - **Shape das features**: {hidden_states.shape}
59
+ - **Dimensões**: {hidden_states.shape[1]} frames × {hidden_states.shape[2]} features
60
+ - **Modelo**: {MODEL_NAME}
61
+
62
+ ✅ **Status**: Processamento concluído com sucesso!
63
  """
64
 
65
  # Criar visualização das features
66
  features = hidden_states.squeeze(0).cpu().numpy()
67
 
68
  # Plot 1: Waveform
69
+ fig1, ax1 = plt.subplots(figsize=(10, 4))
70
  time_axis = np.linspace(0, duration, len(audio))
71
  ax1.plot(time_axis, audio, color='blue', linewidth=0.5)
72
+ ax1.set_title('Forma de Onda do Áudio', fontsize=14)
73
  ax1.set_xlabel('Tempo (s)')
74
  ax1.set_ylabel('Amplitude')
75
  ax1.grid(True, alpha=0.3)
76
+ plt.tight_layout()
77
 
78
+ # Plot 2: Features heatmap (primeiras 32 features para visualização mais rápida)
79
+ fig2, ax2 = plt.subplots(figsize=(10, 6))
80
+ features_subset = features[:min(100, features.shape[0]), :32].T # Limitar frames também
81
+ im = ax2.imshow(features_subset, aspect='auto', cmap='viridis')
82
+ ax2.set_title('Features WavLM (primeiras 32 dimensões)', fontsize=14)
83
  ax2.set_xlabel('Frame Temporal')
84
  ax2.set_ylabel('Dimensão da Feature')
85
+ plt.colorbar(im, ax=ax2, label='Valor da Feature')
86
+ plt.tight_layout()
87
 
88
  return audio_info, fig1, fig2
89
 
90
  except Exception as e:
91
+ return f"❌ **Erro ao processar áudio**: {str(e)}\n\nVerifique se o arquivo é um áudio válido.", None, None
92
 
93
+ # Interface Gradio simples
94
+ demo = gr.Interface(
95
+ fn=process_audio,
96
+ inputs=gr.Audio(type="filepath", label="Carregar Arquivo de Áudio"),
97
+ outputs=[
98
+ gr.Markdown(label="Informações"),
99
+ gr.Plot(label="Forma de Onda"),
100
+ gr.Plot(label="Features WavLM")
101
+ ],
102
+ title="🎵 WavLM-Large Demo",
103
+ description="""
104
+ Demonstração do modelo **WavLM-Large** da Microsoft.
105
 
106
+ **Como usar**:
107
+ 1. Carregue um arquivo de áudio (WAV, MP3, etc.)
108
+ 2. Veja as informações extraídas e visualizações das features
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
109
 
110
+ **Limitações**:
111
+ - Máximo 30 segundos de áudio
112
+ - Arquivos grandes podem demorar para processar
113
+ """,
114
+ examples=[],
115
+ cache_examples=False
116
+ )
117
 
118
  if __name__ == "__main__":
119
+ demo.launch(share=True)
 
requirements.txt CHANGED
@@ -1,9 +1,7 @@
1
- gradio>=4.44.0
2
  torch>=2.0.0
3
- torchaudio>=2.0.0
4
  transformers>=4.35.0
5
  librosa>=0.10.0
6
  matplotlib>=3.7.0
7
- seaborn>=0.12.0
8
  numpy>=1.24.0
9
  soundfile>=0.12.0
 
1
+ gradio==4.32.0
2
  torch>=2.0.0
 
3
  transformers>=4.35.0
4
  librosa>=0.10.0
5
  matplotlib>=3.7.0
 
6
  numpy>=1.24.0
7
  soundfile>=0.12.0