1 puntos por GN⁺ 4 시간 전 | 1 comentarios | Compartir por WhatsApp
  • La generación de voz local ahora puede ofrecer una calidad suficientemente realista incluso sin una GPU dedicada, y en el entorno de ejemplo se deja la GPU para la inferencia de LLM mientras la CPU se encarga del TTS
  • Kokoro es un modelo de 82M de parámetros, pero admite varios idiomas como inglés, chino e hindi, ofrece unas 50 voces y está mejor optimizado para inglés
  • La configuración más sencilla es ejecutar el contenedor Kokoro-FastAPI, y como incluye previamente los modelos de voz, la imagen pesa alrededor de 5 GB
  • Ofrece una interfaz compatible con la API de voz de OpenAI, por lo que los programas existentes basados en API de voz pueden adaptarse con relativa facilidad a TTS local
  • La síntesis de párrafos cortos toma alrededor de 4.7 segundos en un Intel Core i7-4770K, 4.5 segundos en un Apple M2 Pro y 1.5 segundos en un AMD Ryzen 7 8745HS, lo que permite un modo de uso en el que se escucha la respuesta del LLM en lugar de leerla

Kokoro TTS ejecutado solo con CPU

  • Hace apenas unos años era difícil lograr una generación de voz local realista, pero ahora es posible crear audio de alta calidad sin confiar datos privados a servicios externos
  • El ejemplo se ejecuta en una máquina con GTX 1080 Ti para LLM local, mencionada anteriormente
    • La GPU dedicada de esa máquina queda reservada para la inferencia del LLM
    • La síntesis de voz usa solo la CPU
  • El modelo utilizado es Kokoro
    • Es un modelo de 82M de parámetros
    • Genera voces realistas en varios idiomas, como inglés, chino e hindi
    • Ofrece unas 50 voces y está optimizado principalmente para inglés
  • La configuración de servidor más simple consiste en usar la imagen de contenedor de Kokoro-FastAPI
    • Incluye modelos de voz descargados previamente
    • Por eso la imagen del contenedor ocupa alrededor de 5 GB
  • Comando de ejecución con Docker o Podman:
    podman run -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu
    
  • Después de iniciarlo, la interfaz web puede abrirse en localhost:8880/web, donde se puede ingresar texto para generar audio y reproducirlo automáticamente

API compatible con OpenAI y ejecución de ejemplos

  • Además de la interfaz web, el contenedor Kokoro-FastAPI ofrece una interfaz TTS compatible con la API de voz de OpenAI
    • Los programas existentes que usan la API de voz de OpenAI pueden adaptarse fácilmente
    • Hay ejemplos de código en JavaScript y Python en github.com/remotebrowser/speak
  • Ejemplo de ejecución en JavaScript:
    export TTS_API_BASE_URL=http://127.0.0.1:8880/v1
    ./speak.js "Good morning! How are you today?"
    
  • Ejemplo de ejecución en Python:
    export TTS_API_BASE_URL=http://127.0.0.1:8880/v1
    ./speak.py "Good morning! How are you today?"
    
  • El audio generado se guarda como archivo MP3
    • Si SoX o Sound eXchange está instalado, el audio se reproduce automáticamente
    • La información sobre SoX puede consultarse en sox.sf.net
  • Para elegir otra voz, se configura la variable de entorno TTS_VOICE
    export TTS_API_BASE_URL=http://127.0.0.1:8880/v1
    export TTS_VOICE="am_eric"
    ./speak.js "Good morning! How are you today?"
    
  • La lista completa de voces disponibles está en Kokoro VOICES.md

Tiempos de síntesis por CPU y alternativas

  • Al sintetizar un párrafo corto de prueba con la voz am_eric, el mejor tiempo de generación entre 3 ejecuciones fue el siguiente
    • Intel Core i7-4770K: 4.7 segundos
    • Apple M2 Pro: 4.5 segundos
    • AMD Ryzen 7 8745HS: 1.5 segundos
  • La primera CPU de la lista fue lanzada hace 12 años, lo que muestra que incluso CPUs antiguas pueden manejar esta tarea
  • También existe Speaches como alternativa de TTS en contenedor compatible con OpenAI
    • A diferencia de Kokoro-FastAPI, la imagen del contenedor no incluye los pesos de voz y deben descargarse explícitamente mediante la API
    • También ofrece funciones de STT de alta calidad, incluido Whisper
    • Si una aplicación necesita tanto TTS como STT, puede ser una opción para manejar ambos en un solo lugar
  • Al combinarlo con un LLM local, se hace posible un modo de uso en el que, en lugar de leer la respuesta del LLM, se escucha en voz alta

1 comentarios

 
GN⁺ 4 시간 전
Opiniones de Hacker News
  • He usado bastante Kokoro en productos de accesibilidad, y fue agradable trabajar con él porque no requiere una GPU de NVidia como varios otros TTS de calidad similar
    En particular, me gusta que se puedan introducir manualmente guías de pronunciación IPA. Había casos en los que palabras importantes eran homógrafas y Kokoro las pronunciaba mal
    Eso sí, se debilita cuando le haces decir solo una o dos palabras. Por ejemplo, si le haces decir solo "six", casi siempre dice algo como "ah-six-ah". En cambio, si le das una oración más larga como "The word is: six", lo lee bien, y como la API de Kokoro da marcas de tiempo para cada palabra dentro de la oración, puedes recortar solo la palabra que quieres con un script de Python. La entonación es un poco plana, pero es muy estable
    Pregunté en Discord y me dijeron que era una limitación del pequeño tamaño de parámetros, y en defensa de Kokoro, las voces de eleven-labs a veces también tienen este problema

    • Uso el mismo truco con varias otras herramientas. Si le dices "Knight" a Wispr o a Google, sale como "night", pero puedes decir "Knight to f3" y luego borrar solo "to f3"
    • En realidad es una debilidad común de los modelos TTS
      Mi caso de uso es casi por completo de palabras individuales, así que no me conviene porque no quiero lidiar con procesar entradas y salidas para unirlas o dividirlas
  • Este es un tema que de verdad me interesa, así que está bueno
    Antes mantenía whisperx por separado, porque consideraba importantes no solo la transcripción simple, sino también la sincronización y la identificación de hablantes necesarias para cosas como subtítulos. Pero depende de pyannote, y como la licencia es ambigua, automatizar la instalación también es más complicado
    Así que, buscando algo que diera mejor transcripción y además soportara diarización, terminé eligiendo parakeet para transcripción y softformer para diarización. Pero la mayoría de los motores disponibles no incluyen softformer
    Hice un servidor compatible con OpenAI para parakeet-rs con soporte para softformer (https://github.com/altunenes/parakeet-rs) y lo estoy usando junto con OpenWhispr, una app de transcripción de escritorio que maneja varias funciones de conveniencia
    Como uso la GPU para otras cosas, todavía no agrego una ruta con GPU, así que por ahora transcribe solo con CPU, pero se siente muy potente poder ejecutar transcripción localmente cuando quieras

    • Esto es texto a voz, y eso es voz a texto
      Para lo que quieres hacer, si usas Senko junto con parakeet, la diarización funciona muy bien. En mi MacBook fue más rápido y más preciso que Pyannote y whisper
    • Con un simple whisper.cpp también se puede hacer algo parecido
  • Este modelo es realmente bueno. Me daba pena no haber podido jugar casi nada con modelos locales por falta de GPU, pero hace como un mes instalé Kokoro en una GTX1650 e hice un TTS para leer artículos
    En una WebUI sencilla pegas una URL o un bloque de texto copiado, Python lo limpia y lo envía a Kokoro para generar TTS, y el resultado se sirve como RSS para Apple Podcasts. Lo uso para ponerme al día con artículos guardados o posts de blog durante el manejo de la mañana
    Algún día también me gustaría hacer algo tipo NotebookLM, usando varias voces, para leer noticias guardadas como si fuera un programa matutino de radio

  • Hace unos meses hice una extensión de Chrome que hace esto en cualquier página web y va resaltando al mismo tiempo la oración que está leyendo
    Como se salta tanto el paso de levantar el contenedor como el de copiar y pegar el contenido del sitio, puede ser útil para quien quiera usar Kokoro de forma más cómoda
    https://chromewebstore.google.com/detail/local-reader-ai-on-...

  • El TTS ha avanzado muchísimo y hay muchas opciones. Está Kokoro, y Pocket TTS es un modelo pequeño de 100M que además puede clonar voces
    Chatterbox Turbo es un poco más grande, pero soporta mejor el control emocional de la voz, y Fish Audio S2 es más grande todavía, pero permite un control mucho más fino y prácticamente sin límites del tono y la emoción. Todo esto corre fácilmente en una MacBook

  • Un buen repositorio para empezar a comparar modelos TTS es https://github.com/5uck1ess/tts-bench
    Kokoro es un modelo realmente bueno considerando que fue publicado hace 1.5 años, y rinde excelente para su tamaño: https://5uck1ess.github.io/tts-bench/scores.html

  • Antes probé Piper para TTS local, y Kokoro también se ve interesante

  • Está muy bueno. Como uso Linux y no puedo usar Aqua ni Whipsrflow ni otros, desde enero vengo usando una solución que hice yo mismo
    Hace poco la ordené y la dejé más fácil de instalar. Si te interesa, puedes verla aquí: https://github.com/Hugo0/voiceio
    Se va mejorando sola con el tiempo, corre en la máquina local y, en general, es software bastante usable. Hoy en día el 60% de mi interacción con la PC es puro input por voz

    • Esto es texto a voz, y eso es voz a texto. Igual el STT sí se ve interesante
  • Me gusta mucho Kokoro. Lo uso para leer ebooks que no tienen audiolibro, y para eso funciona bastante bien
    Tengo un script de Python que lee epub/html, ejecuta el modelo y luego escribe el mp3
    La cantidad de idiomas que soporta Kokoro es limitada, así que para soporte de neerlandés tuve que usar otro modelo, pero la calidad no es tan buena. Normalmente también son mucho más lentos y más grandes, así que resultan demasiado para 8 GB de VRAM
    Al final hasta probé el TTS integrado de Windows; no suena natural, pero al menos puede pronunciar la mayoría de las palabras y es muy rápido

  • Me pasé un día jugueteando con AI y le quité las capas caras a Kokoro, y ahora corre 3 veces más rápido en CPU de teléfono y con MNN
    La calidad es muy parecida. Puede variar según el entorno, pero el script está aquí: https://github.com/DavidVentura/translator-rs/blob/master/sc...