19 个稳定版本 (3 个主要版本)

3.0.3 2024年1月31日
3.0.2 2023年11月16日
3.0.1 2023年10月30日
2.2.1 2023年6月7日
0.0.1 2021年8月12日

#8 in 科学

Download history 2/week @ 2024-05-17 2/week @ 2024-05-24 1/week @ 2024-05-31 1/week @ 2024-06-07 144/week @ 2024-07-05 9/week @ 2024-07-12

每月下载量 153

Apache-2.0

18KB
265

Picovoice SDK for Rust

Picovoice

Picovoice 在加拿大温哥华制作

Picovoice 是一个端到端平台,让您根据自己的需求构建语音产品。它允许创建类似 Alexa 和 Google 的语音体验。但它完全在设备上运行,100% 原地处理。

  • 私有:所有操作都在离线完成。本质上符合 HIPAA 和 GDPR 标准。
  • 可靠:无需持续连接即可运行。
  • 零延迟:边缘优先架构消除了不可预测的网络延迟。
  • 准确:对噪音和回声具有抵抗力。它比基于云的替代方案表现出色 *
  • 跨平台:一次设计,到处部署。使用熟悉的语言和框架进行构建。

兼容性

  • Rust 1.54+
  • 在 Linux (x86_64)、macOS (x86_64 和 arm64)、Windows (x86_64)、Raspberry Pi、NVIDIA Jetson (Nano) 和 BeagleBone 上运行

安装

首先您需要在系统上安装 Rust 和 Cargo

要将 picovoice 库添加到您的应用程序中,请将 picovoice 添加到应用程序的 Cargo.toml 清单中

[dependencies]
picovoice = "*"

访问密钥

Picovoice 在初始化时需要一个有效的 Picovoice AccessKey。当使用 Picovoice SDK 时,AccessKey 作为您的凭证。您可以免费获得您的 AccessKey。请确保您的 AccessKey 保密。登录到 Picovoice 控制台 获取您的 AccessKey

使用方法

要使用默认参数创建引擎实例,请使用 PicovoiceBuilder 函数。您必须提供一个 Porcupine 关键词文件、一个唤醒词检测回调函数、一个 Rhino 上下文文件和一个推理回调函数。然后,您必须调用 init()

use picovoice::{rhino::RhinoInference, PicovoiceBuilder};

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

let wake_word_callback = || {
    // let user know wake word detected
};
let inference_callback = |inference: RhinoInference| {
    if inference.is_understood {
        let intent = inference.intent.unwrap();
        let slots = inference.slots;
        // add code to take action based on inferred intent and slot values
    } else {
        // add code to handle unsupported commands
    }
};

let mut picovoice = PicovoiceBuilder::new(
    access_key,
    keyword_path,
    wake_word_callback,
    context_path,
    inference_callback,
).init().expect("Failed to create picovoice");

当检测到由 keyword_path 定义的唤醒词时,它将根据位于 context_path 的文件定义的上下文,从后续的语音命令中推断用户的意图。keyword_path 是指向 Porcupine 唤醒词引擎 关键词文件(具有 .ppn 后缀)的绝对路径。context_path 是指向 Rhino 语音到意图引擎 上下文文件(具有 .rhn 后缀)的绝对路径。wake_word_callback 在检测到唤醒词时被调用,而 inference_callback 在后续语音命令推断完成后被调用。

实例化后,可以通过 sample_rate() 获取有效的采样率。每帧预期的音频样本数是 frame_length()。引擎接受 16 位线性编码的 PCM 格式,并且只处理单声道音频。

fn next_audio_frame() -> Vec<i16> {
    // get audio frame
}

loop {
    picovoice.process(&next_audio_frame()).expect("Picovoice failed to process audio");
}

可以通过 porcupine_sensitivity()rhino_sensitivity() 方法分别调整 Porcupine(唤醒词)和 Rhino(推断)引擎的灵敏度。它们是 [0, 1] 范围内的浮点数。更高的灵敏度值会导致误报率(可能)增加,从而减少漏报。

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

let mut picovoice = PicovoiceBuilder::new(
    access_key,
    keyword_path,
    wake_word_callback,
    context_path,
    inference_callback,
)
.porcupine_sensitivity(0.4f32)
.rhino_sensitivity(0.77f32)
.init().expect("Failed to create picovoice");

可以通过类似的方式调整两个引擎的非标准模型和库路径(例如,使用非英语模型时)。

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

let mut picovoice = PicovoiceBuilder::new(
    access_key,
    keyword_path,
    wake_word_callback,
    context_path,
    inference_callback,
)
.porcupine_sensitivity(0.4f32)
.rhino_sensitivity(0.77f32)
.porcupine_model_path("path/to/model/params.pv")
.rhino_model_path("path/to/model/params.pv")
.porcupine_library_path("path/to/library.so")
.rhino_library_path("path/to/library.so")
.init().expect("Failed to create picovoice");

非英语模型

为了在其它语言中检测唤醒词和运行推断,您需要使用相应的模型文件。所有支持的语言的模型文件都可以在 这里这里 找到。

演示

请查看 Picovoice Rust 演示 这里

依赖关系

~6–11MB