Cheetah-iOS 2.0.0

Cheetah-iOS 2.0.0

Kwangsoo YeoIan Lavery维护。



  • Picovoice

Cheetah

由位于加拿大温哥华的Picovoice制作

Twitter URL

YouTube Channel Views

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日

  • 初始发布。