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 科学
每月下载量 153
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