前言

语音识别是智能化应用的一个重要分支,也是语音交互功能的基础。语音识别基于神经网络算法,借助大数据进行模型训练,据科大讯飞相关数据报道,它们已经能够实现98%以上的准确识别率,同时支持多种外语及国内的一些方言。从语音技术实现方式分类可以分为本地识别和云识别,本地识别主要是借助语音芯片诸如LD3320等,而云识别目前国内比较火的有科大讯飞、百度AI等云服务提供,它们提供友好的API接口,支持多种开发语言,相比于本地语音识别,它的识别准确率更高,应用场景更为灵活。

海思HI35xx音频知识

海思音频模块包含音频输入(AI)、音频输出(AO)、音频编码(AENC)、音频解码(ADEC)这四个模块,这几个模块实现了声音采集、声音播放以及声音编解码的功能。原始的音频信号是模拟信号,通过pcm方式进行数字化,常用音频采样频率有8khz、16khz、32khz、48khz。根据香农采样定理,为了不失真地恢复模拟信号,采样频率应该不小于模拟信号频谱中最高频率的2倍,而人能听到的声音频率范围在20~20000hz,而且听力敏感区是集中在中频区段,所以用16khz频率采样作为语音识别原始数据既能保持音质,也能降低数据运算复杂度。

根据笔者的经验,海思音频模块硬件实现方式有两种,一种是将音频芯片集成到芯片内部,作为片上资源使用,另一种是外接音频芯片方式,如wm9874。这两种接法大同小异,与音频芯片控制指令数据交互是由I2C实现,而音频数据交互则是由I2S或者PCM来实现。软件开发需要注意的是音频采样率设置、采样数据位宽,8位或者16位,不同的云语音识别平台对音频采样率、位宽都有要求,不过比较通用的是16khz采样、16位数据宽度、pcm音频格式。下图是海思CPU与音频芯片用I2S或PCM方式进行数据交互的示意图,可见PCM方式只有单声道,而没有多声道立体声的概念。

语音识别方案

语音识别方案分为硬件本地实现和智能语音云实现,我比较推崇使用云方式,它成本较低,后期维护少,识别准确率高,而且随着5G商业化浪潮实现,网络延时基本可以忽略,语音识别实时性与本地相比无异。配合HIMPP平台的API使用实现音频采集、处理、推云平台的功能并不难,首先MIC作为音频模拟信号输入源,由AUDIO CODE芯片进行模数转换,然后通过I2S或者PCM方式与CPU进行数据交互,接着CPU通过Socket连接云服务器进行推流,云将语音识别的数据返回。此外,云还有语音合成功能,它可以将文字合成为语音,此过程恰好与语音识别的数据流相反,并最终推向speaker。HIMPP平台的API使用可以参考《海思HI35xx平台软件开发快速入门之背景知识》

语音识别案例

这里参考了百度AI语音识别案例源码,百度AI语音识别的样例编程语言环境为C++,由于采用了云方式,避免不了进行网络开发,根据百度AI语音开发文档,有要求一定运行环境,网络连接请求依赖于curl、加密依赖于openssl、数据交互格式依赖jsoncpp,还有百度语音识别的SDK开发包,这里这里给出了这些运行环境移植的源码。

// 请替换您下载的C++SDK路径
#include "aip-cpp-sdk-0.7.4/speech.h"void ASR(aip::Speech* client);void ASR_url(aip::Speech* client);void TTS(aip::Speech* client);int main()
{// 务必替换百度云控制台中新建百度语音应用的 Api Key 和 Secret Keyaip::Speech * client = new aip::Speech("15398376", "GgCrxhNOhe0UnP9k0hHaUxfF", "TEmp8hCGMeVV61VG0PAKXKRG4nekMLmI");ASR(client);ASR_url(client);TTS(client);return 0;
}/*** ASR语音识别示例*/
void ASR(aip::Speech* client) {std::map<std::string, std::string> options;options["lan"] = "ZH";std::string file_content;aip::get_file_content("./16k_test.pcm", &file_content);Json::Value result = client->recognize(file_content, "pcm", 16000, options);std::cout << "语音识别本地文件结果:" << std::endl << result.toStyledString();
}/*** ASR语音识别示例,使用远程文件地址*/
void ASR_url(aip::Speech* client) {std::map<std::string, std::string> options;options["lan"] = "zh";Json::Value result =client->recognize_url("http://bos.nj.bpc.baidu.com/v1/audio/8k.amr","http://your_site/dump","amr", 8000, options);std::cout << "语音识别远程文件结果:" << std::endl << result.toStyledString();
}/*** TTS语音合成示例*/
void TTS(aip::Speech* client) {std::ofstream ofile;std::string file_ret;std::map<std::string, std::string> options;options["spd"] = "5";options["per"] = "2";ofile.open("./tts.mp3", std::ios::out | std::ios::binary);Json::Value result = client->text2audio("百度语音合成测试", options, file_ret);// 如果file_ret为不为空则说明合成成功,返回mp3文件内容if (!file_ret.empty()){// 合成成功保存文件ofile << file_ret;std::cout << "语音合成成功,打开目录下的tts.mp3文件听听看" << std::endl;} else {// 合成出错,打印错误信息std::cout << result.toStyledString();}
}

总结

语音识别作为智能化终端的基础越来越受到人们的重视,特别是云语音识别能力及准确率大大提高的今天,借助5G网络发力,相信在未来的3年内将会普遍实现终端带语音,云识别的应用场景。智能安防将重新定义市场,安全智慧城市将服务于大众。记HI35XX语音识别总结于广州,2019-01-25.

海思HI35xx语音识别方案相关推荐

  1. 海思HI35xx平台软件开发快速入门之H264解码实例

    前言 H264视频编码技术诞生于2003年,至今已有十余载,技术相当成熟,它的优势在于有高的视频的压缩率,利用帧间和帧内预测(Estimation).变换(Transform)和反变换.量化(Quan ...

  2. 海思HI35xx平台CPU温度监测

    前言 随着芯片的集成度提高,芯片内部的晶体管数量也不断增多,产生的热量也难以通过小小芯片封装散发出去(常用封装材料有塑料.陶瓷.玻璃.金属,CPU一般采用金属材料封装),高温是会对芯片的性能产生极其有 ...

  3. 海思HI35xx平台软件开发快速入门之背景知识

    前言: 安防领域最近几年可谓暗流涌动,作为安防业的双寡头,大华股份与海康威视凭借行业的东风,两家公司的成长速度异常强劲,在国际市场上已经和应用厂家进行厮杀. 2015年两家公司双双晋升"全球 ...

  4. 海思HI35xx平台软件开发快速入门之视频分辨率

    前言 在海思HI35xx平台软件开发过程中常常遇到一些音视频相关的专业知识,为了能够灵活应对这些问题,我们必须对相关知识有所理解.这里结合海思HIMMP媒体处理系统相关应用对视频分辨率知识进行梳理,以 ...

  5. 《海思Hi35xx开发日记——之No.1》

    前言:由于公司的战略转变,我也由原来的Android开发转向到海思HI35xx平台的开发.海思Hi35xx是一个专门提供媒体处理的平台架构,它提供的音视频软件HIMPP API使得下游厂商能够快速开发 ...

  6. 海思HI35XX之----音频模块使用总结

    AUDIO 模块包括音频输入.音频输出.音频编码.音频解码四个子模块.音频输入和 输出模块通过对 Hi35xx 芯片 SIO 接口的控制实现音频输入输出功能.音频编码和解码模块提供对 G711.G72 ...

  7. 关于华为海思Hi35XX系列开发的思考与总结

    前言 自认为是搞嵌入式方向的一名小菜鸡,本科时借着竞赛学习了STM32,后续又开了51单片机的课程,也做了几个课程项目.当然啦,也画过PCB板子.不过也都是皮毛而已.所以说,在刚拿到这块Hi3516D ...

  8. 《海思Hi35xx开发日记——之No.3》

    在上一篇我们已经说到如何让海思Hi3519A跑起来,输入几个命令是一顿操作猛如虎.但我们对这些命令还有作深入一点的了解,所以这篇我们专门是为命令行的探讨写的. 在Hi3519平台上跑的是Linux系统 ...

  9. 海思HI35xx CPU温度监测

    海思CPU温度采集单元软件开发分为驱动程序部分和用户态软件开发,其中驱动程序部分主要是与硬件交互,实现底层数据采集转换工作,而用户态则主要是程序应用逻辑控制设计.用户态程序设计流程如下: 1.设置温度 ...

最新文章

  1. Android stadio bug
  2. 5年後、10年後の自分のイメージ
  3. TikTok上市无望?某大厂上海分公司跑路?
  4. Java学习笔记(十)--控制台输入输出
  5. 重磅 | 19 页花书精髓笔记!你可能正需要这份知识清单
  6. OpenGL之矩阵变换的原理分析与数学推导
  7. matlab gui 密码登录 论文,MATLAB GUI 密码输入
  8. java隔一个逗号读入文件_将逗号分隔的文本文件读入HashMap,其中文件在多行Java中具有相同的键...
  9. 为系统加载右键注册控件选项【VB 注册控件】
  10. paip.httpd.conf 是空的.txt
  11. VNC登陆灰屏 - fatal IO error 11 (Resource temporarily unavailable) on X server
  12. 检测站营销系列文章:机动车检测站如何做精益营销?
  13. vue2的css 动画库的基本使用方式
  14. android 版本号 7.0 O,微信全面上线64位7.0.9版本:运行速度更快,你更新了吗?(附下载)...
  15. 电信大型服务器机房_四川电信服务器idc数据中心
  16. 创新型中小企业认定条件有哪些?
  17. 论文:预测原子距离进行构象预测(VAE)
  18. 机械故障诊断学的学习
  19. 8086 微型计算机原理和应用,微型计算机原理与应用.ppt
  20. 高频DCDC电源减小EMI的布局技巧

热门文章

  1. CSDN取消手机绑定
  2. 论文笔记——EXPLAINING AND HARNESSING ADVERSARIAL EXAMPLES(解释和利用对抗样本)
  3. 广数928te_广数928te使用教材
  4. 欧洲之星Fotona 4D是什么,欧洲之星Fotona 4和热玛吉哪个好
  5. Nginx具体配置(三)
  6. Party All the Time HDU - 4355(三分)
  7. java71-GUL边界布局管理器
  8. 2020-03-05
  9. 如何将iphone系统由正式版转为beta测试版
  10. python爬虫网易云音乐最热评论并分析_python爬虫入门 实战(三)---爬网易云音乐热门评论...