SOUND / MMS-TTS

MMS-TTS

reComputer RK3576

Síntesis de voz en inglés con facebook/mms-tts-eng acelerada mediante RKNN en reComputer RK3576 y RK3588.

65 descargas
Precisión
RKNN

Elige el dispositivo que estás usando. La guía de configuración y la documentación se actualizarán en consecuencia.

Primeros pasos

Armbian 26.8.7 Gnome o posterior con OTA overlayroot: Configura el almacenamiento de Docker antes de ejecutar contenedores para evitar errores de montaje de overlay.

Desplegar
sudo docker run --rm --privileged --net=host \
  -e PYTHONUNBUFFERED=1 -e RKNN_LOG_LEVEL=0 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
  ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-mms_tts:latest

API REST

Usa la API REST para ejecutar inferencia. Copia los comandos siguientes.

Curl
curl http://localhost:8080/v1/chat/completions -d '{
  "model": "mms-tts-rknn",
  "messages": [{"role": "user", "content": "Hello"}]
}'
Python
import requests

resp = requests.post(
    "http://localhost:8080/v1/chat/completions",
    json={"model": "mms-tts-rknn", "messages": [{"role": "user", "content": "Hello"}]},
)
print(resp.json())

Detalles del modelo

Armbian 26.8.7 Gnome o posterior con OTA overlayroot: Configura el almacenamiento de Docker antes de ejecutar contenedores para evitar errores de montaje de overlay.

Inicio rápido

1. Instalar Docker

Ejecute los siguientes comandos en la placa de desarrollo para instalar Docker:

bash
# Download installation script
curl -fsSL https://get.docker.com -o get-docker.sh
# Install using Aliyun mirror source
sudo sh get-docker.sh --mirror Aliyun
# Start Docker and enable auto-start on boot
sudo systemctl enable docker
sudo systemctl start docker

2. Ejecutar el proyecto (un comando, vista previa web)

Este proyecto sintetiza voz en inglés con facebook/mms-tts-eng. La interfaz web acepta texto, controla la velocidad del habla y proporciona reproducción y descarga WAV.

Paso A: descargar las imágenes

bash
sudo docker pull ghcr.io/Seeed-Projects/recomputer-rk-cv/rk3588-mms_tts:latest
sudo docker pull ghcr.io/Seeed-Projects/recomputer-rk-cv/rk3576-mms_tts:latest

Paso B: ejecutar con un solo comando

Para RK3588:

bash
sudo docker run --rm --privileged --net=host \
    -e PYTHONUNBUFFERED=1 \
    -e RKNN_LOG_LEVEL=0 \
    -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
    ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-mms_tts:latest

Acceda mediante: http://<Board_IP>:8000


Para RK3576:

bash
sudo docker run --rm --privileged --net=host \
    -e PYTHONUNBUFFERED=1 \
    -e RKNN_LOG_LEVEL=0 \
    -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
    ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-mms_tts:latest

Acceda mediante: http://<Board_IP>:8000

3. Inferencia por línea de comandos

bash
python inference.py --platform rk3576 --model_dir model \
    --text 'hello from the edge' \
    --speaking_rate 0.8 \
    --output output.wav

Use --platform rk3588 al ejecutar el directorio fuente de RK3588.


🔌 Documentación de la API

La API REST genera voz en inglés de forma síncrona y almacena los 20 archivos WAV generados más recientes para descargarlos temporalmente.

1. Interfaz de síntesis de voz

Punto de acceso: POST /api/models/mms_tts/predict

Parámetros de la solicitud (Multipart/Form-Data):

  • text: Texto en inglés obligatorio que contiene solo caracteres compatibles, con un máximo de 99 caracteres.
  • speaking_rate: Valor opcional de 0.6 a 1.4. El valor predeterminado es 1.0; los valores inferiores a 1 producen un habla más lenta.

Ejemplo de uso:

bash
curl -X POST "http://127.0.0.1:8000/api/models/mms_tts/predict" \
    -F 'text=hello from the edge' \
    -F 'speaking_rate=0.8'

Formato de respuesta (JSON):

json
{
  "success": true,
  "model": "mms_tts",
  "platform": "rk3576",
  "inference_time_ms": 224.7,
  "result": {
    "text": "hello from the edge",
    "sample_rate": 16000,
    "samples": 35840,
    "duration_seconds": 2.24,
    "speaking_rate": 0.8,
    "duration_clipped": false,
    "warnings": [],
    "audio_url": "/api/audio/<audio_filename>",
    "audio_filename": "<audio_filename>"
  }
}

El parámetro de velocidad del habla escala la duración de los fonemas antes de decodificar, por lo que no remuestrea posteriormente el WAV y conserva el tono. Si el habla lenta o el texto largo alcanzan el límite de duración del decodificador, duration_clipped es true y la respuesta incluye una advertencia.

2. Descargar el audio generado

Punto de acceso: GET /api/audio/{audio_filename}

bash
curl -o speech.wav \
    "http://127.0.0.1:8000/api/audio/<audio_filename>"

Use el audio_filename exacto devuelto por la interfaz de predicción.

3. Interfaz de configuración del sistema

Obtener la configuración actual

  • Punto de acceso: GET /api/config
  • Respuesta predeterminada: {"speaking_rate": 1.0}

Actualizar la configuración

bash
curl -X POST "http://127.0.0.1:8000/api/config" \
    -H 'Content-Type: application/json' \
    -d '{"speaking_rate": 1.2}'

Use GET /api/health para consultar la plataforma activa, el codificador y el decodificador cargados y las capacidades de entrada compatibles. La documentación de OpenAPI está en /docs.


🛠️ Guía para desarrolladores (recomendaciones de producción)

Descripción del código

  • web_service.py:
    • API web: Gestiona solicitudes de síntesis, configuración, almacenamiento del audio generado, reproducción y descarga.
    • Conservación de salidas: Crea nombres de archivo WAV basados en UUID y conserva los 20 archivos generados más recientes.
  • task_runtime.py:
    • Procesamiento de texto: Valida los caracteres ingleses compatibles y los convierte a la entrada fija del modelo.
    • Control de duración: Escala la duración de los fonemas con speaking_rate e informa del recorte del decodificador.
    • Inferencia RKNN: Ejecuta el codificador y el decodificador y escribe una salida WAV mono de 16 kHz.
  • inference.py: Proporciona síntesis de una sola ejecución a un archivo WAV local.

Archivos del modelo

ComponenteArchivo
Codificador MMS-TTSmodel/encoder.rknn
Decodificador MMS-TTSmodel/decoder.rknn

Modificar los modelos

  1. Coloque modelos compatibles de codificador y decodificador en model/ y conserve sus nombres de archivo.
  2. Mantenga el par alineado con el vocabulario esperado, el tensor de duración y el contrato de salida mono de 16 kHz.
  3. Pruebe el intervalo de velocidad del habla 0.6–1.4 y el límite de duración del decodificador.

El codificador y el decodificador son dos etapas de una canalización de síntesis, no tamaños alternativos. Actualmente, el proyecto original proporciona un par por plataforma y ningún selector independiente de cuantización.

Crear imágenes locales

Ejecute desde la raíz de reComputer-RK-CV:

bash
docker build -f docker/rk3576/mms_tts.dockerfile \
    -t rk3576-mms_tts:local src/rk3576_mms_tts

docker build -f docker/rk3588/mms_tts.dockerfile \
    -t rk3588-mms_tts:local src/rk3588_mms_tts

Entradas y salidas

Entrada: texto inglés y velocidad del habla. Salida: audio WAV sintetizado, duración, frecuencia de muestreo y número de muestras.