謝作如
說起“電子眼”,司機(jī)們都不陌生。遍布城市各道路路口的“電子眼”(如圖1),在維護(hù)交通秩序的工作中發(fā)揮了重要的作用。但是我并不是要討論“電子眼”原理之類的問題,而是嘗試用攝像頭來做一個(gè)“電子眼”,研究如何實(shí)現(xiàn)可觸發(fā)拍照。
● 觸發(fā)拍照的條件分析
“電子眼”的核心功能在于觸發(fā)拍照。但是如何觸發(fā)呢?不同的觸發(fā)條件,要采用的解決方案肯定是不一樣的。如果僅僅希望按下鼠標(biāo)或者鍵盤就拍照,我們隨便找一款支持拍照或者截圖功能的攝像頭軟件就能實(shí)現(xiàn),如下頁圖2所示的是支持拍照功能的“Juncy魔鏡之家”工作界面。
順便提一下,makey makey和酷樂宅都可以模擬鼠標(biāo)、鍵盤的動(dòng)作,結(jié)合“魔鏡之家”之類的攝像頭軟件,我們完全可以不用編程,就能實(shí)現(xiàn)用戶觸碰一下任何可以導(dǎo)電的物體,隨之?dāng)z像頭自動(dòng)保存照片的功能,其原理如下頁圖3所示。
當(dāng)然,使用makey makey做觸發(fā)拍照太簡(jiǎn)單了,沒有挑戰(zhàn)性。因此,我選擇用各種傳感器來感知種種常見的觸發(fā)事件,如用紅外熱釋電傳感器判斷是否有人來,用紅外測(cè)障判斷是否出現(xiàn)某種物體,或者用聲音傳感器來觸發(fā),只要有聲音,就拍照。要實(shí)現(xiàn)這類條件的觸發(fā),自然而然要用到Arduino這一神器了。
● 作品原理分析
按理說拍照應(yīng)該用照相機(jī),通過快門線來控制照相機(jī)也并非很困難。但是考慮到普適性,用高清攝像頭來實(shí)現(xiàn)比較方便。
本作品的工作原理如圖4所示。從制作材料看,大致需要傳感器、Arduino、計(jì)算機(jī)和攝像頭。
我選擇了紅外熱釋電傳感器(如圖5)。這一傳感器能檢測(cè)人或動(dòng)物身體發(fā)射的紅外線而輸出電信號(hào)的傳感器,輸出開關(guān)信號(hào),可以應(yīng)用于各種需要檢測(cè)運(yùn)動(dòng)人體的場(chǎng)合。在淘寶上,這種傳感器的價(jià)格在20~50元之間。
● 電腦端的攝像頭編程
Processing是由MIT媒體實(shí)驗(yàn)室美學(xué)與運(yùn)算小組開發(fā)的一款專為設(shè)計(jì)師和藝術(shù)家使用的編程語言,以交互為特色。Processing可以通過串口和Arduino進(jìn)行互動(dòng),同時(shí)支持?jǐn)z像頭的視頻編程,用來實(shí)現(xiàn)觸發(fā)拍照比較容易。
Processing的下載地址:http://www.processing.org,是一個(gè)綠色軟件,解壓就可以使用。
首先要導(dǎo)入兩個(gè)庫,processing.video為攝像頭的庫,processing.serial則為串口通訊的庫。因?yàn)镻rocessing庫的使用一般都比較簡(jiǎn)單,所以代碼并不復(fù)雜。具體的代碼如下頁圖6所示。
為了讓Processing保存的圖片不會(huì)被覆蓋,我寫了一個(gè)getfile( )函數(shù),用系統(tǒng)時(shí)間和程序運(yùn)行時(shí)間組成一個(gè)有規(guī)律的文件名。
注意:如果你直接運(yùn)行上述的代碼,Processing可能會(huì)給出錯(cuò)誤提示。一般來說,是因?yàn)槟愕挠?jì)算機(jī)沒有串口設(shè)備引起的,安裝Arduino的驅(qū)動(dòng)后就可以正常運(yùn)行。
● Arduino端的觸發(fā)器制作
觸發(fā)器其實(shí)就一個(gè)傳感器加Arduino核心板。為幫助大家打開思路,在左表中我選擇了幾個(gè)常見的傳感器進(jìn)行說明。當(dāng)然,如果要實(shí)現(xiàn)比較復(fù)雜的條件判斷,可能需要更多的傳感器組合。
如果僅僅是單個(gè)傳感器,Arduino的編程是很簡(jiǎn)單的。只要在高電平的狀態(tài)下,發(fā)送1給Processing即可。用ArduBlock、Mixly等圖形化編程軟件,都能實(shí)現(xiàn)這樣的功能。我將紅外熱釋電傳感器接到Arduino的4號(hào)引腳,具體的代碼如下頁圖7所示。
● 效果測(cè)試和優(yōu)化
將程序下載到Arduino后,就可以測(cè)試了。下頁圖8為程序界面,下頁圖9為定時(shí)拍攝并保存的照片。
需要提醒大家的是,照片拍攝的質(zhì)量和攝像頭像素和速度有關(guān)系。據(jù)說市場(chǎng)上已經(jīng)有幀數(shù)高于150/秒的攝像頭。從功能上看,我們已經(jīng)完成了預(yù)設(shè)的目標(biāo),實(shí)現(xiàn)了類似“電子眼”的觸發(fā)拍照。如果把代碼遷移到樹莓派之類的迷你PC里,這個(gè)作品就有了一定的應(yīng)用價(jià)值。其實(shí),利用Processing強(qiáng)大和簡(jiǎn)介的視頻處理庫,我們還可以做更多和攝像頭相關(guān)的應(yīng)用,如延時(shí)攝像、定時(shí)攝像,等等,請(qǐng)關(guān)注下一期的文章。