Porcupine Wake Word

Build always-listening yet private voice applications

Train production-ready models in seconds

Start Building for Free
Click to activate
Click to activate
quotePicovoice is a leader in the field of wake word detection. We are extremely impressed with how easy it is to get a wake word and how well it performs. We have tried other alternatives, but they do not perform as well.
Monica Lam
Professor of Computer Science,
Stanford University

Train Custom Wake Words Instantly

Train branded wake words and always-listening custom voice commands on Picovoice Console, no machine learning or coding skills required. Type the phrase to train a production-grade keyword model in seconds. Test instantly within your browser.

Start Building
Picovoice Console User Interface to train platform-optimized always-listening voice commands and wake words instantly
Start Building

Build with Picovoice SDKs in Minutes

Reduce time-to-market and eliminate engineering risks with the Picovoice SDK of your choice, including Python, Flutter and React. Add only a few lines of code, and let Picovoice SDK take care of audio capture and voice recognition.

porcupine = pvporcupine.create(
access_key=access_key,
keyword_paths=keyword_paths)
while True:
keyword_index = porcupine.process(audio_frame())
if keyword_index >= 0:
// Detection callback
Build with Python
let porcupine = new Porcupine(
accessKey,
keywordPaths,
sensitivities);
while (true) {
let keywordIndex = porcupine.process(audioFrame());
if (keywordIndex >= 0) {
// Detection callback
}
}
Build with NodeJS
PorcupineManager porcupineManager = new PorcupineManager.Builder()
.setAccessKey(accessKey)
.setKeywordPath(keywordPath)
.build(
appContext,
new PorcupineManagerCallback() {
@Override
public void invoke(int keywordIndex) {
// Detection callback
}
}
);
porcupineManager.start()
Build with Android
let porcupineManager = try PorcupineManager(
accessKey,
keywordPath: keywordPath,
onDetection: { keywordIndex in
// Detection callback
})
try porcupineManager.start()
Build with iOS
const {
isLoaded,
isListening,
isError,
errorMessage,
start,
pause,
stop
} = usePorcupine(
PorcupineWorkerFactory,
{
accessKey: accessKey,
keywords: keywords,
start: true
},
(keywordLabel: string) => {
// Detection callback
};
);
Build with React
PorcupineManager porcupineManager = await PorcupineManager.fromKeywordPaths(
accessKey,
keywordPaths,
(keywordIndex) => {
// Detection callback
});
await porcupineManager.start()
Build with Flutter
let porcupineManager = await PorcupineManager.fromKeywordPaths(
accessKey,
keywordPaths,
(keywordIndex) => {
// Detection callback
});
await porcupineManager.start()
Build with React Native
PorcupineManager porcupineManager = PorcupineManager.FromKeywordPaths(
accessKey,
keywordPaths,
(keywordIndex) => {
// Detection callback
});
porcupineManager.start();
Build with Unity
constructor(private porcupineService: PorcupineService) {
this.keywordInsert detection = porcupineService.keyword$.subscribe(
keywordLabel => {
// Detection callback
}
)
}
async ngOnInit() {
await this.porcupineService.init(
PorcupineWorkerFactory,
{
accessKey: accessKey,
keywords: keywords
}
)
}
Build with Angular
<Porcupine
ref="porcupine"
v-bind:porcupineFactoryArgs="{
accessKey: accessKey,
keywords: keywords
}"
v-bind:porcupineFactory="factory"
v-on:ppn-ready="ppnReadyFn"
v-on:ppn-keyword="ppnKeywordFn"
/>
methods: {
ppnKeywordFn: function (keywordLabel) {
// Detection callback
}
}
Build with Vue
Porcupine porcupine = Porcupine.FromKeywordPaths(
accessKey,
keywordPaths);
while (true)
{
var keywordIndex = porcupine.Process(AudioFrame());
if (keywordIndex >= 0)
{
// Detection callback
}
}
Build with .NET
Porcupine porcupine = new Porcupine.Builder()
.setAccessKey(accessKey)
.setKeywordPath(keywordPath)
.build();
while (true) {
int keywordIndex = porcupine.process(audioFrame());
if (keywordIndex >= 0) {
// Detection callback
}
}
Build with Java
porcupine := Porcupine{
AccessKey: accessKey,
KeywordPaths: keywordPaths}
porcupine.Init()
for {
keywordIndex, err := porcupine.Process(AudioFrame())
if keywordIndex >= 0 {
// Detection callback
}
}
Build with Go
let porcupine: Porcupine = PorcupineBuilder
::new_with_keyword_paths(keyword_paths)
.init()
.expect("");
loop {
if let Ok(keyword_index) = porcupine.process(&audio_frame()) {
if keyword_index >= 0 {
// Detection callback
}
}
}
Build with Rust
pv_porcupine_t *porcupine = NULL;
pv_porcupine_init(
access_key,
model_path,
num_keywords,
keyword_paths,
&sensitivities,
&porcupine);
while (true) {
pv_porcupine_process(
porcupine,
audio_frame(),
&keyword_index);
if (keyword_index >= 0) {
// Detection callback
}
}
Build with C

Deploy a Unified Voice Experience Anywhere

Elevate user experience across all channels while remaining platform agnostic. Add always-listening custom voice commands and wake words to your existing platforms without worrying about future expansions.

Start Building

Grow with no limits

Grow user engagement with unlimited voice interactions without worrying about the unbounded API costs. Scale globally with Picovoice’s multilingual support for English, French, German, Italian, Japanese, Korean, Portuguese, Spanish, and more.

Start with the Free Tier

English

German
Deutsch

Spanish
Español

French
Français

Italian
Italiano

Japanese
日本語

Korean
한국어

Portuguese
Português

Mandarin
普通话

Dutch
Nederlands

Russian
Русский

Hindi
हिन्दी

Polish
Język polski

Vietnamese
Tiếng Việt

Swedish
Svenska

Arabic
اَلْعَرَبِيَّةُ

Start with the Free Tier

Why Porcupine Wake Word?

Highly accurate — backed by open-source benchmark, not PowerPoint

When it comes to accuracy, make a decision based on data, not claims. Every voice AI vendor claims their technology is “revolutionary” and has “the highest wake word response accuracy”, with no rigorous or reproducible scientific proof. Instead, we published an open-source wake word benchmark to back that Porcupine functions robustly across various accents and in the presence of noise and reverberations.

Open-source benchmark results show Porcupine Wake Word outperforms Snowboy and PocketSphinx with high margins.

Lightweight — Runs locally on microcontrollers or even offline in web browsers.

Always-listening keyword spotting requires voice data to be processed on-device. Otherwise, it risks user privacy, drains the battery, incurs unbounded costs, and gives a poor user experience. Porcupine always processes voice data offline, even within your browser. Go to the Lamp Demo and turn off the internet connection. It keeps working, right?

Click to activate

Scalable — Supports multilingual voice user interfaces.

Porcupine Wake Word Engine can detect many keywords and phrases concurrently with no added CPU footprint, even in many languages.

Try the Smart Lamp demo that contains 24 wake words from eight different languages. The demo works within the web browser and detects multiple wake words.

Use Cases

Search By Voice

Add voice for truly hands-free search experiences on the websites, mobile applications and devices.

Read More
Voice Search

Add voice search to mobile applications, websites, and devices. Find keywords and phrases in audio, video, and streams.

Read More
Speech Analytics

Transformative customer and employee experience with speech analytics and intelligence tools powered by the only end-to-end Voice AI platform.

Read More
Voice Command

Add voice commands to devices, mobile or web applications to elevate user experience.

Read More

Learn more about Porcupine Wake Word Engine

  • What is Wake Word Detection?

    Wake word detection is one of the applications of Keyword Spotting (KWS) technology. Hotword detection, keyword recognition and keyword detection are frequently-used synonyms. It detects (spots) keywords and phrases in audio streams and conversations. It’s mainly used for voice activation, in other words, to activate dormant devices and applications. (i.e. wakes them up) Hence, these keywords are called wake phrase, wake word, wake up word, hotword or trigger phrase. The most famous wake words are Amazon’s Alexa, Google’s OK Google (Hey Google) and Apple’s Hey Siri. Porcupine Wake Word Engine enables developers to build voice experiences similar to them but with their brands. Porcupine also ensures privacy, reliability and zero-latency of voice-activated products. However, Porcupine is useful for other purposes, such as moderation and monitoring. Don’t forget to check out Voice Search, Voice Command and Control, Search by Voice and Speech Analytics use cases to learn more about various voice AI applications with Porcupine.

  • Does Porcupine process voice data locally on the device?

    Porcupine processes voice data locally on the device. If you haven’t, try the Smart Lamp demo offline. Turn off your internet connection before running the demo. Porcupine wake word engine processes voice data within your web browser and can detect multiple wake words in many languages. Wake word engines should process voice data on-device, not in the cloud. Keyword detection can also implement always-listening voice commands. Running keyword detection in the cloud requires continuous data transfer and computation, resulting in hefty cloud bills, tremendous data usage, quickly-drained batteries, and extreme privacy risks. That’s why speech-to-text API providers do not offer keyword detection. It’s also one of the reasons why Picovoice is still the only end-to-end voice AI platform.

  • Does Picovoice require customer data?

    Picovoice doesn’t rely on nor gather customer data, thanks to transfer and self-supervised learning algorithms in Porcupine. Design on your terms without worrying about time-to-market, cost, and governance.

  • Which platforms does Porcupine Wake Word support?

    1. Microcontrollers: Arm Cortex-M, STM32, PSoC, Arduino, and i.MX RT
    2. Single Board Computers: Raspberry Pi, NVIDIA Jetson, and BeagleBone
    3. Mobile Applications: Android and iOS
    4. Web Browsers : Chrome, Safari, Firefox, and Edge
    5. Desktop and Servers: Linux, macOS, and Windows
  • Which wake words perform the best?

    The performance of the wake word depends on several factors like the number of phonemes, vowels, and syllables. For more information, check out the guide on choosing a wake word and frequently asked questions.

  • How do I get technical support for Porcupine Wake Word?

    Picovoice docs, blogs, Medium posts, and GitHub are great resources to learn about voice recognition, Picovoice engines, and how to start building voice-activated products. Picovoice also offers GitHub community support to all Free Tier users.

  • Which keywords are available to change “Alexa” or “Hey Google” wake words?

    Porcupine Wake Word Engine empowers developers to train any wake word of choice and always-listening custom commands that could work with Alexa-enabled applications and Google Assistant. Technically, “Jarvis” or other phrases can be created and used to change “Alexa” and “Hey Google” wake words.

  • What should I do if I need to create a custom wake word such as imaginary creative terms that are not in Porcupine Lexicon?

    Engage with Picovoice Sales by providing details about the opportunity, including use case, requirements, and project details. Someone from the Picovoice team will respond to you.

  • What should I do if I need support for other languages?

    Engage with Picovoice Sales by providing details about the opportunity, including use case, requirements, and project details. Someone from the Picovoice team will respond to you.

  • How can I get informed about the updates and upgrades?

    Version changes appear in the Picovoice Newsletter, LinkedIn, and Twitter. Subscribing to GitHub is the best way to get notified of the patch releases. If you enjoy building with Porcupine, don’t forget to give it a star when you’re on GitHub!

Lead the Voice Revolution!

Build private, fast, cost-effective, cross-platform voice products
Talk to a Voice AI Expert