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

3.0.2 2024年1月30日
3.0.1 2023年11月16日
3.0.0 2023年10月25日
2.2.1 2023年6月7日
0.0.2 2021年8月9日

16音频 中排名

Download history 35/week @ 2024-04-06 7/week @ 2024-04-13 20/week @ 2024-04-20 10/week @ 2024-04-27 9/week @ 2024-05-04 3/week @ 2024-05-11 22/week @ 2024-05-18 13/week @ 2024-05-25 73/week @ 2024-06-01 51/week @ 2024-06-08 29/week @ 2024-06-15 25/week @ 2024-06-22 55/week @ 2024-06-29 13/week @ 2024-07-06 8/week @ 2024-07-13 8/week @ 2024-07-20

每月下载量 86
用于 picovoice

Apache-2.0

3MB
743

包含 (Windows DLL, 295KB) libpv_porcupine.dll,(ELF库, 145KB) data/lib/beaglebone/libpv_porcupine.so,(ELF库, 155KB) libpv_porcupine.so,(ELF库, 180KB) data/lib/linux/x86_64/libpv_porcupine.so,(Mach-o库, 220KB) data/lib/mac/arm64/libpv_porcupine.dylib,(Mach-o库, 235KB) libpv_porcupine.dylib 等8个文件 更多

Porcupine唤醒词引擎

由加拿大温哥华的Picovoice制作

Porcupine是一个高精度且轻量级的唤醒词引擎。它允许构建始终处于监听状态的语音应用程序。它是

  • 在真实世界环境中训练的深度神经网络。
  • 紧凑且计算效率高。非常适合物联网。
  • 跨平台
    • Arm Cortex-M、STM32、Arduino和i.MX RT
    • 树莓派、NVIDIA Jetson Nano和BeagleBone
    • Android和iOS
    • Chrome、Safari、Firefox和Edge
    • Linux (x86_64)、macOS (x86_64、arm64)和Windows (x86_64)
  • 可扩展。它可以检测多个始终处于监听状态的语音命令,而不会增加运行时占用。
  • 自助服务。开发者可以使用Picovoice控制台训练自定义唤醒词模型。

兼容性

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

安装

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

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

[dependencies]
pv_porcupine = "*"

如果您想克隆仓库并在本地使用,首先运行 copy.sh。 (注意:在Windows上,需要Git Bash或其他bash shell,否则您必须手动将库复制到项目中)。然后您可以引用本地的绑定位置

[dependencies]
pv_porcupine = { path = "/path/to/rust/binding" }

访问密钥

Porcupine在初始化时需要一个有效的Picovoice AccessKey。当使用Porcupine SDK时,AccessKey充当您的凭据。您可以免费获取您的AccessKey。请确保您的AccessKey保密。在Picovoice控制台注册或登录以获取您的AccessKey

用法

要创建引擎的实例,首先使用唤醒词引擎的配置参数创建一个PorcupineBuilder实例,然后调用.init()

use porcupine::{BuiltinKeywords, PorcupineBuilder};

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

let porcupine: Porcupine = PorcupineBuilder::new_with_keywords(access_key, &[BuiltinKeywords::Porcupine]).init().expect("Unable to create Porcupine");

在上面的例子中,我们初始化了引擎以检测内置的唤醒词"Porcupine"。内置关键字包含在具有BuiltinKeywords枚举类型的包中。

Porcupine可以同时检测多个关键字

let porcupine: Porcupine = PorcupineBuilder::new_with_keywords(access_key, &[BuiltinKeywords::Porcupine, BuiltinKeywords::Blueberry, BuiltinKeywords::Bumblebee])
    .init().expect("Unable to create Porcupine");

要检测自定义关键字,使用PorcupineBuildernew_with_keyword_paths方法传入*.ppn文件路径

let porcupine: Porcupine = PorcupineBuilder::new_with_keyword_paths(access_key, &["/absolute/path/to/keyword/one.ppn", "/absolute/path/to/keyword/two.ppn"])
    .init().expect("Unable to create Porcupine");

可以通过将适当的*.pv文件路径传递到model_path方法来更改语言

let porcupine: Porcupine = PorcupineBuilder::new_with_keyword_paths(access_key, &["/absolute/path/to/keyword/one.ppn"])
    .model_path("/path/to/another/language_params.pv")
    .init().expect("Unable to create Porcupine");

可以使用sensitivities方法按关键字调整引擎的灵敏度

let porcupine: Porcupine = PorcupineBuilder::new_with_keywords(access_key, &[BuiltinKeywords::Porcupine, BuiltinKeywords::Bumblebee])
    .sensitivities(&[0.2f32, 0.42f32])
    .init().expect("Unable to create Porcupine");

灵敏度是一个参数,它允许以误报率为代价交换漏报率。它是一个在[0, 1]内的浮点数。更高的灵敏度以增加误报率为代价降低漏报率。

初始化时,有效样本率由sample_rate()给出。期望帧长度(输入数组中的音频样本数)由frame_length()给出。该引擎接受16位线性编码的PCM,并处理单声道音频。

要将音频输入Porcupine,请在捕获循环中使用process函数。

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

loop {
    if let Ok(keyword_index) = porcupine.process(&next_audio_frame()) {
        if keyword_index >= 0 {
            // wake word detected!
        }   
    }
}

非英语唤醒词

为了检测非英语唤醒词,您需要使用相应的模型文件。所有支持的语言模型文件均可在此处找到。

示例

请参阅Porcupine Rust示例此处

依赖关系