题外话:本项目是对原 "Arduino语音控制项目" 的扩展(基于Arduino、LD3320和其它一些模块),由于功能有限,原项目已在2015年年末被废弃,取而代之的是这个基于 Python + 树莓派 的语音机器人项目。此项目开始于2016年末,最初计划是制作一个类似家庭语音助手的东西,在原来基础上添加一些语音对话,家电控制,日程提醒等功能。但由于项目初期个人能力有限,版本控制方面做的并不好,所以这里会使用新的版本库来提交。
由于学业方面的原因,此项目实际上已经有半年多没有更新了。所以一些接口可能已经失效,或者某个问题已经有更简单的解决方法,关于这点我在下文中会尽量说明。
- 语音对话
- 语音控制
- 闹钟
- 日程提醒
- 电器控制
- 电器定时开闭
- WOL唤醒
- 天气查询
- 音乐播放
- 配合LCD4Linux用作显示
- 手势唤醒
- 红外控制
- 微信接入
- 更多功能...
- 本项目基于Python2.7,尚未进行Python3化。
- 语音输入功能依赖于树莓派的硬件中断,而输入完毕时录音可以自动停止。这个功能很大程度上受益于改造过的arecord命令(改造方法见:在linux上如何做一个简单的vad功能,即录音时说话停止即录音停止。,你也可以直接点击这里下载编译后的版本。)
- 语音识别和语音合成功能由百度语音提供,请先开通应用,并把API KEY和Secret KEY填入
Config.ini
中。 - 语音对话功能有两个对话源可选:图灵机器人或微软小冰。通过设置
Config.ini
中的"robot"
值来选择。其中:- 使用图灵机器人先要到其官网申请开通应用,并将机器人的APIkey填入
Config.ini
中。 - 使用微软小冰需要先在微博上关注小冰的账号(weiruanxiaobing),然后将测试用的微博账号密码写入
Config.ini
中。(聊天功能是通过给小冰发私信来实现的)。
注意:由于微博页面改版,故将小冰作为对话源的功能暂不可用。当前更好的办法是:使用 ItChat + 小冰公众号 实现原有的
"Get_Weibo_Xiaoice_Result(info)"
方法以获取回复语。这个模块将在以后的版本中重写。 - 使用图灵机器人先要到其官网申请开通应用,并将机器人的APIkey填入
- 要使用WOL唤醒功能,请先将被唤醒主机的MAC填入
Config.ini
中。 - 当前版本对下位机的处理采用了一种并不理智的方法(连接不上的话就直接退出),并不符合平稳退化的原则。这将在以后的版本中得到改善。
- 要对部分命令及命令回复语进行定制,请关注
Config.ini
中的[[Command_Reply]]
部分。
- Python外部库:
configobj
、requests
、lxml
、RPi.GPIO
、jieba
。 - Linux软件包:
mpg123
、(改造过的)alsa-utils
。 - 硬件要求:
- Raspberry Pi 全系列;
- USB声卡;
- 音箱;
- 麦克风;
- 已刷MicroPython的ESP-8266模块;
- 按钮及杜邦线等;
本项目在设计时遵循了模块化的原则,各功能大都各司其职,在启动脚本中得到整合:
main.py
:启动脚本。baidu_voice_Module.py
:百度语音合成与识别模块。tuling_robot_Module.py
:图灵机器人对话模块。xiaoice_robot_Module.py
:小冰机器人对话模块。(待重写)Speech_Command_Module.py
:语音命令提取模块。Chack_Commands_Module.py
:语音命令执行模块,兼具与下位机通信的工作。Time_Sign_Module.py
:时间处理相关,用于从语句中分析获取时间标记。Print_With_Style_Module.py
:带颜色的输出(方便调试用)。WOL_Module.py
:WOL网络唤醒模块。Config.ini
:配置文件。下位机-ESP8266端程序.py
:下位机程序。
- 克隆此版本库到树莓派任意路径:
git clone https://github.com/enify/raspi-bot.git
- 将arecord链接到版本库路径下:
ln ./resource/树莓派专用的改进的aplay arecord
- 连接触发按钮(下降沿触发),并在配置文件中填入触发按钮的中断引脚编号及状态显示引脚编号。
- 在配置文件中填入在百度语音官网申请的API KEY和Secret KEY 。
- 在配置文件中填入在图灵机器人官网申请的API KEY 。
- (可选)在配置文件中填入微博测试号的账号密码,以使小冰机器人可用。(待重写)
- 在配置文件中配置被控电器的名称到命令名词字段
keywords_N
,并将其绑定到JDQ_x
字段上。 - 在路由器后台配置静态地址绑定,分别设置树莓派和ESP-8266的地址为静态IP,其中ESP-8266的地址配置到
Chack_Commands_Module.py
中,树莓派的地址配置到下位机-ESP8266端程序.py
中。(待重写) - 继电器引脚请通过
下位机-ESP8266端程序.py
这个脚本来配置,并将其上传到ESP-8266下位机中。(待重写) - 若要使用WOL唤醒功能的话,请将被唤醒主机的MAC填入配置文件中。
- 连接USB声卡、麦克风、音响。
- 运行:
python main.py
注意:脚本尚未做成后台形式,建议在 tmux 或 screen 中运行。
- 语音对话
- 用户:吃饭了没?
- 回复:吃了,吃了两人分,撑死我啦!
- 用户:好开心啊
- 回复:嘻嘻嘻我也开心
- 用户:认识王羲之不?
- 回复:王羲之的兰亭集序真的是书法一绝。
- 语音控制
- 用户:打开电灯
- 回复:好的,已为你打开电灯
- 用户:打开风扇并关闭电灯
- 回复:好的,已为你打开风扇,关闭电灯
- 用户:一小时三十八秒后打开电灯
- 回复:欧拉!不就是在2016年12月20日22时16分28秒打开电灯吗?记住了
- 闹钟、提醒事项
- 用户:十分钟后叫我起床
- 回复:好的,将在2016年11月19日22时16分28秒提醒你起床,放心吧
- 回复:(到时间后)起床时间到了哦
- 用户:设一个明天早上七点十分的闹钟
- 回复:好的,记住了
- 回复:(到时间后)铃声响起..
- 天气查询
- 用户:明天天气如何?
- 回复:请问你想查询哪个城市?
- 用户:深圳
- 回复:深圳:周五,多云 无持续风向微风,最低气温23度,最高气温27度
- 用户:北京天气
- 回复:北京:周六 11月19日,晴转阴 南风微风,最低气温1度,最高气温8度
- WOL唤醒
- 用户:帮我开一下电脑
- 回复:正在为你打开电脑(发送幻数据包)
- 用户:四分钟后打开电脑
- 回复:恩恩,到2016年11月19日22时16分28秒我会打开电脑,放心吧