【IOT】OrangePi+HomeAssistant+Yolov5智能家居融合

前言

本文将以OrangePi AIpro为基础,在此基础构建HomeAssistant、YOLO目标检测实现智能家居更加灵活智能的场景实现。

表头 表头
设备 OrangePi AIpro(8T)
系统版本 Ubuntu 22.04.4 LTS
CPU 4核64位处理器+ AI处理器
AI算力 AI算力 8TOPS算力
接口 HDMI2、GPIO接口、Type-C、M.2插槽、TF插槽、千兆网口、USB3.02、USB Type-C 3.0、Micro USB、MIPI摄像头*2、MIPI屏
系统内存 8GB
场景范围 AI教学实训、AI算法验证、智能小车、机械臂、边缘计算、无人机、人工智能、云计算、AR/VR、智能安防、智能家居、智能交通等领域。

● 更多硬件参数:http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/parameter/Orange-Pi-AIpro.html

产品外观

1.产品外观

1.主板上装有一个大型的铝制散热器,顶部配有一个黑色的风扇,用于散热,确保设备在运行时保持低温。

2.侧面有分布HDMI接口、USB接口、RJ45网口等接口

2.产品详细图

社区及生态

● 官方网站:香橙派(Orange Pi)-Orange Pi官网-香橙派开发板,开源硬件,开源软件,开源芯片,电脑键盘

● 官方社区:Orange Pi 论坛

● 昇腾社区:开发者主页-昇腾社区

● 学习资源:香橙派AIpro学习资源一站式导航

智能家居实现

实现思路

● HomeAssistant通过插件接入智能家居中的设备

● NodeRed获取(监听)智能家居中的设备状态根据配置的流程进行执行判断

● 根据设备触发状态、获取OrangePi摄像头的图像信息

● 将由NodeRed发起接口调用YOLO获取识别的结果

● NodeRed根据识别结果进行不同的判断,调用HomeAssistant进行后续的判断

落地场景

家中小孩打开电视后只能观看半小时,半小时后自动关机

● 当智能家居中人在传感器判断有人存在时

● NodeRed获取到传感器的人在状态触发后续流程

● 调用摄像头获取区域内人像信息

● 将图像信息通过接口调用YOLO进行判断是小孩子还是成年人

● 根据YOLO识别的结果,如果结果是小孩子的可能性较大

● 执行延时30分钟,调用HomeAssistant电视实体进行关机

技术实现

基础OrangePI

通电开机

● 机器插入电源后、推荐使用网线接入路由器,可以直接查询到设备的IP地址

● 使用SSH工具进行连接

账号:root

密码: Mind@123

更新软件包
shell 复制代码
sudo apt update
sudo apt upgrade
Docker安装

● 移除历史Docker

shell 复制代码
sudo apt-get remove docker docker-engine docker.io containerd runc

● 安装Docker

shell 复制代码
sudo apt-get remove docker docker-engine docker.io containerd runc
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
apt-get install docker-ce docker-ce-cli containerd.io

● 查看Docker版本

测试Docker

● 拉取Nginx镜像

● 启动

● 测试

HomeAssistant

Home Assistant是一个开源的家庭自动化平台,旨在让用户更方便地控制和管理家中的智能设备。它可以运行在多种硬件上,并支持广泛的设备和服务集成,允许用户创建个性化的自动化方案。

简单理解就是是一个可以将多个品牌智能家居(大佬开发插件)集成到一个系统中进行控制配置联动联动的智能系统,且高度可定制化的支持。

Docker启动HomeAssistant容器
shell 复制代码
docker run -d \
-p 8123:8123 \
--name homeassistant \
-h homeassistant \
--net home_assistant_net \
-v /opt/homeassistant/config:/config \
-v /opt/homeassistant/data:/data \
-v /opt/homeassistant/log:/log \
-v /etc/localtime:/etc/localtime:ro \
-e TZ=Asia/Shanghai \
ghcr.io/home-assistant/home-assistant:stable
homeassistant/homeassistant:latest

● 容器启动后将容器内的8123端口映射到设备的8123,所以访问设备IP+8123端口即可打开系统页面

HomeAssistant系统初始化

● 系统初始化是需要设置账号密码、选择所属位置等信息

安装HACS

HACS 即 Home Assistant社区商店(Home Assistant Community Store),提供了一个强大的用户界面来处理所有自定义需求的下载。通过HACS可安装第三方集成和Hass主题。

● 根据HACS网站教程可以执行如下命令进行安装

shell 复制代码
wget -O - https://get.hacs.xyz | bash -
安装Xiaomi Miot Auto

由于我家是米家设备比较多,所以选择可以操作米家设备的插件

MIoT-Spec 是小米IoT平台根据硬件产品的联网方式、产品功能的特点、用户使用场景的特征和用户对硬件产品使用体验的要求,设计的描述硬件产品功能定义的标准规范。

本插件利用了miot协议的规范,可将小米设备自动接入HomeAssistant,目前已支持大部分小米米家智能设备。且该插件支持HA后台界面集成,无需配置yaml即可轻松将小米设备接入HA。

● 在HACS中搜索Xiaomi Miot Auto,选择安装后重启服务即可。

● 第一次使用需要登录Github授权,正常登录输入验证码授权即可

● 授权完成后输入小米账号和密码,HA即可自动将该小米账号下的设备自动同步下来

NodeRed

Node-RED是一个基于流的开发工具,主要用于视觉编程和物联网(IoT)集成。它由IBM在2013年首次发布,目前作为开源项目在广泛的社区中得到维护和发展。Node-RED特别适合快速创建原型和集成不同的硬件设备、API和在线服务。

轻量级运行时基于 Node.js 构建,充分利用了其事件驱动的非阻塞模型。这使得它非常适合在低成本硬件的网络边缘以及云端运行。

Docker启动NodeRed
shell 复制代码
docker run -u root:node-red -v /home/node_red:/data --privileged=true -p 1881:1880 --name NodeRed -d nodered/node-red --restart=always

● 访问设备IP+1881端口进入NodeRed界面

安装插件node-red-contrib-home-assistant-websocket

开源的插件,专为 Node-RED 设计,旨在让你能够轻松地通过 WebSocket 协议与 Home Assistant 智能家居平台进行交互。借助这个项目,你可以创建自定义的工作流,自动化你的家庭环境,实现对各种智能设备的灵活控制。

● 右上角菜单功能->节点管理->点击安装->输入node-red-contrib-home-assistant-websocket,下载安装即可。

● 安装完成后右侧出现多个HomeAssistant的模块

配置HomeAssistant服务

● 拖入任意一HomeAssistant模块后,可以在节点中配置URL和访问令牌

● 访问令牌在HomeAssistant中获取

配置触发流程

● 当人体存在触发时原定是发起HTTP请求,因技术问题改为执行命令

● 执行命令延时5秒钟后读取文件,延时是为了等待识别结果

● 执行命令后将执行后的结果放入指定文件当中

● 使用函数来处理分隔字符串

● 根据分隔后识别的结果进行判断

● 如果为否则继续执行命令进行识别

● 如果为是则延时30分钟后关闭插座

YOLOv5

YOLOv5(You Only Look Once version 5)是一个流行的实时目标检测模型,它在计算机视觉领域被广泛应用于各种任务,如物体检测、图像分割和跟踪。YOLOv5由Ultralytics开发,继承了YOLO(You Only Look Once)系列模型的快速和高效特点,同时在模型性能和易用性方面进行了多项改进。

● 得益于官方示例的完整,可以直接借鉴官方平台基于YOLOv5的物体检测

配置环境变量
shell 复制代码
# 配置程序编译依赖的头文件与库文件路径
export DDK_PATH=/usr/local/Ascend/ascend-toolkit/latest 
export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub
安装CNAA

参考官方安装文档,要求7.0及以上社区版本。文档

安装Ffmpeg
shell 复制代码
apt-get install ffmpeg libavcodec-dev libswscale-dev libavdevice-dev
获取ACLLite仓库,参考文档
shell 复制代码
# 拉取ACLLite仓库,并进入目录
git clone https://gitee.com/ascend/ACLLite.git
cd ACLLite


# 设置环境变量,其中DDK_PATH中/usr/local请替换为实际CANN包的安装路径

export DDK_PATH=/usr/local/Ascend/ascend-toolkit/latest
export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub
shell 复制代码
# 安装,编译过程中会将库文件安装到/lib目录下,所以会有sudo命令,需要输入密码

bash build_so.sh
样例下载
shell 复制代码
cd ${HOME}     
git clone https://gitee.com/ascend/EdgeAndRobotics.git

# 切换到样例目录
cd EdgeAndRobotics/Samples/YOLOV5USBCamera

● 准备测试样例视频

shell 复制代码
cd data
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/yolov5s/test.mp4 --no-check-certificate

● 模型转换

● 获取PyTorch框架的Yolov5模型(*.onnx),并转换为昇腾AI处理器能识别的模型(*.om)

● 配置环境变量

shell 复制代码
export TE_PARALLEL_COMPILER=1
export MAX_COMPILE_CORE_NUMBER=1

● 为了方便下载,在这里直接给出原始模型下载及模型转换命令,可以直接拷贝执行

shell 复制代码
cd ../model
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/yolov5s/yolov5s.onnx --no-check-certificate
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/yolov5s/aipp.cfg --no-check-certificate
atc --model=yolov5s.onnx --framework=5 --output=yolov5s --input_shape="images:1,3,640,640"  --soc_version=Ascend310B4  --insert_op_conf=aipp.cfg

--model:Yolov5网络的模型文件的路径。

--framework:原始框架类型。5表示ONNX。

--output:yolov5s.om模型文件的路径。请注意,记录保存该om模型文件的路径,后续开发应用时需要使用。

--input_shape:模型输入数据的shape。

--soc_version:昇腾AI处理器的版本。

● 编译样例源码

shell 复制代码
cd ../scripts 
bash sample_build.sh

● 由于购买的摄像头不支持,已换货,在此演示执行进入Samples/YOLOV5MultiInput进行本地文件的识别

● 同样是执行(测试样例视频)(编译样例源码)

● 进行识别测试

shell 复制代码
# 在直连电脑场景,执行以下脚本运行样例。此时会以结果打屏的形式呈现推理效果
bash sample_run.sh stdout

# 在HDMI连接屏幕场景,执行以下脚本运行样例。此时会以画面的形式呈现推理效果
bash sample_run.sh imshow
.```

![img](https://devpress.csdnimg.cn/5fa5de91c9b54931b1aaf091860c4b65.png "#left")

.```
### [扩展]ResNet50
基于图片的识别,可以减轻设备的压力,由识别视频改为识别视频中某帧的图片来实现。
提示信息中的top1-5表示图片置信度的前5种类别、index表示类别标识、value表示该分类的最大置信度,class表示所属类别

总结

⛳️ OrangePi总结

● 智能家居和OrangePi边缘计算可以相辅相成。智能家居物联网将大量的设备连接到了互联网上,可以很方便的操作,传统的依赖于云端识别和计算,而由OrangePi搭建的识别推演进行边缘计算则提供了一种有效的方式来处理和分析这些数据,使得智能家居系统能够更加智能、响应更加迅速。

● 最后的最后引用雷布斯的一句话:科技不再是高高在上,科技要服务于每一个人!