主题
LimeSherpaOnnx 实时语音识别组件
一个基于Sherpa-onnx的实时语音识别插件,Sherpa-onnx是k2-fsa团队开发的使用ONNX运行时的实时语音识别引擎,支持多种平台和多种语言模型。本插件支持音频文件识别和实时语音识别,适用于需要本地语音转文字功能的应用场景,如语音笔记、语音指令、语音交互等。组件支持Android和iOS平台。
文档链接
📚 组件详细文档请访问以下站点:
安装方法
代码演示
初始化识别器
首先,需要初始化语音识别器,指定模型路径和相关配置:
typescript
import { UesSherpaOnnx, type UesSherpaOnnxOptions, type LimeSherpaOnnxRecognizer } from '@/uni_modules/lime-sherpa-onnx';
// 初始化选项
const options: UesSherpaOnnxOptions = {
modelPath: '/static/models/paraformer.onnx',
vadModelPath: '/static/models/silero_vad.onnx',
tokensPath: '/static/models/tokens.txt'
};
// 初始化识别器
let recognizer = UesSherpaOnnx(options);
识别音频文件
使用初始化好的识别器识别音频文件:
typescript
import { type LimeRecognizeFileOptions } from '@/uni_modules/lime-sherpa-onnx';
// 识别选项
const recognizeOptions: LimeRecognizeFileOptions = {
audioPath: '/static/audio/test.wav',
success: (result) => {
console.log('识别结果:', result.text);
console.log('文本片段:', result.segments);
}
};
// 开始识别
recognizer.recognizeFile(recognizeOptions);
实时语音识别
实时识别语音流,适用于需要即时反馈的场景:
typescript
import { uesSherpaOnnx, type LimeStartRecorderOptions } from '@/uni_modules/lime-sherpa-onnx';
const recognizer = uesSherpaOnnx({
encoder: '/static/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/encoder-epoch-99-avg-1.int8.onnx',
decoder: '/static/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/decoder-epoch-99-avg-1.onnx',
joiner: '/static/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/joiner-epoch-99-avg-1.onnx',
tokensPath: '/static/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/tokens.txt',
modelType: 'zipformer',
mode: 'online',
success() {
console.log('uesSherpaOnnx 初始化成功')
},
fail(err) {
console.log('uesSherpaOnnx 初始化失败', err)
}
});
// 监听实时录音结果
recognizer.onRecorder((res) => {
console.log('实时识别结果', res)
});
// 开始录音
recognizer.startRecorder({
success(res) {
console.log('开始录音成功', res)
},
fail(err) {
console.log('开始录音失败', err)
}
});
// 停止录音
recognizer.stopRecorder();
释放资源
在不再需要识别器时,应该释放资源:
typescript
// 释放资源
recognizer.dispose();
完整示例
界面部分
html
<text>{{txt}}</text>
<button @click="onClick">音频转文本</button>
<button @click="startRecord">开始录制音频</button>
<button @click="stopRecord">停止录制音频</button>
UniappX 示例
js
import { uesSherpaOnnx, type LimeRecognizeResult, type UesSherpaOnnxOptions, type LimeRecognizeFileOptions } from '@/uni_modules/lime-sherpa-onnx'
// 录制音频可以使用其它能录制wav的插件,官方的API有问题
import { getRecorderManager, type LimeRecorderManagerStartOption } from '@/uni_modules/lime-recorder'
const txt = ref('测试');
const recognizer = uesSherpaOnnx({
modelPath: '/static/sherpa_models/model.int8.onnx',
vadModelPath: '/static/sherpa_models/silero_vad.onnx',
tokensPath: '/static/sherpa_models/tokens.txt',
success() {
console.log('uesSherpaOnnx 初始化成功')
},
fail(err) {
console.log('uesSherpaOnnx 初始化失败', err)
}
});
const onClick = () => {
recognizer.recognizeFile({
audioPath: '/static/ttsmaker-file-2025-7-2-18-42-28.wav',
success(res) {
console.log('识别成功', res)
txt.value = res.text
},
fail(err) {
console.log('识别失败', err)
}
});
}
// 录制音频文件
const recorderManager = getRecorderManager();
recorderManager.onStop((res) => {
recognizer.recognizeFile({
audioPath: res.tempFilePath,
success(res) {
console.log('识别成功', res)
txt.value = res.text
},
fail(err) {
console.log('识别失败', err)
}
});
});
const startRecord = () => {
const options: LimeRecorderManagerStartOption = {
format: 'wav',
numberOfChannels: 1,
}
recorderManager.start(options)
}
const stopRecord = () => {
recorderManager.stop()
}
Uniapp 示例
js
import { uesSherpaOnnx } from '@/uni_modules/lime-sherpa-onnx'
// 录制音频可以使用其它能录制wav的插件,官方的API有问题
import { getRecorderManager } from '@/uni_modules/lime-recorder'
const recognizer = uesSherpaOnnx({
modelPath: '/static/sherpa_models/model.int8.onnx',
vadModelPath: '/static/sherpa_models/silero_vad.onnx',
tokensPath: '/static/sherpa_models/tokens.txt',
success() {
console.log('uesSherpaOnnx 初始化成功')
},
fail(err) {
console.log('uesSherpaOnnx 初始化失败', err)
}
})
// 录制音频文件
const recorderManager = getRecorderManager()
export default {
data() {
return {
txt: ''
}
},
mounted() {
recorderManager.onStop((res) => {
recognizer.recognizeFile({
audioPath: res.tempFilePath,
success: (res) => {
console.log('识别成功', res)
this.txt = res.text
},
fail(err) {
console.log('识别失败', err)
}
})
})
},
methods: {
onClick() {
recognizer.recognizeFile({
audioPath: '/static/ttsmaker-file-2025-7-2-18-42-28.wav',
success: (res) => {
console.log('识别成功', res)
this.txt = res.text
},
fail(err) {
console.log('识别失败', err)
}
})
},
startRecord() {
const options = {
format: 'wav',
numberOfChannels: 1,
}
recorderManager.start(options)
},
stopRecord() {
recorderManager.stop()
}
}
}
快速预览
导入插件后,可以直接使用以下标签查看演示效果:
html
<!-- 代码位于 uni_modules/lime-sherpa-onnx/components/lime-sherpa-onnx -->
<lime-sherpa-onnx />
插件标签说明
标签名 | 说明 |
---|---|
l-sherpa-onnx | 组件标签 |
lime-sherpa-onnx | 演示标签 |
详细配置请参考官方文档:Vue Composition API
API文档
UesSherpaOnnxOptions 初始化选项
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
modelPath | 模型文件路径 | string | - |
encoder | encoder模型文件路径 | string | - |
decoder | decoder模型文件路径 | string | - |
joiner | joiner模型文件路径 | string | - |
vadModelPath | VAD模型文件路径 | string | - |
tokensPath | Tokens文件路径 | string | - |
modelType | 模型类型 | string | - |
mode | 识别模式 | 'online' | 'offline' | 'offline' |
success | 初始化成功回调 | () => void | - |
fail | 初始化失败回调 | (err: any) => void | - |
LimeSherpaOnnxRecognizer 识别器方法
方法名 | 说明 | 参数 | 返回值 |
---|---|---|---|
recognizeFile | 识别音频文件 | options: LimeRecognizeFileOptions | - |
startRecorder | 开始录音并实时识别 | options: LimeStartRecorderOptions | - |
stopRecorder | 停止录音 | - | - |
onRecorder | 监听实时识别结果 | (callback: (result: LimeRecognizeResult) => void) => void | - |
dispose | 释放资源 | - | - |
LimeRecognizeFileOptions 识别选项
参数 | 说明 | 类型 | 必填 |
---|---|---|---|
audioPath | 音频文件路径 | string | 是 |
success | 识别成功回调 | (result: LimeRecognizeResult) => void | 是 |
fail | 识别失败回调 | (err: any) => void | 否 |
LimeStartRecorderOptions 录音选项
参数 | 说明 | 类型 | 必填 |
---|---|---|---|
success | 开始录音成功回调 | (res: any) => void | 否 |
fail | 开始录音失败回调 | (err: any) => void | 否 |
LimeRecognizeResult 识别结果
属性 | 说明 | 类型 |
---|---|---|
text | 完整识别文本 | string |
segments | 文本片段数组 | string[] |
错误处理
插件可能会抛出以下错误:
错误码 | 错误信息 | 说明 |
---|---|---|
9010001 | 无效音频文件路径 | 提供的音频文件路径无效 |
9010002 | 无法读取音频文件 | 无法读取指定的音频文件 |
9010003 | 初始化失败 | 识别器初始化失败 |
9010004 | 识别失败 | 音频识别过程中出错 |
9010005 | 模型加载失败 | 无法加载指定的模型文件 |
9010006 | VAD模型加载失败 | 无法加载VAD模型文件 |
9010007 | Paraformer模型加载失败 | 无法加载Paraformer模型文件 |
9010008 | Tokens文件加载失败 | 无法加载Tokens文件 |
常见问题
- 确保模型文件路径正确,且模型文件已正确放置在指定目录
- 音频文件格式必须为WAV格式,且采样率需与模型要求一致
- 实时识别功能在iOS上可能表现不如安卓稳定,建议进行充分测试
- 大型模型可能会占用较多内存,请根据目标设备性能选择适当的模型
资源下载
📚 SherpaOnnx官方详细文档和模型请访问以下站点:
支持与赞赏
如果你觉得本插件解决了你的问题,可以考虑支持作者:
支付宝赞助 | 微信赞助 |
---|---|
![]() | ![]() |