Cheetah
由位于加拿大温哥华的Picovoice制作
Cheetah 是一个本地设备流式语音到文本引擎。Cheetah 是
- 私有;所有语音处理都在本地运行。
- 准确
- 紧凑且计算高效
- 跨平台
- Linux (x86_64),macOS (x86_64, arm64) 和 Windows (x86_64)
- Android 和 iOS
- Chrome,Safari,Firefox 和 Edge
- 树莓派 (4, 3) 和 NVIDIA Jetson Nano
目录
访问密钥
AccessKey 是您部署 Picovoice SDK(包括 Cheetah)的验证和授权令牌。任何使用 Picovoice 的人都需要一个有效的 AccessKey。您必须保持您的 AccessKey 保密。即使语音识别是100%离线的,您仍然需要互联网连接来与 Picovoice 许可证服务器验证您的 AccessKey。
AccessKey 还会验证您的使用是否在您的账户许可范围内。所有注册了 Picovoice 控制台 的人都会获得在此处描述的 免费套餐
使用权限 (这里)。如果您想提高您的limits,您可以通过购买订阅计划来实现。
演示
Python 演示
安装演示包
pip3 install pvcheetahdemo
cheetah_demo_mic --access_key ${ACCESS_KEY}
将 ${ACCESS_KEY}
替换为您从 Picovoice 控制台获得的 AccessKey。
C 演示
如果您使用 SSH,可以使用以下命令克隆仓库:
git clone --recurse-submodules [email protected]:Picovoice/cheetah.git
如果您使用 HTTPS,可以使用以下命令克隆仓库:
git clone --recurse-submodules https://github.com/Picovoice/cheetah.git
构建演示
cmake -S demo/c/ -B demo/c/build && cmake --build demo/c/build
运行演示
./demo/c/build/cheetah_demo_mic -a ${ACCESS_KEY} -m ${MODEL_PATH} -l ${LIBRARY_PATH}
将 ${ACCESS_KEY}
替换为您从 Picovoice 控制台获得的 AccessKey,${LIBRARY_PATH}
替换为 lib 下适当库的路径,以及 ${MODEL_PATH}
替换为 默认模型文件 的路径(或您的自定义文件)。
iOS 示例
要运行示例,请访问 demo/ios/CheetahDemo 并运行
pod install
将文件 ViewModel.swift 中的 let accessKey = "${YOUR_ACCESS_KEY_HERE}"
替换为您的 AccessKey
。
然后,使用 Xcode 打开生成的 CheetahDemo.xcworkspace
并运行应用程序。
Android 示例
使用 Android Studio,将 demo/android/CheetahDemo 打开为 Android 项目,然后运行应用程序。
将文件 MainActivity.java 中的 "${YOUR_ACCESS_KEY_HERE}"
替换为您的 AccessKey
。
Flutter 示例
要在 Android 或 iOS 上使用 Flutter 运行 Cheetah 示例,您必须在系统上安装 Flutter SDK。安装后,您可以使用 flutter doctor
运行命令来检查您平台相关的其他缺失需求。设置好环境后,启动模拟器或连接 Android/iOS 设备。
在启动应用程序之前,使用 copy_assets.sh 脚本将 Cheetah 示例模型文件复制到示例项目中。(注意:在 Windows 上,需要 Git Bash 或另一个 bash shell,否则您必须手动将内容复制到项目中。)
将文件 main.dart 中的 "${YOUR_ACCESS_KEY_HERE}"
替换为您的 AccessKey
。
从 demo/flutter 运行以下命令以构建并部署示例到您的设备
flutter run
Go 代码示例
演示需要 cgo
,在 Windows 系统上可能意味着您需要安装类似 MinGW 的 gcc 编译器以正确构建。
从 demo/go,请在终端中运行以下命令以构建和运行文件 demo
go run micdemo/cheetah_mic_demo.go -access_key "${ACCESS_KEY}"
将 ${ACCESS_KEY}
替换为您从 Picovoice 控制台获得的 AccessKey。
有关 Go 演示的更多信息,请访问 demo/go。
React Native 代码示例
要运行 React Native Porcupine 代码示例,您首先需要设置 React Native 环境。有关此事,请参阅 React Native 的文档。一旦环境设置完成,请导航到 demo/react-native 以运行以下命令
适用于 Android
yarn android-install # sets up environment
yarn android-run # builds and deploys to Android
适用于 iOS
yarn ios-install # sets up environment
yarn ios-run
Node.js 代码示例
安装演示包
yarn global add @picovoice/cheetah-node-demo
将工作麦克风连接到您的设备后,请在终端中运行以下命令
cheetah-mic-demo --access_key ${ACCESS_KEY}
有关 Node.js 演示的更多信息,请访问 demo/nodejs。
Java 代码示例
Cheetah Java 代码示例是一个命令行应用程序,允许您在音频文件或实时麦克风输入上运行 Cheetah 之间进行选择。
要尝试实时演示,请确保设备上连接了工作麦克风。然后从终端调用以下命令
cd demo/java
./gradlew build
cd build/libs
java -jar cheetah-mic-demo.jar -a ${ACCESS_KEY}
有关Java演示的更多信息,请访问 demo/java。
.NET 演示
Cheetah .NET 演示 是一个命令行应用程序,允许您在音频文件或实时麦克风输入上运行 Cheetah 之间进行选择。
请确保您的设备连接了正在工作的麦克风。从 demo/dotnet/CheetahDemo 在终端运行以下操作
dotnet run -c MicDemo.Release -- --access_key ${ACCESS_KEY}
将 ${ACCESS_KEY}
替换为您的 Picovoice AccessKey
。
有关 .NET 演示的更多信息,请访问 demo/dotnet。
Rust 演示
Cheetah Rust 演示 是一个命令行应用程序,允许您在音频文件或实时麦克风输入上运行 Cheetah 之间进行选择。
请确保您的设备连接了正在工作的麦克风。从 demo/rust/micdemo 在终端运行以下操作
cargo run --release -- --access_key ${ACCESS_KEY}
将 ${ACCESS_KEY}
替换为您的 Picovoice AccessKey
。
有关 Rust 演示的更多信息,请访问 demo/rust。
Web 演示
从 demo/web 在终端运行以下操作
yarn
yarn start
(或)
npm install
npm run start
在您的浏览器中打开 https://:5000
以尝试演示。
SDKs
Python
安装Python SDK
pip3 install pvcheetah
创建引擎实例并实时转录音频
import pvcheetah
handle = pvcheetah.create(access_key='${ACCESS_KEY}')
def get_next_audio_frame():
pass
while True:
partial_transcript, is_endpoint = handle.process(get_next_audio_frame())
if is_endpoint:
final_transcript = handle.flush()
将 ${ACCESS_KEY}
替换为您从 Picovoice 控制台获得的 AccessKey。
C
创建引擎实例并实时转录音频
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include "pv_cheetah.h"
pv_cheetah_t *handle = NULL;
const pv_status_t status = pv_cheetah_init("${ACCESS_KEY}", "${MODEL_PATH}", 0.f, false, &handle);
if (status != PV_STATUS_SUCCESS) {
// error handling logic
}
extern const int16_t *get_next_audio_frame(void);
while (true) {
char *partial_transcript = NULL;
bool is_endpoint = false;
const pv_status_t status = pv_cheetah_process(
handle,
get_next_audio_frame(),
&partial_transcript,
&is_endpoint);
if (status != PV_STATUS_SUCCESS) {
// error handling logic
}
// do something with transcript
free(partial_transcript);
if (is_endpoint) {
char *final_transcript = NULL;
const pv_status_t status = pv_cheetah_flush(handle, &final_transcript);
if (status != PV_STATUS_SUCCESS) {
// error handling logic
}
// do something with transcript
free(final_transcript);
}
}
将 ${ACCESS_KEY}
替换为您从 Picovoice 控制台获取的密钥,将 ${MODEL_PATH}
替换为 默认模型文件(或您自定义的一个)。最后,请确保使用 pv_cheetah_delete(handle)
释放使用时获取的资源。
iOS
Cheetah iOS 绑定可通过 CocoaPods 获得。要将它导入到您的 iOS 项目中,请将以下行添加到您的 Podfile,并运行 pod install
pod 'Cheetah-iOS'
创建引擎实例并实时转录音频
import Cheetah
let modelPath = Bundle(for: type(of: self)).path(
forResource: "${MODEL_FILE}", // Name of the model file name for Cheetah
ofType: "pv")!
let cheetah = Cheetah(accessKey: "${ACCESS_KEY}", modelPath: modelPath)
func getNextAudioFrame() -> [Int16] {
// .. get audioFrame
return audioFrame;
}
while true {
do {
let partialTranscript, isEndpoint = try cheetah.process(getNetAudioFrame())
if isEndpoint {
let finalTranscript = try cheetah.flush()
}
} catch let error as CheetahError {
// handle error
} catch { }
}
将 ${ACCESS_KEY}
替换为您从 Picovoice 控制台获取的密钥,将 ${MODEL_FILE}
替换为从 控制台 或 默认模型 获取的自定义训练模型。
Android
将此包包含在您的 Android 项目中,确保您已在顶级 build.gradle
文件中包含 mavenCentral()
,然后将其添加到您的应用程序的 build.gradle
dependencies {
implementation 'ai.picovoice:cheetah-android:${LATEST_VERSION}'
}
创建引擎实例并实时转录音频
import ai.picovoice.cheetah.*;
final String accessKey = "${ACCESS_KEY}"; // AccessKey obtained from Picovoice Console (https://console.picovoice.ai/)
final String modelPath = "${MODEL_FILE}";
short[] getNextAudioFrame() {
// .. get audioFrame
return audioFrame;
}
try {
Cheetah cheetah = new Cheetah.Builder().setAccessKey(accessKey).setModelPath(modelPath).build(appContext);
String transcript = "";
while true {
CheetahTranscript transcriptObj = cheetah.process(getNextAudioFrame());
transcript += transcriptObj.getTranscript();
if (transcriptObj.getIsEndpoint()) {
CheetahTranscript finalTranscriptObj = cheetah.flush();
transcript += finalTranscriptObj.getTranscript();
}
};
} catch (CheetahException ex) { }
将 ${ACCESS_KEY}
替换为您从 Picovoice 控制台获取的密钥,将 ${MODEL_FILE}
替换为从 控制台 获取的默认或自定义训练模型。
Flutter
将Cheetah Flutter插件添加到您的pub.yaml中。
dependencies:
cheetah_flutter: ^<version>
创建引擎实例并实时转录音频
import 'package:cheetah_flutter/cheetah.dart';
const accessKey = "{ACCESS_KEY}" // AccessKey obtained from Picovoice Console (https://console.picovoice.ai/)
List<int> buffer = getAudioFrame();
try{
Cheetah _cheetah = await Cheetah.create(accessKey, '{CHEETAH_MODEL_PATH}');
String transcript = "";
while true {
CheetahTranscript partialResult = await _cheetah.process(getAudioFrame());
transcript += partialResult.transcript;
if (partialResult.isEndpoint) {
CheetahTranscript finalResult = await _cheetah.flush();
transcript += finalResult.transcript;
}
}
_cheetah.delete()
} on CheetahException catch (err) { }
将${ACCESS_KEY}
替换为您从Picovoice控制台获得的AccessKey
,将${CHEETAH_MODEL_PATH}
替换为您从Picovoice控制台获取的或默认模型路径的定制训练模型或从默认模型。
Go
安装Go绑定。
go get github.com/Picovoice/cheetah/binding/go
创建引擎实例并实时转录音频
import . "github.com/Picovoice/cheetah/binding/go"
cheetah = NewCheetah{AccessKey: "${ACCESS_KEY}"}
err := cheetah.Init()
if err != nil {
// handle err init
}
defer cheetah.Delete()
func getNextFrameAudio() []int16{
// get audio frame
}
for {
partialTranscript, isEndpoint, err = cheetah.Process(getNextFrameAudio())
if isEndpoint {
finalTranscript, err = cheetah.Flush()
}
}
将${ACCESS_KEY}
替换为您从Picovoice控制台获得的密钥。完成时,请确保使用cheetah.Delete()
显式释放资源。
React Native
Cheetah React Native绑定可通过NPM获取。以下命令添加它
yarn add @picovoice/cheetah-react-native
创建一个引擎实例并转录音频文件
import {Cheetah, CheetahErrors} from '@picovoice/cheetah-react-native';
const getAudioFrame = () => {
// get audio frames
}
try {
while (1) {
const cheetah = await Cheetah.create("${ACCESS_KEY}", "${MODEL_FILE}")
const {transcript, isEndpoint} = await cheetah.process(getAudioFrame())
if (isEndpoint) {
const {transcript} = await cheetah.flush()
}
}
} catch (err: any) {
if (err instanceof CheetahErrors) {
// handle error
}
}
将${ACCESS_KEY}
替换为您从Picovoice控制台获得的密钥,将${MODEL_FILE}
替换为默认或定制训练模型(从控制台)。完成时,请确保使用cheetah.delete()
显式释放资源。
Node.js
安装Node.js SDK
yarn add @picovoice/cheetah-node
创建Cheetah类实例。
const Cheetah = require("@picovoice/cheetah-node");
const accessKey = "${ACCESS_KEY}"; // Obtained from the Picovoice Console (https://console.picovoice.ai/)
const endpointDurationSec = 0.2;
const handle = new Cheetah(accessKey);
function getNextAudioFrame() {
// ...
return audioFrame;
}
while (true) {
const audioFrame = getNextAudioFrame();
const [partialTranscript, isEndpoint] = handle.process(audioFrame);
if (isEndpoint) {
finalTranscript = handle.flush()
}
}
将 ${ACCESS_KEY}
替换为您从 Picovoice 控制台 获取的键。
完成操作后,务必使用 release()
释放资源
handle.release();
Java
使用 Cheetah Builder 类创建引擎实例,并进行实时音频转录
import ai.picovoice.cheetah.*;
final String accessKey = "..."; // AccessKey provided by Picovoice Console (https://console.picovoice.ai/)
short[] getNextAudioFrame() {
// .. get audioFrame
return audioFrame;
}
String transcript = "";
try {
Cheetah cheetah = new Cheetah.Builder().setAccessKey(accessKey).build();
while true {
CheetahTranscript transcriptObj = cheetah.process(getNextAudioFrame());
transcript += transcriptObj.getTranscript();
if (transcriptObj.getIsEndpoint()) {
CheetahTranscript finalTranscriptObj = cheetah.flush();
transcript += finalTranscriptObj.getTranscript();
}
}
cheetah.delete();
} catch (CheetahException ex) { }
.NET
使用 NuGet 或 dotnet CLI 安装 .NET SDK
dotnet add package Cheetah
SDK 提供一个工厂方法来创建引擎实例,如下所示
using Pv;
const string accessKey = "${ACCESS_KEY}";
Cheetah handle = Cheetah.Create(accessKey);
将 ${ACCESS_KEY}
替换为您从 Picovoice 控制台 获取的键。
初始化后,有效采样率由 handle.SampleRate
提供。预期帧长度(输入数组中音频样本的数量)由 handle.FrameLength
提供。该引擎接受 16 位线性编码的 PCM,并处理单声道音频。
short[] GetNextAudioFrame()
{
// .. get audioFrame
return audioFrame;
}
string transcript = "";
while(true)
{
CheetahTranscript transcriptObj = handle.Process(GetNextAudioFrame());
transcript += transcriptObj.Transcript;
if (transcriptObj.IsEndpoint) {
CheetahTranscript finalTranscriptObj = handle.Flush();
transcript += finalTranscriptObj.Transcript;
}
}
Cheetah 将由垃圾回收器释放资源,但为了在使用后立即释放资源,请在其中使用 using 语句
using(Cheetah handle = Cheetah.Create(accessKey))
{
// .. Cheetah usage here
}
Rust
首先,您需要在您的系统上安装 Rust 和 Cargo。
要将 cheetah 库添加到您的应用程序中,请将 pv_cheetah
添加到您的应用程序的 Cargo.toml
清单中
[dependencies]
pv_cheetah = "*"
使用 CheetahBuilder
实例创建引擎实例,并转录音频文件
use cheetah::CheetahBuilder;
fn next_audio_frame() -> Vec<i16> {
// get audio frame
}
let access_key = "${ACCESS_KEY}"; // AccessKey obtained from Picovoice Console (https://console.picovoice.ai/)
let cheetah: Cheetah = CheetahBuilder::new().access_key(access_key).init().expect("Unable to create Cheetah");
if let Ok(cheetahTranscript) = cheetah.process(&next_audio_frame()) {
println!("{}", cheetahTranscript.transcript)
if cheetahTranscript.is_endpoint {
if let Ok(cheetahTranscript) = cheetah.flush() {
println!("{}", cheetahTranscript.transcript)
}
}
}
将 ${ACCESS_KEY}
替换为您从 Picovoice 控制台 获取的键。
Web
使用yarn安装Web SDK
yarn add @picovoice/cheetah-web
或使用npm
npm install --save @picovoice/cheetah-web
使用CheetahWorker
创建引擎实例并转录音频文件
import { CheetahWorker } from "@picovoice/cheetah-web";
import cheetahParams from "${PATH_TO_BASE64_CHEETAH_PARAMS}";
let transcript = "";
function transcriptCallback(cheetahTranscript: CheetahTranscript) {
transcript += cheetahTranscript.transcript;
if (cheetahTranscript.isEndpoint) {
transcript += "\n";
}
}
function getAudioData(): Int16Array {
... // function to get audio data
return new Int16Array();
}
const cheetah = await CheetahWorker.create(
"${ACCESS_KEY}",
transcriptCallback,
{ base64: cheetahParams }
);
for (;;) {
cheetah.process(getAudioData());
// break on some condition
}
cheetah.flush(); // runs transcriptionCallback on remaining data.
将${ACCESS_KEY}
替换为您从Picovoice控制台获得的密钥。最后,完成后使用cheetah.release()
释放资源。
版本发布
v1.1.0 — 2022年8月11日
- 默认为转录结果启用真实大小写
- 添加了启用自动插入标点的选项
- Cheetah Web SDK发布
v1.0.0 — 2022年1月25日
- 初始发布。