Skip to main content

Rhino Speech-to-Intent Engine

Made in Vancouver, Canada by Picovoice

Rhino is Picovoice's Speech-to-Intent engine. It directly infers intent from spoken commands within a given context of interest, in real-time. For example, given a spoken command:

Can I have a small double-shot espresso?

Rhino infers that the user would like to order a drink and emits the following inference result:

{
  "isUnderstood": "true",
  "intent": "orderBeverage",
  "slots": {
    "beverage": "espresso",
    "size": "small",
    "numberOfShots": "2"
  }
}

Rhino is:

  • using deep neural networks trained in real-world environments.
  • compact and computationally-efficient, making it perfect for IoT.
  • self-service. Developers and designers can train custom models using Picovoice Console.

Compatibility

  • Python 3.9+
  • Runs on Linux (x86_64), macOS (x86_64, arm64), Windows (x86_64, arm64), and Raspberry Pi (Zero, 3, 4, 5).

Installation

pip3 install pvrhino

AccessKey

Rhino requires a valid Picovoice AccessKey at initialization. AccessKey acts as your credentials when using Rhino SDKs. You can get your AccessKey for free. Make sure to keep your AccessKey secret. Signup or Login to Picovoice Console to get your AccessKey.

Usage

Create an instance of the engine:

import pvrhino

access_key = "${ACCESS_KEY}" # AccessKey obtained from Picovoice Console (https://console.picovoice.ai/)

handle = pvrhino.create(access_key=access_key, context_path='/absolute/path/to/context')

Where context_path is the absolute path to Speech-to-Intent context created either using Picovoice Console or one of the default contexts available on Rhino's GitHub repository.

The sensitivity of the engine can be tuned using the sensitivity parameter. It is a floating-point number within [0, 1]. A higher sensitivity value results in fewer misses at the cost of (potentially) increasing the erroneous inference rate.

import pvrhino

access_key = "${ACCESS_KEY}" # AccessKey obtained from Picovoice Console (https://console.picovoice.ai/)

handle = pvrhino.create(access_key=access_key, context_path='/absolute/path/to/context', sensitivity=0.25)

When initialized, the valid sample rate is given by handle.sample_rate. Expected frame length (number of audio samples in an input array) is handle.frame_length. The engine accepts 16-bit linearly-encoded PCM and operates on single-channel audio.

def get_next_audio_frame():
    pass

while True:
    is_finalized = rhino.process(get_next_audio_frame())

    if is_finalized:
        inference = rhino.get_inference()
        if not inference.is_understood:
            # add code to handle unsupported commands
            pass
        else:
            intent = inference.intent
            slots = inference.slots
            # add code to take action based on inferred intent and slot values

When done resources have to be released explicitly:

handle.delete()

Non-English Contexts

In order to run inference on non-English contexts you need to use the corresponding model file. The model files for all supported languages are available here.

Train Models over API

You can train models over API without going to the console:

train_context_from_dynamic_slots(
        "${ACCESS_KEY}",                             # AccessKey obtained from Picovoice Console (https://console.picovoice.ai/)
        "${OUTPUT_PATH}",                            # Path to save the newly trained model
        "${LANGUAGE}",                               # Two-character language code
        "${CONTEXT_PATH}",                           # Path to Rhino's context (.rhn) file
        {"${SLOT_NAME}": {"${SLOT1}", "${SLOT2}"}},  # Dynamic slot key-value pairs to merge into the YAML's `context.slots` section.
        "${PLATFORM}"                                # Optional platform for the trained model. If None, the default(current) platform is used.

(or)

train_context_from_yaml(
        "${ACCESS_KEY}",                             # AccessKey obtained from Picovoice Console (https://console.picovoice.ai/)
        "${OUTPUT_PATH}",                            # Path to save the newly trained model
        "${LANGUAGE}",                               # Two-character language code
        "${YAML_PATH}",                              # Path to YAML configuration file
        "${PLATFORM}"                                # Optional platform for the trained model. If None, the default(current) platform is used.

train_context_from_dynamic_slots is better suited if you would like the add additional slot values to your current Rhino model.

Check Rhino Model API docs for a list of supported languages and platforms.

Demos

pvrhinodemo provides command-line utilities for processing real-time audio (i.e. microphone) and files using Rhino.

Metadata

Release files for pvrhino 4.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pvrhino 4.1.0
File Size Uploaded
pvrhino-4.1.0.tar.gz 4.6 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for pvrhino 4.1.0
File Interpreter ABI Platform
pvrhino-4.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 9.1 MB

Release files / pvrhino-4.1.0.tar.gz

Download URL pvrhino-4.1.0.tar.gz
Size 4.6 MB
Tags Source
SHA-256 checksum
How to use checksums
fdd7a2a245cda5a1c8867a0a92f095d47a224a672d3af540fc48a805602ba2b7
BLAKE2b-256 checksum
How to use checksums
52effe41284d38fe524b3a661c926353f41c7a30f5a56b05f6e13e202d744d0f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / pvrhino-4.1.0-py3-none-any.whl

Download URL pvrhino-4.1.0-py3-none-any.whl
Size 4.6 MB
Tags Python 3
SHA-256 checksum
How to use checksums
e613364e4967b3e57ef4ddf30534d427c86623bba91b150dc910e69ae5aabe1b
BLAKE2b-256 checksum
How to use checksums
faff5f3151e6d1971a274ee911428742869205055966a368282b09a127dce451
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

4.1.0 This release

2 release files

4.0.3

2 release files

4.0.2

2 release files

4.0.1

2 release files

4.0.0

2 release files

3.0.5

2 release files

3.0.4

2 release files

3.0.3

2 release files

3.0.2

2 release files

3.0.1

2 release files

3.0.0

2 release files

2.2.1

2 release files

2.2.0

2 release files

2.1.7

2 release files

2.1.6

2 release files

2.1.5

2 release files

2.1.4

2 release files

2.1.3

2 release files

2.1.2

2 release files

2.1.1

2 release files

2.1.0

2 release files

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.6.3

2 release files

1.6.2

2 release files

1.6.1

2 release files

1.6.0

2 release files

1.5.0

2 release files

1.3.6

2 release files

1.3.5

2 release files

1.3.1

2 release files

1.3.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page