3.1-基于新大陆AI开发板实现离线ASR《智能机器人技术应用》_第1页
3.1-基于新大陆AI开发板实现离线ASR《智能机器人技术应用》_第2页
3.1-基于新大陆AI开发板实现离线ASR《智能机器人技术应用》_第3页
3.1-基于新大陆AI开发板实现离线ASR《智能机器人技术应用》_第4页
3.1-基于新大陆AI开发板实现离线ASR《智能机器人技术应用》_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目三基于语音识别实现语音控制机械臂创灵实验平台项目引导介绍

首先,什么是麦克风?什么是USB麦克风阵列?

普通麦克风是指单个的麦克风。或者说多个麦克风但是这些麦克风之间没有加入处理电路或芯片,那么这些也是普通麦克风。

麦克风阵列是多个麦克风按一定方式排列在一起,由于加入芯片,像昆虫的复眼能够精确定位,可以通过芯片,消除环境中各种干扰,比如回声,这就大大提高了在恶劣环境中的音色识别性能,也可以降低噪音,主要用在人工智能上,实现远距离识别有用信号,也就是提高清晰度。现版在远程会议,刑侦,庭审,录音笔上都有这种麦克风阵列。

麦克风阵列(ArrayMicrophone),是由2个以上数量的声学数字或模拟麦克风组成特定的阵列阵型,利用特定阵型的麦克风阵列技术可以实现更优质的拾音效果。在特定阵型的麦克风提供多声道音频数据到处理器进行DSP算法处理,可以实现优质的远场拾音、回声消除、降噪和声源定位等效果。以算法的理论上,麦克风阵列的麦克风数量与拾音效果成正比,目前现有的麦克风阵列技术普遍为2个麦克风和4个麦,随着处理器的性能不断加强,麦克风阵列的麦克风单元数量也在不断增多以便提供优质的拾音效果。项目引导介绍

下图是几种常见的麦克风:麦克风话筒项目引导介绍

下图是几种常见的麦克风:会议全向麦克风我们在生活中哪些地方有用到麦克风?项目引导案例如今现在的麦克风即可以扩大音量,也有的麦克风还可以搭配各种电子设备进行录音,录视频等功能,特别是在舞台上,做综艺节目,采访活动等等,在这些节目中我们都能够看到麦克风的身影,麦克风搭配着相机,摄像机等等一些摄影器材一起完成整个活动的录制过程。这些麦克风就像一个小螺丝一样紧紧的和自媒体这个行业连接起来,紧密相连。麦克风也可以算是自媒体行业中必不可少的一部分了。麦克风可以改变环境对音质的影响,改善音质效果等等。新发展起来的自媒体行业带动了整个麦克风市场。USB麦克风有哪些优点与缺点呢?项目引导案例优点:1.适用范围广:大多数USB麦克风都会配备有多种拾音模式,可以根据录制需求灵活调整拾音模式。2.自带监听功能:使用时可以根据声音反馈实时调整自己的录制状态,以达到最完美的录制效果。3.功能齐全:一些功能齐全的USB麦克风会配备增益调节、耳机音量调节、一键静音等功能。缺点:现如今市面上大多数同类产品与专业的XLR麦克风+声卡组合相比,在音质和专业性上都稍有欠缺。基于新大陆AI开发板实现离线ASR任务一职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一基于新大陆AI开发板实现离线ASR了解USB麦克风阵列;掌握re正则匹配和subprocess中shell执行;掌握语音识别关键字匹配;理解并使用新大陆AI开发板实现离线ASR,成功连接音频设备并进行音频识别。了解USB麦克风阵列;掌握re正则匹配和subprocess中shell执行。职业能力目标01实验目的实验内容职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一基于新大陆AI开发板实现离线ASR

此任务要求同学们了解USB麦克风阵列,掌握re正则匹配和subprocess中shell执行,掌握语音识别关键字匹配,理解并使用新大陆AI开发板实现离线ASR,成功连接音频设备并进行音频识别。在实验的过程中,能理解实现离线ASR的原理,将学习转化成应用。任务描述任务要求了解USB麦克风阵列,认识生活中常见的麦克风;掌握re正则匹配和subprocess中shell执行,能够导入相应的正则库以及正则函数使用;完成语音识别关键字匹配,能够正确匹配关键字。任务描述与要求02职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一基于新大陆AI开发板实现离线ASR任务分析思考一下在未来,USB麦克风能新增哪些用途,在我们学习了解完本章知识后,我们能否根据麦克风的原理去进行改良?根据自己的了解,要怎样去了解认识USB麦克风,可以促进自己进一步地学习?任务分析与计划03任务计划表项目名称创灵实验平台任务名称基于新大陆AI开发板实现离线ASR计划方式自主设计计划要求请用6个计划步骤来完整描述出如何完成本次任务序号任务计划1

2

3

4

5

6

通过上面的思考,你是否对本任务要完成的工作有所了解?让我们一起来制订完成本次任务的实施计划吧!任务分析与计划03职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一基于新大陆AI开发板实现离线ASR正则表达式204知识储备音频设备声卡序号1什么是声卡序列号?04

序列号也称作“机器码”,为一样物品,一般为电子产品的全球唯一标识码。常用于防伪。最大的特点就是唯一。序列号在信息技术大量运用、物联网初步成型的时期用于电子设备身份识别。为了识别的准确性,序列号都为全球唯一的号码。05任务实施正则表达式2音频设备声卡序号1304什么是正则表达式?

正则表达式,又称规则表达式,(RegularExpression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a到z之间的字母)和特殊字符(称为"元字符"),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。04思考一下,我们在过去学习代码的时候有用到正则表达式吗?什么是正则表达式?

许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开来的,后来在广泛运用于Scala、PHP、C#、Java、C++、Objective-c、Perl、Swift、VBScript、Javascript、Ruby以及Python等等。起源04正则表达式

正则表达式的“鼻祖”或许可一直追溯到科学家对人类神经系统工作原理的早期研究。美国新泽西州的WarrenMcCulloch和出生在美国底特律的WalterPitts这两位神经生理方面的科学家,研究出了一种用数学方式来描述神经网络的新方法,他们创造性地将神经系统中的神经元描述成了小而简单的自动控制元,从而作出了一项伟大的工作革新。

在1951年,一位名叫StephenKleene的数学科学家,他在WarrenMcCulloch和WalterPitts早期工作的基础之上,发表了一篇题目是《神经网事件的表示法》的论文,利用称之为正则集合的数学符号来描述此模型,引入了正则表达式的概念。正则表达式被作为用来描述其称之为“正则集的代数”的一种表达式,因而采用了“正则表达式”这个术语。起源04正则表达式

之后一段时间,人们发现可以将这一工作成果应用于其他方面。1968年,Unix之父KenThompson就把这一成果应用于计算搜索算法的一些早期研究。KenThompson将此符号系统引入编辑器QED,然后是Unix上的编辑器ed,并最终引入grep。JeffreyFriedl在其著作《MasteringRegularExpressions(2ndedition)》(中文版译作:精通正则表达式,已出到第三版)中对此作了进一步阐述讲解,如果你希望更多了解正则表达式理论和历史,推荐你看看这本书。

自此以后,正则表达式被广泛地应用到各种UNIX或类似于UNIX的工具中,如大家熟知的Perl。Perl的正则表达式源自于HenrySpencer编写的regex,之后已演化成了pcre(Perl兼容正则表达式PerlCompatibleRegularExpressions),pcre是一个由PhilipHazel开发的、为很多现代工具所使用的库。正则表达式的第一个实用应用程序即为Unix中的qed编辑器。正则表达式特点041.灵活性、逻辑性和功能性非常强;2.可以迅速地用极简单的方式达到字符串的复杂控制。3.对于刚接触的人来说,比较晦涩难懂。4.由于正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用,小到著名编辑器EditPlus,大到MicrosoftWord、VisualStudio等大型编辑器,都可以使用正则表达式来处理文本内容。正则表达式思考一下,你可以用正则表达式在哪些情境中呢?正则表达式的符号04

正则表达式由一些普通字符和一些元字符(metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义。

在最简单的情况下,一个正则表达式看上去就是一个普通的查找串。例如,正则表达式"testing"中没有包含任何元字符,它可以匹配"testing"和"testing123"等字符串,但是不能匹配"Testing"。要想真正的用好正则表达式,正确的理解元字符是最重要的事情。正则表达式的符号04大家在使用时可以根据需要去进行查表使用。职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一基于新大陆AI开发板实现离线ASR05任务实施网口通信判断2实验预览、完成实验准备1语音识别3基于新大陆AI开发板实现离线ASR任务一实验预览(详细实验请参考第二章中任务一部分)我们该去如何完成实验呢?

步骤一:了解函数组成、阅读实验:基于新大陆AI开发板实现离线ASR任务一实验预览(详细实验请参考第二章中任务一部分)我们该去如何完成实验呢?

步骤一:了解函数组成、阅读实验:基于新大陆AI开发板实现离线ASR任务一实验预览(详细实验请参考第二章中任务一部分)我们该去如何完成实验呢?

步骤二:了解主函数组成:if__name__=="__main__":speech=SpeechSolve()#创建对象whileTrue:try:ifspeech.get_device_id():result=speech.recognition()#语音识别ifresult=='点头':print("识别成功:点头")passelifresult=='左转':print("识别成功:左转")pass

elifresult=='右转':print("识别成功:右转")passelse:print('无法识别')else:print('无音频设备')time.sleep(2)exceptExceptionase:print(e)

基于新大陆AI开发板实现离线ASR任务一实验准备(基于新大陆AI开发板实现离线ASR)步骤一:接下来我们来进行实验前的准备?在开始实验前我们要了解什么是离线ASR:

ASR:自动语音识别技术(AutomaticSpeechRecognition)是一种将人的语音转换为文本的技术。步骤二:了解USB麦克风阵列:基于新大陆AI开发板实现离线ASR任务一实验准备(基于新大陆AI开发板实现离线ASR)步骤三:导入必要的包和模块:【re】:提供了一个正则表达式引擎接口,它允许我们将正则表达式编译成模式对象,然后通过这些模式对象执行模式匹配搜索和字符串分割、子串替换等操作。`re`模块为这些操作分别提供了模块级别的函数以及相关类的封装。【subprocess】:允许你去创建一个新的进程让其执行另外的程序,并与它进行通信,获取标准的输入、标准输出、标准错误以及返回码等。importreimportsubprocessimporttime基于新大陆AI开发板实现离线ASR任务一实验准备(基于新大陆AI开发板实现离线ASR)步骤三:获取音频设备声卡序号:1.查询实际声卡序号:【aplay】是一个ALSA的声卡命令行soundfile录音机的驱动程序;【aplay-l】用于显示实际声卡序号。【subprocess.getstatusoutput(cmd)】:在shell中执行cmd命令。返回值:返回在shell中执行cmd产生的(exitcode,output)。动手练习11.在<1>处,定义变量【dev_cmd】,用于存放查询声卡序列的cmd命令【aplay-l】的字符串。2.在<2>处,使用【subprocess.getstatusoutput()】函数,执行cmd命令【dev_cmd】变量,并将返回值赋值给变量res_content。#aplay是一个ALSA的声卡命令行soundfile录音机的驱动程序;aplay-l:显示实际声卡序号<1><2>#执行cmd命令,返回一个元组基于新大陆AI开发板实现离线ASR任务一实验准备(基于新大陆AI开发板实现离线ASR)动手练习11.在<1>处,定义变量【dev_cmd】,用于存放查询声卡序列的cmd命令【aplay-l】的字符串。2.在<2>处,使用【subprocess.getstatusoutput()】函数,执行cmd命令【dev_cmd】变量,并将返回值赋值给变量res_content。#aplay是一个ALSA的声卡命令行soundfile录音机的驱动程序;aplay-l:显示实际声卡序号<1><2>#执行cmd命令,返回一个元组填写完成后执行以下代码,查看是否能够得到声卡的返回值,输出结果类似如下图:print("res_content[0]:",res_content[0])print("res_content[1]:",res_content[1])代码注释:上面代码执行结果保存在变量【res_content】中:1.【res_content[0]】为0表示程序执行通过,非零表示执行失败2.【res_content[1]】执行命令返回的结果基于新大陆AI开发板实现离线ASR任务一实验准备(基于新大陆AI开发板实现离线ASR)步骤三:获取音频设备声卡序号:1.编译正则表达式:pile(pattern[,flag])用于函数用于编译正则表达式,生成一个Pattern对象。【参数解释】:pattern是一个字符串形式的正则表达式flag是一个可选参数,表示匹配模式,比如忽略大小写,多行模式等。正则表达式的一些匹配规则和例子如下:(请输入链接搜索)/regexp/regexp-syntax.html#编译正则表达式,生成一个Pattern对象pattern=pile(r'.*card(.*?):.*,device(.*?):.*')基于新大陆AI开发板实现离线ASR任务一实验准备(基于新大陆AI开发板实现离线ASR)步骤三:获取音频设备声卡序号:如果查询音频设备成功,且有返回值,则从【res_content[1]】查找所有满足【pattern】的子串,并以列表的形式返回查找的结果,如果未找到则返回一个空列表。进行正则匹配获取音频设备序号:ifres_content[0]==0andres_content[1]!='':result=pattern.findall(res_content[1])dev_id=resultprint(dev_id)若【USBAudio】音频设备对应的序号【card】返回值为【0】,即【('3','0')】表示音频设备成功挂载在开发板上如下图所示:05任务实施213实验预览、完成实验准备网口通信判断语音识别

接下来我们要介绍网口2(eth1)通信判断,我们要怎么去判断网口2是否能够进行通信呢?网口通信判断05步骤一:ip查询

由于开发板有两个以太网卡,又因为语音识别程序绑定了第一个网口,如果使用第二个网口将会出现问题,所以对第二个网口进行检查。若可以与公网进行通信,应禁用掉第二网口。首先需要获取开发板的ip地址,命令如下:【ipaddrshow'eth1'|grep'inet'|awk'{print$2}'】。其中:【ipaddrshow】:命令用于给出网口的IP信息,如图所示:

接下来我们要介绍网口2(eth1)通信判断,我们要怎么去判断网口2是否能够进行通信呢?网口通信判断05步骤一:ip查询

由于开发板有两个以太网卡,又因为语音识别程序绑定了第一个网口,如果使用第二个网口将会出现问题,所以对第二个网口进行检查。若可以与公网进行通信,应禁用掉第二网口。首先需要获取开发板的ip地址,命令如下:【ipaddrshow'eth1'|grep'inet'|awk'{print$2}'】。其中:【grep】:命令用于查找文件里符合条件的字符串,如图所示:(匹配有inet字符串)

接下来我们要介绍网口2(eth1)通信判断,我们要怎么去判断网口2是否能够进行通信呢?网口通信判断05步骤一:ip查询

由于开发板有两个以太网卡,又因为语音识别程序绑定了第一个网口,如果使用第二个网口将会出现问题,所以对第二个网口进行检查。若可以与公网进行通信,应禁用掉第二网口。首先需要获取开发板的ip地址,命令如下:【ipaddrshow'eth1'|grep'inet'|awk'{print$2}'】。其中:【awk】:是一种处理文本文件的语言,是一个强大的文本分析工具,如图所示:(选取并输出第二字段的数据)

接下来我们要介绍网口2(eth1)通信判断,我们要怎么去判断网口2是否能够进行通信呢?网口通信判断05步骤一:ip查询

由于开发板有两个以太网卡,又因为语音识别程序绑定了第一个网口,如果使用第二个网口将会出现问题,所以对第二个网口进行检查。若可以与公网进行通信,应禁用掉第二网口。首先需要获取开发板的ip地址,命令如下:【ipaddrshow'eth1'|grep'inet'|awk'{print$2}'】。其中:若无ip,则没有返回值,也表示无网络,则如图所示:cmd_ip_eth1="ipaddrshow'eth0'|grep'inet'|awk'{print$2}'"eth1_content=subprocess.getstatusoutput(cmd_ip_eth1)#执行cmd命令,返回一个元组eth1_content网口通信判断051.仿照上述查询网口1的方式,对网口2(eth1)进行ip查询。#代码补充动手练习2填写完成后执行以下代码,查看网口2的ip,输出结果为【(0,'')】,无ip输出,则表示填写正确。eth1_content网口通信判断05步骤二:检测网络畅通接着,查询网络是否畅通:主要命令为【"ping-Ieth1-w1|grep'packetloss'"】命令执行完成后结果如下:若网络通畅,则0%packetloss,如图所示:ifeth1_content[0]==0andeth1_content[1]!='':#ping命令检测网络是否通畅ping_ip_cmd="ping-Ieth1-w1|grep'packetloss'"ping_content=subprocess.getstatusoutput(ping_ip_cmd)#执行cmd命令,返回一个元组ifping_content[0]==0andping_content[1]!='':if'100%packetloss'inping_content[1]:print("False_3")else:print("True")else:print("False_2")else:print("False_1")05任务实施213实验预览、完成实验准备网口通信判断语音识别语音识别实验教学分析我们要怎么设置语音识别?我们要怎么去配置语音识别的路径?语音识别在生活中有哪些运用?语音识别05通过上面的思考,你是否对本任务要完成的任务有所了解?让我们一起来学习如何使用语音识别吧!语音识别05实验准备:语音识别05步骤一:设置语音识别路径BASE_PATH='/usr/local'#语音目录#语音识别路径voice_recognition=BASE_PATH+'/speech/recognition/bin/'实验准备:语音识别05步骤二:开始语音识别首先定义变量【recognition_cmd】用于存放shell界面执行的cmd命令,主要命令如下:【'cd'+voice_recognition+'&&./asr_offline_record_sample'】命令表示:需要进入到上述定义的变量【voice_recognition】中的目录,执行语音识别文件。1.shell命令——条件判断(&&) -&&:用来执行条件成立后执行的命令2.shell命令——【./】执行

-如果使用【./】执行,可以理解为程序运行在一个全新的shell中,不继承当前shell的环境变量的值,同时若在程序中改变了当前shell中的环境变量(不使用 export),则当前shell的环境变量值不变。

-【./】只能用于拥有执行权限的文件注意:若一次识别不成功,可重新运行当前步骤代码,重新开始语音识别。语音识别051.在<1>处,定义cmd命令进入语音识别目录【'cd'+voice_recognition】,执行成功后使用【&&】执行语音识别脚本【./asr_offline_record_sample】,赋值给变量【recognition_cmd】用于后续执行cmd命令。2.在<2>处,使用【subprocess.getstatusoutput()】函数,执行cmd命令【recognition_cmd】变量,并将返回值赋值给变量【res_content】。#&&:用来执行条件成立后执行的命令<1>#请根据题目内容补充print('正在监听。。。')<2>#执行cmd命令,返回一个元组动手练习3填写完成后执行以下代码,查看是否是否有【0】输出,输出结果如下图:语音识别05【pile(pattern[,flag])】函数用于编译正则表达式,生成一个Pattern对象。print(res_content[0])print(res_content[1])动手练习3#编译正则表达式,生成一个Pattern对象pattern=pile(r'<rawtext>(.*?)</rawtext>')如果【res_content[0]】音频识别成功,且Result在返回值中,则从【res_content[1]】查找所有满足【pattern】的子串,并以列表的形式返回查找的结果。#返回识别结果result[0]ifres_content[0]==0and'Result'inres_content[1]:#从res_content[1]查找所有满足pattern的子串,并以列表的形式返回查找的结果,如果未找到则返回一个空列表。result=pattern.findall(res_content[1])print(result)ifresult:result[0]语音识别关键字配置:语音识别05科大讯飞命令词识别BNF语法(./call.bnf)简单的说,BNF文件分为五个部分:文档标示头(不需要进行更改);语法名称;槽声明;主规则(可引用子规则);文档主体(具体的定义槽、引用规则);第一部分文档标示头:它定义了文档的版本和编码格式,注意文档的内容必须和这里声明的编码格式统一,如图所示:第二部分语法名称:一个文件只能有一个语法名称,作为这个BNF文件的一个识别名称,如图所示:语音识别关键字配置:语音识别05科大讯飞命令词识别BNF语法(./call.bnf)简单的说,BNF文件分为五个部分:文档标示头(不需要进行更改);语法名称;槽声明;主规则(可引用子规则);文档主体(具体的定义槽、引用规则);第三部分槽声明:就是一个个坑,理解为活字印刷时的那些小坑,里面必须填入各种文字才行,非常方便动态修改识别命令。声明完槽后在文档底部的底部部分具体去定义每个声明过的槽的具体内容。这样语音识别引擎就会根据槽的内容去动态匹配你的指令。如图所示:语音识别关键字配置:语音识别05科大讯飞命令词识别BNF语法(./call.bnf)简单的说,BNF文件分为五个部分:文档标示头(不需要进行更改);语法名称;槽声明;主规则(可引用子规则);文档主体(具体的定义槽、引用规则);第四部分主规则(可引用子规则):首先声明一个主规则名称,如图所示:然后为这个规则定义详细的识别规则,注意名称要与声明的主规则名称一样。冒号后面都是一些引用规则,引用规则由一系列槽组成。语音识别关键字配置:语音识别05科大讯飞命令词识别BNF语法(./call.bnf)简单的说,BNF文件分为五个部

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论