挑戰
在家里和辦公室里,人們很容易看到燈沒關,即使附近幾乎沒有人。
除了花費更多,這種照明對環境也有負面影響。我們越來越依賴有限的、不可再生的能源來發電,而這些能源經常被浪費。
雖然我們在家中的能源使用量是名義上的,但在辦公室中,使用量要多得多。因此,對環境和成本的負面影響要多得多。這需要我們采取積極行動。
當張貼“請在離開前關燈”的標志影響很小或沒有影響時,考慮到燈的數量、覆蓋面積和其他因素,損失的幅度更大。讓某人通過每次都關掉燈來解決過度照明的問題是不可行的。人類的記憶是易變的,不可依賴。
讓我們了解一下單個燈泡的影響。一個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
編輯:黃飛
-
計算機視覺
+關注
關注
9文章
1706瀏覽量
46569 -
nodejs
+關注
關注
0文章
21瀏覽量
4381
原文標題:利用計算機視覺和NodeJS實現燈光自動化
文章出處:【微信號:3D視覺工坊,微信公眾號:3D視覺工坊】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
評論