陳霖凱
最近朋友A向我訴苦:“總有人趁我不在的時候偷用我的電腦,不是打亂桌面的圖標順序,就是刪除我的文件。你能幫我想個辦法,找到偷用我電腦的‘真兇’嗎?”
要抓到“真兇”,就得找到其偷用電腦的證據(jù),最好的證據(jù)就是留下相關(guān)的影像!最初,我建議A用電腦自帶的攝像頭充當(dāng)監(jiān)控器。但研討后我們發(fā)現(xiàn),電腦自帶的攝像頭錄制的視頻時間過長,不便于快速查找“真兇”,所以這個方案被否定了。
于是我便思考,能否讓筆記本電腦上自帶的攝像頭在有人靠近電腦時自動拍照,記錄“真兇”的影像證據(jù),以便找出“真兇”?
我提出的第一版方案是使用python對攝像頭返回的每一幀進行處理,識別出人臉并拍照。這個方案主要通過opencv庫及其內(nèi)置的人臉檢測分類器工作,技術(shù)較成熟,進行相關(guān)的開發(fā)也十分便捷。
編寫程序后,我發(fā)現(xiàn)這個方案存在如下兩個問題。
1.該方案在識別人臉時,易受外部環(huán)境的干擾而導(dǎo)致識別失敗。例如,用一張紙遮住人臉的下半部分后,程序便無法確認攝像頭傳回的畫面中有無人臉。如果“真兇”稍加偽裝,遮住人臉的某些特征部位,程序便無法識別。
2.該方案對電腦資源占用過大,性能不佳的電腦運行程序時易導(dǎo)致系統(tǒng)崩潰(朋友A的電腦就因為性能不佳而出現(xiàn)了這樣的情況)。
為解決上述問題,我又開始思索:既然基于人臉的識別方式不夠精準,能否對人體的其他特征進行監(jiān)測?
人體會向外輻射紅外光,紅外光很難被屏蔽。所以,我想使用Arduino這一開源創(chuàng)客神器與人體紅外感應(yīng)模塊來找出“真兇”。只要“真兇”進入感應(yīng)模塊的感應(yīng)區(qū)域,紅外感應(yīng)模塊就會通過高低電平的變化向Arduino控制板發(fā)出信號,Arduino通過USB線與電腦進行串口通信,電腦中運行的上位機程序收到串口傳來的信號后,通過接口調(diào)用攝像頭自動抓拍。
圖2為根據(jù)上述方案做的裝置半成品,但缺少了3D打印的外殼。該裝置的主控是一塊Arduino Uno,傳感器部分使用了人體紅外感應(yīng)模塊HC-SR501,用一根數(shù)據(jù)線與電腦連接,通過串口與電腦端的python腳本通信,操控電腦攝像頭拍照。Arduino的具體接線如圖3。
人體紅外感應(yīng)模塊HC-SR501價格低,按照上圖連接性能也可以滿足該項目的需求。這個傳感器有可重復(fù)和不可重復(fù)兩種觸發(fā)模式。我選擇的是默認不可重復(fù)觸發(fā)模式,即感應(yīng)輸出高電平后,延時時間一結(jié)束,輸出將自動從高電平變?yōu)榈碗娖?。模塊上有兩個可用螺絲刀調(diào)節(jié)的旋鈕,可根據(jù)自身情況,調(diào)整探測距離等參數(shù)。
接下來是編寫Arduino與python腳本的具體程序。將Arduino程序輸入開發(fā)板中,運行python腳本(注意,應(yīng)將python腳本中的端口號改為自己的電腦對應(yīng)的端口號,可以通過Arduino IDE查看),先等待傳感器初始化(初始化的過程大概耗時一分鐘),將裝置擺在合適的位置,傳感器探頭指向需要探測的方向,例如與電腦屏幕對準同一方向,即“真兇”可能出現(xiàn)的方向,然后就可以開啟Arduino并正常工作了。
當(dāng)有人靠近傳感器時,電腦會自動拍照。測試時,我模仿“真兇”靠近傳感器,該裝置立即自動拍照。測試成功!
我已經(jīng)將這個小裝置及腳本的資料發(fā)給了A,希望他能早日找到“真兇”!
發(fā)明與創(chuàng)新·中學(xué)生2022年5期