SOUND / MMS-TTS

MMS-TTS

reComputer RK3588

Mit RKNN beschleunigte englische Sprachsynthese durch facebook/mms-tts-eng auf reComputer RK3576 und RK3588.

65 Downloads
Präzision
RKNN

Wähle das Gerät, das du verwendest. Die Einrichtungsanleitung und Dokumentation werden entsprechend aktualisiert.

Erste Schritte

Armbian 26.8.7 Gnome oder neuer mit OTA overlayroot: Konfigurieren Sie den Docker-Speicher vor dem Starten von Containern um Overlay-Mount-Fehler zu vermeiden.

Bereitstellen
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

REST API

Verwende die REST API für die Inferenz. Kopiere die folgenden Befehle.

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

Modelldetails

Armbian 26.8.7 Gnome oder neuer mit OTA overlayroot: Konfigurieren Sie den Docker-Speicher vor dem Starten von Containern um Overlay-Mount-Fehler zu vermeiden.

Schnellstart

1. Docker installieren

Führen Sie zur Installation von Docker folgende Befehle auf dem Entwicklungsboard aus:

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. Projekt ausführen (ein Befehl und Webvorschau)

Dieses Projekt bietet englische Sprachsynthese mit facebook/mms-tts-eng. Die Weboberfläche nimmt Text entgegen, steuert die Sprechgeschwindigkeit und bietet WAV-Wiedergabe und -Download.

Schritt A: Images abrufen

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

Schritt B: mit einem Befehl starten

Für 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

Aufruf: http://<Board_IP>:8000


Für 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

Aufruf: http://<Board_IP>:8000

3. Inferenz über die Befehlszeile

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

Verwenden Sie im RK3588-Quellverzeichnis --platform rk3588.


🔌 API-Dokumentation

Die REST-API erzeugt englische Sprache synchron und speichert die neuesten 20 erzeugten WAV-Dateien zum vorübergehenden Herunterladen.

1. Schnittstelle zur Sprachsynthese

Endpunkt: POST /api/models/mms_tts/predict

Anfrageparameter (Multipart/Form-Data):

  • text: Erforderlicher englischer Text mit ausschließlich unterstützten Zeichen, höchstens 99 Zeichen.
  • speaking_rate: Optionaler Wert von 0.6 bis 1.4. Der Standardwert ist 1.0; Werte unter 1 erzeugen langsamere Sprache.

Anwendungsbeispiel:

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'

Antwortformat (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>"
  }
}

Der Sprechgeschwindigkeitsparameter skaliert die Phonemdauer vor der Decodierung. Die WAV-Datei wird deshalb nicht nachträglich neu abgetastet und die Tonhöhe bleibt erhalten. Erreichen langsame Sprache oder lange Texte die Dauergrenze des Decoders, ist duration_clipped gleich true und die Antwort enthält eine Warnung.

2. Erzeugtes Audio herunterladen

Endpunkt: GET /api/audio/{audio_filename}

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

Verwenden Sie genau den Wert audio_filename, den die Vorhersageschnittstelle zurückgibt.

3. Schnittstelle zur Systemkonfiguration

Aktuelle Konfiguration abrufen

  • Endpunkt: GET /api/config
  • Standardantwort: {"speaking_rate": 1.0}

Konfiguration aktualisieren

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

Prüfen Sie mit GET /api/health die aktive Plattform, den geladenen Encoder und Decoder sowie die unterstützten Eingabefunktionen. Die OpenAPI-Dokumentation befindet sich unter /docs.


🛠️ Entwicklerhandbuch (Empfehlungen für den Produktionseinsatz)

Codebeschreibung

  • web_service.py:
    • Web-API: Verarbeitet Syntheseanfragen, Konfiguration, die Speicherung erzeugter Audiodaten, Wiedergabe und Download.
    • Aufbewahrung der Ausgaben: Erzeugt UUID-basierte WAV-Dateinamen und behält die neuesten 20 erzeugten Dateien.
  • task_runtime.py:
    • Textverarbeitung: Validiert unterstützte englische Zeichen und konvertiert sie in die feste Modelleingabe.
    • Dauersteuerung: Skaliert Phonemdauern mit speaking_rate und meldet Decoder-Clipping.
    • RKNN-Inferenz: Führt Encoder und Decoder aus und schreibt Mono-16-kHz-WAV-Ausgabe.
  • inference.py: Bietet einmalige Synthese in eine lokale WAV-Datei.

Modelldateien

KomponenteDatei
MMS-TTS-Encodermodel/encoder.rknn
MMS-TTS-Decodermodel/decoder.rknn

Modelle ändern

  1. Legen Sie kompatible Encoder- und Decoder-Modelle in model/ ab und behalten Sie deren Dateinamen bei.
  2. Halten Sie das Paar auf das erwartete Vokabular, den Dauer-Tensor und den Mono-16-kHz-Ausgabevertrag abgestimmt.
  3. Testen Sie den Sprechgeschwindigkeitsbereich 0.6–1.4 und die Dauergrenze des Decoders.

Encoder und Decoder sind zwei Stufen einer Synthese-Pipeline und keine alternativen Größen. Das Upstream-Projekt bietet derzeit ein Paar pro Plattform und keinen separaten Quantisierungsauswahl-Parameter.

Lokale Images erstellen

Im Stammverzeichnis von reComputer-RK-CV ausführen:

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

Eingaben und Ausgaben

Eingabe: englischer Text und Sprechgeschwindigkeit. Ausgabe: synthetisiertes WAV-Audio, Dauer, Abtastrate und Anzahl der Samples.