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

news2024/11/18 13:49:42

前言

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

表头表头
设备OrangePi AIpro(8T)
系统版本Ubuntu 22.04.4 LTS
CPU4核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.产品外观

img

1.主板上装有一个大型的铝制散热器,顶部配有一个黑色的风扇,用于散热,确保设备在运行时保持低温。
2.侧面有分布HDMI接口、USB接口、RJ45网口等接口

2.产品详细图

img

社区及生态
● 官方网站:香橙派(Orange Pi)-Orange Pi官网-香橙派开发板,开源硬件,开源软件,开源芯片,电脑键盘
● 官方社区:Orange Pi 论坛
● 昇腾社区:开发者主页-昇腾社区
● 学习资源:香橙派AIpro学习资源一站式导航

智能家居实现

img

实现思路

● HomeAssistant通过插件接入智能家居中的设备
● NodeRed获取(监听)智能家居中的设备状态根据配置的流程进行执行判断
● 根据设备触发状态、获取OrangePi摄像头的图像信息
● 将由NodeRed发起接口调用YOLO获取识别的结果
● NodeRed根据识别结果进行不同的判断,调用HomeAssistant进行后续的判断

落地场景

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

● 当智能家居中人在传感器判断有人存在时
● NodeRed获取到传感器的人在状态触发后续流程
● 调用摄像头获取区域内人像信息
● 将图像信息通过接口调用YOLO进行判断是小孩子还是成年人
● 根据YOLO识别的结果,如果结果是小孩子的可能性较大
● 执行延时30分钟,调用HomeAssistant电视实体进行关机

技术实现

基础OrangePI

通电开机

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

img

● 使用SSH工具进行连接

账号:root
密码: Mind@123

img


更新软件包
sudo apt update
sudo apt upgrade
Docker安装

● 移除历史Docker

sudo apt-get remove docker docker-engine docker.io containerd runc

● 安装Docker

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版本

img

测试Docker

● 拉取Nginx镜像

img

● 启动

img

● 测试

img

HomeAssistant

Home Assistant是一个开源的家庭自动化平台,旨在让用户更方便地控制和管理家中的智能设备。它可以运行在多种硬件上,并支持广泛的设备和服务集成,允许用户创建个性化的自动化方案。
简单理解就是是一个可以将多个品牌智能家居(大佬开发插件)集成到一个系统中进行控制配置联动联动的智能系统,且高度可定制化的支持。

Docker启动HomeAssistant容器
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

img

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

img

HomeAssistant系统初始化

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

img

img

安装HACS

HACS 即 Home Assistant社区商店(Home Assistant Community Store),提供了一个强大的用户界面来处理所有自定义需求的下载。通过HACS可安装第三方集成和Hass主题。
● 根据HACS网站教程可以执行如下命令进行安装

wget -O - https://get.hacs.xyz | bash -
安装Xiaomi Miot Auto

由于我家是米家设备比较多,所以选择可以操作米家设备的插件
MIoT-Spec 是小米IoT平台根据硬件产品的联网方式、产品功能的特点、用户使用场景的特征和用户对硬件产品使用体验的要求,设计的描述硬件产品功能定义的标准规范。
本插件利用了miot协议的规范,可将小米设备自动接入HomeAssistant,目前已支持大部分小米米家智能设备。且该插件支持HA后台界面集成,无需配置yaml即可轻松将小米设备接入HA。
● 在HACS中搜索Xiaomi Miot Auto,选择安装后重启服务即可。

img

● 第一次使用需要登录Github授权,正常登录输入验证码授权即可
● 授权完成后输入小米账号和密码,HA即可自动将该小米账号下的设备自动同步下来

img

NodeRed

Node-RED是一个基于流的开发工具,主要用于视觉编程和物联网(IoT)集成。它由IBM在2013年首次发布,目前作为开源项目在广泛的社区中得到维护和发展。Node-RED特别适合快速创建原型和集成不同的硬件设备、API和在线服务。
轻量级运行时基于 Node.js 构建,充分利用了其事件驱动的非阻塞模型。这使得它非常适合在低成本硬件的网络边缘以及云端运行。

Docker启动NodeRed
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界面

img

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

开源的插件,专为 Node-RED 设计,旨在让你能够轻松地通过 WebSocket 协议与 Home Assistant 智能家居平台进行交互。借助这个项目,你可以创建自定义的工作流,自动化你的家庭环境,实现对各种智能设备的灵活控制。
● 右上角菜单功能->节点管理->点击安装->输入node-red-contrib-home-assistant-websocket,下载安装即可。
● 安装完成后右侧出现多个HomeAssistant的模块

img

配置HomeAssistant服务

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

img

配置触发流程

● 当人体存在触发时原定是发起HTTP请求,因技术问题改为执行命令
● 执行命令延时5秒钟后读取文件,延时是为了等待识别结果
● 执行命令后将执行后的结果放入指定文件当中
● 使用函数来处理分隔字符串
● 根据分隔后识别的结果进行判断
● 如果为否则继续执行命令进行识别
● 如果为是则延时30分钟后关闭插座

img

YOLOv5

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

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

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

安装Ffmpeg
apt-get install ffmpeg libavcodec-dev libswscale-dev libavdevice-dev

img

获取ACLLite仓库,参考文档
# 拉取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
# 安装,编译过程中会将库文件安装到/lib目录下,所以会有sudo命令,需要输入密码

bash build_so.sh

img

样例下载
cd ${HOME}     
git clone https://gitee.com/ascend/EdgeAndRobotics.git

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

img

● 准备测试样例视频

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)
● 配置环境变量

export TE_PARALLEL_COMPILER=1
export MAX_COMPILE_CORE_NUMBER=1

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

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处理器的版本。

img

● 编译样例源码

cd ../scripts 
bash sample_build.sh

img

● 由于购买的摄像头不支持,已换货,在此演示执行进入Samples/YOLOV5MultiInput进行本地文件的识别
● 同样是执行(测试样例视频)(编译样例源码)
● 进行识别测试

# 在直连电脑场景,执行以下脚本运行样例。此时会以结果打屏的形式呈现推理效果
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表示所属类别

img

总结

⛳️ OrangePi总结

● 智能家居和OrangePi边缘计算可以相辅相成。智能家居物联网将大量的设备连接到了互联网上,可以很方便的操作,传统的依赖于云端识别和计算,而由OrangePi搭建的识别推演进行边缘计算则提供了一种有效的方式来处理和分析这些数据,使得智能家居系统能够更加智能、响应更加迅速。
● 最后的最后引用雷布斯的一句话:科技不再是高高在上,科技要服务于每一个人!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1716268.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

复购率下降是什么原因导致的?三个步骤直击复购率下降根源

在商业运营中,回购率的波动往往能够直观地反映出客户对品牌和产品的忠诚程度。一个健康的回购率可以为企业带来稳定的收入流,同时也是品牌口碑和市场影响力的有力证明。但是,当企业面临回购率下降的情况时,这通常是一个警示信号&a…

c++(六)

c(六) 多态概念在c中是如何实现多态静态多态(绑定)动态多态(绑定) 动态多态的实现原理动态内存分配中遇到的问题 重载、重定义、重写的区别抽象类接口类---抽象类空类对象的内存大小explicitfinal修饰类修饰…

串口调试助手中文乱码 解决方案

输出乱码 一般,当串口调试助手输出乱码时,可能有以下几个原因: 波特率设置错误:串口通信需要保证发送和接收的设备使用相同的波特率。请检查串口调试助手和目标设备的波特率设置是否一致。 数据位、停止位或校验位设置错误&…

java Web开发中采用Servlet登录验证,中文用户名始终提示“用户名密码错误”以及输出中文乱码问题

采用Servlet登录验证,中文乱码问题解决 在Java Web开发中,往往采用Servlet完成前后端直接的控制和处理,例如:用户登录验证功能。 在采用如下Servle源码t完成用户名登录验证时,只要用户名涉及中文,对于正确…

kafka-偏移量图解

生产者偏移量:生产者发送消息时写入到哪个位置(主题的每个分区会存储一个 leo 即将写入消息的偏移量),每次写完消息 leo 会 1 消费者偏移量:消费者从哪个位置开始消费消息,小于等于 leo,每个组…

电脑怎么清理c盘垃圾文件 电脑运行内存不足怎么清理

和Windows系统电脑文件分区不同,苹果电脑并不分区,默认只有C盘,当C盘垃圾文件过多,电脑运行内存不足时,手动清理电脑垃圾文件毫无头绪,可以尝试使用苹果电脑清理软件——CleanMyMac来清理 。 一、电脑怎么…

Stable Diffusion WebUI详细使用指南

Stable Diffusion WebUI(AUTOMATIC1111,简称A1111)是一个为高级用户设计的图形用户界面(GUI),它提供了丰富的功能和灵活性,以满足复杂和高级的图像生成需求。由于其强大的功能和社区的活跃参与&…

618局外人抖音:别人挤压商家“拼价格”,它默默联合商家“抢用户”?

文|新熔财经 作者|宏一 “618”来临之际,各电商平台和短视频平台早已打响了“促销大战”。不过,今年各大平台都更积极适应新的消费形式,调整了“大促动作”。 比如淘宝、京东带头取消了沿用十年之久的预售机制&…

【JS红宝书学习笔记】第4章 变量、作用域和内存

第4章 变量、作用域和内存 1. 原始值和引用值(面试题) ECMAScript 变量可以包含两种不同类型的数据:原始值和引用值。原始值(primitive value)就是最简单的数据(Undefined、Null、Boolean、Number、Strin…

windows上安装miniforge和jupyterlab

1,下载miniforge3 GitHub - conda-forge/miniforge: A conda-forge distribution. 下载下来后傻瓜式安装就可以了 配置环境变量,在系统环境变量的path添加下列就行了,根据自己的路径修改 2,创建虚拟环境 conda create -n test …

1比1万地形图符号库分享

我们在《1:2.5万、1:5万、1:10万军用地形图图式》一文中,为大家分享过军用地形图式。 还在《超实用三调符号库分享下载》一文中,为大家分享过三调符号库。 现在再为你分享一个1比1万的地形图符号库,请在文末查看符号…

四象限桌面怎么制作 结合桌面便签更高效

在繁忙的工作中,我们经常面临各种任务和项目的挑战,如何高效地管理这些任务成为提升工作效率的关键。这时候,四象限时间管理法就显得尤为重要。 四象限,即将工作按照紧急与重要程度分为四类:紧急且重要、紧急不重要、…

怎么从视频中提取音频?这里有三种提取妙招

怎么从视频中提取音频?在数字媒体日益丰富的今天,视频内容成为了信息传播的重要形式。但有时我们可能只需要视频中的音频部分,用于制作播客、音乐剪辑或语音分析等。幸运的是,技术的发展为我们提供了多种从视频中高效提取音频的方…

今日好料推荐(大数据湖体系规划)

今日好料推荐(大数据湖体系规划) 参考资料在文末获取,关注我,获取优质资源。 大数据湖体系规划 一、大数据湖简介 大数据湖(Data Lake)是一个集中式的存储库,用于存储来自各种来源的结构化和…

人工智能应用-实验5-BP 神经网络分类手写数据集

文章目录 🧡🧡实验内容🧡🧡🧡🧡代码🧡🧡🧡🧡分析结果🧡🧡🧡🧡实验总结🧡🧡 &#x1f9…

服务器内存与CPU要占用多少才合理?

一 通常服务器内存占用多少合理?cpu占用多少才合理? 1 通常配置范围建议: 建议CPU使用率不高于80%;内存使用率不高于80%; 注意:具体情况还需要根据服务器的实际负载和应用场景来判断。 2 内存使用率&…

【方法】如何禁止查看压缩包里的内容?

使用压缩文件,可以让文件更方便存储和传输,那对于重要的文件,如何防止随意查看压缩包的内容呢?我们可以试试以下两个方法。 方法1: 最常见的便是给压缩包设置“打开密码”,这样只有通过密码才能查看文件内…

MyBatis系统学习 - 使用Mybatis完成查询单条,多条数据,模糊查询,动态设置表名,获取自增主键

上篇博客我们围绕Mybatis链接数据库进行了相关概述,并对Mybatis的配置文件进行详细的描述,本篇博客也是建立在上篇博客之上进行的,在上面博客搭建的框架基础上,我们对MyBatis实现简单的增删改查操作进行重点概述,在MyB…

产品推荐 | 基于Xilinx Zynq-7015 FPGA的MYC-C7Z015核心板

一、产品概述 基于 Xilinx Zynq-7015,双Cortex-A9FPGA全可编程处理器;PS部分(ARM)与PL部分(FPGA)之间采用AXI高速片上总线通信,吉比特级带宽,突破传统ARMFPGA架构的通信瓶颈,通过PL部分(FPGA)灵活配置丰富的外设接口&…

windows 安装 使用 nginx

windows 安装 使用 nginx nginx官网下载地址:https://nginx.org/en/download.html 下载稳定版本即可 下载压缩包解压到即可 进入文件夹中,打开命令行窗口,执行启动命令 start nginx.exe验证(默认是80端口)&#x…