让虚谷号陪我“吟诗作对”
舒春平 谢作如
聊天机器人是人工智能的一个重要应用模式,苹果手机中的Siri、Win 10中的小娜和百度的小度,还有小爱音箱和天猫精灵等,都是被大家熟知的聊天机器人。这些机器人不仅可以聊天,还可以帮用户做很多事情,如查天气预报、设置闹钟,甚至还可以在线购物。
看多了功能强大的商业聊天机器人,难免有些审美疲劳。如果设计一款仅仅针对某个专业领域的聊天机器人,可能会吸引特定用户的眼球。根据观看央视节目《中国诗词大会》激发的灵感,笔者萌发出一个想法——做一个可以“吟诗作对”的机器人(用户读上一句,机器人对出下一句)。
原理分析
从信息系统的角度看,聊天机器人的“听”和“说”仅仅是信息的输入和输出,核心功能在于聊天的内容如何体现“智能”。但是对笔者想做的这款机器人而言,难点反而不是聊天内容的处理,而是语音识别和语音合成。因为“吟诗作对”的定位,可以确定这个机器人要做的仅仅是古诗词方面的一问一答,问题和答案都是固定的,只要提供足够大的诗词库即可。
聊天机器人的核心硬件,笔者选择了虚谷号。虚谷号是一块运行Linux系统的迷你电脑,预装了Python3.5。虽然根据虚谷号的当前算力,在本地处理语音还有些“吃力”,但是借助于百度AI开放平台,或者腾讯AI开放平台,只要连上网络就能识别语音和合成语音。这个“吟诗作对”机器人的系统流程如图1所示,虚谷号仅仅作为一个采集語音和播放语音的智能终端,语音处理工作全部在云端完成。这种做法和现有的聊天机器人在工作原理上是一致的,如果离开网络,就不能对话了。
原型设计
如果不考虑设计人形的结构,这个聊天机器人的组成并不复杂。核心模块清单如下:①虚谷号*1;②USB声卡*1;③麦克风*1;④小音箱*1。
虚谷号支持绝大多数免驱的USB声卡,即插即用。当然,也可以选择自带声卡的小音箱(如上页图2)。常见的摄像头大都集成麦克风(上页如图3),也能够使用。考虑到常见的聊天机器人运用的是“语音唤醒”技术,而当前虚谷号的固件还没有集成这一功能,所以需要安装几个必要的库。此外,笔者选择了用“按下按钮”的方式与机器人交互,类似唤醒Siri的方式(要按下手机的电源键),因而,还需要一块Arduino扩展板(如图4)和普通按钮传感器(如图5),这在创客空间里面是很常见的。
编程控制
给虚谷号编程的最好方式是通过Wi-Fi,即无线模式。虚谷号内置了Jupyter,通过U盘方式正确设置Wi-Fi信息后,就会自动生成快捷方式,打开浏览器即可编程。访问“vvBoardBook”文件夹,将看到很多范例,其中就有GPIO、百度AI和语音处理方面的笔记。核心代码如图6所示。
有了前面的基本库和函数,下面的Python代码编写(如图7)就比较容易了。首先是添加诗词库。限于篇幅,笔者用一个列表“shici”来存储诗句。
接下来是主体程序(如下页图8),在这段代码中,按钮传感器接在D4口,按下后虚谷号开始说提示语“请开始背诵古诗”,当用户说“床前明月光”,虚谷号如果正确识别,将对出下一句“疑是地上霜”,即用户读前一句(奇数),机器对出下一句(偶数)。
功能测试
完成好“吟诗作对”机器人后(如下页图9),笔者迎来了温州中学的对外公开课,课题为“初识人工智能”。在这节公开课中,笔者演示了这一机器人的基本功能,很好地激发了学生的学习兴趣。学生还尝试修改Python代码,以实现更多的功能。事实证明,只要网络够快,对话过程流畅,几乎不会有“延时”的情况。
在课堂上,学生提出了一些新的想法,如:设计成“飞花令”机器人,让诗词对话更加好玩;设计成迎宾机器人,向来宾介绍学校的校训和历史;设计成“识字”机器人,学生只需将不认识的字对准摄像头,机器人就会自动读取并说出这个字的读音和意思……
每一次打开Jupyter再运行代码的确有些烦琐,其实虚谷号提供了多种启动Python代码的方式,最简单的做法是:将.py文件复制到U盘的Python文件夹,命名为“main.py”,然后按下RST键代码即可运行。如果虚谷号采用电源口供电,那么不用按键,也会自动启动。
结束语
随着一些知名的AI框架不断开源,人工智能的技术门槛也在不断下降。在虚谷号上不仅可以采用调用网络API的形式,利用云端服务器来处理信息,还可以安装TensorFlow之类的机器学习框架,学习机器学习、神经网络方面的知识。
本文涉及到的代码已经以.ipynb文件的形式放在虚谷号的最新版固件中,采用CC协议开源,期望有更多的创客爱好者能在这段代码的基础上,设计出更多有趣的AI应用。