# raspi-bot **Repository Path**: CharlieShark/raspi-bot ## Basic Information - **Project Name**: raspi-bot - **Description**: 树莓派语音机器人 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2021-08-12 - **Last Updated**: 2024-10-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于树莓派的语音机器人项目 > 题外话:本项目是对原 "Arduino语音控制项目" 的扩展(基于Arduino、LD3320和其它一些模块),由于功能有限,原项目已在2015年年末被废弃,取而代之的是这个基于 Python + 树莓派 的语音机器人项目。此项目开始于2016年末,最初计划是制作一个类似家庭语音助手的东西,在原来基础上添加一些语音对话,家电控制,日程提醒等功能。但由于项目初期个人能力有限,版本控制方面做的并不好,所以这里会使用新的版本库来提交。 > 由于学业方面的原因,此项目实际上已经有半年多没有更新了。所以一些接口可能已经失效,或者某个问题已经有更简单的解决方法,关于这点我在下文中会尽量说明。 ## 目录 - [系统拓扑](#系统拓扑) - [功能](#功能) - [项目说明](#项目说明) - [依赖](#依赖) - [脚本说明](#脚本说明) - [使用方法](#使用方法) - [交互示例](#交互示例) - [参考资料](#参考资料) ## 系统拓扑 ![系统拓扑图](https://github.com/enify/raspi-bot/blob/master/images/topo.png) ## 功能 - [x] 语音对话 - [x] 语音控制 - [x] 闹钟 - [x] 日程提醒 - [x] 电器控制 - [x] 电器定时开闭 - [x] WOL唤醒 - [x] 天气查询 - [ ] 音乐播放 - [ ] 配合LCD4Linux用作显示 - [ ] 手势唤醒 - [ ] 红外控制 - [ ] 微信接入 - [ ] 更多功能... ## 项目说明 - 本项目基于Python2.7,尚未进行Python3化。 - 语音输入功能依赖于树莓派的硬件中断,而输入完毕时录音可以自动停止。这个功能很大程度上受益于改造过的arecord命令(改造方法见:[在linux上如何做一个简单的vad功能,即录音时说话停止即录音停止。](http://blog.csdn.net/lijin6249/article/details/51955206),你也可以直接点击[这里](https://github.com/enify/raspi-bot/tree/master/resource)下载编译后的版本。) - 语音识别和语音合成功能由[百度语音](http://yuyin.baidu.com/)提供,请先开通应用,并把API KEY和Secret KEY填入 `Config.ini` 中。 - 语音对话功能有两个对话源可选:图灵机器人或微软小冰。通过设置 `Config.ini` 中的`"robot"`值来选择。其中: - 使用图灵机器人先要到其[官网](http://www.tuling123.com)申请开通应用,并将机器人的APIkey填入 `Config.ini` 中。 - 使用微软小冰需要先在微博上关注小冰的账号(weiruanxiaobing),然后将测试用的微博账号密码写入 `Config.ini` 中。(聊天功能是通过给小冰发私信来实现的)。 > 注意:由于微博页面改版,故将小冰作为对话源的功能暂不可用。当前更好的办法是:使用 [ItChat](https://github.com/littlecodersh/itchat) + 小冰公众号 实现原有的 `"Get_Weibo_Xiaoice_Result(info)"` 方法以获取回复语。这个模块将在以后的版本中重写。 - 要使用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 ``` - 连接触发按钮(下降沿触发),并在配置文件中填入触发按钮的中断引脚编号及状态显示引脚编号。 - 在配置文件中填入在[百度语音官网]((http://yuyin.baidu.com/))申请的API KEY和Secret KEY 。 - 在配置文件中填入在[图灵机器人官网]((http://www.tuling123.com))申请的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秒我会打开电脑,放心吧 ## 参考资料 - [在linux上如何做一个简单的vad功能,即录音时说话停止即录音停止。](http://blog.csdn.net/lijin6249/article/details/51955206) - [使用命令行操作树莓派3上的USB声卡](http://blog.sina.com.cn/s/blog_55c3a5ae0102wqku.html) - [【MicroPython】ESP8266教程和资源 ](http://bbs.eeworld.com.cn/thread-497226-1-1.html) - [jieba:结巴中文分词 ](https://github.com/fxsjy/jieba) - [ICTCLAS 汉语词性标注集](http://fhqllt.iteye.com/blog/947917)