Hands-Free Voice Dialing

Build Hands-Free Voice Dialing That Runs On-Device

Combine on-device wake word, speech-to-intent, and streaming text-to-speech so users call any contact by voice, including international names and freshly added contacts. Custom voice models are generated per user via cloud API and run entirely on-device.

Platforms supported
AndroidiOSLinuxmacOSWindowsChromeEdgeFirefoxSafariRaspberry Pi
How on-device voice dialing is built

Wake word, intent, contact lookup, and speech synthesis

The on-device voice dialing pipeline runs three Picovoice SDKs in a loop on the user's device: Porcupine Wake Word, Rhino Speech-to-Intent, and Orca Streaming Text-to-Speech. Porcupine listens for the wake phrase. Rhino captures the callContact intent with contact, company, and phone-type slots directly from natural speech. The app looks up the contact against a local address book, dials the selected number, and Orca speaks the confirmation. If the name is ambiguous or the requested phone type is missing, the pipeline loops with a spoken follow-up. Audio and contact data never leave the device.

User"Hey Pico, call Sarahat Acme on mobile"PorcupineWAKE WORDWake word detectedRhinoSPEECH-TO-INTENTintent: callContactSarah · Acme · mobileContactLookupON-DEVICEMatch: Sarah ChenOrcaSTREAMING TTS"Calling Sarah Chenon mobile."
Why Porcupine Wake Word?

Truly hands-free dialer trigger at low CPU and battery cost.

0.6%
CPU Utilization on Raspberry Pi 5 32-bit
97.3%
Accuracy at 1 false alarm per 10 hours
~250K
Custom wake words trained and deployed in 2025

Porcupine Wake Word activates the app when the user utters the chosen phrase, such as "Hey Pico". Product teams can train a branded wake word in seconds in the Picovoice Console or via the Porcupine Model Training API and deploy it across Android, iOS, embedded Linux, and Raspberry Pi. Porcupine runs always-on at very low CPU and battery cost, so the rest of the pipeline only spins up when it needs to, which is essential for battery-powered devices, such as mobile phones, a pair of smart glasses, or a Bluetooth headset.

Wake Word Detection Accuracy - higher the better
Porcupine97.3%
Snowboy68.1%
PocketSphinx48%
CPU Utilization - lower the better
Porcupine0.6%
Snowboy3.8%
PocketSphinx12.1%
Why Rhino Speech-to-Intent?

Contact, company, and phone-type slots directly from speech.

97.3%
Average Command acceptance accuracy (vs. 84.3% Amazon Lex and 77.3% Dialogflow)
6x
Higher accuracy than Big Tech average
5.5x
fewer errors than Dialogflow in high noise (94% vs 67% at 6 dB SNR)

Rhino Speech-to-Intent captures the callContact, selectContact, and selectPhone intents with typed slots: the contact name, the company (to disambiguate "Sarah at Acme" from "Sarah at Cloudway"), and the phone type (mobile, work, home). The Rhino context is built dynamically from the user's local contact list at initialization, so the model recognizes exactly the names in the address book. Most voice command systems chain speech-to-text with a separate NLU model; each step accumulates error and compounds latency. Rhino infers intent and typed slot values directly from audio, holding higher accuracy in noisy environments, which is critical in a moving car or a busy sidewalk.

Voice Command Acceptance Accuracy
Higher is better
Rhino97.3%
Amazon Lex84.3%
Google Dialogflow77.3%
Voice Command Acceptance Accuracy at 21 dB SNR
Higher is better
Rhino99%
Amazon Lex87%
Google Dialogflow83%
Why Orca Streaming Text-to-Speech?

Natural-sounding confirmation at 29 MB peak memory.

128 ms
First-token-to-speech latency (2.6× faster than ElevenLabs Streaming at 335 ms)
29 MB
Peak memory (11× less than the lightest on-device alternative)
2.3×
Less CPU than the most compute-efficient neural on-device TTS

Orca Streaming Text-to-Speech reads each dialer response aloud, such as "Calling Sarah Chen on mobile," "I found Sarah Chen and Sarah Khan. Which one?", or "There is no work number for Sarah Chen. Should I try mobile?". This way the user never has to look at the screen while driving, walking, or operating equipment. Most high-quality TTS engines require hundreds of megabytes of RAM. Orca uses 29 MB peak memory, 10–50× less than any natural-sounding on-device alternative, which fits easily inside a car head unit, a Bluetooth headset firmware image, or a pair of smart glasses. First-token latency is 128 ms, fast enough that spoken confirmations feel conversational.

TTS Latency
Lower is better
Orca TTS Streaming128 ms
ElevenLabs TTS Streaming335 ms
ESpeak TTS1,430 ms
ElevenLabs TTS1,470 ms
TTS Memory Usage
Lower is better
Orca Streaming TTS29 MB
Kitten TTS Nano320 MB
Supertonic TTS 2520 MB
On-device voice dialing use cases

From in-car infotainment to smart glasses

Automotive and in-car infotainment

Hands-free calling that meets compliance without the cloud

Automotive OEMs and tier-one suppliers can embed voice dialing directly in the head unit, ADAS voice UI, or steering-wheel button flow. No dependency on Apple CarPlay Siri, Android Auto, or a cloud voice partner. Hands-free driving laws in the US, EU, and Australia treat voice dialing as compliant driver interaction; on-device execution keeps the pipeline responsive even when cellular drops in tunnels, canyons, or dead zones.

Wearables and hearables

Voice dialing on smart glasses, watches, and earbuds

Smart glasses, smart watches, and hearables have single-digit-megabyte memory budgets and no room for cloud round-trips. The three-SDK pipeline (Porcupine + Rhino + Orca) weighs a few megabytes total and runs on embedded Linux and RTOS-class hardware. The wake word triggers on the wearable, the wearer says "call Alex," and the paired phone places the call using its local contact list. No voice data is shared with a cloud or a voice partner.

Accessibility and assistive tech

Voice dialing for visually and motor-impaired users

For users who cannot easily use a touchscreen (visually impaired, motor-impaired, elderly users, or users in rehabilitation), voice dialing is the primary way to place a call. The on-device pipeline works without an internet connection, without a cloud account, and without a data plan, which matters for accessibility deployments in care facilities and low-bandwidth regions.

Enterprise fleet and VoIP

Fleet safety compliance and business phone apps

Enterprise fleet safety programs enforcing hands-free driving compliance can embed voice dialing into the fleet app on rugged Android handhelds. VoIP and business phone apps (OpenPhone, Dialpad, Grasshopper, Aircall, RingCentral) can add voice-first dialing on iOS and Android. The same SDKs work on iOS even though Apple does not expose Siri contact calling to third parties.

Get started

On-device voice dialing code example

A complete working recipe in Python. Open-source on GitHub. Runs 100% on-device.

recipe · voice-dialing
Difficulty
Beginner
Runtime
100% on-device
Language
Python
Platforms supported
AndroidiOSLinuxmacOSWindowsChromeEdgeFirefoxSafariRaspberry Pi

Prerequisites

Picovoice AccessKey from Picovoice Console and GitHub Repo Clone.

Usage

These instructions assume your current working directory is recipes/hands-free-contact-calling/python.
1

Create a virtual environment

Isolate the recipe's dependencies from your system Python.
2

Activate the virtual environment

Activation makes pip install into .venv instead of system Python.
Linux, macOS, or Raspberry Pi
Windows
3

Install dependencies

Pulls in the Porcupine, Rhino, and Orca Python SDKs along with audio I/O (i.e., PvRecorder and PvSpeaker).
4

Pick or train a wake word

Open the Picovoice Console, go to Porcupine Wake Word, and use a built-in keyword or train a branded phrase such as "Hey Pico", "Call", or your brand name. Download the .ppn file for your target platform.
5

Load your contact list

Edit res/contacts.csv with first_name, last_name, nickname, company, phone_mobile, phone_work, phone_home, and default_phone per contact. The Rhino context is built dynamically from the CSV and the Rhino context template at initialization, so the intent model recognizes exactly the names in your address book. No re-training required when the list changes.
6

Run the voice dialing demo

Pass your AccessKey and the path to the .ppn wake word file you just downloaded. The demo opens the device microphone and runs the on-device voice dialing pipeline locally.
Have questions or looking for implementations in other languages? Visit the GitHub pico-cookbook Hands-Free Contact Calling Recipe, where you can find the code and create an issue for demo-related technical questions.
Frequently asked questions

FAQ

+
What is on-device voice dialing?
On-device voice dialing is a hands-free contact calling workflow that runs entirely on the user's device. No cloud audio API, no network round-trip. A wake word activates the dialer, the user says a natural command like "Call Sarah at Acme on mobile", and the app looks up the contact locally, resolves disambiguation with spoken follow-up questions using Rhino Speech-to-Intent, and dials the selected number. Voice, transcript, and contact data never leave the device. Learn more about the on-device AI approach.
+
How is this different from Siri, Google Assistant, or Alexa contact calling?
Siri, Google Assistant, and Alexa contact calling are proprietary features tied to Apple, Google, and Amazon platforms. Picovoice ships licensable on-device SDKs (Porcupine + Rhino + Orca) that any developer, OEM, or in-car system builder can embed on Android, iOS, Linux, embedded Linux, or Raspberry Pi. There is no Google, Apple, or Amazon dependency, no cloud round-trip, and no shared voice data. See our on-device inference technology for how this runs at scale.
+
How is this different from Cerence Assistant?
Cerence Assistant is a large, hybrid on-device plus cloud stack aimed at automotive OEMs. Picovoice's voice dialing recipe is a lightweight, three-SDK pipeline (Porcupine + Rhino + Orca) that runs entirely on-device, weighs a few megabytes total, and works on commodity Android tablets, embedded Linux, and Raspberry Pi, in addition to infotainment hardware. Related read: the case for voice AI on the edge.
+
How does the wake word work in voice dialing apps?
Porcupine Wake Word listens continuously on-device with very low CPU and battery cost, and only triggers the rest of the pipeline when the user says the chosen wake phrase, such as "Hey Pico", "Call", or a branded phrase. The wake phrase is fully customizable in the Picovoice Console or through the Porcupine Model Training API, in any supported language. See tips on choosing a wake word and the complete guide to wake word. A single product can also ship multiple wake words in different languages and route each to the matching Rhino Speech-to-Intent context for the same voice dialing flow.
+
How does the app resolve ambiguous names like two Sarahs?
Rhino Speech-to-Intent captures the callContact intent with contact, company, and phone-type slots. If the contact name matches multiple entries (for example, Sarah Chen at Dyson and Sarah Khan), the app asks a spoken follow-up ("I found Sarah Chen, Sarah Khan. Which one?") and captures the answer as a selectContact intent. The same pattern handles phone-type disambiguation (mobile, work, home) via the selectPhone intent. Disambiguation also works when contact names come from different languages or scripts, because the Rhino context is built from the caller's own list. See the end-to-end intent inference approach for why this is more accurate than STT-plus-NLU stacks.
+
Can I use my own contact list?
Yes. The recipe reads contacts from a local CSV with first name, last name, nickname, company, and phone numbers (mobile, work, home) plus a default-phone preference per contact. The Rhino context is built dynamically from that list at initialization, so the model recognizes exactly the contact and company names present in the user's own address book, including names that are not common in the app's target language (see also our multilingual voicebots use case). No re-training required when the list changes. Reference: tutorial for training a custom Rhino context.
+
Is contact and voice data sent to a third-party cloud?
No. Voice audio is processed in memory on the device and discarded. The contact list stays on the device. Picovoice has no data controller relationship with end users. This removes an entire category of compliance concern for OEMs shipping in Europe under GDPR, healthcare accessibility deployments under HIPAA, and enterprise fleet safety programs with worker-voice rules. See our full write-up on ensuring the privacy of voice data.
+
Which industries use on-device voice dialing?
Automotive OEMs and tier-one suppliers embedding hands-free calling into in-car voice control, wearable makers building for embedded AI voice assistants (smart glasses, smart watches, hearables), enterprise fleet safety programs for deskless worker productivity, accessibility app builders serving visually impaired and motor-impaired users, and VoIP or business phone apps adding voice-first dialing on iOS and Android. Related read: voice AI for contact centers.
+
Can I send text messages or emails by voice too?
Yes. Add Cheetah Streaming Speech-to-Text to the pipeline to capture a dictated message after the contact is selected, then route it to the phone's messaging or email client. Same wake word, same contact lookup, same Rhino disambiguation flow. Voice, transcript, and message body stay on-device. See the complete guide to streaming speech-to-text for latency and accuracy details.
+
How can I get technical support for the voice dialing demo?
Visit the GitHub pico-cookbook Hands-Free Contact Calling Recipe where you can find the open-source demo code and create an issue for demo-related technical questions or reach out to your Picovoice contact.