当前位置: 首页 > news >正文

关于如何让 Vosk 正确识别中文音频,核心是 使用 Vosk 中文模型 + 确保中文音频格式符合要求

asr_server.py

import asyncio
import websockets
import logging
from vosk import Model, KaldiRecognizer  # 导入Vosk库# 加载模型(确保模型文件夹在当前目录)
model = Model("model")  # 替换为你的模型路径(如"/home/gec/lv_project/vosk-server/websocket/model")async def recognize(websocket):logging.info(f"客户端连接成功:{websocket.remote_address}")try:# 1. 接收客户端的配置信息(如采样率)config = await websocket.recv()logging.info(f"收到配置:{config}")# 2. 初始化识别器(采样率固定为16000,与音频匹配)rec = KaldiRecognizer(model, 16000)# 3. 循环接收音频数据并识别while True:data = await websocket.recv()if not data:  # 音频发送完毕break# 处理音频片段if rec.AcceptWaveform(data):# 发送完整识别结果await websocket.send(rec.Result())else:# 发送中间识别结果await websocket.send(rec.PartialResult())# 4. 发送最终识别结果await websocket.send(rec.FinalResult())except Exception as e:logging.error(f"处理错误:{str(e)}", exc_info=True)finally:await websocket.close()async def start_server():logging.basicConfig(level=logging.INFO)async with websockets.serve(recognize, "0.0.0.0", 2700):await asyncio.Future()  # 保持服务运行if __name__ == "__main__":asyncio.run(start_server())

操作步骤:

  1. 将上述代码保存为 asr_server.py(替换原文件);
  2. 确保模型路径正确(model 文件夹与脚本在同一目录,或使用绝对路径);
  3. 启动服务:
    python3 asr_server.py
    
  4. 测试语音识别:
    python3 test.py test_websocket.wav
    

预期结果:

  • 服务端会逐步输出中间识别结果(PartialResult);
  • 测试端最终会打印完整的识别文本(如音频中的内容)。

现在基础通信已通,整合识别逻辑后即可实现完整的语音识别功能。如果遇到模型加载问题,检查模型路径是否正确即可。

 

 


 

要让 Vosk 正确识别中文音频,核心是 使用 Vosk 中文模型 + 确保中文音频格式符合要求,按以下 3 个关键步骤操作,就能实现中文语音识别:

第一步:下载并配置 Vosk 中文模型(最关键!)

Vosk 识别中文必须依赖专门的中文模型(默认模型多为英文,会导致识别乱码或错误),推荐使用轻量且准确率高的 vosk-model-small-cn-0.15(适合嵌入式 / 普通场景)。

操作步骤:

  1. 删除旧模型(避免冲突)进入 websocket 目录,删除之前可能存在的英文 / 其他语言模型:

    cd ~/lv_project/vosk-server/websocket
    rm -rf model  # 删除旧模型文件夹
    
  2. 下载中文模型直接用 wget 命令下载(或手动从官网下载后上传到服务器):

    # 下载轻量版中文模型(约 1.8GB,速度取决于网络)
    wget https://alphacephei.com/vosk/models/vosk-model-small-cn-0.15.zip
    
    • 若 wget 下载慢,可手动在浏览器打开 Vosk 模型官网,找到 vosk-model-small-cn-0.15 下载,再通过 scp 传到服务器的 websocket 目录。
  3. 解压模型并命名为 model解压后将模型文件夹重命名为 model(方便服务直接加载,无需修改代码):

    unzip vosk-model-small-cn-0.15.zip  # 解压
    mv vosk-model-small-cn-0.15 model  # 重命名为 model
    
  4. 验证模型是否正确执行以下命令,确认 model 文件夹包含中文模型核心文件:

    ls model
    

    正常输出应包含 am(声学模型)、graph(语言模型)、ivector(特征提取)等子文件夹,说明模型配置成功。

第二步:准备符合要求的中文音频(格式是基础)

Vosk 对音频格式有强制要求,中文音频也需满足:16kHz 采样率 + 单声道( mono ) + 16 位深度( PCM 编码)的 WAV 文件

两种场景的操作方法:

场景 1:已有中文音频文件(如 chinese_audio.wav

先验证格式是否符合要求,执行命令:

ffmpeg -i chinese_audio.wav  # 查看音频信息
  • 若格式符合(输出含 16000 Hz, mono, s16):直接用该文件测试;
  • 若格式不符合(如 44100Hz、立体声):用 ffmpeg 转换为标准格式:
    # 转换命令:输入文件 → 16kHz 采样率 + 单声道 + 16位深度
    ffmpeg -i chinese_audio.wav -ar 16000 -ac 1 -sample_fmt s16 chinese_standard.wav
    
    转换后的 chinese_standard.wav 就是符合要求的中文音频。

场景 2:暂无中文音频,用麦克风录制

若服务器有麦克风(或通过远程桌面连接本地麦克风),用 arecord 命令录制中文音频:

# 录制 5 秒中文音频,直接生成标准格式
arecord -d 5 -r 16000 -c 1 -f S16_LE chinese_record.wav
  • 参数说明:-d 5(录制 5 秒)、-r 16000(16kHz 采样率)、-c 1(单声道)、-f S16_LE(16 位深度)。

第三步:启动服务并测试中文识别

  1. 重启 Vosk 服务(加载中文模型)确保 asr_server.py 中模型加载路径是 model(中文模型),然后启动服务:

    python3 asr_server.py
    
    • 正常启动日志会显示中文模型加载信息(如 LOG (VoskAPI:ReadDataFiles():model.cc:248) Loading i-vector extractor from ...),最后停在 INFO:websockets.server:server listening on 0.0.0.0:2700
  2. 用 test.py 测试中文音频运行 test.py,传入处理好的中文音频文件:

    python3 test.py chinese_standard.wav  # 或 chinese_record.wav
    
  3. 查看中文识别结果测试端会输出中文识别结果,例如:

    { "partial" : "你好" }
    { "partial" : "你好 世界" }
    { "text" : "你好 世界 今天 天气 很好" }
    

    若输出中文文本,说明中文识别成功;若仍有乱码,检查模型是否为中文版本(重新执行第一步)。

常见问题排查

  1. 识别结果是英文 / 乱码 → 确认 model 文件夹是中文模型(非 vosk-model-small-en-* 等英文模型);
  2. 音频无识别结果 → 检查音频格式(用 ffmpeg -i 验证是否为 16kHz / 单声道 / 16 位);
  3. 服务启动报错 “模型加载失败” → 重新下载中文模型,确保解压完整(model 文件夹下有 amgraph 等子文件夹)。

总结

中文音频识别的核心是 “中文模型 + 标准格式音频”,按步骤配置中文模型、处理音频格式后,就能实现准确的中文语音识别。后续对接 C 代码时,只需沿用相同的 WebSocket 流程,发送中文音频即可获取中文识别结果。

 

http://www.dtcms.com/a/406527.html

相关文章:

  • MySQL和PostgreSQL的数据库主键索引都是B+树吗?
  • VUE、jquery、React、Ant Design、element ui、bootstrap 前端框架的 功能总结,示例演示、使用场景介绍、完整对比总结
  • PDF格式转换、PDF编辑全功能解锁,功能图文教程
  • C++项目:仿muduo库高并发服务器
  • 建设网站业务不好做请问那个网站做推广好点
  • Pytest+requests进行接口自动化测试6.0(Jenkins)
  • elasticsearch安装插件
  • html5移动网站开发html5新增标签
  • 前端工程化基础知识
  • 【C#】以 BlockingCollection 为核心的多相机 YOLO 检测任务处理框架
  • (11)ASP.NET Core2.2 中的配置一(Configuration)
  • 在 C# .NETCore 中使用 MongoDB(第 1 部分):驱动程序基础知识和插入文档
  • php做图片交互网站代码网站下要加个备案号 怎么做
  • 巴中商城网站建设wordpress 图书主题
  • 一键预约上门服务:到家洗车小程序的便捷功能与场景化体验
  • 第 3 篇:让图形动起来 - WebGL 2D 变换
  • 寝室快修|基于SprinBoot+vue的贵工程寝室快修小程序(源码+数据库+文档)
  • 青秀网站建设网站海外推广平台
  • 前端基础:从0到1实现简单网页效果(二)
  • 基于LazyLLM搭建AI创意文案生成器(多场景文案自动生成)
  • 数据链路层:网络通信的基础与桥梁
  • Keepalived两个集群实验
  • vs网站开发表格大小设置网站建设要注意一些什么
  • js网站模板下载做网站和app哪个难
  • MySQL多实例管理
  • 用dpdk实现udp、tcp数据包收发,tcp协议栈相关原理
  • 3D气象数据可视化:使用前端框架实现动态天气展示
  • 学习日记19:GRAPH-BERT
  • shell编程:sed - 流编辑器(5)
  • 网站制作地点中山网站建设公司哪家好