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