Phonon TTS: una voz 100% local para Gladys

Hola a todos,

Ahora que podemos personalizar la voz en Gladys, os presento Phonon TTS, una integración que da a Gladys una voz fuera de línea. Los textos de tus escenas « Reproducir una notificación » se sintetizan directamente en tu máquina Gladys, sin servicio en la nube ni suscripción. Todo esto es posible gracias a los modelos de código abierto de Gradium de los que ya he hablado aquí Service Gradium AI

:warning: La integración está en beta (versión 0.1.x). Funciona en mi caso, pero se ha probado en pocas máquinas: puede haber errores y cosas que aún cambiarán. Por ahora, evita usarla para anuncios críticos (alarma, seguridad…).

El proceso

Desde Gladys 5.3, podemos elegir la voz de Gladys instalando una integración externa de tipo « voz » (TTS). Aquí tenéis una que

  • funciona localmente, para que los textos pronunciados no salgan de la casa;
  • funciona sin Internet una vez instalada;
  • sigue siendo bastante ligera incluso para un Raspberry Pi (ver tabla).

Los modelos Phonon de Gradium cumplen estas tres condiciones. Son modelos pequeños (40 y 31 millones de parámetros) que funcionan en un simple procesador, sin tarjeta gráfica.

¿Cómo funciona?

  • la integración (un contenedor Node.js basado en el SDK de las integraciones Gladys) recibe las solicitudes de síntesis de Gladys;
  • controla un subcontenedor, la imagen oficial ptts-openai-server de Gradium, que genera el audio en MP3;
  • en el primer lanzamiento, descarga desde Hugging Face solo el modelo (~75 Mo) y la voz elegidos. Después, ya no se necesita Internet.

Lo que puedes elegir:

  • 7 modelos: Phonon 40m en francés, inglés, alemán, español, portugués y multilingüe, y Phonon 31m en inglés;
  • 102 voces del catálogo Phonon, la voz original del modelo, o una voz personalizada creada o clonada en Gradium Studio.

¿Por qué un sitio aparte para probar las voces?

:backhand_index_pointing_right: bertrandda.github.io/gladys-phonon

Con 102 voces, elegir al azar en una lista desplegable no tiene sentido. Además, la pantalla de configuración de Gladys solo muestra una lista fija: no se pueden escuchar muestras. Además, la integración solo descarga la voz seleccionada, para ahorrar espacio en el disco. Probar las voces una por una en Gladys requeriría una descarga cada vez.

La página de demostración permite:

  • escuchar una muestra de cada voz, pronunciada por Phonon 40m o 31m;
  • filtrar por idioma y género, o buscar una voz;
  • ver el nombre exacto a elegir en la lista de la integración (abajo de cada tarjeta).

Todas las voces funcionan con todos los modelos, pero suenan mejor en su propio idioma.

Instalación

Requisitos previos

  • Gladys 5.3 o más reciente
  • aproximadamente 1 GB de memoria y 150 MB de disco libres para el motor de voz
  • para los modelos 40m: una cuenta Hugging Face gratuita, en la que aceptas las condiciones del modelo (por ejemplo gradium/phonon-40m-fr; la validación es inmediata), y un token de lectura. Phonon 31m (inglés) no necesita cuenta.

Pasos

  1. Todavía no he lanzado oficialmente la integración, así que instálala en modo desarrollador (Integraciones › Instalar una integración › Modo desarrollador) pegando https://github.com/bertrandda/gladys-phonon en la URL del repositorio GitHub.
  2. En la pestaña Configuración de la integración, elige un modelo (ninguno está seleccionado por defecto, y nada se descarga hasta que elijas uno). Luego pega el token de Hugging Face, elige la voz y guarda.
  3. Espera el estado Listo (descarga, luego inicio del motor).
  4. Haz de Phonon TTS la voz de Gladys: Integraciones › Inteligencia artificial › Voz.

Documentación completa: docs/fr.md

Primeras mediciones

El indicador utilizado es la velocidad de generación: la duración del habla producida dividida por el tiempo de cálculo.

Máquina Velocidad de generación
MacBook M5 ×13: una frase de 5 s está lista en menos de medio segundo
Raspberry Pi 4 ×0,8: un poco más lento que el tiempo real, se necesitan aproximadamente 6 s para generar una frase de 5 s

Gladys espera una síntesis máxima de 30 segundos. En un Raspberry Pi 4, un texto de más de ~20 s de habla será cortado, y solo su principio será pronunciado. Para notificaciones cortas, no hay problema. Con una máquina más potente puedes ir mucho más lejos, en mi MacBook la balada del duelo de Cyrano de Bergerac, ~52s de audio generado en ~4s.

Una primera mejora posible del núcleo para una mejor experiencia de usuario podría ser permitir el stream entre la integración externa y Gladys y así tener el audio que se lanza rápidamente mientras se continúa la generación en paralelo.

Tus comentarios son bienvenidos :folded_hands:

¡Ese es el objetivo de esta beta! Para poder comparar los comentarios y estudiar qué máquinas permiten mejor ejecutar el modelo, por favor indica, si es posible:

Máquina y CPU: (ej. Raspberry Pi 5 8 Go, mini-PC Intel N100 16 Go, VM 2 vCPU…)
Modelo Phonon y peso: (ej. Phonon 40m · Francés, q8)
Voz:
Tiempo de respuesta: (2 o 3 resultados de la acción « Probar la voz », con una frase corta y una frase larga)
Sensación (en las escenas `Hablar en un altavoz`): (calidad y naturalidad de la voz, pronunciación de los números, las horas y los nombres propios, retraso antes de que el altavoz hable, errores…)

Para medir los tiempos de respuesta, la acción Probar la voz de la pestaña Configuración da directamente los dos números (no oirás nada). Por ejemplo:
OK: 4,2 s de habla (33 Ko de MP3) generados en 5,2 s por Phonon 40m · Francés → ×0,8

Límites conocidos

  • Un modelo solo habla un idioma (el del modelo, o el elegido para el multilingüe).
  • Los modelos Phonon 40m están bajo licencia CC BY-NC 4.0 (uso no comercial solo).

¡Gracias de antemano por vuestras pruebas!

Para aquellos que no tienen una máquina para ejecutar el servicio, otro servicio Gradium que pase por sus servidores llegará pronto, hablaré de ello aquí Service Gradium AI

@bertrandda Hola Bertrand, una pequeña pregunta: ¿Por qué pasas por Hugging Face? Gradium también ofrece directamente en su página web lo correspondiente. ¿O me he perdido algo?

Saludos

Tom