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.
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.
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:latestAPI REST
Utilisez l'API REST pour exécuter l'inférence. Copiez les commandes ci-dessous.
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())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 :
# 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. 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
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 :
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:latestAccès via : http://<Board_IP>:8000
Pour 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:latestAccès via : http://<Board_IP>:8000
3. Inférence en ligne de commande
python inference.py --platform rk3576 --model_dir model \
--text 'hello from the edge' \
--speaking_rate 0.8 \
--output output.wavUtilisez --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 :
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) :
{
"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}
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
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_rateet 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
| Composant | Fichier |
|---|---|
| Encodeur MMS-TTS | model/encoder.rknn |
| Décodeur MMS-TTS | model/decoder.rknn |
Modifier les modèles
- Placez des modèles compatibles d'encodeur et de décodeur dans
model/et conservez leurs noms de fichier. - Maintenez la paire alignée avec le vocabulaire attendu, le tenseur de durée et le contrat de sortie mono à 16 kHz.
- 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 :
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_ttsEntré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.