零基础打造全屋智能控制系统 篇三十:45元的WIFI摄像头应用之YOLO人体识别
如果大家对智能家居比较感兴趣的话,一定知道阻碍智能家居自动化发展的一个大问题就是,房间里有没有人,如果有人,那人究竟在做些什么,系统又该如何调整环境的照明,温度甚至安防。
在很长的时间里,我们检测人体都依靠两类设备,一类是热释电红外传感器,例如Aqara/小米人体传感器:
说明里面已经说的很清楚了,检测人或宠物移动,所以不动肯定是检测不到的,很多人都把这锅扔给小米背,但实际上,不管是哪个品牌,都做不到静止检测。还有一类叫做微波传感器,例如最近在智能家居玩家群里讨论的很热烈的静止人体传感器:
这个传感器号称可以检测静止人体,不过在企业官方的文档中明确写道:动态探测距离 6-8 米,静态探测距离最大2 米; 而其静态探测是检测人的微小动作,例如呼吸啥的。并且安装位置要与人体平行:
大家其实也可以看出来,这个号称静止人体检测的玩意,实际上也就是个动作传感器,只是灵敏度非常高罢了。先不说安装问题,微波传感器的灵敏度高了之后,电风扇,空调,任何轻微动作都可能触传感器动作。
除了这两种外,本站值友@blindlight正在实验利用无线信号来检测人体,参考文档:
大概意思是用一圈WIFI设备把房间围起来,然后实时监测各个节点的WIFI信号变化,来推断哪里有人。听上去不是啥难事,但是实际上应用起来还是要动些脑筋,我表示能看懂意思,但是抱歉,我做不来,相信看文的各位大部分人也搞不定,所以这里介绍一个大家都能玩的玩意——YOLO。
一、YOLO简介
大道理不说,其实我也不懂,这里大家只要知道YOLO的全称是You only look once,也就是你就看了一眼,看了一眼怎么了呢,看了眼就知道是什么了,这是一个基于深度学习方法的端到端实时目标检测系统。其主要特点一是快,二是安装使用简单,在ubuntu下只需要4条命令就可以开始工作。以下片段来自CSDN @泉伟
不过根据他文中的介绍,他使用的配置为1080Ti,使用YOLO v3原始权重,Resize以后的图片大小为608*608,检测速度可以达到20帧每秒。当然,如果使用tiny权重的话速度会快很多。除了人之外,YOLO还能检测其他常见物体,例如宠物:
不过说实话,如果只是检测有没有人的话,即使不用1080TI,开一台PC我都觉得有些浪费。所以这篇的主旨其实是利用树莓派来实现静态图片的检测。
二、树莓派安装darknet-nnpack
之前说了,如果在ubuntu上安装YOLO的话只需要3条命令:
git clone https://github.com/pjreddie/darknet
cd darknet
make
然后下载权重文件,权重文件分两个版本,一个是标准的,一个是轻量(Tiny)的:
wget https://pjreddie.com/media/files/yolov3.weights(标准版)
wget wget https://pjreddie.com/media/files/yolov3-tiny.weights(TINY版)
一般来说,标准版的检测准确率会高很多,但是非常非常慢(2400G单线程虚拟机下检测一张大约要30秒+),没有GPU加速是没有应用价值的,所以日常CPU使用都使用TINY版的权重(2400G单线程虚拟机下检测一张大约要2秒+),虽然准确率差了一些,但是找找人啊,猫狗也已经足够。但是标准版的Dakrnet在树莓派3b上面跑的话即使是tiny权重,也要40秒左右一张,显然是没有任何实用价值的。所以如果在树莓派上运行的话,我们需要针对无GPU并且ARM芯片进行优化过的darknet-nnpack。通过它来运行YOLO,我们能将tiny的识别速度提高到1秒/张左右,虽然依旧做不了实时检测,但是考虑到无论是硬件成本,还是运行成本(电费),树莓派都是性价比之选。
当然,根据此表,X86平台使用darknet-nnpack也能获得非常不错的优化速度。而安装只要参照darknet-nnpack的github页面一步步做下去就好,这里就不再复制粘帖了,全程无坑,而在下载weights文件时我们只要下载tiny版的就好:
全部完成后我们可以利用自带图片测试下:
./darknet detector test cfg/coco.data cfg/yolov3-tiny.cfg yolov3-tiny.weights data/person.jpg
运行速度不错,1.1秒就完成了识别,只是load weights还需要3-4秒,总体上在5秒左右。这里值得说明的是,命令的默认参数是输出准确率超过25%的物体,我们可以根据自身环境来调整参数:
./darknet detector test cfg/coco.data cfg/yolov3-tiny.cfg yolov3-tiny.weights data/person.jpg -thresh 0.1
例如这个就是输出准确率10%以上的物体。
三、接入摄像头
这里我使用的是上一篇原创提到的45元的ESP32-CAM摄像头模块:
当然,你要是其他摄像头,只要能获取到静态JPG文件也都可以使用,这个摄像头没有夜视,视角也比较小,如果有大范围以及夜间检测需求的话其实并不是很合适。不过这里要提醒的是,红外补光摄得的黑白图像YOLO的识别率会进一步降低。调整好摄像头角度,确保人在厨房的每个角落,YOLO都能把人找出来。
这个摄像头最大的好处是,可以直接通过http获取JPG静态图像,所以我这做了个批处理文件,首先是获取静态影像到指定文件夹,然后运行detector来进行识别:
当然,这样只是跑程序识别,结果并不会输出到其他系统,所以我又拼拼凑凑搞了个PY文件,对结果进行分析,数输出结果里面有几个person:
然后将person数量传送给domoticz变量:
最后就是应用了,因为不是实时检测,所以用来自动化开灯啥的是不可能了,但是配合小米红外做到更快的自动关灯还是非常方便的,例如原先我们都是设定人体传感器检测到几分钟后无人关灯,现在就可以配合这个变量,在人体传感器检测到无人时去查看摄像头检测到的结果,如果是0就直接关灯,不用再等待几分钟。
当然,本篇的YOLO只是利用其现成的库做的简单应用,并没有完全展示出YOLO的威力。深入应用的话可以自行训练得到模型,来判断更多的内容,例如你是在看电视,玩手机,还是睡觉等等。或者垃圾倒没倒,碗有没有洗啥的。
mail
校验提示文案
sunbox
校验提示文案
史蒂夫不健康
校验提示文案
但是我很温柔
校验提示文案
别值了买不起
校验提示文案
值友皮皮
校验提示文案
值友4233862494
校验提示文案
relx
校验提示文案
青椒炒肉5178
校验提示文案
值友4859411259
校验提示文案
信节
校验提示文案
梦到熬夜
校验提示文案
mayat
校验提示文案
仿真时光
校验提示文案
vase11z
校验提示文案
无名lt
校验提示文案
underway
校验提示文案
啥都被注册了咋办呀
校验提示文案
reallygeek
校验提示文案
坑爹呢
校验提示文案
imjacob
就显示段错误了
校验提示文案
Rigggggg
校验提示文案
Rigggggg
校验提示文案
口___口
校验提示文案
大博张
校验提示文案
yellow_captain
校验提示文案
值友4859411259
校验提示文案
青椒炒肉5178
校验提示文案
underway
校验提示文案
加菲1012
校验提示文案
lediet社长
校验提示文案
QualityEngineer
校验提示文案
frank_0713
校验提示文案
dcl2501
校验提示文案
maxmins
校验提示文案
qwerty1988
校验提示文案
小九硫酸铜
校验提示文案
知返哥哥
校验提示文案
FrankLi2014
校验提示文案
值友1702964319
校验提示文案