esp32-pie-asr: Live Engelse spraakherkenning op de ESP32-P4

Het gebruikte model is Kroko (Banafo), een streaming Zipformer2-transducer met 65,7 miljoen parameters. De gewichten zijn geoptimaliseerd van 71 MB naar 26,65 MB door gebruik te maken van 2- en 4-bit gewichten. Deze gewichten zijn beschikbaar op Hugging Face onder BoumedineBillal/esp32-pie-asr-kroko-en.

Technische Specificaties

Nauwkeurigheid

  • LibriSpeech test-clean: 4,34 % WER (Word Error Rate)
  • LibriSpeech test-other: 10,26 % WER
  • (Gebaseerd op beam search met 4 hypothesen)

Snelheid en Vertraging

  • Snelheid: 0,70× real-time (elke 1,28 seconden audio wordt in 0,90 seconden verwerkt, met beide cores op 400 MHz).
  • Vertraging: Een woord wordt gemiddeld ongeveer 2 seconden na het uitspreken definitief (mediaan 1,9 tot 2,3 s; 95 % binnen 4,1 s).

Geheugen en Opslag

  • Gewichten: 26,65 MB, geladen vanaf een microSD-kaart bij opstarten in 2,9 seconden.
  • Geheugenverbruik: De gewichten en de status bevinden zich in de 32 MB PSRAM; er blijft 121 KB intern RAM vrij (104 KB bij gebruik van de demo's).

Functionaliteiten

Bit-exacte berekeningen

De chip berekent exact dezelfde resultaten als de PC-versie van de engine; de WER-waarden van de PC zijn identiek aan die van de chip.

Frases (Hotwords)

Via een tekstbestand op de SD-kaart kunnen specifieke woorden en zinnen worden gedefinieerd waar het systeem op moet letten (hotwords). Indien het model een woord anders spelt, kunnen gesproken varianten worden toegevoegd (bijv. ESP32 = ESP thirty two). Deze frases kunnen via het scherm worden in- of uitgeschakeld zonder dat hertraining nodig is.

Spraakbesturing

Er zijn zes demo's beschikbaar die worden aangestuurd door gesproken commando's via woordregels, zonder gebruik van een taalmodel (language model). De firmware firmwares/voicecontrol start met live transcriptie, gevolgd door de spraakbesturingsdemo's. De metingen voor de transcriptie zijn uitgevoerd met firmwares/livetranscriber.

Vergelijking met andere systemen

ParametersGewichtenPlatformStreamingtest-cleantest-otherSnelheid
esp32-pie-asr2/4-bit, 26.65 MBESP32-P4 (2 × 400 MHz RISC-V)Ja4,34 %10,26 %0,70× real time
Kroko (released)int8, 71 MBPCJa3,94 %9,17 %-
Oído (streaming + LM)13M int8ESP32-S3 (240 MHz Xtensa)Ja4,86 %11,03 %4,1-11,1s vertraging
Oído (whole utterance)13M int8ESP32-S3Nee3,70 %8,23 %1,97× real time
Moonshine Tiny27.1M floatCPUNee4,52 %11,71 %-
Whisper tiny.en37.8M floatCPUNee5,66 %15,45 %-
ESP-SR MultiNet-ESP32-S3-Vaste lijst (<200 commando's)--

Opmerking: Metingen voor esp32-pie-asr en Kroko zijn uitgevoerd op alle 2620 / 2939 clips met Whisper's English text normalizer.

Analyse van nauwkeurigheid (test-clean)

  • Kroko (released, int8 ONNX): 4,03 % (greedy) / 3,94 % (beam 4)
  • 2/4-bit gewichten, float activaties (PyTorch sim): 4,53 %
  • 2/4-bit gewichten, integer activaties (de chip): 4,52 % (greedy) / 4,34 % (beam 4)

De 2/4-bit gewichten kosten ongeveer een half punt aan nauwkeurigheid; de integer-rekenkunde op de chip heeft geen merkbare impact.

Prestaties van Frases en Spraakbesturing

Effect van frases op WER

Bij tests met 140 text-to-speech clips (35 zinnen, 4 stemmen):

  • Frases uit: 0 van 60 woorden gevonden, 62 van 72 zinnen gevonden, 0 valse alarmen. WER: 19,5 %
  • Frases aan: 46 van 60 woorden gevonden, 70 van 72 zinnen gevonden, 0 valse alarmen. WER: 3,4 %

Voice Control Demo's

De firmware bevat zes scenario's waarbij gesproken orders een gesimuleerd apparaat aansturen: een robotstofzuiger, een smart home, een autobezetting, een fabriekslijn, een keuken en een presentator.

Nauwkeurigheid per demo (188 clips per demo):

DemoExacte orders (zonder lijst)Met lijstValse acties
Robotstofzuiger92 %96 %0
Smart home93 %97 %0
Autobezetting93 %97 %0
Fabriekslijn86 %94 %0
Keuken97 %98 %0
Presentator97 %99 %0

De vertraging van het einde van een order tot de actie bedraagt mediaan 1,84 s (stofzuiger) tot 1,97 s (fabriek), met een maximum van 2,57 s.

Installatie en Gebruik

Hardwarevereisten

  • ESP32-P4 chip revisie v3 (ESP32-P4X)
  • 32 MB PSRAM
  • Microfoon, scherm en microSD-kaart
  • Getest op: Espressif ESP32-P4X-Function-EV-Board (ES8311 microfoon, 1024 × 600 MIPI-DSI paneel).

Software-installatie

De gewichten (26,65 MB) passen niet in de 16 MB flash van het bord en moeten op een FAT-geformatteerde microSD-kaart worden geplaatst.

  1. Gewichten downloaden:

``bash git clone https://github.com/BoumedineBillal/esp32-pie-asr cd esp32-pie-asr python models/download.py --card <mapvanmicroSD_kaart> ``

  1. Firmware flashen:
  • Via de browser: boumedinebillal.github.io/esp32-pie-asr
  • Of via ESP-IDF v6.1:

``bash cd firmwares/voice_control idf.py set-target esp32p4 idf.py -p PORT flash ``

  1. Frases aanpassen:

Bij de eerste boot schrijft de firmware de lijstbestanden (phrases.txt en demo-specifieke lijsten) naar de SD-kaart. Deze kunnen worden bewerkt op een PC (één woord of zin per regel).

Debugging

Een debug-build voegt een link toe naar een PC via de USB High-Speed poort voor logs, commando's en screenshots:

idf.py -B build_debug -D SDKCONFIG=build_debug/sdkconfig \
-D SDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.debug" -p PORT flash

Architectuur (Inside)

Modeloptimalisatie

  • Gewichten: 2/4-bit gewichten in groepen van 128, met een Hadamard-rotatie en één norm per groep. De keuze tussen 2 of 4 bits per matrix is gebaseerd op sensitiviteit, zonder extra training.
  • Rekenkunde: Gebruik van integer-arithmetiek (int8 voor producten, int16 daartussen, int8 attention caches en activaties via tabellen).
  • Implementatie: PIE SIMD-kernels geschreven in assembly, waarbij de producten over beide cores worden verdeeld.
  • Streaming: Verwerking in chunks van 1,28 s met caches van vaste grootte en een beam search met phrase biasing.

Projectstructuur

  • pieasr/: De engine (ESP-IDF component), inclusief host-build en tests.
  • components/: Spraaksysteem, voice-regels, microfoon, scherm/touch, SD-kaart en debug-link.
  • firmwares/voice_control/: Firmware voor live transcriptie en de zes demo's.
  • firmwares/live_transcriber/: Alleen de transcriptie-engine met board-tests.
  • models/: Downloads voor de gewichten.
  • tools/eval/, benchmarks/: WER-metingen en score-teksten.

Reproductie

Om de resultaten te reproduceren:

# Host build en unit tests
cmake -S pieasr/host -B build/host -DPIEASR_WEIGHTS=$PWD/models/kroko-en-q24-v1.bin
cmake --build build/host && ctest --test-dir build/host

# LibriSpeech data ophalen
python tools/eval/get_librispeech.py --set test-clean

# WER meten op PC (chip configuratie)
bash tools/eval/run_wer.sh data/test-clean int+beam4

# PIE kernels testen op het bord tegen C-referentie
bash pieasr/tests/target/run.sh

Toekomstige Plannen

  • Ondersteuning voor de ESP32-S31 (deze beschikt over dezelfde PIE 2.2 SIMD-instructies als de ESP32-P4X).
  • Ontwikkeling van een model voor Modern Standard Arabic.

Credits en Licenties

  • Model: Kroko door Banafo (Community license, CC-BY-SA).
  • Gewichtsformat: Cactus Quants door Cactus Compute.
  • Testdata: LibriSpeech (CC BY 4.0).
  • Audio: Piper en bijbehorende stemmen voor TTS-testclips.
  • Hardware/SDK: Espressif (ESP-IDF, ES8311, EK79007) (Apache-2.0).
  • Fonts: Inter (SIL OFL 1.1) en stb_truetype (public domain/MIT).

Licentie: De code is gelicenseerd onder Apache-2.0. De gewichten vallen onder CC-BY-SA 4.0.