SOUND / MMS-TTS

MMS-TTS

reComputer RK3588

Synthèse vocale anglaise avec facebook/mms-tts-eng accélérée par RKNN sur reComputer RK3576 et RK3588.

65 téléchargements
Précision
RKNN

Choisissez l'appareil que vous utilisez. Le guide de configuration et la documentation seront mis à jour en conséquence.

Pour commencer

Armbian 26.8.7 Gnome ou version ultérieure avec OTA overlayroot : Configurez le stockage de Docker avant de lancer des conteneurs pour éviter les erreurs de montage overlay.

Déployer
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

API REST

Utilisez l'API REST pour exécuter l'inférence. Copiez les commandes ci-dessous.

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())

Détails du modèle

Armbian 26.8.7 Gnome ou version ultérieure avec OTA overlayroot : Configurez le stockage de Docker avant de lancer des conteneurs pour éviter les erreurs de montage overlay.

Démarrage rapide

1. Installer Docker

Exécutez les commandes suivantes sur la carte de développement pour installer 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. Exécuter le projet (une commande, aperçu web)

Ce projet synthétise de la parole anglaise avec facebook/mms-tts-eng. L'interface web accepte du texte, règle le débit de parole et propose la lecture et le téléchargement WAV.

Étape A : récupérer les images

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

Étape B : exécuter en une commande

Pour 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

Accès via : http://<Board_IP>:8000


Pour 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

Accès via : http://<Board_IP>:8000

3. Inférence en ligne de commande

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

Utilisez --platform rk3588 lorsque vous exécutez le répertoire source RK3588.


🔌 Documentation de l'API

L'API REST génère la parole anglaise de manière synchrone et stocke les 20 derniers fichiers WAV générés pour un téléchargement temporaire.

1. Interface de synthèse vocale

Point d'accès : POST /api/models/mms_tts/predict

Paramètres de la requête (Multipart/Form-Data) :

  • text : Texte anglais obligatoire contenant uniquement les caractères pris en charge, avec un maximum de 99 caractères.
  • speaking_rate : Valeur facultative de 0.6 à 1.4. La valeur par défaut est 1.0 ; les valeurs inférieures à 1 ralentissent la parole.

Exemple d'utilisation :

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'

Format de réponse (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>"
  }
}

Le paramètre de débit de parole ajuste la durée des phonèmes avant le décodage ; il ne rééchantillonne donc pas le WAV après coup et conserve la hauteur de la voix. Si une parole lente ou un texte long atteint la limite de durée du décodeur, duration_clipped vaut true et la réponse contient un avertissement.

2. Télécharger l'audio généré

Point d'accès : GET /api/audio/{audio_filename}

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

Utilisez exactement l'audio_filename renvoyé par l'interface de prédiction.

3. Interface de configuration du système

Obtenir la configuration actuelle

  • Point d'accès : GET /api/config
  • Réponse par défaut : {"speaking_rate": 1.0}

Mettre à jour la configuration

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

Utilisez GET /api/health pour examiner la plateforme active, l'encodeur et le décodeur chargés, ainsi que les capacités d'entrée prises en charge. La documentation OpenAPI est à /docs.


🛠️ Guide du développeur (recommandations de production)

Description du code

  • web_service.py :
    • API web : Gère les requêtes de synthèse, la configuration, le stockage de l'audio généré, la lecture et le téléchargement.
    • Conservation des sorties : Crée des noms de fichiers WAV à base d'UUID et conserve les 20 derniers fichiers générés.
  • task_runtime.py :
    • Traitement du texte : Vérifie les caractères anglais pris en charge et les convertit en entrée fixe du modèle.
    • Contrôle de durée : Ajuste la durée des phonèmes avec speaking_rate et signale la limitation par le décodeur.
    • Inférence RKNN : Exécute l'encodeur et le décodeur et écrit une sortie WAV mono à 16 kHz.
  • inference.py : Fournit la synthèse en une exécution vers un fichier WAV local.

Fichiers du modèle

ComposantFichier
Encodeur MMS-TTSmodel/encoder.rknn
Décodeur MMS-TTSmodel/decoder.rknn

Modifier les modèles

  1. Placez des modèles compatibles d'encodeur et de décodeur dans model/ et conservez leurs noms de fichier.
  2. Maintenez la paire alignée avec le vocabulaire attendu, le tenseur de durée et le contrat de sortie mono à 16 kHz.
  3. Testez la plage de débit de parole 0.6–1.4 et la limite de durée du décodeur.

L'encodeur et le décodeur constituent deux étapes d'un pipeline de synthèse, pas des tailles alternatives. Le projet amont fournit actuellement une paire par plateforme, sans sélecteur distinct de quantification.

Construire les images locales

Exécutez depuis la racine 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

Entrées et sorties

Entrée : texte anglais et débit de parole. Sortie : audio WAV synthétisé, durée, fréquence d’échantillonnage et nombre d’échantillons.