SOUND / MMS-TTS

MMS-TTS

reComputer RK3588

Engelse spraaksynthese met facebook/mms-tts-eng, versneld met RKNN op reComputer RK3576 en RK3588.

65 downloads
Precisie
RKNN

Kies het apparaat dat je gebruikt. De installatiehandleiding en documentatie worden dienovereenkomstig bijgewerkt.

Aan de slag

Armbian 26.8.7 Gnome of nieuwer met OTA overlayroot: Configureer de Docker-opslag voordat je containers start om overlay-mountfouten te voorkomen.

Implementeren
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

Gebruik de REST API om inferentie uit te voeren. Kopieer de onderstaande commando's.

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

Modeldetails

Armbian 26.8.7 Gnome of nieuwer met OTA overlayroot: Configureer de Docker-opslag voordat je containers start om overlay-mountfouten te voorkomen.

Snel aan de slag

1. Docker installeren

Voer de volgende opdrachten uit op het ontwikkelbord om Docker te installeren:

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. Het project uitvoeren (één opdracht, webvoorbeeld)

Dit project biedt Engelse spraaksynthese met facebook/mms-tts-eng. De webinterface neemt tekst aan, regelt de spreeksnelheid en biedt afspelen en downloaden van WAV.

Stap A: images ophalen

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

Stap B: met één opdracht starten

Voor 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

Openen via: http://<Board_IP>:8000


Voor 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

Openen via: http://<Board_IP>:8000

3. Inferentie via de opdrachtregel

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

Gebruik --platform rk3588 wanneer u vanuit de RK3588-bronmap werkt.


🔌 API-documentatie

De REST-API genereert Engelse spraak synchroon en bewaart de nieuwste 20 gegenereerde WAV-bestanden om tijdelijk te downloaden.

1. Spraaksynthese-interface

Endpoint: POST /api/models/mms_tts/predict

Aanvraagparameters (Multipart/Form-Data):

  • text: Verplichte Engelse tekst met uitsluitend ondersteunde tekens, maximaal 99 tekens.
  • speaking_rate: Optionele waarde van 0.6 tot 1.4. De standaardwaarde is 1.0; waarden onder 1 leveren tragere spraak op.

Gebruiksvoorbeeld:

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'

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

De spreeksnelheidsparameter schaalt de foneemduur vóór het decoderen. De WAV wordt dus niet achteraf geresampled en de toonhoogte blijft behouden. Als trage spraak of lange tekst de duurlimiet van de decoder bereikt, is duration_clipped gelijk aan true en bevat het antwoord een waarschuwing.

2. Gegenereerde audio downloaden

Endpoint: GET /api/audio/{audio_filename}

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

Gebruik de exacte audio_filename die de voorspellingsinterface teruggeeft.

3. Interface voor systeemconfiguratie

Huidige configuratie ophalen

  • Endpoint: GET /api/config
  • Standaardantwoord: {"speaking_rate": 1.0}

Configuratie bijwerken

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

Controleer met GET /api/health het actieve platform, de geladen encoder en decoder en de ondersteunde invoerfuncties. OpenAPI-documentatie staat op /docs.


🛠️ Handleiding voor ontwikkelaars (productieadvies)

Beschrijving van de code

  • web_service.py:
    • Web-API: handelt syntheseverzoeken, configuratie, opslag van gegenereerde audio, afspelen en downloaden af.
    • Behoud van uitvoer: maakt WAV-bestandsnamen op basis van een UUID en behoudt de nieuwste 20 gegenereerde bestanden.
  • task_runtime.py:
    • Tekstverwerking: valideert ondersteunde Engelse tekens en zet ze om naar de vaste modelinvoer.
    • Duurregeling: schaalt de foneemduur met speaking_rate en meldt afkapping door de decoder.
    • RKNN-inferentie: voert de encoder en decoder uit en schrijft monofonische 16 kHz WAV-uitvoer.
  • inference.py: biedt eenmalige synthese naar een lokaal WAV-bestand.

Modelbestanden

OnderdeelBestand
MMS-TTS-encodermodel/encoder.rknn
MMS-TTS-decodermodel/decoder.rknn

Modellen wijzigen

  1. Plaats compatibele encoder- en decodermodellen in model/ en behoud hun bestandsnamen.
  2. Houd het paar afgestemd op de verwachte woordenschat, de duurttensor en het uitvoercontract van mono 16 kHz.
  3. Test het spreeksnelheidsbereik van 0.6–1.4 en de duurlimiet van de decoder.

De encoder en decoder zijn twee fasen van één synthesepipeline en geen alternatieve groottes. Het upstream-project levert momenteel één paar per platform en geen aparte kwantiseringskiezer.

Lokale images bouwen

Voer dit uit vanuit de hoofdmap van 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

Invoer en uitvoer

Invoer: Engelse tekst en spreeksnelheid. Uitvoer: gesynthetiseerde WAV-audio, duur, samplefrequentie en aantal samples.