PI-Assistant

PI-Assistant

树莓派智能家居语音助手 开源多功能可扩展

PI-Assistant是一个基于树莓派的开源智能家居语音助手项目。它集成了语音唤醒、语音识别、文字转语音和连续对话等功能,并支持GPT和星火大模型。该项目还提供音乐播放、日程管理、WebUI调参和外设控制等特性,支持自动化智能家居场景。PI-Assistant具有高度可扩展性,适合智能家居爱好者和开发者使用。

树莓派语音助手智能家居MQTTHomeAssistantGithub开源项目

树莓派语音助手 PI-Assistant

<br>

🗺️ 更新日志

[2024/6/2]

  • 规范运行日志(引入loguru库)
  • 新增外设端口 BCM号18(用于外接语音唤醒模块,以获得更好的唤醒体验)
  • 添加Ctrl+C中断退出
  • 更新README.md
<details> <summary>更多</summary>

[2024/5/13]

  • 增加HomeAssistant设备控制,利用HA的API实现了对其下设备的控制,并提供了一个基本示例
  • 修改了文档中对场景、外设及自动化部分的语言描述,更清晰易懂

[2024/3/12]

  • 增加广域网控制支持,采用MQTT协议,实现广域网下的设备控制,消息传递
  • 完善WebUI,增加快捷命令,增加回复窗口
  • 完善星火API,相比GPT可能会有更好的体验
  • 星火版本指向3.5,GPT版本改指向GPT-4-turbo-preview
  • 适配新版本DDG搜索
  • 增强设备控制通用性和稳定性,完善场景逻辑
  • 删除早期APP,统一采用Web控制
  • 添加requirements.txt,列出运行版本号

[2024/2/3]

  • 支持局域网外设控制(MQTT)

  • 优化场景类、配置类、状态类结构

  • 最小化程序支持在PC(win10)运行

  • 简化代码,删除音乐模块的自动获取Cookie功能

[2024/1/8]

  • 解决duckduckgo联网搜索失效的问题(注意及时升级ddg库)

[2023/12/29]

  • 已支持WebUI调参,可调参数可自由选择
  • 已支持讯飞星火大模型API
  • 优化场景配置代码
</details> <br>

💡 功能列表

  • 支持多种唤醒方式:语音唤醒,局域网消息唤醒,外设模块唤醒,远程唤醒
  • 语音端点检测:自动检测语音截止点
  • 语音识别:支持在线与离线双模式
  • 文字转语音:舒适的人声
  • 接续对话:完成交互对话全程只需唤醒一次
  • 支持对话中断:可在任意时刻打断对话,重新提问
  • 双引擎可选交互:接入GPT/星火大模型,支持聊天上下文,具有互联网搜索能力,并适时总结对话
  • 聊天记忆:在程序结束后保存聊天内容,重新运行时自动加载
  • 通知播报:手机上接收的消息(熄屏时)以自定义格式播报
  • 音乐播放:获取QQ音乐个性推荐,支持调整音量,切换,暂停
  • 音频闪避:在聊天交互/通知播报时自动减小音乐音量
  • 日程设定:支持设定闹钟/倒计时,以及提醒事项
  • WebUI调参:可通过电脑和手机登录网页调参
  • 外设控制:支持接入自定义设备(MQTT协议),配置相关文件可实现自动化
  • 自动化智能家居:传入自定义状态,支持自定义场景触发自定义动作
  • 远程控制:支持广域网MQTT设备控制
  • HomeAssistant:支持通过API控制HA下的设备 <br>

🎁 安装

Python模块安装

pip install loguru requests arcade RPi.GPIO pydub numpy sounddevice pymysql cn2an duckduckgo_search flask SpeechRecognition openai pyaudio websocket-client paho-mqtt

具体库版本可参考requirements.txt文件

Azure认知服务

为了使用语音识别以及文字转语音,需要注册微软Azure,获取Azure认知服务的APIkey

GPT服务/星火API

为了生成对话文本,需要注册OpenAI/讯飞星火账号(二选一),并获取APIkey

Nodejs安装(可选)

为了使用音乐播放功能,需要安装Node.js,默认qq号 1234567 ,修改 bin/config.js 为自己的QQ号 , 安装完成后可在QQMusicApi路径下运行npm start 测试结果(具体使用可参考QQMusicApi文档站以及if_music.py)

Mysql数据库安装(可选)

为了实现日程提醒功能,需要安装Mysql数据库,安装并后台运行,对应schedule.py文件,以下是一些参考命令:

show databases; create database schedule; use schedule; create table main (id int(11)primary key, time int(11),content varchar(50)); alter table main modify column id int(11) AUTO_INCREMENT; CREATE USER 'remote'@'%' IDENTIFIED BY '123456'; GRANT ALL ON schedule.* TO 'remote'@'%';

Snowboy语音唤醒配置(可选)

对于树莓派4B(64bit)的系统可能不需要额外配置,其他版本需要根据情况修改snowboy文件夹的配置文件,确保其能正常运行。(录入关键词需要修改assistxiaoxiao.pmdl文件,默认唤醒词为"助手晓晓"。)

场景、外设及自动化配置(可选)

当前实现的所有参数监听及修改都基于多线程下的循环执行(轮询),因此可以通过在 server.py 添加新的线程插入你的外设控制文件。具体步骤为:在 config.py 中添加变量,编写专用外设控制文件,在专用外设控制文件监听(轮询)变量,执行自定义动作。在任意文件中调用 config.set() 即可触发动作。

例如,在 server.py 新增一个线程用于处理控制HomeAssistant设备的消息 t7 ,在 config.py 中定义变量 "HA_light_demo": False,在 hass_light_demo.py 中处理消息和执行动作。如果要增加语音控制,在 if_devControl.py 中添加对应的语音指令和 config.set() 即可。

支持外接无线设备,作为设备的数据流转和控制中心,可达到极高的可扩展性。可在 config.py 中添加外设变量,在 dev_control.py 中定义设备类型,订阅主题和推送主题,同时,在wifi设备上(例如esp32)配置对应的主题,在任意文件中调用 config.set() 即可触发外设动作(将会发送值到预先定义的主题中,外设接收此值响应动作)。

进一步的,实现自动化,则在 Scene_conf.py 中定义状态变量并设置触发场景、配置相应的动作。调用修改状态变量函数 status_manager.set_status() 时会自动回调检查是否符合场景预设,若是则执行对应动作。(注:无线外设扩展现仅支持MQTT协议设备)

<details> <br> 外设通讯协议为MQTT,在树莓派上安装mosquito服务器,用户名和密码分别设置为 pi,123456。配置参考如下:

/etc/mosquitto/mosquitto.conf

listener 1883
allow_anonymous false
password_file /etc/mosquitto/passwd

设备分为输入设备(如传感器)和输出设备(如开关),以下描述了外设控制的两种数据流动:

  • 输入设备(传感器)数据→状态管理器→场景管理器→配置管理器→输出设备(开关、灯)

此控制方案用于自动化控制,传感器的值会改变状态管理器的状态量,进而触发场景检测,满足对应场景后调用配置管理器的接口,控制设备。

  • 控制命令(语音)→配置管理器→输出设备(开关、灯)

此控制方案用于手动控制,通过文字指令或语音指令直接修改配置管理器的变量,控制设备。 外设控制配置文件包括以下几个文件:dev_control.py(定义所有设备),config.py(定义输出设备),Scene_conf.py(定义输入设备以及场景)

文件中提供了一个示例,sensor_demo作为输入设备,dev_demo作为输出设备,当sensor_demo发送True(False)时,dev_demo点亮(关闭)板载LED。硬件采用Esp32,相关的硬件代码提供在mqtt_demo文件夹。

代码设计有反馈机制,输出设备在接收到信息后需要有ACK,否则树莓派会认为此次控制不成功。

广域网MQTT配置(可选)

采用中国移动ONENet的MQTT服务器,实现在广域网下与家庭助手通信。

PI-Assistant共订阅三个topic:Input(实现对输入设备数据的改写)、Output(实现对输出设备的控制)、message_pi(用于消息的传递,即远程通信)

PI-Assistant会将message_pi传来的消息经过和本地消息几乎相同的处理,然后将返回结果发送到名为"message_endpoint"的主题上。

例如,在MQTT手机端Publish主题为"Output",内容为"dev_demo:True"的消息,即可打开设备dev_demo的Led灯。提前订阅"message_endpoint",向主题message_pi发送"你好",稍后将会在"message_endpoint"上收到"你好,我是晓晓智能助手...",具体实现参考mqtt_wlan.py以及chat.py

中国移动MQTT服务器的配置方法:onenet -> 开发者中心 -> 全部产品服务 -> 多协议接入 -> MQTT(旧版)-> 添加产品 -> 添加设备

使用文档

常量配置

修改const_config.py文件夹,Openai的key,Azure认知服务的key(语音识别和tts都用到了,免费),代理端口,路径,相应功能的开启关闭等。

对于QQ音乐的Cookie,直接在网页登录,复制cookie的值粘贴到cookie.txt。

变量配置

在config.py编辑初始参数,如果要语音唤醒,将wakebyhw改为True。

运行

python startApi.py #音乐服务 python server.py #主程序

语音呼叫"助手晓晓"可直接唤醒,然后语音交互

在APP上配置IP后发送消息交互,也可通过http://语音助手ip:5000/command?words=''直接进行交互

连接了指定外设的情况下可通过按钮/无线模块触发,按钮GPIO7(BCM:4)高电平触发。无线模块开源链接:https://oshwhub.com/ghgjkh/simple-wake

语音播报功能需要手机端APP配合,APP为MacroDroid,实现过程是APP端发送相应格式的消息到http://语音助手ip:5000/words?words='',然后TTS播报出来。

具体的功能可以根据chat.py的执行逻辑以及对应文件查看使用

运行时调参

可使用网页端在程序运行时调参,地址为http://ip:5000

文件层次结构

p1

待实现功能

  • GPT回答流式生成,并考虑新增Groq的AI接口

  • 音频流式播放,重做非阻塞音频部分

  • '场景'控制方案重写(描述)为'自动化'控制方案

  • 低功耗BLE外设硬件开发

  • 未联网下自动切换为离线语音识别

其他

欢迎提交Issue与Pull Request

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多