Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Importar pyttsx - lectura de texto con voz
#1
Hola amigos. Llevo algún tiempo aprendiendo cosillas de python, ahora me interesa crear algún programa que lea en voz alta un texto dado. Debería ser algo muy sencillo, ya que hay módulos para ello, pero soy incapaz de importarlos. Empiezo por decir que corro siempre los programas en Raspberry pi (Devian 9), y en Windows 10, hasta ahora he podido hacerlo sin problemas.

Dado que el módulo pyttsx es para eso, un programa que lea un texto debería ser algo tan sencillo con esto...

Desde la consola instalo... "pip install pyttsx", se instala con éxito. Luego intento hacer correr esto...

import pyttsx
cosa=pyttsx.init()
cosa.say("Hola mundo")
cosa.runAndWait()

Pero la primera línea, la importación, falla, me dice... "from engine import Engine ModuleNotFoundError: No module named 'engine'

Si desde la consola y con pip intento instalar un módulo llamado "engine", empieza a hacerlo, pero da otro error... "Coud not find a version that satisfies the requierement engine (from versions: ) No matching distribution found for engine".

Como mi raspberry es la 4, tengo entendido que hay un móduclo pyttsx3 tal vez más apropiado. Lo instalo con pip, aparentemente todo bien. Pero al intentar...

import pyttsx

obtengo otro error... ModuleNotFoundError: No module named 'pyttsx3'

Así que nada, mi gozo en un pozo. En Windows me pasa más o menos lo mismo, la verdad no sé qué hacer, cualquier ayuda será muy bienvenida.
Responder
#2
Hola, ¿cómo estás?

Yo lo acabo de probar con Windows 8 y Python 3.7 y me funciona perfecto. ¿En Windows te tira el mismo error? ¿Probaste instalando, además, pywin32 vía pip install pypiwin32?

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#3
(30-10-2019, 01:46 PM)Francisco escribió: Hola, ¿cómo estás?

Yo lo acabo de probar con Windows 8 y Python 3.7 y me funciona perfecto. ¿En Windows te tira el mismo error? ¿Probaste instalando, además, pywin32 vía pip install pypiwin32?

Saludos

Hola, muchísimas gracias por tu pronta respuesta. He instalado pywin32, pypiwin32, pyttstx, pyttsx3... al final siempre me pasa lo mismo, en cuanto intento hacer import la orden es rechazada porque no encuentra el módulo. La verdad es que estoy bastante desesperado, me da la impresión de que se trata de un problema de path o algo similar, por lo que sea no encuentra algo, y ya no sé qué hacer... estoy tratando de no usar el proyecto que tengo, sino uno que tenga cero cosas, solo la importación del módulo y que diga algo, de hecho trato de hacerlo desde la consola y nada de nada... el proyecto en el que trabajo es un robot, de momento he hecho una especie de bot que va bastante bien por teclado, mantiene una vistosa conversación con el usuario sobre cualquier tema, y ahora quería que la salida fuera por altavoz. Como me interesa que finalmente corra en raspberry 4 me gustaría hacerlo funcionar en la distribución de Linux, pero en todo caso trabajo indistintamente la programación desde Windows y hasta ahora he conseguido que todo corra bien, de hecho tengo los ficheros en un pendrive y lo muevo del PC a la rasp... pero ahora siento que me estrello contra un muro, seguro que es algo sencillo, me desesperan los vídeos de Youtube, ponen "import pyttsx" y a tirar millas... grrrrrr.
Responder
#4
No mencioné que mi intento fue con el paquete pyttsx3. Acabo de chequear pyttsx y efectivamente obtengo el mismo error que vos (falta el módulo "engine", que probablemente sea algún archivo interno que se han olvidado de subir).

Ahora, mi pregunta es, en Windows, el siguiente código ejecutado de la consola (luego de haber corrido pip install pyttsx3 pypiwin32)...

Código:
>>> import pyttsx3

¿Qué error te tira? ¿Podés copiar y pegar el mensaje completo? (Nótese que es pyttsx3, no pyttsx). Por cierto, ¿qué valores te arrojan los comandos python --version y pip --version?
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#5
Ante todo, muchas gracias por el interés. pyttsx3 está instalado con pip satisfiactoriamente, y al invocarlo para esto..

import pyttsx3
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.2.2\helpers\pydev\_pydev_bundle\pydev_import_hook.py", line 21, in do_import
    module = self._system_import(name, *args, **kwargs)
ModuleNotFoundError: No module named 'pyttsx3'


Los valores que me pides son...

Python 3.8.0
pip 19.0.3
Responder
#6
Por si puede servir a alguien más... está claro que es un mensaje de path. He cambiado a una raspberry con un arranque limpio, y la importación de pyttsx3 me la hace sin ningún problema de ningún tipo, tras instalar con pìp3. Ahora bien... sigue sin funcionar, y ya no porque no encuentre el módulo (que sí lo encuentra), sino porque cuando se produce la llamada para que "hable" se producen una serie de errores que, consultados con google, parecen ser la tarjeta de sonido estándar de la raspberry. Es decir, aparentemente raspberry y pyttsx3 no van bien juntas, al menos con la configuración por defecto, y claro, no quiero probar con Windows, donde muy posiblemente lo podría solucionar, porque mi idea es construir un robot parlanchín con Rasp... ¡no me vale Windows!

Por si a alguien le pueda interesar lo que hago, el código del programa es...


import pyttsx3

cosa=pyttsx3.init()
cosa.say("hola")
cosa.runAndWait() # Esperar a que termine de Hablar
cosa.stop()

Y los errores producidos...

Expression 'alsa_snd_pcm_hw_params_set_period_size_near( pcm, hwParams, &alsaPeriodFrames, &dir )' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 924
Expression 'alsa_snd_pcm_hw_params_set_period_size_near( pcm, hwParams, &alsaPeriodFrames, &dir )' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 924
ALSA lib pcm.c:2565Sadsnd_pcm_open_noupdate) Unknown PCM cards.pcm.front
ALSA lib pcm.c:2565Sadsnd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2565Sadsnd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2565Sadsnd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm.c:2565Sadsnd_pcm_open_noupdate) Unknown PCM cards.pcm.surround21
ALSA lib pcm.c:2565Sadsnd_pcm_open_noupdate) Unknown PCM cards.pcm.surround21
ALSA lib pcm.c:2565Sadsnd_pcm_open_noupdate) Unknown PCM cards.pcm.surround40
ALSA lib pcm.c:2565Sadsnd_pcm_open_noupdate) Unknown PCM cards.pcm.surround41
ALSA lib pcm.c:2565Sadsnd_pcm_open_noupdate) Unknown PCM cards.pcm.surround50
ALSA lib pcm.c:2565Sadsnd_pcm_open_noupdate) Unknown PCM cards.pcm.surround51

(etc, el sistema no me está permitiendo enviar todo porque dice que mando "más de 10 imágenes")
Responder
#7
Aparentemente, según lo que leo, pyttsx3 no va bien en Debian... así que he tenido que buscar una opción alternativa.

Dicha solución, por fin, me ha permitido poder funcionar en Linux (Debian), en mi Raspberry, que es lo que quería.

Lo que he hecho es funcionar con la librería gtts, y he tenido que instalar también el módulo mpg123. Este sería el código...


from gtts import gTTS
import os


texto="Hola mundo"
file = "salida.mp3"
tts = gTTS(texto, 'es')
tts.save(file)
os.system("mpg123 " + file)


En realidad lo que hace gtts es convertir el texto a fichero MP3, que luego es reproducido por mpg123. Insisto en que lo estoy usando en Linux (Debian), pero podría hacerse teóricamente igual en Windows.

El resultado es una voz femenina, que no se puede cambiar, bastante natural y que pronuncia en castellano. Apenas hay parámetros, no se puede cambiar ni la voz, ni su velocidad (salvo ponerla en modo "lento", que no he probado, pues ya bastante despacio así). De paso, se pueden reproducir mp3 de cualquier tipo, de música por ejemplo.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)