3240|6

309

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

【行空板 Python编程学习主控板】 五、离线语音识别和云语音识别比较 [复制链接]

本帖最后由 kit7828 于 2022-12-3 11:24 编辑

一直想在行空板上进行语音识别的尝试和应用,尤其是看到官方网站中给出的离线语音识别maix-speech,结果还是非常失望,通过百度云进行的语音识别功能非常强大,识别率和识别速度都非常满意。

一、几乎没有效果的maix-speech离线语音识别

Maix-Speech 是专为嵌入式环境设计的离线语音库,设计目标包括:ASR/TTS/CHAT   
作者的设计初衷是完成一个低至Cortex-A7 1.0GHz 单核下可以实时运行的ASR库。   
目前市面上的离线语音库非常稀缺,即使有也对主控要求很高,Maix-Speech 针对语音识别算法进行了深度优化,在内存占用上达到了数量级上的领先,并且保持了优良的WER。  

行空板上运行maix-speech离线语音识别效果很差,原因应该还是行空板的运算速度不够,或许直接用C语音编程能够实现,但是Python的效果几乎没有。过程如下:

1、官方网站中下载整个案例代码

我用的是网盘2,百度网盘https://pan.baidu.com/s/1H8yVFjFTEvZIrgwzDYpVEA?pwd=aixk

2、上传压缩包至行空板

下载后,通过浏览器打开10.1.2.3,使用文件上传功能,其实在Mind+中也是可以上传的。

 在行空板中运行命令解压maix-speech.zip

 可以在行空板中看到文件目录

 

3、安装依赖库

依照提示,先运行1-Install_dependency.py安装依赖库。

  5、运行2-speech.py进行离线语音识别

   识别的语音只有3个,分别是天猫精灵、开灯和关灯

  6、识别效果

 从截图可以看到有一定的识别效果,但是速度太慢了,以致于不知道有没有正确识别,前后之间的时间差,感觉也是无序的,综合来说,几乎没有识别。

二、强大的百度云语音识别

百度AI云语音识别精度很高,能够快递精准的识别语音,并转换为文字,需要调用API,将语音录音文件上传到云,然后就能得到经过AI云识别后的文字。

1、Python代码

通过行空板官方网站,看到了百度语音识别的案例,就直接拿来使用了。感觉Python的代码非常简单,应该是aip中进行了封装。

代码如下:

from unihiker import GUI,Audio  #导入包
from aip import AipSpeech

gui=GUI()  #实例化GUI类
audio = Audio() # 实例化Audio类

#gui 添加文本标题
gui.draw_text(x=60, y=20,color="#4169E1", font_size=18,text="语音识别助手")

# gui 添加按钮信息
gui.add_button(x=120, y=150, w=100, h=30, text="录音", origin='center', onclick=lambda:Record() )

gui.add_button(x=120, y=210, w=100, h=30, text="识别", origin='center', onclick=lambda: Recognition() )
# 识别显示信息
info_text2 = gui.draw_text(x=0, y=60,color="black",text="")

""" 你的 APPID AK SK """
APP_ID = ''
API_KEY = ''
SECRET_KEY = ''

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

# 读取文件(固定代码)
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()

# 识别本地文件
def voiceToText():
    res = client.asr(get_file_content('3s.wav'), 'wav', 16000, {
            'dev_pid': 1537,
        })
    return res.get('result')[0]

def Record():
    print("开始进行录音")
    audio.record('3s.wav', 5) #录音5S
    print("录音结束")
    info_text2.config(x=0, y=60, text="")# 清空识别信息显示栏

def Recognition():
    print("开始进行语音识别")
    msg = voiceToText()
    print(msg)
    info_text2.config(x=0, y=60, text=msg) #更新识别显示的信息
    time.sleep(1)

import time
while True:

    #增加等待,防止程序退出和卡住
    time.sleep(1)

只改了按钮的位置,以及录音长度改成了5秒。

2、百度云中的语音识别应用

需要在百度云中创建应用,并进行简单的设置

 记录APPID、   API Key 、    Secret Key,然后更新前面的py代码

3、行空板中设置WiFi联网

通过http://10.1.2.3进行WiFi的设置,这里就不啰嗦了。

4、运行百度语音识别程序

 可以看到识别效果非常好,由于我这边的wifi延迟比较严重,因此,识别的时候时间的差距比较大。

5、百度云语音识别视频

12月3日

三、总结

网上评价maix-speech是一款非常不错的离线语音识别,也看过语音识别的视频,效果还是不错的,行空板上没有效果,应该有两个方面的因素,一个是没有训练,没有用到特定的识别模型,二是运算速度的限制,尤其是Python代码,速度上更是拖了后腿。

百度云语音识别的效果确实非常棒,只是对网络的依赖比较重,网速更不上的时候,效果就差些。

最新回复

本帖最后由 ces2023 于 2024-2-21 16:59 编辑 其实maix-speech离线语音识别效果差,和板子的算力有关系。一个解决方法是,替换maix-speech中的声学模型 和 语言模型。 查看Maix-Speech的github,可以看到Maix-Speech提供不同规格的声学训练模型和语言训练模型。 https://github.com/sipeed/Maix-Speech/releases 使用低规格的声学训练模型和语言训练模型可以降低运算量,在低性能的处理器上可以获得更好的效果,但准确度会降低。 [attach]787621[/attach]   行空板教程里面给出的链接只包含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字节才会输出一次。 [attach]787620[/attach]   为了可以实时获取识别结果,使用 stdbuf -oL ./maix_asr asr_wav.cfg 强制系统不缓冲stdout,这样在python中就可以实时获取log了。   详情 回复 发表于 2024-2-21 16:49
点赞 关注

回复
举报

6968

帖子

11

TA的资源

版主

沙发
 
百度云语音识别,这个收费的吗?

点评

新人免费,老人收费  详情 回复 发表于 2022-12-5 11:20
 
 

回复

309

帖子

0

TA的资源

纯净的硅(初级)

板凳
 
lugl4313820 发表于 2022-12-5 09:17 百度云语音识别,这个收费的吗?

新人免费,老人收费

点评

那不是杀熟嘛。。。  详情 回复 发表于 2022-12-5 17:13
 
 
 

回复

6968

帖子

11

TA的资源

版主

4
 
kit7828 发表于 2022-12-5 11:20 新人免费,老人收费

那不是杀熟嘛。。。

点评

就是。我借了别人的账号,用的百度云AI功能。  详情 回复 发表于 2022-12-6 20:22
 
 
 

回复

309

帖子

0

TA的资源

纯净的硅(初级)

5
 
lugl4313820 发表于 2022-12-5 17:13 那不是杀熟嘛。。。

就是。我借了别人的账号,用的百度云AI功能。

点评

你的朋友真多。  详情 回复 发表于 2022-12-7 07:37
 
 
 

回复

6968

帖子

11

TA的资源

版主

6
 
kit7828 发表于 2022-12-6 20:22 就是。我借了别人的账号,用的百度云AI功能。

你的朋友真多。

 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 
本帖最后由 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了。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表