刘梅 山东省淄博第一中学
语音交互指的是人与计算机设备通过语音进行信息交流的过程,其中两个关键过程包括STT(语音转文字)即语音识别、TTS(文本转语音)即语音合成。本项目带领学生通过完整的模型训练流程实现对训练指令的语音识别,并结合Arduino板实现模型的本地部署,使语音小助手不仅具有交流对话的功能,更能根据训练好的指令完成一系列操作。
本项目的主题是“看见”你的声音,那么如何使声音能够被“看见”呢?在本项目中主要体现在两个方面:一是在数据集处理的过程中,通过将音频信号转换成波形图与音谱图,让学生实现用看的方式直观理解音频信号在图像维度上的波形特征,并通过将音频信号转成音谱图,使学生可以利用处理图像的CNN卷积神经网络去处理音频方面的问题,让计算机实现用“看”的方式去处理“听”的问题。二是在模型部署阶段,除了可以使语音对话机器人实现聊天功能外,还能根据指令完成一系列可被看到的操作:开关灯、开关风扇、开关窗户、查询室内温湿度并反馈等。
天猫精灵、小爱音箱等设备都具备了对话交流、完成各种指令操作等功能,其核心原理就是语音交互。那么,语音交互是如何实现的呢?除了对话交流外还能设计哪些功能呢?本项目将对这些问题进行探索,并采集自己的指令音频打造一个专属私人语音小助手。
该项目分四部分,共5课时:自主采集音频指令数据(课前)、处理音频数据为语谱图(1课时);模型训练(1课时);模型转换(1课时);模型部署(2课时)。
因采集音频需要安静的环境,该阶段让学生在课前完成。学生2人一组,先利用matplotlib、librosa库对采集的音频信号进行预处理并批量转成语谱图;然后搭建CNN卷积神经网络模型,对处理好的音频数据进行模型训练;接着将训练出的模型封装,生成onnx模型,实现本地调用;最后,利用Arduino板、温湿度传感器、LED小灯、风扇传感器等完成硬件部署,实现语音小助手的制作。
(1)音频文件采集
学生根据自己的项目需求采集指令音频。以本项目语音小助手为例,采集7种指令语句,每种指令150条,其中130条用作训练集,20条用于验证集。学生结合pyaudio库,运行图1所示的代码进行音频录制。录制时只需要设置好声道数、比特率、录制时间等即可。
图1
同时,教师要提前配置好机房环境,为学生准备好半成品模板代码,鼓励学生积累代码范例并上传至自己的学习平台。例如,pyaudio调用麦克风采集音频文件、opencv采集图像文件,学生将这些经常用到的代码,形成固定的代码模块,这样在下一个项目中使用时,只要根据项目主题更改逻辑语句或简单参数即可,进而提高课堂效率。
(2)音频文件预处理
任意选择两条不同的语句,利用matplotlib、librosa库绘制波形图与音谱图,图2为“小梅关灯”与“屋里好黑”的音频图与语谱图,学生通过对比,可以直观理解两条语音指令在图像维度上的特征差异。然后将录制好的音频文件批量生成音频谱图,为后续模型训练做好准备。
图2
利用语音频谱图进行模型训练有如下优势:①有利于本地机房环境下学生进行模型训练,解决了机房环境下算力不足的问题。②用处理图像的神经网络模型解决音频问题,大大提高了所生成模型对音频文件识别的准确率。本项目基于pytorch搭建CNN卷积神经网络,模型预测阶段识别准确率在98%左右。
(3)批量生成语谱图
利用librosa库,将音频信息批量转化为语谱图,核心代码如下页图3所示。
图3
CNN卷积网络在计算机视觉领域发挥了重要的作用,笔者借助某平台搭建了卷积神经网络,对生成的语音谱图进行模型训练,核心代码如下页图4所示。
图4
onnx模型是一种广泛使用的模型转换文件格式,将训练好的模型文件导出并转换为onnx模型,这样便可以结合智能硬件,在本地对训练出的模型进行部署。
在模型部署环节,教师带领学生实现两大功能:一是能“听”会“说”,即传统意义上的语音交互功能,通过在代码中接入图灵机器人平台API,实现与小助手对话交流;二是能“听”会“做”,即利用Arduino,结合LED小灯、风扇模块、舵机、温湿度传感器等智能硬件,让小助手根据语音指令完成包括开关灯在内的一系列操作。
环节一:能“听”会“说”
在这一环节,教师使用识别出的指令,关联图灵平台API,与图灵机器人进行对话,并将返回的文字对话结果利用pyttsx3模块转换成语音进行播报,实现与小助手对话的功能。学生两人一组在图灵机器人平台注册账号,创建一个自己的聊天机器人,记录下Apikey,这样便可以在项目中实现与小机器人的对话了。接着,利用训练好的语句进行测试,如“你的名字是什么”,机器人反馈结果“我就是人见人爱花见花开的刘小梅呀”。但图灵平台返回的是文字内容,还需要利用pyttsx3模块,将返回得到的结果转化为语音形式,这一过程又叫做语音合成。核心代码如图5所示。
图5
环节二:能“听”会“做”
作品只能进行对话交流显然是不够的,“小梅同学”还要具备其他功能,完成更多的任务,如“‘屋里好黑呀’:LED灯亮起”“‘小梅关灯’:LED灯关闭”“‘天气真热’:风扇转动”等。以“小梅查询温湿度”为例,核心代码如图6所示,作品如图7所示。
图6
图7