Coder Social home page Coder Social logo

raspi-bot's Introduction

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

题外话:本项目是对原 "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秒我会打开电脑,放心吧

参考资料

raspi-bot's People

Contributors

enify avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.