《嵌入式人工智能技术应用》课件 6.1-语音合成与播报_第1页
《嵌入式人工智能技术应用》课件 6.1-语音合成与播报_第2页
《嵌入式人工智能技术应用》课件 6.1-语音合成与播报_第3页
《嵌入式人工智能技术应用》课件 6.1-语音合成与播报_第4页
《嵌入式人工智能技术应用》课件 6.1-语音合成与播报_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

项目六基于语音识别实现智能家居控制边缘智能计算应用项目引导案例智能家居(smarthome,homeautomation)是以住宅为平台,利用综合布线技术、网络通信技术、安全防范技术、自动控制技术、音视频技术将家居生活有关的设施集成,构建高效的住宅设施与家庭日程事务的管理系统,提升家居安全性、便利性、舒适性、艺术性,并实现环保节能的居住环境。换句话说,智能家居并不是一个单一的产品,而是通过技术手段将家中所有的产品连接成一个有机的系统,主人可随时随地控制该系统。项目引导案例

本项目将带着大家体验基于语音识别实现智能家居控制,主要任务有:语音合成与播报语音识别和语音控制任务一语音合成与播报边缘智能计算应用职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一语音合成与播报了解语言合成的相关知识;了解ALSA高级Linux音频架构。掌握音频接口的连接;掌握音频接口的基本控制;掌握语音关键词的播报。职业能力目标01知识目标技能目标职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一语音合成与播报

此任务的主要内容是查看并选择合适的音频设备,发送相应的控制指令,完成语音命令词识别、合成和播报的功能。任务描述任务要求使用命令查看系统音频设备信息;测试语音合成接口;测试语音播报接口;完成语音合成并播报的应用。任务描述与要求02职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一语音合成与播报任务分析如何提取我们所需要的语音?怎样将我们得到的语音进行合成?任务分析与计划03任务计划表项目名称基于语音识别实现智能家居控制任务名称语音合成与播报计划方式自主设计计划要求请用8个计划步骤来完整描述出如何完成本次任务序号任务计划1

2

3

45678通过上面的思考,你是否对本任务要完成的工作有所了解?让我们一起来制订完成本次任务的实施计划吧!任务分析与计划03职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一语音合成与播报ALSA204知识储备语音合成1subprocess模块简介3

什么是语音合成?语音合成就是让计算机像人那样讲话。人们用语言进行交流时,用声音来表达自己的意向、情感。例如:如某人问你:你愿意和我一起去看电影吗?你的回答可能是:“是的,我很高兴和你一起去看电影”(肯定,高兴)“抱歉,我不能和你一起看电影,因为我要去开会”(无可奈何)“不去,还是你自己去看吧”(否定)这三句话表达了不同的意向和情感,计算机也该像人那样来回答。语音合成是一门跨学科的前沿技术,涉及到下列相关研究领域:自然语言理解、语言学、语音学、信号处理、心理学、声学...它将上述领域的研究成果结合在一起,使计算机具备说话的能力。04语音合成什么是语音合成语音合成技术的研究已有两百多年的历史,但真正具有实用意义的近代语音合成技术是随着计算机技术和数字信号处理技术的发展而发展起来的。主要是让计算机能够产生高清晰度、高自然度的连续语音。在语音合成技术的发展过程中,早期的研究主要是采用参数合成方法,后来随着计算机技术的发展又出现了波形拼接的合成方法。1939年Voder第一个电子合成器。1987年Klatt共振峰合成@蓝光行云。04语音合成语音合成历史

语音合成技术可以大大改善人机交互环境。计算机反馈信息的方式是屏幕显示。这种单调的信息输出方式给用户带来许多不便,特别是长时间地注视显示屏使人疲劳,降低人获取信息和理解信息的能力。网络环境的输出设备多种多样:这种枯燥单一的交互方式影响了计算机的应用。计算机语音输出能提供声文并茂的信息表示方式,可以改变人机交互“默默无闻”的状况,为计算机的普及应用创造更好的条件。将“能看到”、“看不到”的信息变成“可听”的信息。将“非即时获得的信息”变成“即时可听”的信息。04语音合成语音合成的研究意义音频在各行各业都有广泛使用,主要包括音频播放,录音,以及现在广泛用在了语音识别等人工智能方向,我们越来越希望人工智能(AI)解决方案能够接受语音命令并提供语音响应。04语音合成越来越多的家居和汽车系统可以通过讲话来进行控制-发出诸如“关灯”之类的命令,以及希望获得对“今天会下雨吗”之类的问题的口头回答。04语音合成为了实现这种交互,AI系统必须支持两种能力:语音识别-检测和解释语音输入的能力。语音合成-生成语音输出的能力。04语音合成语音合成和语音识别技术是实现人机语音通信,建立一个有听和讲能力的口语系统所必需的两项关键技术。使电脑具有类似于人一样的说话能力,是当今时代信息产业的重要竞争市场。04语音合成和语音识别相比,语音合成的技术相对说来要成熟一些,并已开始向产业化方向成功迈进,大规模应用指日可待。04语音合成语音合成是指将文字转换为声音输出的过程。语音合成是通过机械的、电子的方法产生人造声音的技术。它将计算机自己产生的或外部输入的文字信息转变为人类听得懂的、流利的口语进行输出的技术。04语音合成我们所说的“让机器像人一样开口说话”与传统的声音回放设备(系统)有着本质的区别。传统的声音回放设备(系统),如磁带录音机,是通过预先录制声音然后回放来实现“让机器说话”的。这种方式无论是在内容、存储、传输或者方便性、及时性等方面都存在很大的限制。04语音合成而通过计算机语音合成则可以在任何时候将任意文本转换成具有高自然度的语音,从而真正实现让机器“像人一样开口说话”。04语音合成语音合成在很多方面与语音识别相反。它涉及到让数据发出声音,通常是通过将文本转换为语音来实现。语音合成解决方案通常需要以下信息:要朗读的文本。用于读出语音的声音。04语音合成若要合成语音,系统通常会对文本进行词汇切分,将其分解为单独的字词,并为每个字词指定语声。

接着将语音听录分解为韵律单元(如短语、分句或句子),以创建将被转换为音频格式的音素。

然后通过加上声音(这将确定音调和音色等参数)和生成可以输出到扬声器或写入文件的音频波形,将这些音素合成音频。04语音合成你可以将语音合成的输出用于多种目的,包括:生成对用户输入的语音回答。为电话系统创建语音菜单。在免动手的情形下朗读电子邮件或短信。在公共场所(如火车站或机场)广播通知。04语音合成ALSA204知识储备语音合成1subprocess模块简介3ALSA04

ALSA(AdvancedLinuxSoundArchitecture)是一个软件框架,也是Linux内核的一部分,ALSA为声卡设备驱动程序提供应用程序编程接口(API)。ALSA04ALSA项目的目标是声卡硬件的自动配置和系统中多音频设备的调度优化。ALSA发布在GPL-2.0或更高版本和LGPL-2.1或更高版本。除Linux内核内的软件框架外,ALSA项目还提供了如alsactl、amixer、arecord/aplay、alsamixer等命令行实用工具。ALSA04aplay工具介绍aplay是ALSA声卡驱动程序的命令行音频文件播放器。它支持多种文件格式和多种设备的多种声卡。对于支持的音频格式文件,可以从声音文件头部中自动确定采样率、位深度等。ALSA04arecord命令简要说明:arecord命令主要用于声音录制,通过arecord-h命令,可以查看具体的使用帮助信息。ALSA04amixer命令简要说明:alsamixer是Linux音频架构ALSA中的Alsa工具的其中一个,用于配置音频的各个参数。alsamixer是基于文本下的图形界面的,可以通过键盘的上下键,左右键等,很方便地设置需要的音量,开关某个switch(开关)等等操作。amixer,是alsamixer的文本模式,即命令行模式,需要用amixer命令的形式去配置你的声卡的各个选项。204知识储备13ALSA语音合成subprocess模块简介subprocess模块简介04subprocess是Python新增的一个模块,它允许生成新的进程,连接到它们的input/output/error管道。并获取它们的返回(状态)码。subprocess模块简介04运行python的时候,我们都是在创建并运行一个进程。像Linux进程那样,一个进程可以fork一个子进程,并让这个子进程exec另外一个程序。在Python中,我们通过标准库中的subprocess包来fork一个子进程,并运行一个外部的程序。subprocess模块简介04subprocess包中定义有数个创建子进程的函数,这些函数分别以不同的方式创建子进程,所以我们可以根据需要来从中选取一个使用。职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一语音合成与播报205任务实施13获取音频设备ID导入依赖库语音合成与播报导入依赖库05importreimportsubprocessre:re模块使Python语言拥有全部的正则表达式功能;subprocess:subprocess模块允许用户启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。205任务实施13获取音频设备ID导入依赖库语音合成与播报42使用aplay工具查看系统音频设备信息1使用Shell命令查看系统音频设备信息3使用subprocess模块在Python中获取命令行输出信息使用re模块提取声卡设备ID5将获取音频设备ID的代码封装为函数获取音频设备ID05获取音频设备ID获取音频设备ID05!cat/proc/asound/cards1.使用Shell命令查看系统音频设备信息在Linux系统中可以使用cat/proc/asound/cards命令查看系统中的音频设备,如下所示:获取音频设备ID05!aplay-l2.使用aplay工具查看系统音频设备信息使用aplay工具查看系统音频设备信息的命令为cat/proc/asound/cards获取音频设备ID05res_content=subprocess.getstatusoutput('aplay-l')3.使用subprocess模块在Python中获取命令行输出信息subprocess模块允许你生成新的进程,连接它们的输入、输出、错误管道,并且获取它们的返回码。subprocess.getstatusoutput(cmd):返回在shell中执行cmd产生的(exitcode,output)。末尾的一个换行符会从输出中被去除。命令的退出码可被解读为子进程的返回码。例如:此函数现在返回(exitcode,output)而不是像Python3.3.3及更早的版本那样返回(status,output)。exitcode的值与returncode相同。获取音频设备ID05ifres_content[0]==0andres_content[1]!='':#用于查找设备ID的正则表达式

pattern=r'.*card(.*?):.*,device(.*?):USBAudio.*'#查找USB音频设备

result=re.findall(pattern,res_content[1])#获取得到的首个USB声卡的ID信息

dev_id=result[0]#打印CardID与DeviceIDprint(dev_id)else:print("无法获取语音设备id,请检查设备!!!")4.使用re模块提取声卡设备IDre.findall(pattern,string,flags=0):对string返回一个不重复的pattern的匹配列表,string从左到右进行扫描,匹配按找到的顺序返回。参数说明:pattern:正则表达式;string:搜索的是那些字符串。>>>text="Hewascarefullydisguisedbutcapturedquicklybypolice.">>>re.findall(r"\w+ly",text)['carefully','quickly']获取音频设备ID05defget_device_id():res_content=subprocess.getstatusoutput("aplay-l")#使用'aplay-l'查看系统音频设备信息#若获取到音频设备信息

ifres_content[0]==0andres_content[1]!='':pattern=r'.*card(.*?):.*,device(.*?):USBAudio.*’#用于查找设备ID的正则表达式

result=re.findall(pattern,res_content[1])#查找USB音频设备#获取得到的USB声卡的ID信息

foriinrange(len(result)):dev_id=result[i]print(dev_id)#打印CardID与DeviceIDelse:print("无法获取语音设备id,请检查设备!!!")returnreturnresult[0]get_device_id()#获取设备ID功能测试5.将获取音频设备ID的代码封装为函数subprocess.getstatusoutput(cmd):返回在shell中执行cmd产生的(exitcode,output)。参数说明:cmd:shell命令,以字符串形式输入。205任务实施13获取音频设备ID导入依赖库语音合成与播报42测试语音播报1测试语音合成接口3语音合成并播报将实现语音播报的代码封装为函数语音合成与播报05语音合成与播报获取音频设备ID05!cd./speech/broadcast/bin/&&./tts_offline_sample"小陆,你好"1.测试语音合成接口使用cd命令进入./speech/recognition/bin/目录下,运行tts_offline_sample(传入的文本为“小陆,你好”),测试语音合成接口是否可用。!aplay./speech/broadcast/bin/tts_sample.wav2.测试语音播报(1)使用aplay工具直接播放。(2)使用aplay工具并指定音频设备ID播放。get_device_id()#获取USB声卡的设备ID获取音频设备ID05text="小陆,你好"print('语音合成开始。。。')#调用语音合成接口的指令tts_cmd='cd./speech/broadcast/bin/'+'&&./tts_offline_sample{}'.format(text)res_content=subprocess.getstatusoutput(tts_cmd)#语音合并并获取返回值#如果合并成功ifres_content[0]==0and'合并成功'inres_content[1]:print('语音合并成功,开始播报。。。')#使用aplay播放语音

broadcast_cmd='aplay./speech/broadcast/bin/tts_sample.wav'subprocess.Popen(broadcast_cmd,shell=True)else:print('语音合并失败')3.测试语音合成接口subprocess.getstatusoutput(cmd):返回在shell中执行cmd产生的(exitcode,output)。参数说明:cmd:shell命令,以字符串形式输入。subprocess.Popen(args,shell=False):将Shell命令赋值给args即可在Python中运行Shell命令。参数说明:args:可以是一个字符串,可以是一个包含程序参数的列表。要执行的程序一般就是这个列表的第一项,或者是字符串本身;shell:默认False,在linux下,当shell=True时,如果arg是个字符串,就使用shell来解释执行这个字符串。如果args是个列表,则第一项被视为命令,其余的都视为是给shell本身的参数。获取音频设备ID05defbroadcast(text):print('语音合成开始。。。')#调用语音合成接口的指令

tts_cmd='cd./speech/broadcast/bin/'+'&&./tts_offline_sample{}'.format(text)#语音合并并获取返回值

res_content=subprocess.getstatusoutput(tts_cmd)#如果合并成功

ifres_content[0]==0and'合并成功'inres_content[1]:print('语音合并成功,开始播报。。。')#使用aplay播放语音

broadcast_cmd='aplay./speech/broadcast/bin/tts_sample.wav'subprocess.Popen(broadcast_cmd,shell=True)else:print('语音合并失败')#语音播报功能测试broadcast("小陆,你好!")4.将实现语音播报的代码封装为函数职业能

温馨提示

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

评论

0/150

提交评论