ces2023

    1. 本帖最后由 ces2023 于 2024-2-21 16:59 编辑 其实maix-speech离线语音识别效果差,和板子的算力有关系。一个解决方法是,替换maix-speech中的声学模型 和 语言模型。 查看Maix-Speech的github,可以看到Maix-Speech提供不同规格的声学训练模型和语言训练模型。 https://github.com/sipeed/Maix-Speech/releases 使用低规格的声学训练模型和语言训练模型可以降低运算量,在低性能的处理器上可以获得更好的效果,但准确度会降低。   行空板教程里面给出的链接只包含3324的声学训练模型和lmM的语言训练模型,但github的release连接里面可以下载其他模型。为了提高流畅度,下载并上传3316的声学训练模型和lmS的语言训练模型到行空板。 修改maix-speech文件夹下的配置文件asr_wav.cfg, 将对应的声学模型从3324换为3316, 语言模型从lm_m换为lm_s,为了进一步加快运行速度,将搜索深度由5.0修改为3.0。 再次运行 python 2-speech.py 可以看到替换训练模型和修改配置文件后,识别速度明显提高,基本可以做到实时识别。 查看2-speech.py可以看到,最终识别是由maix_asr的可执行程序实现的,运行maix_asr需要指定配置文件以及需要识别的拼音。 下一步就是用python获取识别结果,方法是在python中用subprocess运行maix_asr,并且重新映射stdout获得识别结果,但会出现log不实时的问题。实接运行maix_asr可以实时看到log,但是python中使用subprocess运行maix_asr,无法通过stdout实时拿到结果,只有log每满4096字节,才能一次性拿到log。其原因和Linux对stdout处理机制有关系,如果stdout指向屏幕,或者其他接口,每遇到换行符或满1024字节就会输出log,但是如果将stdout重映射到文件或者其他地方,Linux为了提高运行效率,默认会累计log,每满4096字节才会输出一次。   为了可以实时获取识别结果,使用 stdbuf -oL ./maix_asr asr_wav.cfg 强制系统不缓冲stdout,这样在python中就可以实时获取log了。

最近访客

现在还没有访客

< 1/0 >

统计信息

已有--人来访过

  • 芯积分:19
  • 好友:--
  • 主题:--
  • 回复:1

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言