cheetah

cheetah

实时本地化语音转文字引擎

Cheetah是一款本地化实时语音转文字引擎,具有隐私保护、高精度和跨平台特性。该引擎支持Linux、macOS、Windows、Android、iOS和主流浏览器等多种平台。Cheetah为开发者提供多种编程语言的SDK和演示应用,支持实时麦克风输入和音频文件处理,是一个灵活的语音识别解决方案。

Cheetah语音转文字跨平台实时转录本地处理Github开源项目

Cheetah

GitHub 发布 GitHub

Crates.io Maven Central Maven Central npm npm npm npm Nuget CocoaPods Pub 版本 PyPI Go 参考

由加拿大温哥华的 Picovoice 制作

Twitter URL YouTube 频道浏览量

Cheetah 是一个设备上的流式语音转文本引擎。Cheetah 具有以下特点:

  • 隐私保护:所有语音处理在本地进行。
  • 准确
  • 体积小且计算效率高
  • 跨平台:
    • Linux (x86_64)、macOS (x86_64, arm64) 和 Windows (x86_64)
    • Android 和 iOS
    • Chrome、Safari、Firefox 和 Edge
    • Raspberry Pi (3, 4, 5) 和 NVIDIA Jetson Nano

目录

访问密钥

访问密钥是用于部署 Picovoice SDK(包括 Cheetah)的身份验证和授权令牌。任何使用 Picovoice 的人都需要有一个有效的访问密钥。您必须保密您的访问密钥。即使语音识别是 100% 离线运行的,您也需要互联网连接来验证您的访问密钥与 Picovoice 许可服务器。

访问密钥还验证您的使用是否在您账户的限制范围内。每个注册 Picovoice 控制台 的人都会收到 这里 描述的"免费层"使用权限。如果您希望增加限制,可以购买订阅计划。

语言支持

  • Cheetah 流式语音转文本目前仅支持英语。
  • 对于商业客户,可根据具体情况 提供额外语言支持

演示

Python 演示

安装演示包:

pip3 install pvcheetahdemo
cheetah_demo_mic --access_key ${ACCESS_KEY}

${ACCESS_KEY} 替换为您从 Picovoice 控制台获得的访问密钥。

C 演示

如果使用 SSH,请使用以下命令克隆仓库:

git clone --recurse-submodules git@github.com: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 Console 获取的密钥,${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 上可能意味着您需要安装 gcc 编译器(如 MinGW)才能正确构建。

demo/go 在终端运行以下命令以构建和运行文件演示:

go run micdemo/cheetah_mic_demo.go -access_key "${ACCESS_KEY}"

${ACCESS_KEY} 替换为从 Picovoice Console 获取的密钥。

有关 Go 演示的更多信息,请转到 demo/go

React Native 演示

要运行 React Native Cheetah 演示应用程序,您首先需要设置 React Native 环境。为此,请参阅 React Native 文档。环境设置完成后,导航到 demo/react-native 运行以下命令:

对于 Android:

yarn android-install # 设置环境 yarn android-run # 构建并部署到 Android

对于 iOS:

yarn ios-install # 设置环境 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 演示

原生 JavaScript 和 HTML

demo/web 在终端中运行以下命令:

yarn yarn start

(或)

npm install npm run start

在浏览器中打开 http://localhost:5000 来尝试演示。

React 演示

demo/react 在终端中运行以下命令:

yarn yarn start

(或)

npm install npm run start

在浏览器中打开 http://localhost:3000 来尝试演示。

SDK

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 Console 获取的密钥。

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) { // 错误处理逻辑 } 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) { // 错误处理逻辑 } // 处理转录结果 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) { // 错误处理逻辑 } // 处理最终转录结果 free(final_transcript); } }

${ACCESS_KEY} 替换为从 Picovoice Console 获得的密钥,将 ${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}", // Cheetah 模型文件名 ofType: "pv")! let cheetah = Cheetah(accessKey: "${ACCESS_KEY}", modelPath: modelPath) func getNextAudioFrame() -> [Int16] { // .. 获取音频帧 return audioFrame; } while true { do { let partialTranscript, isEndpoint = try cheetah.process(getNetAudioFrame()) if isEndpoint { let finalTranscript = try cheetah.flush() } } catch let error as CheetahError { // 处理错误 } catch { } }

${ACCESS_KEY} 替换为从 Picovoice Console 获得的密钥,将 ${MODEL_FILE} 替换为从 Picovoice Console 获得的自定义训练模型或默认模型

Android

要在 Android 项目中包含该包,请确保在顶级 build.gradle 文件中包含了 mavenCentral(),然后在应用的 build.gradle 中添加以下内容:

dependencies { implementation 'ai.picovoice:cheetah-android:${LATEST_VERSION}' }

创建引擎实例并实时转录音频:

import ai.picovoice.cheetah.*; final String accessKey = "${ACCESS_KEY}"; // 从 Picovoice Console 获得的 AccessKey (https://console.picovoice.ai/) final String modelPath = "${MODEL_FILE}"; short[] getNextAudioFrame() { // .. 获取音频帧 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 Console 获得的密钥,将 ${MODEL_FILE} 替换为从 console 获得的默认或自定义训练模型。

Flutter

在 pub.yaml 中添加 Cheetah Flutter 插件

dependencies: cheetah_flutter: ^<版本>

创建引擎实例并实时转录音频:

import 'package:cheetah_flutter/cheetah.dart'; const accessKey = "{ACCESS_KEY}" // 从 Picovoice Console 获得的 AccessKey (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 Console 获得的 AccessKey,将 ${CHEETAH_MODEL_PATH} 替换为从 Picovoice Console 获得的自定义训练模型路径或默认模型路径。

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 { // 处理初始化错误 } defer cheetah.Delete() func getNextFrameAudio() []int16{ // 获取音频帧 } for { partialTranscript, isEndpoint, err = cheetah.Process(getNextFrameAudio()) if isEndpoint { finalTranscript, err = cheetah.Flush() } }

${ACCESS_KEY} 替换为从 Picovoice Console 获得的密钥。完成后,请务必使用 cheetah.Delete() 显式释放资源。

React Native

Cheetah React Native 绑定可通过 NPM 获得。使用以下命令添加:

yarn add @picovoice/cheetah-react-native

创建引擎实例并转录音频文件:

import {Cheetah, CheetahErrors} from '@picovoice/cheetah-react-native'; const getAudioFrame = () => { // 获取音频帧 } 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) { // 处理错误 } }

${ACCESS_KEY} 替换为从 Picovoice Console 获得的密钥,将 ${MODEL_FILE} 替换为从 console 获得的默认或自定义训练模型。完成后,请务必使用 cheetah.delete() 显式释放资源。

Node.js

安装 Node.js SDK:

yarn add @picovoice/cheetah-node

创建 Cheetah 类的实例:

const Cheetah = require("@picovoice/cheetah-node"); const accessKey = "${ACCESS_KEY}"; // 从 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 Console 获得的密钥。

完成后,请务必使用 release() 释放资源:

handle.release();

Java

使用 Cheetah Builder 类创建引擎实例并实时转录音频:

import ai.picovoice.cheetah.*; final String accessKey = "..."; // Picovoice控制台提供的AccessKey (https://console.picovoice.ai/) short[] getNextAudioFrame() { // .. 获取音频帧 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控制台(https://console.picovoice.ai/)获得的密钥。

初始化后,有效的采样率由handle.SampleRate给出。预期的帧长度(输入数组中的音频样本数)是handle.FrameLength。引擎接受16位线性PCM编码,并对单通道音频进行操作。

short[] GetNextAudioFrame() { // .. 获取音频帧 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 }

Rust

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

要将cheetah库添加到您的应用程序中,请在应用程序的Cargo.toml清单中添加pv_cheetah:

[dependencies] pv_cheetah = "*"

使用CheetahBuilder实例创建引擎实例并转录音频文件:

use cheetah::CheetahBuilder; fn next_audio_frame() -> Vec<i16> { // 获取音频帧 } let access_key = "${ACCESS_KEY}"; // 从Picovoice控制台获得的AccessKey (https://console.picovoice.ai/) let cheetah: Cheetah = CheetahBuilder::new().access_key(access_key).init().expect("无法创建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控制台(https://console.picovoice.ai/)获得的密钥。

Web

原生JavaScript和HTML (ES模块)

使用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 { // ... 获取音频数据的函数 return new Int16Array(); } const cheetah = await CheetahWorker.create( "${ACCESS_KEY}", transcriptCallback, { base64: cheetahParams } ); for (;;) { cheetah.process(getAudioData()); // 在某些条件下中断 } cheetah.flush(); // 对剩余数据运行transcriptionCallback。

将${ACCESS_KEY}替换为从Picovoice控制台(https://console.picovoice.ai/)获得的密钥。最后,完成后使用cheetah.release()释放资源。

React

yarn add @picovoice/cheetah-react @picovoice/web-voice-processor

(或)

npm install @picovoice/cheetah-react @picovoice/web-voice-processor
import { useCheetah } from "@picovoice/cheetah-react"; function App(props) { const { result, isLoaded, isListening, error, init, start, stop, release, } = useCheetah(); const initEngine = async () => { await init( "${ACCESS_KEY}", cheetahModel, ); }; const toggleRecord = async () => { if (isListening) { await stop(); } else { await start(); } }; useEffect(() => { if (result !== null) { console.log(result.transcript); console.log(result.isComplete); } }, [result]) }

发布

v2.0.0 - 2023年11月27日

  • 改进了错误报告
  • 升级了授权和身份验证系统
  • 提高了引擎精度
  • 各种错误修复和改进
  • Node最低支持版本提升到Node 16
  • iOS支持提升到iOS 13+
  • 修补了.NET支持

v1.1.0 - 2022年8月11日

  • 默认为转录结果添加了真实大小写
  • 添加了启用自动标点插入的选项
  • 发布了Cheetah Web SDK

v1.0.0 - 2022年1月25日

  • 初始发布

编辑推荐精选

蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI助手AI工具AI写作工具AI辅助写作蛙蛙写作学术助手办公助手营销助手
Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

热门AI工具生产力协作转型TraeAI IDE
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

聊天机器人AI助手热门AI工具AI对话
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

热门AI工具AI办公办公工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

模型训练热门AI工具内容创作智能问答AI开发讯飞星火大模型多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

AI助手热门AI工具AI创作AI辅助写作讯飞绘文内容运营个性化文章多平台分发
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

下拉加载更多