挑战
在家里和办公室里,人们很容易看到灯没关,即使附近几乎没有人。
除了花费更多,这种照明对环境也有负面影响。我们越来越依赖有限的、不可再生的能源来发电,而这些能源经常被浪费。
虽然我们在家中的能源使用量是名义上的,但在办公室中,使用量要多得多。因此,对环境和成本的负面影响要多得多。这需要我们采取积极行动。
当张贴“请在离开前关灯”的标志影响很小或没有影响时,考虑到灯的数量、覆盖面积和其他因素,损失的幅度更大。让某人通过每次都关掉灯来解决过度照明的问题是不可行的。人类的记忆是易变的,不可依赖。
让我们了解一下单个灯泡的影响。一个10瓦的灯泡每小时耗电0.01千瓦(kWh)。假设1千瓦时的成本为12美分。那么,在不需要时点亮的每10瓦灯泡将花费每小时0.12美分。
我们会让你的基本算术技能来计算整个办公室的总成本,方法是用灯的数量乘以上面的数字。
那么我们如何解决这个问题呢?
虽然市场上有很多智能控制和自动化解决方案,但大多数解决方案需要定期设置额外的硬件,并导致额外的维护成本。
有没有更好的方法来应对这一挑战?
所有办公场所都设置了摄像头来监控该区域。我和同事们集思广益,通过最少的投资来解决这个问题。
可以使用这些捕捉不同帧的相机来自动关闭灯光?
方案
解决方案是通过计算机的眼睛——通过计算机视觉——表达我们节约能源的意图。
那么计算机视觉到底是什么呢?
“计算机视觉,通常缩写为CV,被定义为一个研究领域,旨在开发帮助计算机‘看到’和理解照片和视频等数字图像内容的技术。”
该系统将观察来自摄像机的输入流,这基本上是摄像机的视野。每个捕获的帧被划分为4个区域。如果某个区域中没有人,则属于该区域的灯光将关闭。
这个解决方案是用opencv4 Nodejs实现的,用于流行的开源计算机视觉库OpenCV。连同socket.io和express用于渲染一个web应用程序,以显示实时视频流并模拟灯光的打开和关闭。
实施步骤
1.导入所需的库。
constsocketIOProvider=require('socket.io'); constcv=require('opencv4nodejs');
2.开始从相机捕捉视频源。
constfps=30;//framespersecond /** *videosourcesetto0forstreamfromwebcam *videosourcecanbeseturlfromipcamalsoeg:"http://192.168.1.112:8080/video" */ constvideoSource=0; constvideoCap=newcv.VideoCapture(videoSource); videoCap.set(cv.CAP_PROP_FRAME_WIDTH,600); videoCap.set(cv.CAP_PROP_FRAME_HEIGHT,600);
3.读取并以常规帧速率将其流式传输到网络应用程序。
setInterval(()=>{ constframe=videoCap.read(); constimage=cv.imencode('.jpg',frame).toString('base64'); io.emit('new-frame',{live:image}); },1000/fps);
4.以大于实时流的间隔读取以确定用户存在。
/** *Sincevideo/imagetransformationsarecomputionallyexpensiveoperations,theseoperationsareperformedindependentoflivefeedstreaming. */ setInterval(()=>{ constframe=videoCap.read(); constfaces=detectFaces(frame); constimageWithFaces=cv.imencode('.jpg',frame).toString('base64'); io.emit('new-frame',{transformed:imageWithFaces,transformationData:calculatePeoplePosition(frame,faces)}); },10000/fps);
5.使用任何OpenCV分类器检测人。在这个解决方案中,使用了“HAAR正面人脸分类器”。
/** * *Facedetectiontransformationonthestream */ constdetectFaces=(frame)=>{ letfaces=[]; constimage=frame.bgrToGray(); constclassifier=newcv.CascadeClassifier(cv.HAAR_FRONTALFACE_ALT2); constresults=classifier.detectMultiScale(image); if(results.objects.length){ results.objects.forEach((faceRect,i)=>{ if(results.numDetections[i]< 1) { return; } drawFaces(frame, faceRect); faces.push(faceRect); }); } return faces; };
6.在框架上标记面部,以便可视化检测。
/** *Drawingrectsaroundfacesonframe */ constdrawFaces=(frame,faceRect)=>{ constrect=cv.drawDetection(frame,faceRect,{ color:newcv.Vec(255,0,0), segmentFraction:4 }); };
7.确定人们相对于框架的位置,以确定他们所在的区域,从而只照亮那些部分。确定的结果随后被发送到网络应用程序进行照明模拟。更改灯泡颜色以模拟要照亮的区域。
结论
这是展示技术如何通过节约能源来改善地球的众多例子之一。你还可以通过这个简单的实现学习如何解决常见的工作场所挑战。
上述解决方案的源代码:https://github.com/Mudassir-23/opencv-nodejs-energy-saver
编辑:黄飞
-
计算机视觉
+关注
关注
8文章
1698浏览量
45972 -
nodejs
+关注
关注
0文章
20浏览量
4228
原文标题:利用计算机视觉和NodeJS实现灯光自动化
文章出处:【微信号:3D视觉工坊,微信公众号:3D视觉工坊】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论