博客
关于我
三个小白是如何在三个月内搭一个基于kaldi的嵌入式在线语音识别系统的
阅读量:471 次
发布时间:2019-03-06

本文共 997 字,大约阅读时间需要 3 分钟。

最近几个月,我和团队从传统语音通信转型到智能语音识别领域,投入了大量的时间和精力。刚开始接触这个领域时,我们对kaldi这个开源框架的熟悉程度也并不高,但面对老板的任务要求,我们硬着头皮开始尝试。

第一阶段:深入学习kaldi

为了完成任务,我们将学习任务分成了三块:数据准备和MFCC、GMM-HMM模型训练、解码网络创建和解码。在其他两位同学负责特定模块后,我负责整个软件架构的设计和kaldi代码的移植。通过查阅网上资料、阅读kaldi代码以及脚本,我们逐步掌握了在线语音识别的核心流程。

在这一阶段,我们还通过实际操作验证了kaldi中解码网络的运行机制。我们基于thchs30搭建了一个PC上的在线识别系统,实现了音频数据的采集、特征提取和解码。通过这一过程,我们对kaldi框架的运行原理有了更深入的理解,为后续工作打下了坚实的基础。

第二阶段:软件架构设计与代码实现

进入第二阶段后,我们开始着手搭建整个软件架构。我们采用了多线程设计,声音采集和前处理运行在一个线程中,而特征提取和解码则在另一个线程中进行。为了实现高效的数据交互,我们引入了环缓冲机制,确保不同线程之间的数据同步。

在系统架构设计完成后,我开始编写代码。我们选择了webRTC中的前处理模块(如AEC和ANS)来处理噪声问题,并对采样率和帧移进行了优化。为了提高开发效率,我们只移植了kaldi中必要的部分代码,并通过不断试错和调试,最终完成了一个基本功能的在线语音识别系统。

第三阶段:系统调试与性能优化

在完成代码实现后,我们进入了系统调试阶段。首先,我们通过从音频文件读取数据来验证系统的识别效果,发现主要问题集中在模型识别率上。通过对比不同模型的性能,我们最终选择了tri4b作为最终模型,并对训练数据进行了多次优化。

随着模型的不断改进,我们逐步对代码进行了深入调试。我们发现前处理模块在从麦克风采集音频时仍有改进空间,经过加入AGC模块后,音频质量得到了显著提升。最终,我们实现了一个能够实时识别英文数字的在线语音识别系统,虽然识别率还有提升空间,但为后续开发奠定了良好的基础。

这次项目的历程让我深刻体会到从零到一的挑战。虽然我们在过程中遇到过各种问题,但通过不断努力和学习,我们最终完成了一个功能性强的在线语音识别系统。这次经历不仅为我们积累了宝贵的经验,也为团队的后续项目打下了坚实的技术基础。

转载地址:http://nvmfz.baihongyu.com/

你可能感兴趣的文章
OSPF技术连载22:OSPF 路径选择 O > O IA > N1 > E1 > N2 > E2
查看>>
Padding
查看>>
paddlehub安装及对口罩检测
查看>>
paddle的两阶段基础算法基础
查看>>
SpringBoot中重写addCorsMapping解决跨域以及提示list them explicitly or consider using “allowedOriginPatterns“ in
查看>>
pageHelper分页工具的使用
查看>>
PageHelper:上手教程(最详细)
查看>>
PageOffice如何实现从零开始动态生成图文并茂的Word文档
查看>>
PageRank算法
查看>>
Paint类(画笔)
查看>>
Palo Alto Networks Expedition 未授权SQL注入漏洞复现(CVE-2024-9465)
查看>>
Palo Alto Networks PAN-OS身份认证绕过导致RCE漏洞复现(CVE-2024-0012)
查看>>
Panalog 日志审计系统 libres_syn_delete.php 前台RCE漏洞复现
查看>>
Panalog 日志审计系统 sprog_deletevent.php SQL 注入漏洞复现
查看>>
pandas :将时间戳转换为 datetime.date
查看>>
pandas :将行取消堆叠到新列中
查看>>
pandas DataFrame 中的自定义浮点格式
查看>>
Pandas DataFrame中的列从浮点数输出到货币(负值)
查看>>
Pandas Dataframe的日志文件
查看>>
Pandas Plots:周末的单独颜色,x 轴上漂亮的打印时间
查看>>