Skip to content

enify/raspi-bot

Repository files navigation

基于树莓派的语音机器人项目

题外话:本项目是对原 "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)" 方法以获取回复语。这个模块将在以后的版本中重写。

  • 要使用WOL唤醒功能,请先将被唤醒主机的MAC填入 Config.ini 中。
  • 当前版本对下位机的处理采用了一种并不理智的方法(连接不上的话就直接退出),并不符合平稳退化的原则。这将在以后的版本中得到改善。
  • 要对部分命令及命令回复语进行定制,请关注 Config.ini 中的 [[Command_Reply]] 部分。

依赖

  • Python外部库:configobjrequestslxmlRPi.GPIOjieba
  • 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秒我会打开电脑,放心吧

参考资料

Releases

No releases published

Packages

No packages published

Languages