¿Qué es TTS?

TTS (Text-to-Speech) es la API de Google para la conversión de texto en voz de una manera natural basado en las tecnologías de IA desarrolladas por Google.

Las características principales de este producto son:

Disponemos de más de 220 voces en más de 40 idiomas.

Si necesitamos voces más naturales tenemos a nuestra disposición también las voces WaveNet. Las voces WaveNet son voces generadas mediante un modelo desarrollado gracias a DeepMind y logran reproducir voces que parecen humanas. Es la misma tecnología que se usa para producir las voces de algunos de los servicios más usados como puede ser su asistente o el traductor. De hecho, en 2020 Google anunció que Maps pasaría a emplear este tipo de voz, haciendo de las instrucciones de navegación algo más natural. Hay disponibles más de 90 voces WaveNet en distintos idiomas y con diferentes acentos listas para utilizar.

Si con las voces WaveNet predefinidas no fuese suficiente, también tenemos la posibilidad de generar los audios con una voz totalmente personalizada. Sólo tendríamos que realizar la grabación de algunas frases de entrenamiento que se nos indicará y enviarlas a Google. Ellos se encargarán de generar el modelo y exponerlo para que directamente pueda ser usado.

Mediante el marcado SSML podemos personalizar como el texto es leído añadiendo pausas, añadiendo énfasis o aumentando la velocidad o el volumen… entre otras muchas cosas.

Caso de uso

Para probar esta API vamos a desarrollar un caso de uso muy sencillo. Vamos a convertir un ebook a audio. Para esto los pasos a seguir serían:

Extraer textos del libro

La extracción de texto se puede abordar de distintas maneras, pero en este post vamos a contemplar dos de ellas.

Uso Google Vision AI o Google Document AI

Vision AI es el API de Google para extraer información de imágenes. Es capaz de detectar objetos, caras o incluso identificar lugares y logotipos. Además de todo esto cuenta con OCR (reconocimiento de caracteres) lo que nos permitiría extraer texto directamente del libro.

Por otro lado, Document AI es la solución presentada en 2020 para procesar documentos en la nube. También hace uso de tecnología IA como la visión computerizada y el procesamiento de lenguaje natural, con los que es posible entrenar tus propios modelos si los predefinidos no proporcionan el resultado que se busca. Al igual que Vision AI tiene OCR, por lo que también podríamos usarla para obtener los textos que necesitamos.

Aunque el procesamiento con AI no va a ser la alternativa elegida en el post, estas dos APIs son muy potentes y nos parecen muy interesantes por lo que profundizaremos en ellas en futuros posts.

Procesamiento del libro mediante librerías

Con el fin de centrarnos principalmente en Text-to-Speech, que es el protagonista de este artículo, y que en este caso la extracción de texto desde un epub es muy sencilla, vamos a optar por usar una librería Python para extraer el contenido directamente del libro. En esta caso usaremos ebooklib.

Con un par de líneas ya tendríamos el contenido de nuestro libro para poder procesarlo:

TTS y SSML 1

Conversión de texto en SSML

Una vez tenemos acceso a los textos ya podemos empezar a crear el SSML para la posterior generación del audio.

Qué es ssml

Antes de ponernos en faena vamos a repasar primero qué es SSML. SSML (Speech Synthesis Markup Language) es un lenguaje de marcado que posibilita, tanto a web como a aplicaciones que hagan uso de él, poder utilizar un sintetizador de voz. Mediante este lenguaje podemos enriquecer los textos para añadir un montón de matices a los audios. Algunos de los tags que podemos usar son:

Procesado del texto

Teniendo claro qué es y qué podemos hacer con él, vamos a empezar a generar nuestro SSML.

El formato epub contiene archivos XHTML, junto con imágenes, CSS y otros archivos. Por esto, podremos ser capaces (si el libro sigue cierta estructura) de extraer de una manera sencilla párrafos, títulos…

Para nuestro ejemplo vamos a usar una aproximación muy sencilla. Vamos a detectar los párrafos y los títulos añadiendo énfasis y una pausa de 2 segundos en estos últimos.

En nuestro caso, el xhtml del que disponemos es algo así:

TTS y SSML 2

Mediante las siguientes líneas python vamos a generar SSML:

TTS y SSML 3

Lo único que hacemos aquí es recorrer los elementos y construir unos datos estructurados para luego poder aplicar lógica y añadir el marcado correspondiente en función del tipo. Por un lado vamos a guardar el título del libro y un array con cada uno de los párrafos que lo componen. Una vez ejecutado la estructura resultante quedaría tal que así:

TTS y SSML 4

Una vez obtenido todo lo necesario vamos a la construcción del SSML.

Como hemos dicho antes, va a tener una estructura muy sencilla. Sólo vamos a introducir énfasis en el título y pausas.

Para esto vamos a pasar el json obtenido por un script:

TTS y SSML 5

El resultado tras la ejecución sería algo así:

TTS y SSML 6

SSML a audio

Una vez tenemos el SSML ya solo nos queda un paso. Convertirlo en audio. Para ello vamos a usar el propio cliente python del API.

Simplemente, vamos a tener que configurar la llamada al API. Creamos una función para esto:

TTS y SSML 7

A esta función le pasamos una de las voces predefinidas (hemos usado "es-ES-Wavenet-B") y el SSML que hemos obtenido en el paso anterior. Como resultado, ya tendríamos el audio con el encoding que previamente hemos establecido (en este caso MP3, pero es configurable).

Muestra audio

Como limitación, destacar que el API tiene un máximo de caracteres de entrada (5000), por lo que si nuestros textos superan dicho límite vamos a tener que partir el texto en trozos de menor longitud y generar pequeñas piezas de audio que luego podemos unir con alguna librería como pydub.

Una solución muy potente

SSML y Text-to-Speech son tecnologías muy potentes, que conjuntamente funcionan a la perfección y con lo que se pueden hacer cosas bastante interesantes. Por un lado SSML, como hemos visto, te da posibilidad de darle vida a cualquier texto añadiendo entonaciones, pausas, pronunciaciones, diferentes voces, lanzar sonidos… Esto unido a que Text-to-Speech admite como entrada directamente un SSML lo convierten en una solución muy potente para generar audios a partir de textos.

Bibliografía

Tell us what you think.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.

Enviar.
Goodly logo