Leopard
由加拿大温哥华的 Picovoice 制作
Leopard 是一个设备本地的语音转文字引擎。Leopard 具有以下特点:
- 隐私保护:所有语音处理在本地进行。
- 准确
- 体积小且计算效率高
- 跨平台:
- Linux (x86_64)、macOS (x86_64, arm64)、Windows (x86_64)
- Android 和 iOS
- Chrome、Safari、Firefox 和 Edge
- Raspberry Pi (3, 4, 5) 和 NVIDIA Jetson Nano
目录
AccessKey
AccessKey 是您用于部署 Picovoice SDK(包括 Leopard)的身份验证和授权令牌。使用 Picovoice 的任何人都需要有一个有效的 AccessKey。您必须保密您的 AccessKey。即使语音识别是 100% 离线运行的,您仍然需要互联网连接来验证您的 AccessKey 与 Picovoice 许可服务器的有效性。 AccessKey还验证您的使用是否在账户限制范围内。所有在Picovoice Console注册的用户都会获得这里描述的"免费套餐"使用权限。如果您想增加使用限制,可以购买订阅计划。
语言支持
- 英语、法语、德语、意大利语、日语、韩语、葡萄牙语和西班牙语。
- 商业客户可根据具体情况获得额外语言支持。
演示
Python演示
安装演示包:
pip3 install pvleoparddemo
在终端中运行以下命令:
leopard_demo_file --access_key ${ACCESS_KEY} --audio_paths ${AUDIO_FILE_PATH}
将${ACCESS_KEY}
替换为您从Picovoice Console获得的密钥,将${AUDIO_FILE_PATH}
替换为您想要转录的音频文件路径。
C演示
构建演示:
cmake -S demo/c/ -B demo/c/build && cmake --build demo/c/build
运行演示:
./demo/c/build/leopard_demo -a ${ACCESS_KEY} -l ${LIBRARY_PATH} -m ${MODEL_FILE_PATH} ${AUDIO_FILE_PATH}
将${ACCESS_KEY}
替换为您从Picovoice Console获得的密钥,${LIBRARY_PATH}
替换为lib下适当的库路径,${MODEL_FILE_PATH}
替换为默认模型文件的路径(或您的自定义模型),${AUDIO_FILE_PATH}
替换为您想要转录的音频文件路径。
iOS演示
要运行演示,请转到demo/ios/LeopardDemo并运行:
pod install
在ViewModel.swift文件中,将let accessKey = "${YOUR_ACCESS_KEY_HERE}"
替换为您的AccessKey
。
然后,使用Xcode打开生成的LeopardDemo.xcworkspace
并运行应用程序。
Android演示
使用Android Studio,将demo/android/LeopardDemo作为Android项目打开,然后运行应用程序。
在MainActivity.java文件中,将"${YOUR_ACCESS_KEY_HERE}"
替换为您的AccessKey
。
Node.js演示
安装演示包:
yarn global add @picovoice/leopard-node-demo
在终端中运行以下命令:
leopard-file-demo --access_key ${ACCESS_KEY} --input_audio_file_path ${AUDIO_FILE_PATH}
将${ACCESS_KEY}
替换为您从Picovoice Console获得的密钥,将${AUDIO_FILE_PATH}
替换为您想要转录的音频文件路径。
有关Node.js演示的更多信息,请查看demo/nodejs。
Flutter演示
要在Android或iOS上使用Flutter运行Leopard演示,您必须在系统上安装Flutter SDK。安装完成后,您可以运行flutter doctor
来确定相关平台的任何其他缺失要求。环境设置完成后,启动模拟器或连接Android/iOS设备。
从demo/flutter运行prepare_demo
脚本,并附带语言代码,以设置您选择的语言的演示(例如de
-> 德语,ko
-> 韩语)。要查看可用语言列表,请运行不带语言代码的prepare_demo
。
dart scripts/prepare_demo.dart ${LANGUAGE}
在main.dart文件中,将"${YOUR_ACCESS_KEY_HERE}"
替换为您的AccessKey
。
从demo/flutter运行以下命令,以构建并部署演示到您的设备:
flutter run
Go演示
该演示需要cgo
,在Windows上可能意味着您需要安装gcc编译器(如Mingw)才能正确构建。
从demo/go在终端中运行以下命令来构建和运行文件演示:
go run filedemo/leopard_file_demo.go -access_key "${ACCESS_KEY}" -input_audio_path "${AUDIO_FILE_PATH}"
将${ACCESS_KEY}
替换为您从Picovoice Console获得的密钥,将${AUDIO_FILE_PATH}
替换为您想要转录的音频文件路径。
有关Go演示的更多信息,请查看demo/go。
React Native演示
要运行React Native Leopard演示应用,您首先需要设置React Native环境。为此,请参考React Native的文档。环境设置完成后,导航到demo/react-native运行以下命令:
对于Android:
yarn android-install # 设置环境
yarn android-run # 构建并部署到Android
对于iOS:
yarn ios-install # 设置环境
yarn ios-run
Java演示
Leopard Java演示是一个命令行应用程序,让您可以选择在音频文件或麦克风输入上运行Leopard。
从demo/java在终端中运行以下命令来构建和运行文件演示:
cd demo/java
./gradlew build
cd build/libs
java -jar leopard-file-demo.jar -a ${ACCESS_KEY} -i ${AUDIO_FILE_PATH}
将 ${ACCESS_KEY}
替换为您从 Picovoice Console 获得的密钥,将 ${AUDIO_FILE_PATH}
替换为您想要转录的音频文件路径。
有关 Java 演示的更多信息,请访问 demo/java。
.NET 演示
Leopard .NET 演示 是一个命令行应用程序,让您可以选择在音频文件上或实时麦克风输入上运行 Leopard。
在 demo/dotnet/LeopardDemo 中,在终端运行以下命令:
dotnet run -c FileDemo.Release -- --access_key ${ACCESS_KEY} --input_audio_path ${AUDIO_FILE_PATH}
将 ${ACCESS_KEY}
替换为您从 Picovoice Console 获得的密钥,将 ${AUDIO_FILE_PATH}
替换为您想要转录的音频文件路径。
有关 .NET 演示的更多信息,请访问 demo/dotnet。
Rust 演示
Leopard Rust 演示 是一个命令行应用程序,让您可以选择在音频文件上或实时麦克风输入上运行 Leopard。
在 demo/rust/filedemo 中,在终端运行以下命令:
cargo run --release -- --access_key ${ACCESS_KEY} --input_audio_path ${AUDIO_FILE_PATH}
将 ${ACCESS_KEY}
替换为您从 Picovoice Console 获得的密钥,将 ${AUDIO_FILE_PATH}
替换为您想要转录的音频文件路径。
有关 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 ${LANGUAGE}
(或)
npm install
npm run start ${LANGUAGE}
在浏览器中打开 http://localhost:3000
来尝试演示。
SDK
Python
安装 Python SDK:
pip3 install pvleopard
创建引擎实例并转录音频文件:
import pvleopard
leopard = pvleopard.create(access_key='${ACCESS_KEY}')
print(leopard.process_file('${AUDIO_FILE_PATH}'))
将 ${ACCESS_KEY}
替换为您从 Picovoice Console 获得的密钥,将 ${AUDIO_FILE_PATH}
替换为音频文件的路径。最后,完成后请务必使用 leopard.delete()
显式释放资源。
C
创建引擎实例并转录音频文件:
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include "pv_leopard.h"
pv_leopard_t *leopard = NULL;
bool enable_automatic_punctuation = false;
bool enable_speaker_diarization = false;
pv_status_t status = pv_leopard_init(
"${ACCESS_KEY}",
"${MODEL_FILE_PATH}",
enable_automatic_punctuation,
enable_speaker_diarization,
&leopard);
if (status != PV_STATUS_SUCCESS) {
// 错误处理逻辑
}
char *transcript = NULL;
int32_t num_words = 0;
pv_word_t *words = NULL;
status = pv_leopard_process_file(
leopard,
"${AUDIO_FILE_PATH}",
&transcript,
&num_words,
&words);
if (status != PV_STATUS_SUCCESS) {
// 错误处理逻辑
}
fprintf(stdout, "%s\n", transcript);
for (int32_t i = 0; i < num_words; i++) {
fprintf(
stdout,
"[%s]\t.start_sec = %.1f .end_sec = %.1f .confidence = %.2f .speaker_tag = %d\n",
words[i].word,
words[i].start_sec,
words[i].end_sec,
words[i].confidence,
words[i].speaker_tag);
}
pv_leopard_transcript_delete(transcript);
pv_leopard_words_delete(words);
将 ${ACCESS_KEY}
替换为您从 Picovoice Console 获得的密钥,将 ${MODEL_FILE_PATH}
替换为 默认模型文件(或您的自定义文件)的路径,将 ${AUDIO_FILE_PATH}
替换为音频文件的路径。最后,完成后请务必使用 pv_leopard_delete(leopard)
释放获取的资源。
iOS
Leopard iOS 绑定可通过 CocoaPods 获得。要将其导入到您的 iOS 项目中,请在 Podfile 中添加以下行,然后运行 pod install
:
pod 'Leopard-iOS'
创建引擎实例并转录音频文件:
import Leopard
let modelPath = Bundle(for: type(of: self)).path(
forResource: "${MODEL_FILE}", // Leopard 模型文件的名称
ofType: "pv")!
let leopard = Leopard(accessKey: "${ACCESS_KEY}", modelPath: modelPath)
do {
let audioPath = Bundle(for: type(of: self)).path(forResource: "${AUDIO_FILE_NAME}", ofType: "${AUDIO_FILE_EXTENSION}")
let result = leopard.process(audioPath)
print(result.transcript)
} catch let error as LeopardError {
} catch { }
将 ${ACCESS_KEY}
替换为您从 Picovoice Console 获得的密钥,${MODEL_FILE}
替换为从 console 获得的自定义训练模型或 [默认模型](https://github.com/Picovoice/leopard/blob/master/./lib/common/leopard_params.pv,`${AUDIO_FILE_NAME}` 替换为音频文件的名称,${AUDIO_FILE_EXTENSION}
替换为音频文件的扩展名。
Android
要在您的 Android 项目中包含该包,请确保您在顶级 build.gradle
文件中包含了 mavenCentral()
,然后在应用的 build.gradle
中添加以下内容:
dependencies {
implementation 'ai.picovoice:leopard-android:${LATEST_VERSION}'
}
创建引擎实例并转录音频文件:
import ai.picovoice.leopard.*;
final String accessKey = "${ACCESS_KEY}"; // 从 Picovoice Console (https://console.picovoice.ai/) 获得的 AccessKey
final String modelPath = "${MODEL_FILE_PATH}";
try {
Leopard leopard = new Leopard.Builder()
.setAccessKey(accessKey)
.setModelPath(modelPath)
.build(appContext);
File audioFile = new File("${AUDIO_FILE_PATH}");
LeopardTranscript transcript = leopard.processFile(audioFile.getAbsolutePath());
} catch (LeopardException ex) { }
将 ${ACCESS_KEY}
替换为您从 Picovoice Console 获得的密钥,${MODEL_FILE_PATH}
替换为从 console 获得的自定义训练模型或 [默认模型](https://github.com/Picovoice/leopard/blob/master/./lib/common/leopard_params.pv,`${AUDIO_FILE_PATH}` 替换为音频文件的路径。
Node.js
安装 Node.js SDK:
yarn add @picovoice/leopard-node
创建 Leopard 类的实例:
const Leopard = require("@picovoice/leopard-node");
const accessKey = "${ACCESS_KEY}" // 从 Picovoice Console (https://console.picovoice.ai/) 获得
let leopard = new Leopard(accessKey);
const result = engineInstance.processFile('${AUDIO_FILE_PATH}');
console.log(result.transcript);
将 ${ACCESS_KEY}
替换为您从 Picovoice Console 获得的密钥,将 ${AUDIO_FILE_PATH}
替换为音频文件的路径。
完成后,请务必使用 release()
释放资源:
leopard.release();
Flutter
在 pub.yaml 中添加 Leopard Flutter 插件。
dependencies:
leopard_flutter: ^<version>
创建引擎实例并转录音频文件:
import 'package:leopard/leopard.dart';
final String accessKey = '{ACCESS_KEY}' // 从 Picovoice Console (https://console.picovoice.ai/) 获得的 AccessKey
try {
Leopard _leopard = await Leopard.create(accessKey, '{MODEL_FILE_PATH}');
LeopardTranscript result = await _leopard.processFile("${AUDIO_FILE_PATH}");
print(result.transcript);
} on LeopardException catch (err) { }
将 ${ACCESS_KEY}
替换为您从 Picovoice Console 获得的 AccessKey
,${MODEL_FILE_PATH}
替换为从 Picovoice Console 获得的自定义训练模型或 [默认模型](https://github.com/Picovoice/leopard/blob/master/./lib/common/leopard_params.pv,`${AUDIO_FILE_PATH}` 替换为音频文件的路径。
Go
安装 Go 绑定:
go get github.com/Picovoice/leopard/binding/go/v2
创建引擎实例并转录音频文件:
import . "github.com/Picovoice/leopard/binding/go/v2"
leopard = Leopard{AccessKey: "${ACCESS_KEY}"}
err := leopard.Init()
if err != nil {
// 处理初始化错误
}
defer leopard.Delete()
transcript, words, err := leopard.ProcessFile("${AUDIO_FILE_PATH}")
if err != nil {
// 处理处理错误
}
log.Println(transcript)
将 ${ACCESS_KEY}
替换为您从 Picovoice Console 获得的密钥,将 ${AUDIO_FILE_PATH}
替换为音频文件的路径。最后,完成后请务必使用 leopard.Delete()
显式释放资源。
React Native
Leopard React Native 绑定可通过 NPM 获得。通过以下命令添加:
yarn add @picovoice/leopard-react-native
创建引擎实例并转录音频文件:
import {Leopard, LeopardErrors} from '@picovoice/leopard-react-native';
const getAudioFrame = () => {
// 获取音频帧
}
try {
const leopard = await Leopard.create("${ACCESS_KEY}", "${MODEL_FILE_PATH}")
const { transcript, words } = await leopard.processFile("${AUDIO_FILE_PATH}")
console.log(transcript)
} catch (err: any) {
if (err instanceof LeopardErrors) {
// 处理错误
}
}
将 ${ACCESS_KEY}
替换为您从 Picovoice Console 获得的 AccessKey
,${MODEL_FILE_PATH}
替换为从 Picovoice Console 获得的自定义训练模型或 [默认模型](https://github.com/Picovoice/leopard/blob/master/./lib/common/leopard_params.pv,`${AUDIO_FILE_PATH}` 替换为音频文件的绝对路径。
完成后,请务必使用 leopard.delete()
显式释放资源。
Java
最新的 Java 绑定可从 Maven Central Repository 获得:
ai.picovoice:leopard-java:${version}
使用 Leopard Builder 类创建引擎实例并转录音频文件:
import ai.picovoice.leopard.*;
final String accessKey = "${ACCESS_KEY}";
try {
Leopard leopard = new Leopard.Builder().setAccessKey(accessKey).build();
LeopardTranscript result = leopard.processFile("${AUDIO_FILE_PATH}");
leopard.delete();
} catch (LeopardException ex) { }
System.out.println(result.getTranscriptString());
将 ${ACCESS_KEY}
替换为您从 Picovoice Console 获得的密钥,将 ${AUDIO_FILE_PATH}
替换为音频文件的路径。最后,完成后请务必使用 leopard.delete()
显式释放资源。
.NET
使用 NuGet 或 dotnet CLI 安装 .NET SDK:
dotnet add package Leopard
创建引擎实例并转录音频文件:
using Pv;
const string accessKey = "${ACCESS_KEY}";
const string audioPath = "${AUDIO_FILE_PATH}";
Leopard leopard = Leopard.Create(accessKey);
Console.Write(leopard.ProcessFile(audioPath));
将 ${ACCESS_KEY}
替换为您从 Picovoice Console 获得的密钥。最后,完成后使用 leopard.Dispose()
释放资源。
Rust
首先,您需要在系统上安装 Rust 和 Cargo。
要将 leopard 库添加到您的应用程序中,请在应用程序的 Cargo.toml
清单中添加 pv_leopard
:
[dependencies]
pv_leopard = "*"
使用 LeopardBuilder
实例创建引擎实例并转录音频文件:
use leopard::LeopardBuilder;
fn main() {
let access_key = "${ACCESS_KEY}"; // 从 Picovoice Console (https://console.picovoice.ai/) 获得的 AccessKey
let leopard: Leopard = LeopardBuilder::new().access_key(access_key).init().expect("无法创建 Leopard");
if let Ok(leopard_transcript) = leopard.process_file("/absolute/path/to/audio_file") {
println!("{}", leopard_transcript.transcript);
}
}
将 ${ACCESS_KEY}
替换为您从 Picovoice Console 获得的密钥。
Web
原生 JavaScript 和 HTML(ES 模块)
使用 yarn 安装 web SDK:
yarn add @picovoice/leopard-web
或使用 npm:
npm install --save @picovoice/leopard-web
使用 LeopardWorker
创建引擎实例并转录音频文件:
import { Leopard } from "@picovoice/leopard-web";
import leopardParams from "${PATH_TO_BASE64_LEOPARD_PARAMS}";
function getAudioData(): Int16Array {
// ... 获取音频数据的函数
return new Int16Array();
}
const leopard = await LeopardWorker.create(
"${ACCESS_KEY}",
{ base64: leopardParams },
);
const { transcript, words } = await leopard.process(getAudioData());
console.log(transcript);
console.log(words);
将 ${ACCESS_KEY}
替换为您从 Picovoice Console 获得的密钥。最后,完成后使用 leopard.release()
释放资源。
React
yarn add @picovoice/leopard-react @picovoice/web-voice-processor
(或)
npm install @picovoice/leopard-react @picovoice/web-voice-processor
import { useLeopard } from "@picovoice/leopard-react";
function App(props) {
const {
result,
isLoaded,
error,
init,
processFile,
startRecording,
stopRecording,
isRecording,
recordingElapsedSec,
release,
} = useLeopard();
const initEngine = async () => {
await init(
"${ACCESS_KEY}",
leopardModel,
);
};
const handleFileUpload = async (audioFile: File) => {
await processFile(audioFile);
}
const toggleRecord = async () => {
if (isRecording) {
await stopRecording();
} else {
await startRecording();
}
};
useEffect(() => {
if (result !== null) {
console.log(result.transcript);
console.log(result.words);
}
}, [result])
}
发布
v2.0.0 - 2023年11月30日
- 添加说话人分离功能
- 添加 React SDK
- 改进错误报告
- 升级授权和身份验证系统
- 提高引擎精度
- 各种错误修复和改进
- Node 最低支持版本提升至 Node 16
- iOS 支持提升至 iOS 13+
- 修复 .NET 支持
v1.2.0 - 2023年3月27日
- 增加对法语、德语、意大利语、日语、韩语、葡萄牙语和西班牙语的语言支持
- 添加对 .NET 7.0 的支持,并修复对 .NET Standard 2.0 的支持
- iOS 最低支持版本提升至 11.0
- 提高稳定性和性能
v1.1.0 - 2022年8月11日
- 默认为转录结果添加真实大小写
- 添加自动插入标点符号的选项
- 单词时间戳和置信度作为转录的一部分返回
- 支持 3gp(AMR)和 MP4/m4a(AAC)音频文件
- 发布 Leopard Web SDK
v1.0.0 - 2022年1月10日
- 初始发布