ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Vosk 离线语音识别编码指南:3步搞定多语言结果从乱码到干净中文

Vosk 离线语音识别编码指南:3步搞定多语言结果从乱码到干净中文 Vosk 离线语音识别编码指南3步搞定多语言结果从乱码到干净中文【免费下载链接】vosk-apiOffline speech recognition API for Android, iOS, Raspberry Pi and servers with Python, Java, C# and Node项目地址: https://gitcode.com/GitHub_Trending/vo/vosk-apiWindows 上跑完中文识别输出 txt 打开全是???Linux 上跑法语音频结果却变成é。这是用 Vosk 离线语音识别做多语言字符编码时最常见的两种翻车现场而且它们都跟模型本身没关系。Vosk 怎么处理文本乱码要查的3个编码边界看 src/vosk_api.h 的接口签名所有返回识别结果的函数都是const char*。也就是说环节形态编码归谁管模型文件内部二进制网络 词表文本模型内文本是 UTF-8由 libvosk 整体加载C 接口返回值Result/PartialResult/FinalResultconst char*原始字节全链路假定 UTF-8库只搬字节语言绑定层Python/Kotlin/C#原生字符串对象各绑定把字节转成自家字符串所以 C 库从不管编码出问题的只有两处绑定层字节→字符串的解码和你字符串→文件/控制台的写出。另一个特例ITN 后处理器中文模型默认吐出一六零这种口语读法想要160得走 ITN逆文本规范化把口语文本转回符号后处理器。它在 C 库内部用 FST有限状态转换器理解成一张文本转换规则表即可的 tagger 和 verbalizer 完成转换输入输出依旧是 UTF-8。 第一次跑通从下模型到拿到中文结果三步走完环境准备装 vosk 并下载中文模型这一步让 Python 绑定代你下载中文小模型并解压进本地缓存目录。pip install voskfrom vosk import Model model Model(langzh-cn)做完这步你应该看到~/.cache/voskWindows 是%LOCALAPPDATA%\vosk下多了 vosk-model-small-zh-cn-0.22 目录Python 侧不用再做任何配置。加载模型一句拿到识别结果把 wav 打开按 4000 帧16k 下约 0.25 秒一块喂给识别器返回完整句子时打印 JSON 里的text字段。import json, wave from vosk import KaldiRecognizer wf wave.open(chinese.wav, rb) rec KaldiRecognizer(model, wf.getframerate()) while True: data wf.readframes(4000) if len(data) 0: break if rec.AcceptWaveform(data): print(json.loads(rec.Result())[text]) print(json.loads(rec.FinalResult())[text])注意 Recognizer 的采样率传wf.getframerate()跟着音频走别手填 16000。做完这步你应该看到Linux/macOS 终端里中文已经干净利落。Kotlin 里正确解码 Vosk 返回结果JVM 版走 JNA 调 libvoskresult拿到的已经是 String唯一要防的是 JVM 进程默认编码java -Dfile.encodingUTF-8 -jar vosk-demo.jar如果你在 Kotlin/Native 目标上则自己显式解码 C 返回的字节串val text String(validatingUTF8: jsonBytes)!!做完这步你应该看到同一段 wav 两种语言的识别文本逐字一致没有乱码。中文乱码、法式 é按语言族分坑不一样乱码的形态跟着文字体系走咱们按语言族分不列长清单。语言族典型症状一行修复CJK中日韩txt 打开是???或ÕäÕåopen(out.txt,w,encodingutf-8).write(text)欧洲变音符法/德/波兰é变é典型双重编码sys.stdout.reconfigure(encodingutf-8)RTL阿拉伯语等顺序对但显示错位记事本里从左边排open(ar.txt,w,encodingutf-8-sig)带 BOM 写Python 绑定的模型自动下载缓存目录在 python/vosk/init.py 的 MODEL_DIRS 列表里模型放哪儿、往哪儿找看这一个文件就够。Vosk UTF-8 配置与多语言切换3 个如果你遇到 X判断如果你遇到 Windows 控制台或文件里全是???大概率是系统默认代码页 GBK 而 Vosk 输出的是 UTF-8set PYTHONUTF81 python test_simple.py如果你遇到网页里法语识别结果显示成é大概率是响应头漏了 charset 声明res.setHeader(Content-Type, text/plain; charsetutf-8);如果你遇到需要在同一进程里中英文切换别指望换个模型再塞回同一个 Recognizer——Model 可以共享Recognizer 是单线程的、绑定一条音频流正确姿势是每种语言一个实例recs {zh: KaldiRecognizer(model_zh, 16000), en: KaldiRecognizer(model_en, 16000)} print(json.loads(recs[lang].Result())[text])上线前一张检查清单音频 16000Hz 单声道 16-bit与 Recognizer 采样率一致文件写出全部显式encodingutf-8Windows 环境已设PYTHONUTF81每种语言独立 Recognizer不切换模型数字、单位输出已接 ITN 后处理器现在就拿一段 16000Hz 的中文 wav跑一遍上面第二步的代码终端干净打出你好两个字你的编码配置才算真正过关。【免费下载链接】vosk-apiOffline speech recognition API for Android, iOS, Raspberry Pi and servers with Python, Java, C# and Node项目地址: https://gitcode.com/GitHub_Trending/vo/vosk-api创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表