marcosremar2 commited on
Commit
b5c4e01
·
1 Parent(s): 889e0f6

Fix WavLM processor and update dependencies

Browse files
Files changed (2) hide show
  1. app.py +32 -14
  2. requirements.txt +5 -5
app.py CHANGED
@@ -2,7 +2,7 @@ import gradio as gr
2
  import torch
3
  import torchaudio
4
  import numpy as np
5
- from transformers import AutoModel, AutoProcessor
6
  import librosa
7
  import matplotlib.pyplot as plt
8
  import seaborn as sns
@@ -13,11 +13,13 @@ MODEL_NAME = "marcosremar2/wavlm-large-deploy"
13
  def load_model():
14
  """Carrega o modelo WavLM-Large"""
15
  try:
16
- processor = AutoProcessor.from_pretrained(MODEL_NAME)
 
17
  model = AutoModel.from_pretrained(MODEL_NAME)
18
  model.eval()
19
  return processor, model
20
  except Exception as e:
 
21
  return None, None
22
 
23
  processor, model = load_model()
@@ -28,17 +30,22 @@ def process_audio(audio_file):
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.", None, None
32
 
33
  try:
34
  # Carregar áudio
35
  audio, sr = librosa.load(audio_file, sr=16000)
36
 
 
 
 
 
 
37
  # Processar com o modelo
38
- inputs = processor(audio, sampling_rate=16000, return_tensors="pt")
39
 
40
  with torch.no_grad():
41
- outputs = model(**inputs)
42
  hidden_states = outputs.last_hidden_state
43
 
44
  # Informações sobre o áudio
@@ -53,32 +60,35 @@ def process_audio(audio_file):
53
  - Shape das features: {hidden_states.shape}
54
  - Dimensões: {hidden_states.shape[1]} frames × {hidden_states.shape[2]} features
55
  - Modelo: {MODEL_NAME}
 
 
56
  """
57
 
58
  # Criar visualização das features
59
- features = hidden_states.squeeze(0).numpy()
60
 
61
  # Plot 1: Waveform
62
  fig1, ax1 = plt.subplots(figsize=(12, 4))
63
  time_axis = np.linspace(0, duration, len(audio))
64
- ax1.plot(time_axis, audio)
65
- ax1.set_title('Forma de Onda do Áudio')
66
  ax1.set_xlabel('Tempo (s)')
67
  ax1.set_ylabel('Amplitude')
68
  ax1.grid(True, alpha=0.3)
 
69
 
70
  # Plot 2: Features heatmap (primeiras 50 features)
71
  fig2, ax2 = plt.subplots(figsize=(12, 8))
72
  features_subset = features[:, :50].T # Transpor para ter features nas linhas
73
  sns.heatmap(features_subset, ax=ax2, cmap='viridis', cbar_kws={'label': 'Valor da Feature'})
74
- ax2.set_title('Mapa de Calor das Features WavLM (primeiras 50 dimensões)')
75
  ax2.set_xlabel('Frame Temporal')
76
  ax2.set_ylabel('Dimensão da Feature')
77
 
78
  return audio_info, fig1, fig2
79
 
80
  except Exception as e:
81
- return f"Erro ao processar áudio: {str(e)}", None, None
82
 
83
  def create_demo():
84
  """Cria a interface do Gradio"""
@@ -87,7 +97,7 @@ def create_demo():
87
  gr.Markdown("""
88
  # 🎵 WavLM-Large Demo
89
 
90
- Este é um demonstração do modelo **WavLM-Large** da Microsoft, adaptado e disponibilizado por marcosremar2.
91
 
92
  O WavLM é um modelo de aprendizado auto-supervisionado para processamento de fala que pode:
93
  - Extrair representações ricas de áudio
@@ -110,14 +120,16 @@ def create_demo():
110
  )
111
  process_btn = gr.Button(
112
  "🎯 Processar Áudio",
113
- variant="primary"
 
114
  )
115
 
116
  gr.Markdown("""
117
  ### 💡 Dicas:
118
- - Arquivos de áudio de até 30 segundos funcionam melhor
119
- - O modelo espera áudio em 16kHz (será convertido automaticamente)
120
  - Formatos suportados: WAV, MP3, FLAC, M4A
 
121
  """)
122
 
123
  with gr.Column(scale=2):
@@ -142,6 +154,12 @@ def create_demo():
142
  - **Treinado em**: 94k horas de áudio (Libri-Light, GigaSpeech, VoxPopuli)
143
  - **Paper**: [WavLM: Large-Scale Self-Supervised Pre-Training for Full Stack Speech Processing](https://arxiv.org/abs/2110.13900)
144
  - **Repositório**: [marcosremar2/wavlm-large-deploy](https://huggingface.co/marcosremar2/wavlm-large-deploy)
 
 
 
 
 
 
145
  """)
146
 
147
  return demo
 
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
 
13
  def load_model():
14
  """Carrega o modelo WavLM-Large"""
15
  try:
16
+ # Usar Wav2Vec2Processor para WavLM
17
+ processor = Wav2Vec2Processor.from_pretrained("facebook/wav2vec2-base-960h")
18
  model = AutoModel.from_pretrained(MODEL_NAME)
19
  model.eval()
20
  return processor, model
21
  except Exception as e:
22
+ print(f"Erro ao carregar modelo: {e}")
23
  return None, None
24
 
25
  processor, model = load_model()
 
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
37
  audio, sr = librosa.load(audio_file, sr=16000)
38
 
39
+ # Limitar duração para evitar problemas de memória
40
+ max_duration = 30 # segundos
41
+ if len(audio) > max_duration * sr:
42
+ audio = audio[:max_duration * sr]
43
+
44
  # Processar com o modelo
45
+ inputs = processor(audio, sampling_rate=16000, return_tensors="pt", padding=True)
46
 
47
  with torch.no_grad():
48
+ outputs = model(inputs.input_values)
49
  hidden_states = outputs.last_hidden_state
50
 
51
  # Informações sobre o áudio
 
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"""
 
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
 
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):
 
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
requirements.txt CHANGED
@@ -1,9 +1,9 @@
1
- gradio>=4.0.0
2
  torch>=2.0.0
3
  torchaudio>=2.0.0
4
- transformers>=4.30.0
5
  librosa>=0.10.0
6
- matplotlib>=3.5.0
7
- seaborn>=0.11.0
8
- numpy>=1.21.0
9
  soundfile>=0.12.0
 
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