基于AI的室内环境自适应调节系统
作者:eric
1.作品简介
广州连续三个多月的雨季,给人民生产生活带来及其不便,加上回南天的影响,造成居室多处发霉,衣服无法晾晒,改善居住环境,降低潮湿环境对人类健康的影响迫在眉睫。
本项目集成离线语音唤醒+离线语音识别+离线AI大模型+离线TTS文字转语音+自动化控制+天气预测,将树莓派5(2G)性能压榨到极致!
系统基于树莓派5控制器,接入温湿度,气压传感器,485继电器模块等,基于天气预测模型算法,对未来30分钟天气状况实时预测,配合模糊控制算法,对室内环境进行自动化调节,创造舒适居家环境。
测试DEMO全家福
485继电器模块
USB麦克风+喇叭
树莓派5+无风扇金属外壳
IIC扩展转接板
三、各部分功能说明(图文结合)
(各部分实现的功能说明及讲解,以图文结合的展示。)
电源采用树莓派5带PD的5V5A 27W国产替代电源;继电器供电采用24V电源;
控制器使用树莓派5(2G)版本,建议使用8G内存版本;
传感器使用SHT31+BMP180:
控制风扇,热风机,除湿机,加湿器采用485继电器模块:
麦克风喇叭使用USB接口:
四、作品源码
https://github.com/omaday/homeai
#############################################
运行语音大模型程序 python homeai.py
#############################################
运行自动控制程序 python fuzz.py
##############################################
安装依赖库
修改swap分区配置(树莓派2G版本,其他版本可以忽略) sudo nano /etc/dphys-swapfile 想设置4GiB的swap分区,可以设置“CONF_SWAPSIZE=4096 sudo /etc/init.d/dphys-swapfile restart free -h
配置USB声卡 aplay -l 找到设备号2(USB声卡) sudo nano /usr/share/alsa/alsa.conf 修改为2 defaults.ctl.card 2 defaults.pcm.card 2
sudo nano ~/.asoundrc pcm.!default { type hw card 2 }
ctl.!default { type hw card 2 }
使用图形界面,可以右键点击任务栏上的音量图标,选择“音频输出设备”,并选择USB音频设备。
重启测试声卡
安装TTS pip install coqui-tts # from PyPI
error: can't find Rust compiler curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
pip install coqui-tts[zh]
测试(中文一定要加句号,不然会拖拉音) tts --text "首次运行时的模型加载可能比较耗时。可以在初始化时预加载模型,以减少实际合成时的等待时间,尤其在需要连续使用的应用中效果明显。"
--model_name "tts_models/zh-CN/baker/tacotron2-DDC-GST"
--out_path output.wav
最新版本的Snowboy软件下载到Raspberry Pi上,运行以下命令来解压它。
请确认你位于Pi用户的主目录中。( /home/pi 或 ~)
snowboy编译出Makefile:73: recipe for target ‘_snowboydetect.so‘ failed
jack_control start
2.2 安装PyAudio,这个在requirements.txt里面要求了。
PyAudio 提供了 PortAudio 的 Python 语言版本,所以上面要安装portaudio。
sudo pip install pyaudio 2.3 安装其它依赖包
sudo apt-get install swig sox libpcre3 libpcre3-dev libatlas-base-dev 3 安装Python2版本
cd snowboy/swig/Python make 生成 _snowboydetect.so 就编译成功了 4 常见错误
…/…/lib/ubuntu64/libsnowboy-detect.a:error adding symbols: File in wrong format 此错误是Makefile中没有使用正确版本的libsnowboy-detect.a
在snowboy/lib下一共有
aarch64-ubuntu1604/ --对应arm64 ubuntu1604,经验证ubuntu1804也可以使用 android/ --对应android系统 ios/ --对应ios系统 node/ osx/ --对应macos rpi/ --对应树莓派32位arm ubuntu64/ --对应PC Ubuntu64
其它系统,查询电脑类型就可以知道用上面哪个了
uname -m 因此按下面修改Makefile就可以解决这个问题了
SNOWBOYDETECTLIBFILE = (TOPDIR)/lib/ubuntu64/libsnowboy−detect.aifneq(,(findstring arm,$(shell uname -m))) SNOWBOYDETECTLIBFILE = $(TOPDIR)/lib/rpi/libsnowboy-detect.a ifeq ($(findstring fc,$(shell uname -r)), fc) #fedora25-armv7这个没看到 SNOWBOYDETECTLIBFILE = $(TOPDIR)/lib/fedora25-armv7/libsnowboy-detect.a LDLIBS := -L/usr/lib/atlas -lm -ldl -lsatlas endif endif
#以下修改内容请根据系统选择,这里环境为ubuntu1804 ifneq (,$(findstring aarch64,$(shell uname -m))) SNOWBOYDETECTLIBFILE = $(TOPDIR)/lib/aarch64-ubuntu1604/libsnowboy-detect.a endif
或者前面全部注释,用下面这句 SNOWBOYDETECTLIBFILE = $(TOPDIR)/lib/aarch64-ubuntu1604/libsnowboy-detect.a 5 测试
cd snowboy/examples/Python python demo.py ../resources/models/snowboy.umdl 对着话筒说snowboy,如果出现以下提示,并听到叮的一声,就表示成功了。
INFO:snowboy:Keyword 1 detected at time: 2020-09-18 11:47:32 测试如果出现--问题1
Cannot connect to server socket err = No such file or directory Cannot connect to server request channel jack server is not running or cannot be started 请安装jackd2
apt-get install -y jackd2
#pulseaudio --kill关闭 --start启动 jack_control start #启动 status查看状态 exit退出 安装jackd2后重启一下,否则可能出现--问题2
Cannot lock down 82274202 byte memory area (Cannot allocate memory) python3版本可能出现问题3
from . import snowboydetect ImportError: attempted relative import with no known parent package 在目录example/Python3中添加空的__init__.py,另外在snowboydecoder.py
#!/usr/bin/env python 改为 #!/usr/bin/env python3
from . import snowboydetect 改为 import snowboydetect 问题3
出现了IOError: [Errno -9996] Invalid output device (no default output device)
原因是系统没有音频输出设备(喇叭、音箱)或者没有配置好。因为检测到唤醒词后会播放Ding.wav的声音。另外给两个关键词almixer和aplay。
安装Whisper(语音识别) pip install -U openai-whisper
升级 pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git
安装必备库 sudo apt update && sudo apt install ffmpeg
whisper test.wav --model tiny --language zh
import whisper
model = whisper.load_model("tiny") result = model.transcribe("test.mp3", fp16=False) print(result["text"])
简体繁体不区分问题: prompt='以下是普通话的句子' result = model.transcribe(audioFile, task='translate',language='zh',verbose=True,initial_prompt=prompt)
pip install opencc
import opencc cc = opencc.OpenCC(“t2s”) simplified_result = cc.convert('漢字')
print(“简体格式:”, simplified_result) #输出结果为 简体格式:汉字
安装本地大模型,推荐qwen0.5b
然后安装 pip3 install ollama 测试不要用ollama.py命名
天气预测依赖库 pip install pandas scikit-learn statsmodels
自动化模糊控制依赖库 import numpy as np import skfuzzy as fuzz from skfuzzy import control as ctrl
五、作品功能演示视频
视频记录了系统完整的使用过程,感谢大家支持! 演示视频
六、项目总结
原本打算使用国产工业互联网平台进行无代码开发,由于平台近期维护升级,无奈选用B方案,使用PYTHON进行编程,部署环境花费了1周时间,库模块之间的依赖相互冲突,导致树莓派系统重做了好几次,几经周折才将所有的库模块安装测试完成,又花费了一周时间调试测试,最终累计花费2周时间完成,将树莓派5(2G)性能压榨到极致!集成离线语音唤醒+离线语音识别+离线AI大模型+离线TTS文字转语音+自动化控制+天气预测,CPU负荷4核100%!内存使用超100%!
作为一个原型项目基本上实现了预定的目标,通过简单的DEMO测试,系统暂时运行良好。由于时间关系,只完成了核心功能。后期有时间会加入更多传感器和执行器、针对智能家居做一个完整案例。
帖子分享链接汇总:
https://bbs.eeworld.com.cn/thread-1294865-1-1.html
https://bbs.eeworld.com.cn/thread-1295485-1-1.html
七、其他
感谢得捷电子和EEWORLD举办这次物联网大赛,同时提供了研发资助。感谢大家对本项目的关注。祝愿这次比赛圆满成功。祝各位参赛选手都能取得优异的成绩!