挑戰(zhàn)
在家里和辦公室里,人們很容易看到燈沒關(guān),即使附近幾乎沒有人。
除了花費(fèi)更多,這種照明對(duì)環(huán)境也有負(fù)面影響。我們?cè)絹碓揭蕾囉邢薜摹⒉豢稍偕哪茉磥戆l(fā)電,而這些能源經(jīng)常被浪費(fèi)。
雖然我們?cè)诩抑械哪茉词褂昧渴敲x上的,但在辦公室中,使用量要多得多。因此,對(duì)環(huán)境和成本的負(fù)面影響要多得多。這需要我們采取積極行動(dòng)。
當(dāng)張貼“請(qǐng)?jiān)陔x開前關(guān)燈”的標(biāo)志影響很小或沒有影響時(shí),考慮到燈的數(shù)量、覆蓋面積和其他因素,損失的幅度更大。讓某人通過每次都關(guān)掉燈來解決過度照明的問題是不可行的。人類的記憶是易變的,不可依賴。
讓我們了解一下單個(gè)燈泡的影響。一個(gè)10瓦的燈泡每小時(shí)耗電0.01千瓦(kWh)。假設(shè)1千瓦時(shí)的成本為12美分。那么,在不需要時(shí)點(diǎn)亮的每10瓦燈泡將花費(fèi)每小時(shí)0.12美分。
我們會(huì)讓你的基本算術(shù)技能來計(jì)算整個(gè)辦公室的總成本,方法是用燈的數(shù)量乘以上面的數(shù)字。
那么我們?nèi)绾谓鉀Q這個(gè)問題呢?
雖然市場(chǎng)上有很多智能控制和自動(dòng)化解決方案,但大多數(shù)解決方案需要定期設(shè)置額外的硬件,并導(dǎo)致額外的維護(hù)成本。
有沒有更好的方法來應(yīng)對(duì)這一挑戰(zhàn)?
所有辦公場(chǎng)所都設(shè)置了攝像頭來監(jiān)控該區(qū)域。我和同事們集思廣益,通過最少的投資來解決這個(gè)問題。
可以使用這些捕捉不同幀的相機(jī)來自動(dòng)關(guān)閉燈光?
方案
解決方案是通過計(jì)算機(jī)的眼睛——通過計(jì)算機(jī)視覺——表達(dá)我們節(jié)約能源的意圖。
那么計(jì)算機(jī)視覺到底是什么呢?
“計(jì)算機(jī)視覺,通常縮寫為CV,被定義為一個(gè)研究領(lǐng)域,旨在開發(fā)幫助計(jì)算機(jī)‘看到’和理解照片和視頻等數(shù)字圖像內(nèi)容的技術(shù)。”
該系統(tǒng)將觀察來自攝像機(jī)的輸入流,這基本上是攝像機(jī)的視野。每個(gè)捕獲的幀被劃分為4個(gè)區(qū)域。如果某個(gè)區(qū)域中沒有人,則屬于該區(qū)域的燈光將關(guān)閉。
這個(gè)解決方案是用opencv4 Nodejs實(shí)現(xiàn)的,用于流行的開源計(jì)算機(jī)視覺庫OpenCV。連同socket.io和express用于渲染一個(gè)web應(yīng)用程序,以顯示實(shí)時(shí)視頻流并模擬燈光的打開和關(guān)閉。
實(shí)施步驟
1.導(dǎo)入所需的庫。
constsocketIOProvider=require('socket.io'); constcv=require('opencv4nodejs');
2.開始從相機(jī)捕捉視頻源。
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.讀取并以常規(guī)幀速率將其流式傳輸?shù)?a href="http://www.nxhydt.com/v/tag/1722/" target="_blank">網(wǎng)絡(luò)應(yīng)用程序。
setInterval(()=>{ constframe=videoCap.read(); constimage=cv.imencode('.jpg',frame).toString('base64'); io.emit('new-frame',{live:image}); },1000/fps);
4.以大于實(shí)時(shí)流的間隔讀取以確定用戶存在。
/** *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分類器檢測(cè)人。在這個(gè)解決方案中,使用了“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.在框架上標(biāo)記面部,以便可視化檢測(cè)。
/** *Drawingrectsaroundfacesonframe */ constdrawFaces=(frame,faceRect)=>{ constrect=cv.drawDetection(frame,faceRect,{ color:newcv.Vec(255,0,0), segmentFraction:4 }); };
7.確定人們相對(duì)于框架的位置,以確定他們所在的區(qū)域,從而只照亮那些部分。確定的結(jié)果隨后被發(fā)送到網(wǎng)絡(luò)應(yīng)用程序進(jìn)行照明模擬。更改燈泡顏色以模擬要照亮的區(qū)域。
結(jié)論
這是展示技術(shù)如何通過節(jié)約能源來改善地球的眾多例子之一。你還可以通過這個(gè)簡(jiǎn)單的實(shí)現(xiàn)學(xué)習(xí)如何解決常見的工作場(chǎng)所挑戰(zhàn)。
上述解決方案的源代碼:https://github.com/Mudassir-23/opencv-nodejs-energy-saver
編輯:黃飛
-
計(jì)算機(jī)視覺
+關(guān)注
關(guān)注
8文章
1696瀏覽量
45927 -
nodejs
+關(guān)注
關(guān)注
0文章
20瀏覽量
4221
原文標(biāo)題:利用計(jì)算機(jī)視覺和NodeJS實(shí)現(xiàn)燈光自動(dòng)化
文章出處:【微信號(hào):3D視覺工坊,微信公眾號(hào):3D視覺工坊】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論