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.
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.
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:latestAPI REST
Usa la API REST para ejecutar inferencia. Copia los comandos siguientes.
curl http://localhost:8080/v1/chat/completions -d '{
"model": "mms-tts-rknn",
"messages": [{"role": "user", "content": "Hello"}]
}'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:
# 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 docker2. 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
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:latestPaso B: ejecutar con un solo comando
Para RK3588:
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:latestAcceda mediante: http://<Board_IP>:8000
Para RK3576:
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:latestAcceda mediante: http://<Board_IP>:8000
3. Inferencia por línea de comandos
python inference.py --platform rk3576 --model_dir model \
--text 'hello from the edge' \
--speaking_rate 0.8 \
--output output.wavUse --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:
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):
{
"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}
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
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_ratee 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
| Componente | Archivo |
|---|---|
| Codificador MMS-TTS | model/encoder.rknn |
| Decodificador MMS-TTS | model/decoder.rknn |
Modificar los modelos
- Coloque modelos compatibles de codificador y decodificador en
model/y conserve sus nombres de archivo. - Mantenga el par alineado con el vocabulario esperado, el tensor de duración y el contrato de salida mono de 16 kHz.
- 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:
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_ttsEntradas y salidas
Entrada: texto inglés y velocidad del habla. Salida: audio WAV sintetizado, duración, frecuencia de muestreo y número de muestras.