基於視覺獲取的互動裝置實現方案

作品電路部分的實現

2013年05月

在構思作品的早期,計劃使用視覺識別學界極其有名的OpenCV解決方案,但是由於作品完成時間和知識儲備的限制,OpenCV只能作為備選方案保存。

計算機視覺識別是一個極其複雜的技術,也是當今學界研究的熱點問題。主要難點涉及到高速圖像的實施捕捉、高幀率圖像的並行動態處理、數據結果集的最終處理和人臉庫建模等等,具有極高的難度。在當今計算機界,這都是一個極其難以完美實現的複雜項目。

作為一個裝置互動藝術作品,最終的技術實現終究只是一個藝術手段,而非工程發明創造。在權衡了各種技術方案之後,考慮大膽啟用一些更加前衛的、更加取巧的方案。

(一)視覺獲取

我的裝置作品中需要用到一個視覺總控制系統,用來獲取視場的視頻圖像信號。在視覺獲取的硬體部分,我使用了個人PC上的常見的USB介面針腳攝像頭,選用通用的民用級硬體設備,既節約了成本開支,也可以得到更加穩定和比較優良的景深和適當的鏡頭廣角度,為下一步的視頻處理單元,採集準備更好的原始素材信號。

我通過最新的HTML5網頁技術標準,使用全新的V24.0 Google Chrome瀏覽器來進行攝像頭開啟和信號捕捉。在拾取了多幀視頻信號後,傳入視覺識別模塊進行圖片的重新採樣和計算。

由於使用了HTML5的新技術,在項目實現到這個階段,也遇到了難點。就是HTML5作為一種新技術,其性能和穩定性還有待改進。高強度的人臉數據計算和線框繪製,需要消耗大量的CPU(計算機中央處理器)和顯卡計算資源,通過適當的優化計算機程序演算法實現,減低演算法的複雜度,以及提高其在複雜環境、複雜應用和高負載環境下的魯棒性,是可以將其實用化的。這本身也是對於前衛互聯網技術的超前應用,值得我們去嘗試。

這裡需要提到一點,就是捕獲攝像頭的視場大小是我們需要注意的。小視場鏡頭,雖然其鏡頭扭曲小,可以真實的還原物體和人像的真實比例和坐標,但是也會對實驗作品的交互活動觸發範圍有很大的限制。如果使用了廣角鏡頭,我們就需要對鏡頭的扭曲進行一個糾正和測算。這點上,我們可以使用普通光學中的地平線原理和視場歸一定律,來進行演算法實現。

在使用演算法糾正後的廣角圖像,基本上已經可以作為合格的「原始物料」送完下一個環節。

(二)視覺識別

我利用英文互聯網世界豐富的資料,從頭開始學習國外最新的程序技術。其中就有使用HTML5完成人臉識別的成功案例。看到這裡,我興奮非常,迫不及待的開始學習相關的知識和代碼。經過一段時間的摸索和學習檢驗,我了解到了開源腳本Headtrackr。在Google Chrome瀏覽器中體驗了它的驚人識別率和神奇效果之後,我就打算徹底使用Headtrackr Javascript腳本作為進行人臉動態捕捉的工具和選框繪製的計算工具。

目前的WebKit內核中的HTML5組件支持最新的API特性,包括本數據存儲、CSS3樣式表渲染引擎和最新的動態Tip通知等等,我的作品利用到的是其畫布繪製的新特性。我可以使用畫布繪製、攝像頭對象的獲取處理,來最終實現對人臉影像的坐標拾取。

人臉識別的核心原理其實是通過將USB攝像頭採集到的場景圖像進行二值化處理。二值化就是將場景的所有像素信息進行二值切分。即亮度值大於128的,計算為1,亮度低於128的計算為0,這樣可以減少圖像的信息量,只需要統計二維的亮度值即可,而排除了顏色、噪音的干擾。

在二值化之後,我們的場景圖像只剩下黑與白的結果集了,物體的輪廓、特徵、連接處、交叉形變就可以使用數據處理而得到。當然,這是一個很難的數學過程,需要藉助大量的基礎數學演算法,運用矩陣、聚類、特徵分析等過程,然後實現對人臉的基礎結構識別。這裡的人臉,只是一個基礎結構,並沒有識別出眼球、毛髮、表情、鼻子、嘴巴的相對位置。而是對人頭大體位置的折中判斷,這裡面就存在一個噪音污染的情況,這是不可避免的。具體的降噪,目前在這個項目中,還沒有被用到,因為降噪需要編寫更多的降噪演算法和做更多的模型試驗,這在目前的時間進度安排上,無法實現的。我會在以後的作品中,繼續完善,讓其更加實用化。

在識別了人臉範圍的大致中心點後,將其轉化為一個字元串對象(X,Y),通過AJAX傳入PHP執行模塊。

PHP是Hypertext Preprocessor的英文縮寫,是一種超文本預處理語言。PHP通過對腳本程序的預處理,生成最終的機器執行代碼,是一種預處理的腳本程序。PHP在程序語言上的風格有類似於C語言,被各大網站應用。在2013年的今天,PHP早就成為了世界上主流的WEB伺服器腳本,幾乎是所有Linux WEB伺服器的標準配置。有極高的成熟度和極大的應用廣泛性。

在作品的設計中,使用PHP作為WEB腳本其實是很多綜合原因的。PHP腳本不需要編譯和複雜的編程配置環境,也不需要各種複雜的IDE開發環境,僅僅是需要一個記事本,就可以完成代碼的開發工作。這樣方便我的作品在不同的展覽中,可以輕鬆方便的調校,有很強的現場布展能力和環境適應度,減少了各種人力的支出和不必要的麻煩。還有一個原因是因為PHP代碼簡單,易於開發,對於錯誤的容忍度遠遠高於JAVA、C、C++等非腳本程序開發語言。這樣減少了個人的時間投入,也降低了對編程技能的要求,是一個性價比較高而且較成熟的應用方案。

AJAX是在WEB1.0時代之後的WEB2.0時代中,發展出的高性能、低粒度的綜合技術解決方案。常常被應用於各種高交互度的場合,比如現在最流行的網路應用QQ空間、新浪微博、人人網和豆瓣網等等,都大量的使用了AJAX技術,以提升其使用性能和用戶交互體驗。AJAX本身並不是一種單獨的程序技術,它是基於現代瀏覽器的Javascript引擎和WEB伺服器的CGI腳本的一種複合技術。由於傳統的HTTP協議,是一種基於超文本傳輸的無狀態通信協議,這意味著,瀏覽器無法實時的和WEB伺服器通信。而AJAX的出現,在某種程度上,緩解了實時性和HTTP使用廣泛性之間的矛盾。AJAX可以在頁面不刷新的情況下,實現GET/POST方法傳輸數據到WEB伺服器腳本中。這樣就大大減小了數據傳輸量和提高了可維護性

(三)計算機串口通信

計算機串口通信,是一種非常古老非常有效的計算機系統傳輸數據的解決方案。在大量的基礎設備和各種手持終端中被廣泛使用。最早的串口通信採用了標準的RS-232串口。隨著時代的發展,串口RS-232過大的針腳給設備微型化帶來了不便。很多的新品筆記本電腦、個人台式PC主板已經不帶有RS-232介面了。但是在USB2.0介面全面應用的今天,我們通過USB虛擬串口即可實現單片機和PC埠之間的信息通信了。

選用19200的波特率是因為程序設置在這個波特率上,大部分機械結構工作穩定,對單片下位機的性能要求不高,容錯率高。我還關閉了串口通信的「末尾奇偶校驗機制」也採用了8為數據幀格式,最終就是為了達到高效的通信和執行效率。

PC端的上位機採用了一個巧妙的解決方案,通過Javascript腳本獲取到人臉坐標的(X,Y)數組後,通過執行setTimeOut延時函數,不斷的操作AJAX引擎與WEB CGI腳本通信。通過GET方式,將參數Value值(X,Y)傳入本機Win環境下的Apache伺服器80埠,之後,通過PHP腳本的文件流操作,實現高速實時動態讀寫Temp.txt過渡中繼文件。

為了提高PHP的執行速度,可以使用自己在Linux主機上重編譯的PHP解析引擎,去除各種過渡函數和判斷流程,這樣可以最大限度的提高程序系統的穩定性,防止程序執行中途出現錯誤。提高PHP的執行速度有多種方法,比如對所有的雙引號進行修改,修改為單引號使用。因為PHP腳本在執行的過程中,會對雙引號中的內容進行一次的判斷,這樣演算法執行的複雜度將變的很高。通過不斷的修正PHP程序和精簡PHP腳本解析引擎,最終的PC端執行效率,還是基本令人滿意的。

設置Temp.txt文件的目的在於PC的Javascript腳本受限於瀏覽器的本地安全設置,無法直接和串口進行通信,這樣人臉識別出來的結果集數組(X,Y)就無法正常傳遞給串口。這是我們亟待解決的問題。最後我使用了Javascript的AJAX交互技術,將坐標數組傳入WEB伺服器的PHP腳本,然後通過PHP操作文件流的方式,在本地計算機的文件夾下生成一個Temp.txt的臨時坐標文件,供給上位機軟體讀取這段文件內容數據,從而規避瀏覽器的本地安全限制,完美實現瀏覽器和串口之間的數據通信。

在上位機軟體的實現部分,我採用了簡單易於實現的圖形化操作界面Microsoft Visual Basic來編寫上位機軟體。VB客戶端通過不斷的讀取、解析PHP生成的Temp.txt臨時數據文件,來不斷的獲取人臉在視場中的XY坐標值。這對程序的性能和計算機的CPU性能是一個考驗。

上位機軟體中值得一提的是Microsoft Visual Basic中的MSComm串口附件。其高效簡潔的代碼,可以讓串口開發變得異常容易。VB本身的界面可視化、組件模塊化、語法簡單化為項目開發帶來了極大的方便。美國微軟公司在多年前就已經推出了Visual Basie的第一個版本,隨後取得了巨大的成功。客觀的說,Visual Basic雖然其在結構分離性、函數Function粒度大小、程序執行效率和可維護魯棒性上,有很多的不足。但是小項目中使用VB,絕對是一個很好的解決方案。

(四)舵機匯流排執行機構

在接收到上位機VB軟體發送的串口信號後,舵機匯流排執行機構就開始正常工作,帶動藝術展示部分工作。舵機的匯流排執行核心採用目前國際上最流行的Arduino模塊進行製作。這樣比全國各大高校普遍採用的教學單片機系統高級複雜了很多。目前的單片機教學中,普遍採用基於美國Intel公司的C51系列解決方案。由這個方案衍生出了大量的使用晶元,比如我國宏晶科技生產的STC89C52系列晶元,是一種擁有低功耗、高性能的CMOS8位微信控制器,由於採用了8K Flash存儲器,程序的執行寬容度將會更大。雖然擁有上述優點,我並沒有採用這樣的方案。主要原因是因為C51系列單片機的本機定時器輸出的時值在1~5Vs的時候,會出現飄忽的情況,這樣的誤差,在需要大量發送高精度占空比信號的舵機控制系統中,是很嚴重的問題。所以,最終選用了,工作頻率更高,定時器更加精準的Arduino方案,有效的提升了程序執行平台的硬體性能。其成本雖然有所增加,但是獲得了更高的執行效率,也是值得的。

舵機是一種利用占空比來調節轉動方向的物理機械執行構件,其精度受限制於品牌、價格、產品型號等。在品類繁多,質量良莠不齊的舵機市場上,經過了長期的對比試驗,我最終選用了市場上容易獲得的Power HD舵機作為最終的舵機選用方案,其性價比是最高的。Power HD舵機具有比較高的轉動級數,在4.0V低壓下(Power HD品牌舵機的正常工作電壓為5.0V,可靠工作的最大電壓為6.0V),也可以提供較高的扭矩輸出,這對我的作品來說,無疑是很有用的。高效的轉動構件,可以保證作品的及時響應。

舵機的匯流排執行電路板,設置了多個舵機三針腳卡槽。國際標準舵機是有嚴格標準的。舵機通常的正常工作電壓為5V,一共設置三條連接線。分別為電源正極、電源負極和信號Single連接單元。信號Singhle線可以傳輸占空比信號。舵機匯流排板利用掃描輪詢的方式,不停的發出占空比PMW信號的方式,高速的控制多個舵機正常工作。目前的作品中使用多軸向的舵機動作輸出,可以保證更好的藝術表現力和機械動力學美感。

在電路和程序設計講解的最後,我們還需要解決一個看似簡單的問題,就是瀏覽器崩潰和計算機主板晶元過熱的問題。因為方案的選用中,大量使用了腳步執行程序和無限的循環執行。這樣直接導致,宏觀上,程序的執行效率還是偏低,如果使用傳統筆記本作為計算源頭的話,很容易導致筆記本過度發熱,而出現機器假死、藍屏的情況。所以,這裡,我在作品展示的時候,會使用台式工作站作為計算源,台式工作站在性能和散熱風道的設計上,會大大優於個人筆記本電腦。

(五)電路、程序技術部分總結

本作品的電路設計和程序設計部分,充分利用了現有的知識和構件,並且另闢蹊徑的使用了HTML5技術、APACHE WEB伺服器、PHP腳本引擎和Microsoft Visual Basic的串口通信組件來實現人臉識別,在各種技術中,採用了AJAX、數據中繼臨時文件的巧妙方式,這在藝術節和技術行業中,也是極為少見的解決方案。本套方案的優點是實現時間短、開發成本低、開發的綜合效率高以及對開發者的能力要求相對較低,實現起來更加容易。在未來,也可以開發源代碼給更多的從業者,讓所有的藝術家,都可以輕鬆的使用更加高效、有趣的互動裝置方案,這本身也是互聯網的精神之一。

[澳]威利、(澳)湯姆森著 ,武欣等譯《php和mysql web開發》,機械工業出版社,2009年版

[美]賴爾《Head First Ajax》,中國電力出版社,2010-7-1年版

張迎新《單片機原理及應用》,高等教育出版社,2009年版。

推薦閱讀:

人臉識別 | 發展與市場(一)
人臉識別這件「小事」 | 視頻
人臉識別觸手可及 開門登記考勤打卡一應俱全
黑科技Animoji是iPhone X一騎絕塵的大殺器?
人臉識別能否認出雙胞胎?

TAG:人臉識別 | 裝置藝術 | OpenCV |