Lorenzob commited on
Commit
78ff707
·
verified ·
1 Parent(s): e0a3b9f

Update Gradio app for Aurora-1.6b-complete TTS

Browse files
Files changed (4) hide show
  1. .gitattributes +0 -33
  2. README.md +51 -12
  3. app.py +201 -0
  4. requirements.txt +11 -0
.gitattributes CHANGED
@@ -1,35 +1,2 @@
1
- *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
- *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
- *.h5 filter=lfs diff=lfs merge=lfs -text
9
- *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
- *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
- *.npy filter=lfs diff=lfs merge=lfs -text
15
- *.npz filter=lfs diff=lfs merge=lfs -text
16
- *.onnx filter=lfs diff=lfs merge=lfs -text
17
- *.ot filter=lfs diff=lfs merge=lfs -text
18
- *.parquet filter=lfs diff=lfs merge=lfs -text
19
- *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pickle filter=lfs diff=lfs merge=lfs -text
21
- *.pkl filter=lfs diff=lfs merge=lfs -text
22
  *.pt filter=lfs diff=lfs merge=lfs -text
23
- *.pth filter=lfs diff=lfs merge=lfs -text
24
- *.rar filter=lfs diff=lfs merge=lfs -text
25
  *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
- *.tflite filter=lfs diff=lfs merge=lfs -text
30
- *.tgz filter=lfs diff=lfs merge=lfs -text
31
- *.wasm filter=lfs diff=lfs merge=lfs -text
32
- *.xz filter=lfs diff=lfs merge=lfs -text
33
- *.zip filter=lfs diff=lfs merge=lfs -text
34
- *.zst filter=lfs diff=lfs merge=lfs -text
35
- *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  *.pt filter=lfs diff=lfs merge=lfs -text
 
 
2
  *.safetensors filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
README.md CHANGED
@@ -1,12 +1,51 @@
1
- ---
2
- title: Aurora 1.6b
3
- emoji: 🌍
4
- colorFrom: purple
5
- colorTo: yellow
6
- sdk: gradio
7
- sdk_version: 5.29.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
+ # 🎙️ Aurora-1.6b-complete Text-to-Speech Demo
3
+
4
+ Questa è una dimostrazione del modello Aurora-1.6b-complete per la sintesi vocale (Text-to-Speech), un modello fine-tuned basato su Dia-1.6B con pesi completi.
5
+
6
+ ## 📋 Funzionalità
7
+
8
+ - **Conversione testo-voce** in italiano, inglese, spagnolo, francese e tedesco
9
+ - **Controllo della velocità** per regolare il ritmo dell'audio generato
10
+ - **Interfaccia intuitiva** con esempi predefiniti
11
+
12
+ ## 🇮🇹 Ottimizzazione per l'italiano
13
+
14
+ Questo modello è stato ottimizzato specificamente per la lingua italiana, offrendo una pronuncia più naturale e fluida rispetto al modello base.
15
+
16
+ ## 💻 Come utilizzare
17
+
18
+ 1. Inserisci il testo che desideri convertire in voce
19
+ 2. Seleziona la lingua del testo
20
+ 3. Regola la velocità della voce se necessario
21
+ 4. Clicca su "Genera Audio" per creare l'audio
22
+
23
+ ## 🔬 Dettagli tecnici
24
+
25
+ - Modello base: [nari-labs/Dia-1.6B](https://huggingface.co/nari-labs/Dia-1.6B)
26
+ - Versione fine-tuned: [Lorenzob/aurora-1.6b](https://huggingface.co/Lorenzob/aurora-1.6b)
27
+ - Versione completa: [Lorenzob/aurora-1.6b-complete](https://huggingface.co/Lorenzob/aurora-1.6b-complete)
28
+ - Architettura: SpeechT5
29
+
30
+ ## 📚 Limitazioni
31
+
32
+ - Il modello può avere difficoltà con testi molto lunghi
33
+ - Alcune parole tecniche o rare potrebbero non essere pronunciate correttamente
34
+ - I tempi di generazione dipendono dalle risorse disponibili sul server
35
+
36
+ ## 📝 Citazione
37
+
38
+ Se utilizzi questo modello nei tuoi progetti, ti preghiamo di citare:
39
+
40
+ @misc{aurora-tts-2023,
41
+ author = {Lorenzo B.},
42
+ title = {Aurora-1.6b-complete: Italian-optimized Text-to-Speech model with full weights},
43
+ year = {2023},
44
+ publisher = {Hugging Face},
45
+ url = {https://huggingface.co/Lorenzob/aurora-1.6b-complete}
46
+ }
47
+
48
+ ## 🙏 Riconoscimenti
49
+
50
+ - [nari-labs](https://huggingface.co/nari-labs) per il modello Dia-1.6B
51
+ - [Hugging Face](https://huggingface.co) per l'infrastruttura e gli strumenti
app.py ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import gradio as gr
3
+ import torch
4
+ import os
5
+ from transformers import AutoProcessor, AutoModelForSpeechGeneration, set_seed
6
+ import numpy as np
7
+ from scipy import signal
8
+ import warnings
9
+ warnings.filterwarnings("ignore")
10
+
11
+ # Imposta un seed per la riproducibilità
12
+ set_seed(42)
13
+
14
+ # Definizioni di variabili globali
15
+ MODEL_REPO = "Lorenzob/aurora-1.6b-complete" # Repository aggiornata con il modello completo
16
+ SAMPLE_RATE = 24000 # Frequenza di campionamento per il modello TTS
17
+
18
+ # Cache per il modello e il processor (per evitare di ricaricarli ad ogni richiesta)
19
+ model = None
20
+ processor = None
21
+
22
+ def load_model_and_processor():
23
+ """Carica il modello e il processor solo se non sono già stati caricati"""
24
+ global model, processor
25
+
26
+ if model is None or processor is None:
27
+ try:
28
+ print("📂 Caricamento del modello Aurora-1.6b-complete...")
29
+ processor = AutoProcessor.from_pretrained(MODEL_REPO)
30
+ model = AutoModelForSpeechGeneration.from_pretrained(
31
+ MODEL_REPO,
32
+ torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
33
+ device_map="auto"
34
+ )
35
+ print("✅ Modello caricato con successo!")
36
+ except Exception as e:
37
+ print(f"❌ Errore nel caricamento del modello: {e}")
38
+ # Fallback al modello originale di Dia se il caricamento fallisce
39
+ print("⚠️ Tentativo di fallback al modello Dia-1.6B...")
40
+ processor = AutoProcessor.from_pretrained("nari-labs/Dia-1.6B")
41
+ model = AutoModelForSpeechGeneration.from_pretrained(
42
+ "nari-labs/Dia-1.6B",
43
+ torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
44
+ device_map="auto"
45
+ )
46
+ print("✅ Modello di fallback caricato con successo!")
47
+
48
+ return model, processor
49
+
50
+ def text_to_speech(text, language="it", speaker_id=0, speed=1.0, show_log=False):
51
+ """Converte testo in voce utilizzando il modello TTS"""
52
+ if not text.strip():
53
+ return None, "Per favore, inserisci del testo da convertire in voce."
54
+
55
+ # Log di debug
56
+ if show_log:
57
+ print(f"Richiesta TTS ricevuta: '{text}' (Lingua: {language}, Speaker: {speaker_id}, Velocità: {speed})")
58
+
59
+ try:
60
+ # Carica il modello e il processor (se non già caricati)
61
+ model, processor = load_model_and_processor()
62
+
63
+ # Prepara gli input per il modello
64
+ inputs = processor(
65
+ text=text,
66
+ language=language,
67
+ return_tensors="pt"
68
+ )
69
+
70
+ # Sposta gli input sul dispositivo di calcolo
71
+ for k, v in inputs.items():
72
+ if hasattr(v, "to"):
73
+ inputs[k] = v.to(model.device)
74
+
75
+ # Parametri per la generazione
76
+ gen_params = {
77
+ "do_sample": True,
78
+ "temperature": 0.7,
79
+ "top_k": 50,
80
+ "top_p": 0.95,
81
+ }
82
+
83
+ # Genera il speech
84
+ with torch.no_grad():
85
+ speech = model.generate(**inputs, **gen_params)
86
+
87
+ # Converti il tensore in un array numpy
88
+ speech_array = speech.cpu().numpy().squeeze()
89
+
90
+ # Applica il controllo della velocità
91
+ if speed != 1.0:
92
+ # Usa scipy.signal per ricampionare l'audio e cambiare la velocità
93
+ speech_array = signal.resample(speech_array, int(len(speech_array) / speed))
94
+
95
+ if show_log:
96
+ print(f"✅ Audio generato con successo! Lunghezza: {len(speech_array)} campioni")
97
+
98
+ return (SAMPLE_RATE, speech_array), None
99
+ except Exception as e:
100
+ error_msg = f"Errore nella generazione dell'audio: {str(e)}"
101
+ print(f"❌ {error_msg}")
102
+ return None, error_msg
103
+
104
+ # Esempi predefiniti per l'interfaccia
105
+ examples = [
106
+ ["Ciao, mi chiamo Aurora e sono un assistente vocale italiano.", "it", 0, 1.0, False],
107
+ ["Hello, my name is Aurora and I'm an Italian voice assistant.", "en", 0, 1.0, False],
108
+ ["Hola, me llamo Aurora y soy un asistente de voz italiano.", "es", 0, 1.0, False],
109
+ ["La vita è bella e il sole splende nel cielo azzurro.", "it", 0, 1.0, False],
110
+ ["Mi piace viaggiare e scoprire nuove città e culture.", "it", 0, 1.2, False],
111
+ ["L'intelligenza artificiale sta trasformando il modo in cui interagiamo con i computer e con il mondo che ci circonda.", "it", 0, 0.9, False]
112
+ ]
113
+
114
+ # Definizione dell'interfaccia Gradio
115
+ with gr.Blocks(title="Aurora-1.6b TTS Demo", theme=gr.themes.Soft()) as demo:
116
+ gr.Markdown("""
117
+ # 🎙️ Aurora-1.6b Text-to-Speech Demo
118
+
119
+ Questa demo utilizza il modello **Aurora-1.6b-complete** per la sintesi vocale (TTS), un modello fine-tuned basato su Dia-1.6B con pesi completi.
120
+
121
+ Il modello supporta italiano, inglese, spagnolo, francese e tedesco, ma è stato ottimizzato per l'italiano.
122
+ """)
123
+
124
+ with gr.Row():
125
+ with gr.Column(scale=2):
126
+ text_input = gr.Textbox(
127
+ label="Testo da convertire in voce",
128
+ placeholder="Inserisci qui il testo da convertire...",
129
+ lines=5,
130
+ value="Ciao, sono Aurora, un assistente vocale italiano basato su intelligenza artificiale."
131
+ )
132
+
133
+ with gr.Row():
134
+ language_input = gr.Dropdown(
135
+ choices=["it", "en", "es", "fr", "de"],
136
+ label="Lingua",
137
+ value="it",
138
+ info="Seleziona la lingua del testo"
139
+ )
140
+ speaker_input = gr.Number(
141
+ label="Speaker ID",
142
+ value=0,
143
+ minimum=0,
144
+ maximum=10,
145
+ step=1,
146
+ info="ID dello speaker (solo per modelli multi-speaker)"
147
+ )
148
+ speed_input = gr.Slider(
149
+ minimum=0.5,
150
+ maximum=1.5,
151
+ value=1.0,
152
+ step=0.1,
153
+ label="Velocità",
154
+ info="Valori più bassi = voce più lenta, valori più alti = voce più veloce"
155
+ )
156
+
157
+ debug_input = gr.Checkbox(label="Mostra log di debug", value=False)
158
+
159
+ submit_btn = gr.Button("Genera Audio", variant="primary")
160
+
161
+ with gr.Column(scale=1):
162
+ audio_output = gr.Audio(label="Audio generato", show_share_button=True)
163
+ error_output = gr.Textbox(label="Messaggi di errore", visible=True)
164
+
165
+ # Esempi
166
+ gr.Examples(
167
+ examples=examples,
168
+ inputs=[text_input, language_input, speaker_input, speed_input, debug_input],
169
+ outputs=[audio_output, error_output],
170
+ fn=text_to_speech,
171
+ cache_examples=True,
172
+ )
173
+
174
+ # Info aggiuntive
175
+ gr.Markdown("""
176
+ ## 📝 Note sull'utilizzo
177
+
178
+ - Il modello funziona meglio con frasi di lunghezza media (fino a 20-30 parole)
179
+ - Per l'italiano, il modello è stato ottimizzato per una pronuncia naturale
180
+ - La velocità di generazione dipende dalle risorse disponibili sul server
181
+
182
+ ## 🔗 Crediti
183
+
184
+ Questo modello è una combinazione di:
185
+ - [Lorenzob/aurora-1.6b](https://huggingface.co/Lorenzob/aurora-1.6b) (versione fine-tuned)
186
+ - [Lorenzob/aurora-1.6b-complete](https://huggingface.co/Lorenzob/aurora-1.6b-complete) (versione completa con pesi)
187
+ - [nari-labs/Dia-1.6B](https://huggingface.co/nari-labs/Dia-1.6B) (modello base originale)
188
+ """)
189
+
190
+ # Configurazione degli eventi
191
+ submit_btn.click(
192
+ fn=text_to_speech,
193
+ inputs=[text_input, language_input, speaker_input, speed_input, debug_input],
194
+ outputs=[audio_output, error_output],
195
+ )
196
+
197
+ # Precarica il modello quando l'app viene avviata
198
+ load_model_and_processor()
199
+
200
+ # Avvia l'interfaccia
201
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ transformers>=4.30.0
3
+ torch>=1.13.0
4
+ torchaudio>=0.13.0
5
+ gradio>=3.50.0
6
+ numpy>=1.19.0
7
+ scipy>=1.10.0
8
+ soundfile>=0.12.1
9
+ accelerate>=0.20.0
10
+ sentencepiece>=0.1.99
11
+ safetensors>=0.3.1