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

Add WavLM-Large demo with Gradio interface

Browse files
Files changed (3) hide show
  1. README.md +45 -5
  2. app.py +151 -0
  3. requirements.txt +9 -0
README.md CHANGED
@@ -1,12 +1,52 @@
1
  ---
2
- title: Wavlm Large Demo
3
- emoji: 🏃
4
- colorFrom: yellow
5
- colorTo: indigo
6
  sdk: gradio
7
- sdk_version: 5.32.0
8
  app_file: app.py
9
  pinned: false
 
10
  ---
11
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: WavLM-Large Demo
3
+ emoji: 🎵
4
+ colorFrom: blue
5
+ colorTo: purple
6
  sdk: gradio
7
+ sdk_version: 4.0.0
8
  app_file: app.py
9
  pinned: false
10
+ license: mit
11
  ---
12
 
13
+ # 🎵 WavLM-Large Demo
14
+
15
+ Este é uma demonstração interativa do modelo **WavLM-Large** da Microsoft, disponibilizado através do repositório [marcosremar2/wavlm-large-deploy](https://huggingface.co/marcosremar2/wavlm-large-deploy).
16
+
17
+ ## 🚀 Funcionalidades
18
+
19
+ - **Processamento de Áudio**: Carregue arquivos de áudio e veja as features extraídas
20
+ - **Visualizações**: Forma de onda e mapa de calor das features
21
+ - **Informações Detalhadas**: Estatísticas do áudio e saída do modelo
22
+ - **Interface Amigável**: Interface web intuitiva com Gradio
23
+
24
+ ## 🎯 Como usar
25
+
26
+ 1. Carregue um arquivo de áudio (WAV, MP3, FLAC, M4A)
27
+ 2. Clique em "Processar Áudio"
28
+ 3. Veja as visualizações e informações extraídas
29
+
30
+ ## 📊 Sobre o WavLM-Large
31
+
32
+ O WavLM-Large é um modelo de aprendizado auto-supervisionado para processamento de fala com:
33
+
34
+ - **317M parâmetros**
35
+ - **Treinado em 94k horas** de áudio de múltiplas fontes
36
+ - **Arquitetura**: 24 camadas transformer
37
+ - **Aplicações**: Reconhecimento de fala, classificação de áudio, verificação de locutor
38
+
39
+ ## 📚 Referências
40
+
41
+ - **Paper**: [WavLM: Large-Scale Self-Supervised Pre-Training for Full Stack Speech Processing](https://arxiv.org/abs/2110.13900)
42
+ - **Repositório Original**: [microsoft/unilm/wavlm](https://github.com/microsoft/unilm/tree/master/wavlm)
43
+ - **Modelo**: [marcosremar2/wavlm-large-deploy](https://huggingface.co/marcosremar2/wavlm-large-deploy)
44
+
45
+ ## 🛠️ Tecnologias Utilizadas
46
+
47
+ - **Gradio**: Interface web interativa
48
+ - **Transformers**: Carregamento e uso do modelo
49
+ - **LibROSA**: Processamento de áudio
50
+ - **Matplotlib/Seaborn**: Visualizações
51
+
52
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py ADDED
@@ -0,0 +1,151 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 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
9
+
10
+ # Configurar o modelo
11
+ MODEL_NAME = "marcosremar2/wavlm-large-deploy"
12
+
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()
24
+
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.", 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
45
+ duration = len(audio) / sr
46
+ audio_info = f"""
47
+ 📊 **Informações do Áudio:**
48
+ - Duração: {duration:.2f} segundos
49
+ - Taxa de amostragem: {sr} Hz
50
+ - Número de amostras: {len(audio)}
51
+
52
+ 🧠 **Saída do Modelo WavLM-Large:**
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"""
85
+
86
+ with gr.Blocks(title="WavLM-Large Demo", theme=gr.themes.Soft()) as 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
94
+ - Ser usado para reconhecimento de fala
95
+ - Classificação de áudio
96
+ - Verificação de locutor
97
+ - E muito mais!
98
+
99
+ ## 📁 Como usar:
100
+ 1. Carregue um arquivo de áudio (WAV, MP3, etc.)
101
+ 2. Clique em "Processar Áudio"
102
+ 3. Veja as informações extraídas e visualizações das features
103
+ """)
104
+
105
+ with gr.Row():
106
+ with gr.Column(scale=1):
107
+ audio_input = gr.Audio(
108
+ label="Carregar Arquivo de Áudio",
109
+ type="filepath"
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):
124
+ info_output = gr.Markdown(label="Informações do Processamento")
125
+
126
+ with gr.Row():
127
+ waveform_plot = gr.Plot(label="Forma de Onda")
128
+ features_plot = gr.Plot(label="Features Extraídas")
129
+
130
+ # Event handlers
131
+ process_btn.click(
132
+ fn=process_audio,
133
+ inputs=[audio_input],
134
+ outputs=[info_output, waveform_plot, features_plot]
135
+ )
136
+
137
+ gr.Markdown("""
138
+ ---
139
+ ### 📚 Sobre o WavLM-Large:
140
+ - **Modelo**: microsoft/wavlm-large
141
+ - **Parâmetros**: ~317M
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
148
+
149
+ if __name__ == "__main__":
150
+ demo = create_demo()
151
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +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