7Miiik commited on
Commit
2b3b2a1
·
verified ·
1 Parent(s): 8bcb7f5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +70 -52
app.py CHANGED
@@ -1,17 +1,51 @@
1
  import gradio as gr
2
  from transformers import pipeline
3
  import os
4
- from gtts import gTTS # Importamos gTTS
5
-
6
- # Función para convertir texto a audio
7
- def convertir_texto_a_audio(texto, nombre_archivo):
8
- tts = gTTS(text=texto, lang='es')
9
- tts.save(nombre_archivo)
10
-
11
- # Creamos un modelo de resumen más ligero
12
- resumidor = pipeline("summarization", model="t5-small")
13
-
14
- # Creamos un modelo de generación de diálogo más ligero
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  dialogador = pipeline("text-generation", model="microsoft/DialoGPT-small")
16
 
17
  def transformar_texto(archivo):
@@ -19,77 +53,61 @@ def transformar_texto(archivo):
19
  raise gr.Error("Por favor, sube un archivo de texto.")
20
 
21
  try:
22
- # Lee el contenido del archivo subido
23
  with open(archivo.name, 'r', encoding='utf-8') as f:
24
  texto = f.read()
25
  except Exception as e:
26
  raise gr.Error(f"Error al leer el archivo: {e}")
27
 
28
- # Limitación para la versión gratuita
29
- max_palabras = 1000 # Puedes ajustar este número
30
  num_palabras = len(texto.split())
31
  if num_palabras > max_palabras:
32
- raise gr.Error(f"El texto excede el límite de {max_palabras} palabras para la versión gratuita.")
33
 
34
  try:
35
- # Resumimos el texto
36
- resumen = resumidor(
37
- texto,
38
- max_length=50,
39
- min_length=25,
40
- do_sample=False,
41
- clean_up_tokenization_spaces=True
42
- )[0]['summary_text']
43
- except Exception as e:
44
- raise gr.Error(f"Error al resumir el texto: {e}")
45
 
46
- try:
47
- # Generamos una conversación basada en el resumen
48
- prompt = f"Crear una conversación entre dos personas sobre: {resumen}"
 
 
 
 
 
 
 
 
 
49
  conversacion = dialogador(
50
  prompt,
51
- max_length=200,
52
  num_return_sequences=1,
53
  clean_up_tokenization_spaces=True
54
  )[0]['generated_text']
55
  except Exception as e:
56
  raise gr.Error(f"Error al generar la conversación: {e}")
57
 
58
- # Convertimos la conversación a audio
59
- ruta_audio = os.path.join("/tmp", "conversacion.mp3")
60
- try:
61
- convertir_texto_a_audio(conversacion, ruta_audio)
62
- except Exception as e:
63
- raise gr.Error(f"Error al convertir texto a audio: {e}")
64
 
65
- return ruta_audio
66
 
67
- # Creamos la interfaz de usuario actualizada
68
  interfaz = gr.Interface(
69
  fn=transformar_texto,
70
  inputs=gr.File(label="Sube tu documento de texto (.txt)"),
71
  outputs=gr.Audio(type="filepath", label="Escucha la conversación generada"),
72
  title="📝➡️🎙️ Transformador de Texto a Conversación",
73
- description="""
74
- Sube un documento de texto y conviértelo en una conversación tipo podcast entre dos personas.
75
-
76
- **Versión Gratuita:**
77
- - Límite de 1000 palabras por texto.
78
- - Conversación básica entre dos personas.
79
-
80
- **Próximamente:**
81
- - Versiones premium sin límites.
82
- - Personalización de voces y estilos.
83
- - Descarga en formato de audio.
84
-
85
- ¡Mantente atento para más actualizaciones!
86
- """, # Asegúrate de que las comillas triples cierran aquí
87
  theme="default",
88
  allow_flagging="never"
89
  )
90
 
91
  interfaz.launch()
92
 
93
-
94
 
95
 
 
1
  import gradio as gr
2
  from transformers import pipeline
3
  import os
4
+ from TTS.api import TTS
5
+ from pydub import AudioSegment
6
+
7
+ # Inicializar los modelos de Coqui TTS para dos voces
8
+ tts_juan = TTS(model_name="tts_models/es/mai/tacotron2-DDC", progress_bar=False, gpu=False)
9
+ tts_maria = TTS(model_name="tts_models/es/css10/vits", progress_bar=False, gpu=False)
10
+
11
+ # Función para convertir texto a audio con voces diferentes
12
+ def convertir_texto_a_audio(texto, nombre_archivo, voz):
13
+ if voz == "Juan":
14
+ tts_juan.tts_to_file(text=texto, file_path=nombre_archivo)
15
+ elif voz == "María":
16
+ tts_maria.tts_to_file(text=texto, file_path=nombre_archivo)
17
+ else:
18
+ # Voz predeterminada
19
+ tts_juan.tts_to_file(text=texto, file_path=nombre_archivo)
20
+
21
+ def procesar_conversacion(conversacion):
22
+ lineas = conversacion.strip().split('\n')
23
+ dialogos = []
24
+ for linea in lineas:
25
+ if linea.startswith("Juan:"):
26
+ dialogos.append(("Juan", linea.replace("Juan:", "").strip()))
27
+ elif linea.startswith("María:"):
28
+ dialogos.append(("María", linea.replace("María:", "").strip()))
29
+ return dialogos
30
+
31
+ def generar_audio_conversacion(dialogos):
32
+ audios = []
33
+ for idx, (persona, texto) in enumerate(dialogos):
34
+ ruta_audio = os.path.join("/tmp", f"dialogo_{idx}.wav")
35
+ convertir_texto_a_audio(texto, ruta_audio, persona)
36
+ audios.append(ruta_audio)
37
+ return audios
38
+
39
+ def combinar_audios(rutas_audios):
40
+ conversacion_audio = AudioSegment.empty()
41
+ for ruta in rutas_audios:
42
+ audio = AudioSegment.from_file(ruta)
43
+ conversacion_audio += audio
44
+ ruta_final = os.path.join("/tmp", "conversacion_final.wav")
45
+ conversacion_audio.export(ruta_final, format="wav")
46
+ return ruta_final
47
+
48
+ # Creamos el modelo de generación de diálogo
49
  dialogador = pipeline("text-generation", model="microsoft/DialoGPT-small")
50
 
51
  def transformar_texto(archivo):
 
53
  raise gr.Error("Por favor, sube un archivo de texto.")
54
 
55
  try:
 
56
  with open(archivo.name, 'r', encoding='utf-8') as f:
57
  texto = f.read()
58
  except Exception as e:
59
  raise gr.Error(f"Error al leer el archivo: {e}")
60
 
61
+ max_palabras = 1000
 
62
  num_palabras = len(texto.split())
63
  if num_palabras > max_palabras:
64
+ raise gr.Error(f"El texto excede el límite de {max_palabras} palabras.")
65
 
66
  try:
67
+ # Generamos la conversación utilizando el texto completo
68
+ prompt = f"""
69
+ Crear una conversación entre dos personas, Juan y María, donde Juan hace preguntas sobre el siguiente texto y María responde:
 
 
 
 
 
 
 
70
 
71
+ {texto}
72
+
73
+ La conversación debe estar en el siguiente formato:
74
+
75
+ Juan: [pregunta]
76
+ María: [respuesta]
77
+ Juan: [pregunta]
78
+ María: [respuesta]
79
+ ...
80
+
81
+ La conversación debe ser educativa y cubrir los puntos principales del texto.
82
+ """
83
  conversacion = dialogador(
84
  prompt,
85
+ max_length=2000,
86
  num_return_sequences=1,
87
  clean_up_tokenization_spaces=True
88
  )[0]['generated_text']
89
  except Exception as e:
90
  raise gr.Error(f"Error al generar la conversación: {e}")
91
 
92
+ # Procesamos la conversación y generamos los audios
93
+ dialogos = procesar_conversacion(conversacion)
94
+ rutas_audios = generar_audio_conversacion(dialogos)
95
+ ruta_audio_final = combinar_audios(rutas_audios)
 
 
96
 
97
+ return ruta_audio_final
98
 
99
+ # Crear la interfaz de usuario
100
  interfaz = gr.Interface(
101
  fn=transformar_texto,
102
  inputs=gr.File(label="Sube tu documento de texto (.txt)"),
103
  outputs=gr.Audio(type="filepath", label="Escucha la conversación generada"),
104
  title="📝➡️🎙️ Transformador de Texto a Conversación",
105
+ description="Sube un documento de texto y conviértelo en una conversación educativa entre dos personas.",
 
 
 
 
 
 
 
 
 
 
 
 
 
106
  theme="default",
107
  allow_flagging="never"
108
  )
109
 
110
  interfaz.launch()
111
 
 
112
 
113