Porcupine - Raspberry Pi Quick Start

  • Wake Word Detection
  • Hotword Detection
  • Voice Commands
  • Always Listening
  • Raspberry Pi
  • Python
  • C

Requirements

  • Raspberry Pi (4, 3, 2, or Zero) running Raspbian.
  • USB microphone.

Microphone Setup

Identify The Microphone's Name

Connect the microphone to Raspberry Pi and get the list of available audio devices:

arecord -L

The output will be similar to below

null
    Discard all samples (playback) or generate zero samples (capture)
default
mic
sysdefault:CARD=Device
    USB PnP Sound Device, USB Audio
    Default Audio Device
front:CARD=Device,DEV=0
    USB PnP Sound Device, USB Audio
    Front speakers
surround21:CARD=Device,DEV=0
    USB PnP Sound Device, USB Audio
    2.1 Surround output to Front and Subwoofer speakers
surround40:CARD=Device,DEV=0
    USB PnP Sound Device, USB Audio
    4.0 Surround output to Front and Rear speakers
surround41:CARD=Device,DEV=0
    USB PnP Sound Device, USB Audio
    4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=Device,DEV=0
    USB PnP Sound Device, USB Audio
    5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=Device,DEV=0
    USB PnP Sound Device, USB Audio
    5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=Device,DEV=0
    USB PnP Sound Device, USB Audio
    7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
iec958:CARD=Device,DEV=0
    USB PnP Sound Device, USB Audio
    IEC958 (S/PDIF) Digital Audio Output
dmix:CARD=Device,DEV=0
    USB PnP Sound Device, USB Audio
    Direct sample mixing device
dsnoop:CARD=Device,DEV=0
    USB PnP Sound Device, USB Audio
    Direct sample snooping device
hw:CARD=Device,DEV=0
    USB PnP Sound Device, USB Audio
    Direct hardware device without any conversions
plughw:CARD=Device,DEV=0
    USB PnP Sound Device, USB Audio
    Hardware device with all software conversions

In this case we pick plughw:CARD=Device,DEV=0. Note that this device comes with software conversions which is handy for resampling. In what follows we note this value as ${INPUT_AUDIO_DEVICE}.

Set The Default Microphone

create ~/.asoundrc

pcm.!default {
type asym
capture.pcm "mic"
}
pcm.mic {
type plug
slave {
pcm ${INPUT_AUDIO_DEVICE}
}
}

If you have a speaker add a section for that to ~/asoundrc as well.

Test the Microphone

Check the microphone works properly by recording audio into a file:

arecord --format=S16_LE --duration=5 --rate=16000 --file-type=wav ~/test.wav

If the command above executes without any errors, then the microphone is functioning as expected. In practice, it is recommended to inspect the recorded file for recording side effects such as clipping.

Installation

The core of the wake word engine is shipped as a pre-compiled ANSI C library. Hence, it can be used within a C/C++ application directory or in a high-level language such as Python via its bindings.

Python

PIP

Install PyAudio using

sudo apt-get install python3-pyaudio

Then install the PIP package using

sudo pip3 install pvporcupine

Run the following in the terminal

pvporcupine_mic --keywords porcupine

The engine starts processing the audio input from the microphone in realtime and outputs to the terminal when it detects utterances of wake-word "porcupine". You can learn about the capabilities of pvporcupine_mic by running pvporcupine_mic --help from the terminal.

Repository

Clone the repository using

git clone https://github.com/Picovoice/porcupine.git

Change the current directory to the root of the repository and install Python dependencies

pip3 install -r requirements.txt

Install PyAudio using

sudo apt-get install python3-pyaudio

Test the validity of installation by running Python binding's unit tests

python3 binding/python/test_porcupine.py

Finally, run the microphone demo application to monitor the microphone stream for the phrase "porcupine"

python3 demo/python/porcupine_demo_mic --keywords porcupine

The engine starts processing the audio input from the microphone in realtime and outputs to the terminal when it detects utterances of wake-word "porcupine". You can learn about the capabilities of Python demo application by running python3 demo/python/porcupine_demo_mic.py --help from the terminal.

C

Install ALSA development library

sudo apt-get install libasound-dev

Clone the repository

git clone https://github.com/Picovoice/porcupine.git

Compile the C demo application

gcc -O3 -o demo/c/porcupine_demo_mic -I include/ demo/c/porcupine_demo_mic.c -ldl -lasound -std=c99

Replace ${CPU} in the command below based on the trim of Raspberry Pi (cortex-a72 for Raspberry Pi 4, cortex-a53 for Raspberry Pi3, cortex-a7 for Raspberry Pi 2, and arm11 for the rest) and run the demo

demo/c/porcupine_demo_mic lib/raspberry-pi/${CPU}/libpv_porcupine.so lib/common/porcupine_params.pv \
resources/keyword_files/raspberry-pi/porcupine_raspberry-pi.ppn 0.5 ${INPUT_AUDIO_DEVICE}

The engine starts processing the audio input from the microphone in realtime and outputs to the terminal when it detects utterances of wake-word "porcupine".

Creating Custom Wake Words

Enterprises who are commercially engaged with Picovoice can create custom wake word models for Raspberry Pi using Picovoice Console.