# On-device speech-to-text for VAHA: the model, where transcription happens, and a first accuracy test

- Version: v1.0, published 22 October 2026
- Written by: Ritesh Bonthalakoti
- Reviewed by: Bharat Meda
- Domains: On-device AI
- Readiness: TRL 3, experimental proof of concept
- Tested on: VAHA's transcription code for the Arduino UNO Q and its Android companion app, read as of 2026-08-17; faster-whisper int8 on CPU with base.en and small, on 12 synthetic sentences (120 words) on a development computer, not yet on the UNO Q
- Standards: ISO 16290 for the readiness level only; none for speech-recognition accuracy; no accredited testing
- Full paper: [PDF, 16 pages, 0.4 MB](https://dharanova.com/whitepapers/vaha-on-device-speech-to-text.pdf)

## Summary

Describes VAHA's speech-to-text stage and checks the current build against the product README. The device transcribes its own captures on the device with faster-whisper base.en by default; the README's model table says small (277M, "fine-tuned") while its pipeline description says base.en. Notes recorded on the phone are transcribed on the device when the app is connected, sent to Groq when it is not and a key is set, and lose their recording when it is not and no key is set; with a key set, note text also goes to Groq for titles. A first test on 12 synthetic sentences (120 words) on a development computer found 3 word errors for base.en and 2 for small, one misheard word apart, with small about 2.9 times slower. TRL 3; the path to TRL 4 is limits for accuracy and speed, a corrected README, phone recordings kept until transcribed, and the test repeated on the UNO Q with real speech.

## Key findings

- **Model.** The device runs base.en by default; the README's model table says small (277M), and its pipeline description says base.en.
- **Where it runs.** Device captures never leave the device for transcription. Phone-recorded notes can be sent to Groq, and with a Groq key set, note text goes to Groq for titles.
- **Lost recordings.** A phone-recorded note's audio is deleted after every transcription attempt, including when no transcript was made.
- **Accuracy and speed.** One word separates the two models on a 120-word synthetic test; small took about 2.9 times as long. Not yet measured on the UNO Q or with real speech.

## Figures shown on the page

- Figure 1: One capture from microphone to transcript on the device. Flow diagram of one capture on the Arduino UNO Q's Linux side, in python/main.py. 1, record: 48 kHz mono, from the wake word to the stop phrase or silence. 2, resample to 16 kHz with resample_poly(1, 3), line 815. 3, clean: remove the DC offset and scale to the clip's own peak, clean_audio(). 4, transcribe: faster-whisper, int8, CPU, language en, VAD off, default model base.en. 5, tidy: drop um, uh and hmm, capitalise, and add a full stop if missing. Transcript and audio are written to the capture package, which the companion app syncs later.
- Figure 2: Where a phone-recorded note's audio goes, as the app's code runs it. Decision diagram. A note recorded on the phone is saved as a WAV in app storage, then sent for transcription. If the app is connected to the device, it is transcribed on the device through POST /captures/transcribe, with the same faster-whisper set-up and default model base.en. If not, and a Groq API key is set in Settings, the audio is sent to Groq, api.groq.com, model whisper-large-v3, and leaves the home network. If no key is set there is no transcript, and the note text is set to “Audio recorded locally (Offline). Configure a Groq API key…”. In every case the WAV is then deleted and only the note text is kept. With a Groq key set, the transcript is also sent to Groq (llama-3.1-8b-instant) to suggest a title.
- Figure 3: Where this work sits on the EU Horizon TRL scale. Technology readiness ladder from TRL 1 to TRL 9. TRL 1 to 3 are filled in; TRL 3, experimental proof of concept, is marked as this work. TRL 4, technology validated in lab, is marked as next.

## Related reading

- [On the device or in the cloud?](https://dharanova.com/learn/on-device-vs-cloud.md): background on Learn
- [Quantisation: making models fit](https://dharanova.com/learn/quantisation.md): background on Learn
- [Application cores and microcontroller cores on one chip](https://dharanova.com/learn/heterogeneous-socs.md): background on Learn
- [Speech recognition that runs on the device](https://dharanova.com/on-device-speech-recognition.md): an engineering note from our team
- [The one room a phone does not follow you into](https://dharanova.com/arduino-physical-ai-challenge-2026.md): an engineering note from our team
- [Wake-word and stop-phrase detection for VAHA: dataset, validation accuracy and first field check](https://dharanova.com/whitepapers/vaha-wake-word-stop-phrase-detection.md): another whitepaper

This paper documents component-level work in the lab. It is not a product specification.
