Hanzo Huang2026-07-28

Een privé Home Assistant-voice-assistent bouwen op de RK3576

Bouw een privé, lokaal Home Assistant-voice-assistent op Rockchip RK3576. De stack combineert Whisper voor spraakherkenning, Piper voor spraaksynthese, openWakeWord voor wake-worddetectie en Qwen voor lokale conversatie, alles versneld door de NPU van de RK3576.

reComputer-RKrk3576llmhome-assistantwhisperpiperopenwakewordqwenGithub

Een privé Home Assistant-spraakassistent bouwen op de RK3576

Home Assistant Assist is veel meer dan alleen een cloudgebonden spraakinterface. Met een Rockchip RK3576 is het mogelijk om de volledige spraakworkflow lokaal uit te voeren: van spraakherkenning en wake-worddetectie tot taalmodelredenering en spraaksynthese.

Dit project bundelt die functionaliteit in een Docker Compose-stack. Whisper, Piper, openWakeWord en Qwen werken samen, terwijl de belangrijkste AI-taken worden versneld door de NPU van de RK3576.

1. Snel starten

Vereisten

  • Een Rockchip RK3576-board met Linux ARM64
  • Docker Engine met de Docker Compose-plug-in
  • Toegang tot de RK3576-apparaatnodes, inclusief /dev/rknpu en /dev/dma_heap
  • Een Home Assistant-instantie in hetzelfde netwerk, of voldoende middelen om Home Assistant rechtstreeks op het board uit te voeren

Kloon het project op het RK3576-board:

bash
git clone https://github.com/Hanzo-Huang/rk3576-home-assistant-voice.git
cd rk3576-home-assistant-voice

Start de spraakdiensten:

bash
sudo docker compose up -d --pull always

Als Home Assistant ook op hetzelfde board moet draaien, gebruik dan het optionele profiel:

bash
sudo docker compose --profile homeassistant up -d --pull always

Controleer de draaiende containers en logs:

bash
sudo docker compose ps
sudo docker compose logs -f

2. Architectuur

De stack verdeelt elke stap van de spraakinteractie in aparte services. Home Assistant communiceert via het Wyoming-protocol met de spraakdiensten en via een OpenAI-compatibele API met het lokale taalmodel.

Code
Gebruiker
  │ spraakinput
Home Assistant Assist
  │ audio
openWakeWord ── geactiveerd ──▶ Whisper STT
                                  │ transcript
                          Lokale Qwen 2.5 LLM
                                  │ antwoordtekst
                              Piper TTS
                                  │ audio-antwoord
                         Home Assistant Assist
                               Gebruiker

Whisper STT, Qwen 2.5 en Piper TTS draaien met NPU-versnelling op de RK3576.

De diensten zijn beschikbaar via deze poorten:

ServiceFunctiePoort
PiperTekst-naar-spraak10200
WhisperSpraak-naar-tekst10300
openWakeWordWake-worddetectie10400
RKLLM APIOpenAI-compatibele lokale LLM-API8001

Het standaard taalmodel is Qwen2.5-1.5B-Instruct met W4A16-kwantisering. De RKLLM-service stelt dit beschikbaar voor Home Assistant als lokale conversatieagent, zodat spraakverzoeken verwerkt kunnen worden zonder de gesprekgegevens naar een externe provider te sturen.

3. Prestaties

De geteste configuratie gebruikt:

  • Whisper voor spraak-naar-tekst
  • Qwen2.5-1.5B-Instruct voor conversaties
  • Piper Amy Medium voor spraaksynthese

Met de modellen die door de NPU van de RK3576 worden versneld, was de gemeten latency als volgt:

StapTijd
Whisper-transcriptie0.626 s
LLM-antwoord2.82 s
Piper-synthese0.474 s

De totale reactietijd hangt af van de lengte van het gesproken verzoek, de lengte van het gegenereerde antwoord en de verwerking binnen Home Assistant zelf. Toch biedt de RK3576 een praktische basis voor een snelle, privé spraakassistent aan de rand van het netwerk.

Het 1,5B-model gebruikt ongeveer 1,5 GB RAM. Een getest 3B W4A16-model gebruikt ongeveer 2,5 GB RAM, waardoor geheugencapaciteit een belangrijke overweging is bij de keuze voor een groter model.

4. Installatiegids

Wyoming-services toevoegen

In Home Assistant open je Instellingen → Apparaten en services, kies je Integratie toevoegen en zoek je naar Wyoming Protocol.

Voeg vervolgens de volgende services toe, met het IP-adres van het RK3576-board als host:

ServicePoort
Whisper STT10300
Piper TTS10200
openWakeWord10400

Een Assist-pijplijn aanmaken

Open Instellingen → Spraakassistenten en maak of bewerk een Assist-pijplijn. Selecteer:

  1. De Wyoming Whisper-service voor spraak-naar-tekst.
  2. De Wyoming Piper-service voor tekst-naar-spraak.
  3. De Wyoming openWakeWord-service voor wake-worddetectie.

De lokale conversatieagent configureren

Om Qwen als conversatieagent te gebruiken, installeer je de Local LLM-integratie via HACS. Configureer deze met de volgende waarden:

text
Backend: OpenAI Compatible Conversations API
API hostname: RK3576_BOARD_IP
API port: 8001
API path: /v1
API key: sk-local
Model name: rkllm-model

De API-key is hier slechts een placeholder voor deze lokale server. Nadat je de integratie hebt toegevoegd, ga je terug naar de Assist-pijplijn en selecteer je de nieuwe lokale conversatieagent.

Een ander LLM kiezen

Het LLM wordt geleverd als Docker-image, waardoor gebruikers het model kunnen wisselen zonder de Home Assistant-configuratie aan te passen. De standaardimage is:

yaml
image: ghcr.io/hanzo-huang/rkllm-docker/qwen2.5-1.5b-instruct:w4a16-rk3576

Om een ander model te gebruiken, kies je een RK3576-compatibele image uit de rkllm-docker-repository en vervang je de waarde van llm.image in docker-compose.yml:

yaml
llm:
  image: <rkllm-docker-model-image>

Vervolgens start je de stack opnieuw:

bash
sudo docker compose up -d

De beschikbare modellen kunnen verschillende RAM-behoeften, antwoordkwaliteit en latency hebben. Controleer de modeldocumentatie voordat je kiest voor een groter model voor het board.

De wake word aanpassen

Het standaard wake-wordmodel is ok_nabu. Verander de openwakeword-opdracht in docker-compose.yml om een ander ondersteund model vooraf te laden:

yaml
command:
  - --uri
  - tcp://0.0.0.0:10400
  - --preload-model
  - ok_nabu

De Whisper-taal wijzigen

De Whisper-image bevat Engelse en Chinese woordenschat. Engels is de standaard; Chinees kan worden geselecteerd door --language zh toe te voegen aan de Whisper-serviceopdracht in docker-compose.yml.

5. Verbeteringen: meer modellen toevoegen

De huidige configuratie gebruikt compacte modellen om een goede balans te houden tussen kwaliteit, geheugenverbruik en latency. De logische volgende stap is om in de hele spraakpipeline meer modellen te ondersteunen: taalmodellen, STT-modellen en TTS-stemmen.

Meer LLM-modellen toevoegen

De LLM-image kan worden gewijzigd in docker-compose.yml. Vervang bijvoorbeeld de standaardimage:

yaml
image: ghcr.io/hanzo-huang/rkllm-docker/qwen2.5-1.5b-instruct:w4a16-rk3576

door een andere image uit de rkllm-docker-repository en start daarna de stack opnieuw:

bash
sudo docker compose up -d

Meer STT-modellen toevoegen

Whisper wordt momenteel gebruikt voor spraakherkenning. De Whisper-service kan worden uitgebreid met extra modelgroottes, talen en RKNN-geconverteerde encoder/decoder-paren. Gebruikers kunnen dan kiezen voor een kleiner model met lagere latency of een groter model met betere transcriptienauwkeurigheid.

STT-ondersteuning zou het volgende moeten omvatten:

  • Engelse, Chinese en andere taalvocabulaire.
  • Meerdere Whisper-modelgroottes.
  • Modelspecifieke configuratie in docker-compose.yml.
  • Benchmarks voor transcriptienauwkeurigheid, RAM-gebruik en realtime factor.

Meer TTS-modellen en stemmen toevoegen

Piper levert momenteel de Amy Medium-stem. Meer Piper-stemmen kunnen worden meegeleverd in de TTS-image, zodat gebruikers verschillende talen, accenten en stemstijlen kunnen kiezen. Ook kunnen RKNN-compatibele decoder-modellen worden toegevoegd om de RK3576-NPU voor meer stemconfiguraties te benutten.

TTS-ondersteuning zou het volgende kunnen omvatten:

  • Meerdere Piper-stemmen en talen.
  • Stemselectie via Compose-configuratie of Home Assistant.
  • Verschillende kwaliteits- en snelheidsprofielen.
  • Streaming en kortere audioblokken voor snellere afspeelreactie.

Andere verbeteringen

Toekomstige verbeteringen kunnen ook zijn:

  • Een eenvoudige modelselectievariabele voor elke service.
  • Benchmarking van de volledige pipeline over verschillende modelcombinaties.
  • Streaming LLM-antwoorden om de waargenomen reactietijd te verkorten.
  • Ondersteuning voor aangepaste wake-wordmodellen.
  • Documentatie van aanbevolen modelcombinaties voor verschillende RAM-capaciteiten.

Grotere modellen kunnen de gesprekskwaliteit verbeteren, maar vereisen ook meer RAM en kunnen de latency verhogen. Het beste model is daarom een balans tussen de mogelijkheden van het board en de gewenste ervaring thuis.

Conclusie

Dit project laat zien dat een moderne Home Assistant-spraakassistent niet per se afhankelijk hoeft te zijn van de cloud. Door open-source spraakmodellen, Docker, het Wyoming-protocol en RK3576-NPU-versnelling te combineren, kan de volledige interactie lokaal draaien op een compact edge-apparaat.

Het resultaat is een privacyvriendelijke, aanpasbare en sterk geïntegreerde spraakinterface met Home Assistant, terwijl er ruimte blijft voor experimenten met snellere, grotere en krachtigere modellen in de toekomst.