Cobra
由 Picovoice 在加拿大温哥华制作
Cobra 是一款高度精确和轻量级的语音活动检测(VAD)引擎。
目录
演示
Python 演示
安装演示包
sudo pip3 install pvcobrademo
将功能正常的麦克风连接到您的设备,然后在终端中运行以下命令
cobra_demo_mic --access_key ${AccessKey}
将 ${AccessKey}
替换为您从 Picovoice 控制台 获得的 AccessKey。当检测到任何语音活动时,Cobra 会实时处理麦克风输入的音频并将其输出到终端。
有关 Python 演示的更多信息,请访问 demo/python。
C 演示
构建演示
cmake -S demo/c/ -B demo/c/build && cmake --build demo/c/build --target cobra_demo_mic
列出可用的音频输入设备
./demo/c/build/cobra_demo_mic -s
运行演示
./demo/c/build/cobra_demo_mic -l ${LIBRARY_PATH} -a ${ACCESS_KEY} -d ${AUDIO_DEVICE_INDEX}
将 ${LIBRARY_PATH}
替换为位于 lib 下的适当库的路径,将 ${ACCESS_KEY}
替换为从 Picovoice 控制台 获得的 AccessKey,以及将 ${INPUT_AUDIO_DEVICE}
替换为您的麦克风设备的索引。
有关 C 演示的更多信息,请访问 demo/c。
Android 演示
使用 Android Studio,将 demo/android/Activity 打开为 Android 项目,然后运行应用程序。将 MainActivity.java 中的 String ACCESS_KEY = "..."
替换为通过 Picovoice 控制台 生成的 AccessKey。
有关 Android 演示的更多信息,请访问 demo/android。
iOS 演示
从这个目录运行以下命令以安装 Cobra-iOS CocoaPod
pod install
将 ViewModel.swift 中的 let ACCESS_KEY = "..."
替换为您从 Picovoice 控制台 获得的。
然后,使用 Xcode,打开生成的 CobraDemo.xcworkspace 并运行应用程序。按下开始按钮并开始说话,背景色会在您说话时改变。
有关 iOS 演示的更多信息,请访问 demo/ios。
Web 演示
从 demo/web 在终端中运行以下命令
yarn
yarn start
(或)
npm install
npm run start
在您的浏览器中打开 https://:5000
以尝试演示。
Rust 演示
从 demo/rust/micdemo 构建并运行演示
cargo run --release -- --access_key ${ACCESS_KEY}
有关 Rust 演示的更多信息,请访问 demo/rust。
SDKs
Python
安装 Python SDK
pip3 install pvcobra
SDK 提供了一个工厂方法来创建引擎实例
import pvcobra
handle = pvcobra.create(access_key=${AccessKey})
其中 ${AccessKey}
是应从 Picovoice 控制台 获得的 AccessKey。初始化时,可以使用 handle.sample_rate
获取有效的采样率。所需的帧长度(输入数组中的音频样本数)是 handle.frame_length
。该对象可以用来监控传入的音频,如下所示
def get_next_audio_frame():
pass
while True:
voice_probability = handle.process(get_next_audio_frame())
最后,完成时务必显式使用 handle.delete()
释放资源。
C
include/pv_cobra.h 头文件包含相关信息。构建对象的实例
pv_cobra_t *handle = NULL;
pv_status_t status = pv_cobra_init(${ACCESS_KEY}, &handle);
if (status != PV_STATUS_SUCCESS) {
// error handling logic
}
用从 Picovoice 控制台获得的 AccessKey 替换 ${ACCESS_KEY}
。现在可以使用 handle
来监控输入音频流。Cobra 接受单通道、16 位线性编码的 PCM 音频。样本率可以使用 pv_sample_rate()
获取。最后,Cobra 接受连续的数据块(也称为帧)作为输入音频,可以使用 pv_cobra_frame_length()
获取每个帧的长度。
extern const int16_t *get_next_audio_frame(void);
while (true) {
const int16_t *pcm = get_next_audio_frame();
float is_voiced = 0.f;
const pv_status_t status = pv_cobra_process(handle, pcm, &is_voiced);
if (status != PV_STATUS_SUCCESS) {
// error handling logic
}
}
最后,完成后请务必释放所获取的资源
pv_cobra_delete(handle);
Android
创建引擎实例
import ai.picovoice.cobra.Cobra;
import ai.picovoice.cobra.CobraException;
String accessKey = // .. AccessKey provided by Picovoice Console (https://console.picovoice.ai/)
try {
handle = new Cobra(accessKey);
} catch (CobraException e) {
// handle error
}
初始化后,可以使用 handle.getSampleRate()
获取有效样本率。所需帧长度(输入数组中的音频样本数)是 handle.getFrameLength()
。可以使用该对象如下监控输入音频
short[] getNextAudioFrame(){
while(true) {
try {
final float voiceProbability = handle.process(getNextAudioFrame());
} catch (CobraException e) { }
}
最后,完成时务必显式使用 handle.delete()
释放资源。
iOS
要将 Cobra iOS 绑定导入到您的项目中,请将以下行添加到您的 Podfile 中,然后运行 pod install
pod 'Cobra-iOS'
创建引擎实例
import Cobra
let accessKey : String = // .. AccessKey provided by Picovoice Console (https://console.picovoice.ai/)
do {
handle = try Cobra(accessKey: accessKey)
} catch { }
func getNextAudioFrame() -> [Int16] {
// .. get audioFrame
return audioFrame;
}
while true {
do {
let voiceProbability = try handle.process(getNextAudioFrame())
} catch { }
}
最后,完成时务必显式使用 handle.delete()
释放资源。
Web
使用 yarn 安装 Web SDK
yarn add @picovoice/cobra-web
或使用 npm
npm install --save @picovoice/cobra-web
使用 CobraWorker
创建引擎实例,并在音频输入流上运行 VAD
import { CobraWorker } from "@picovoice/cobra-web";
function voiceProbabilityCallback(voiceProbability: number) {
... // use voice probability figure
}
function getAudioData(): Int16Array {
... // function to get audio data
return new Int16Array();
}
const cobra = await CobraWorker.create(
"${ACCESS_KEY}",
voiceProbabilityCallback
);
for (; ;) {
cobra.process(getAudioData());
// break on some condition
}
用从 Picovoice 控制台 获得的 AccessKey 替换 ${ACCESS_KEY}
。
完成后,使用 cobra.release()
释放为 Cobra 分配的资源。
Rust
创建引擎实例并检测语音活动
use cobra::Cobra;
let cobra = Cobra::new("${ACCESS_KEY}");
fn next_audio_frame() -> Vec<i16> {
// get audio frame
}
loop {
if let Ok(voice_probability) = cobra.process(&next_audio_frame()) {
// ...
}
}
版本
1.2.0 2023 年 1 月 27 日
- 更新 Cobra 引擎以提高精度和性能
- 最低 iOS 要求提升到 iOS 11.0
- 修复了一些小故障
1.1.0 2022 年 1 月 21 日
- 改善了 Web 绑定的类型
- 各种错误修复和改进
1.0.0 2021 年 10 月 8 日
- (initial release)