任環(huán)宇 武坤玉 李道全
摘要:隨著生活節(jié)奏的加快,以及人們手中鑰匙數(shù)量的增大,自行車機械鎖結(jié)構(gòu)越來越無法滿足人們高效率生活需求。本文設(shè)計了一種基于樹莓派為上位機、arduino單片機為下位機的人臉識別智能自行車鎖的方案。其中樹莓派用于人臉識別并通過串口通信向arduino單片機發(fā)送驅(qū)動信號,人臉識別算法使用經(jīng)典的人臉識別算法——Eigenfaces算法。Arduino單片機作為驅(qū)動板,接收到識別的信號之后,該板驅(qū)動鎖結(jié)構(gòu)開啟。測試表明,本設(shè)計可實現(xiàn)通過人臉識別進(jìn)行開鎖的功能。
關(guān)鍵詞:樹莓派;上位機;Eigenfaces算法;串口通信;人臉識別
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2018)29-0214-04
Abstract:With the acceleration of life rhythm and the increase of the number of keys in the hands of people, the bicycle mechanical lock structure can not meet the needs of people with high efficiency. In this paper, an intelligent bicycle lock for face recognition is designed,in which raspberry pie is used as upper computer, arduino single chip computer is used as lower computer. Raspberry is used for face recognition and sends driving signal to arduino single chip computer through serial communication. The face recognition algorithm uses the classical face recognition algorithm--Eigenfaces algorithm. Arduino single chip computer as the driving board, after receiving the recognition signal, The plate drives the lock structure to open. The test shows that this design can realize the function of unlocking by face recognition.
Key words: raspberry pie; upper computer; Eigenfaces algorithm; serial communication;face recognition
1 引言
伴隨著人們生活節(jié)奏的加快、城市的交通堵塞,人們對自行車出行需求仍然很大。但是由于生活節(jié)奏的加快,以及人們手中鑰匙數(shù)量的增大,自行車機械鎖結(jié)構(gòu)越來越無法滿足人們高效率生活需求,因此需要一種更加便捷的方式來進(jìn)行自行車鎖具的開關(guān)。為此我們開發(fā)了基于樹莓派上位機的人臉識別智能車鎖。本項目整體上是一個嵌在自行車上的嵌入式裝置,其主要完成掃描人臉并進(jìn)行識別判斷進(jìn)而開鎖的過程。
斯坦福教授李菲菲舉辦的ImageNet國際視覺識別競賽中,第一名的識別度就已經(jīng)高達(dá)99%以上[1],也就是說,業(yè)界對于圖像識別已經(jīng)有非常成熟的算法,因此從實踐項目的角度,這一點是十分有利于本項目的成功的。同時,業(yè)界中對于視覺項目的開發(fā),集成了成熟的視覺開源庫opencv,這也大大的降低的編碼難度,提高了項目開發(fā)的技術(shù)可行性。
2 系統(tǒng)設(shè)計與硬件選擇
本項目整體上是一個嵌在自行車上的嵌入式裝置,其主要完成掃描人臉并進(jìn)行識別判斷進(jìn)而開鎖的過程。所用到的技術(shù)主要有基于opencv視覺開源庫的人臉識別技術(shù)、Linux環(huán)境下的編程、arduino單片機編碼電機的驅(qū)動編程、上下位機之間的通信等技術(shù)。整個系統(tǒng)的功能可以分為如下的幾個模塊:圖像的采集與預(yù)處理工作、離線人臉識別模型的訓(xùn)練、人臉識別、樹莓派3b與電機驅(qū)動板arduinomega2560的串口通信、驅(qū)動板arduinomega2560驅(qū)動電機開鎖等,如圖1所示。
2.1 樹莓派數(shù)據(jù)簡介
Raspberry Pi簡稱樹莓派,是為學(xué)習(xí)計算機編程教育而設(shè)計,只有信用卡大小的微型計算機,系統(tǒng)基于Linux?!奥槿鸽m小,五臟俱全”來形容樹莓派再貼切不過。它是一款基于ARM的微型電腦主板以SD/MicroSD卡為內(nèi)存硬盤,卡片主板周圍有1/2/4個USB接口和一個10/100 以太網(wǎng)接口(A型沒有網(wǎng)口),可連接鍵盤、鼠標(biāo)和網(wǎng)線,同時擁有視頻模擬信號的電視輸出接口和HDMI高清視頻輸出接口,以上部件全部整合在一張僅比信用卡稍大的主板上[2][3]。正是其微小型、全面性,成為了本項目開發(fā)的最佳芯片選型。圖2是樹莓派簡易圖。
2.2 Arduinomega2560簡介
Arduino是一款便捷靈活、容易入門的開源電子平臺,如圖3所示。包含硬件(各種型號的Arduino板)和軟件(Arduino IDE)。Arduino能通過各種各樣的傳感器來感知環(huán)境,通在本系統(tǒng)中主要用來控制鎖的電機轉(zhuǎn)動。板子上的微控制器可以通過Arduino的編程語言來編寫程序,編譯成二進(jìn)制文件,燒錄進(jìn)微控制器。同時其軟件平臺的高級設(shè)計語言是基于c語言開發(fā)的,非常利于開發(fā)者快速學(xué)習(xí)和開發(fā)。同時其開源平臺豐富的庫,也極大的便利的編程的難度并提高了項目可行性[4]。
2.3 串口通信、上位機、下位機簡介
簡單來理解串口通信的概念,即多個處理器之間通過串行口進(jìn)行數(shù)據(jù)的按位傳輸[5]。通過調(diào)研我們發(fā)現(xiàn),盡管樹莓派3b功能齊全、計算性能相對一般單片機高,但是如果將編碼電機直接連接到樹莓派的pin口,是容易燒壞板子的。因此這里本項目采用樹莓派3b作為上位機、arduinomega2560作為下位機的整體構(gòu)造,如圖4所示。上位機的概念是進(jìn)行高級的圖像處理和識別相關(guān)的計算,并根據(jù)計算結(jié)果得到通過串口通信發(fā)送給下位機。而下位機的功能是接收到信號之后,驅(qū)動電機運動完成開鎖功能。這樣上、下位機結(jié)合的設(shè)計思路,能夠提高系統(tǒng)的安全性和健壯性。
2.4 人臉識別算法Eigenfaces簡介
計算機視覺中成熟的人臉識別算法有很多,這里選用opencv集成好的算法Eigenfaces。其算法步驟如下[6]:
Step1: 采集人臉數(shù)據(jù)庫和待識別的人臉圖像,基于其像素矩陣將其化成一維向量。
Step2: 基于所有數(shù)據(jù)向量,計算所有向量的平均值,即計算“平均臉”。
Step3: 將所有人臉向量減去“平均臉”向量,得到插值向量矩陣。
Step4: 計算協(xié)方差矩陣,提取特征向量和特征值,并截取前K個高貢獻(xiàn)度的影響因子。
以上部分基于機器學(xué)習(xí)中經(jīng)典的算法PCA主成分分析,即將高維度的圖像參數(shù)映射到了低維空間,抽取出數(shù)據(jù)的主要成分[7]。這便完成的模型的離線訓(xùn)練。在接收新的待探測的人臉后,按照訓(xùn)練的結(jié)果(特征向量、特征值),對圖像做相同的映射處理,然后進(jìn)行聚類識別計算。
3 模塊化設(shè)計
對照上文給出的模塊功能的分類,下面依次進(jìn)行模塊化的邏輯過程設(shè)計。
3.1 基于樹莓派的人臉識別模塊
這里采用的技術(shù)是基于經(jīng)典的開源視覺庫opencv,對預(yù)先收集好的人臉數(shù)據(jù)庫以及采集到的正確人臉,進(jìn)行人臉識別模型的離線訓(xùn)練。人臉識別采用的主要方法是特征臉?biāo)惴ǎ‥igenface),通過訓(xùn)練后得到的離線模型以.xml形式存儲,在主系統(tǒng)運行時調(diào)用模型即可。即圖5所示。
3.2 基于arduino mega2560的鎖驅(qū)動模塊
本系統(tǒng)采用arduino mega2560單片處理機控制開鎖電機。鎖的分為三個狀態(tài):開鎖可關(guān)鎖、關(guān)鎖、開鎖不可關(guān)鎖。這三個狀態(tài)必須按照一定的狀態(tài)轉(zhuǎn)移順序,否則系統(tǒng)將會出現(xiàn)故障。鎖的三種狀態(tài)之間的轉(zhuǎn)移情況如圖6所示。
同時,根據(jù)鎖的機械結(jié)構(gòu)和電機單位時間內(nèi)旋轉(zhuǎn)的角度,通過實驗,測量出從一個狀態(tài)到另一個狀態(tài)的時間參數(shù)。基于時間參數(shù),得到該子模塊的運行流程,如圖7所示。
3.3 串口通信邏輯
系統(tǒng)需要基于樹莓派的圖形采集和計算的結(jié)果,來為單片機控制舵機發(fā)出相應(yīng)的指令。因此,不得不解決的問題就是樹莓派和單片機之間的通信問題。樹莓派的通信方式手段較多,有藍(lán)牙、usb串口以及wifi等方式,單片機支持usb串口和藍(lán)牙方式,考慮通信的穩(wěn)定性,本系統(tǒng)采用處理器之間的串口通信。流程如圖8所示。
這里注意,考慮上位機的識別過程,在較好的識別條件下,可能會多次識別到正確的人臉,就會多次往串口發(fā)送數(shù)據(jù),這就會導(dǎo)致電機的多余運動進(jìn)而導(dǎo)致功耗上升。上位機一旦檢測到正確人臉,就往串口發(fā)送數(shù)據(jù)。這其中會發(fā)送較多的墜余數(shù)據(jù)。這里采取的解決策略是,下位機一旦接收到串口信號,驅(qū)動電機開鎖的同時,采取10秒的延時來屏蔽串口發(fā)來的多余數(shù)據(jù),這里就成功的解決上面的墜余串口信號增加的多余能耗。
4 系統(tǒng)實現(xiàn)
4.1 基于樹莓派的人臉識別模塊
對應(yīng)于圖5流程中step1、2,本系統(tǒng)要進(jìn)行識別人臉的采集以及識別模型的訓(xùn)練。直接給樹莓派3b的usb端口連接常用的攝像頭,就可以調(diào)用開源的opencv庫來采集待識別人臉的圖像。picture.cpp就是這樣一個專門調(diào)用攝像頭采集視頻流的程序。篇幅限制,這里不呈現(xiàn)源代碼。運行效果如圖9所示。
采集成功之后(這里程序中采集了30幀圖像),進(jìn)入對應(yīng)的人臉數(shù)據(jù)庫目錄中,在30張圖像中選取10張比較典型的照片,用于后面的識別模型的訓(xùn)練。
完成訓(xùn)練之后,使用的三種人臉識別算法對生成對應(yīng)的.xml文件,也就是經(jīng)過上述采集的數(shù)據(jù)和訓(xùn)練程序得到的模型,將三個.xml文件復(fù)制到上位機進(jìn)行人臉識別開鎖的主程序(下文會給出,result.cpp)中,便可以在實時的圖像采集中使用該模型進(jìn)行人臉識別判斷。
4.2 基于arduinouno2560的鎖驅(qū)動模塊
這一模塊主要涉及驅(qū)動板驅(qū)動電機旋轉(zhuǎn)來達(dá)到開鎖的目的,基于實際的鎖結(jié)構(gòu),測量出具體的旋轉(zhuǎn)參數(shù),在開鎖邏輯流程圖中已經(jīng)給出,按照其呈現(xiàn)的流程編寫arduino鎖驅(qū)動程序即可。這里直接將串口通訊模塊給呈現(xiàn)出來,驅(qū)動板從串口緩沖器中讀數(shù)據(jù),如果是字符3,則執(zhí)行開鎖邏輯,如果是1或者2,用于調(diào)整電機的角度。
4.3 上下位機之間的串口通信模塊
剛剛本文提到,驅(qū)動板在串口中接受到字符3之后,開始執(zhí)行開鎖邏輯,對應(yīng)的,上位機樹莓派在識別成功之后,使用c語言的串口通信函數(shù)[8],向串口發(fā)送一個字符3.上位機樹莓派3b最終的執(zhí)行程序result.cpp,完成實時人臉采集、識別與控制信號的發(fā)送。
4.4 系統(tǒng)實現(xiàn)結(jié)果
系統(tǒng)整體完成情況:最上面是單片機和樹莓派的組合,中間是電池組,這里使用移動電源供電即可,滿足樹莓派的供電標(biāo)準(zhǔn)。右側(cè)是圖像采集模塊,最下面是鎖模塊,鎖中的編碼電機與單片機的電機控制模塊通過杜邦線進(jìn)行連接,如圖10所示。
系統(tǒng)功能測試:
由于本系統(tǒng)考慮成本因素,在最終的實物中并未添加顯示器等外設(shè)。系統(tǒng)的調(diào)試工作,通過樹莓派的HDMI借口連接顯示屏來完成。當(dāng)采集圖像之后匹配成功,攝像頭的監(jiān)控窗口捕捉到的人臉旁邊會顯示”Right People”的字樣,如圖11所示。否則,匹配失?。@示“Mismatching People”字樣)顯示如圖12。
5 結(jié)束語
本項目的靈感源于互聯(lián)網(wǎng)+浪潮的掀起,人工智能相關(guān)領(lǐng)域的興起,讓人們從視覺、圖像、聲音等多個感知層面,對日常生活中的設(shè)備進(jìn)行智能化的設(shè)計。本文從視覺的角度,以方便人們出行方便為目的,開發(fā)了這款基于人臉識別的智能自行車鎖,并達(dá)到了良好的效果。當(dāng)然目前系統(tǒng)還有待進(jìn)一步改進(jìn),如整個嵌入式的系統(tǒng)還是不夠簡潔精煉,外部纏繞的線太多可考慮進(jìn)行芯片和外設(shè)的個性化定制,真正達(dá)到嵌入式開發(fā)“量身定做”的需要,將電池、芯片、攝像頭、電機集成到一個精簡的裝置當(dāng)中。
參考文獻(xiàn):
[1] 孫玉蘭.數(shù)字圖像處理技術(shù)的應(yīng)用現(xiàn)狀與發(fā)展研究[J].電腦知識與技術(shù),2014,10(26):6228-6230.
[2] 蘇祥林,陳文藝,閆灑灑.基于樹莓派的物聯(lián)網(wǎng)開放平臺[J].電子科技,2015,28(09):35-37+41.
[3] 朱軼,曹清華,單田華,等.基于Android、樹莓派、Arduino、機器人的創(chuàng)客技能教育探索與實踐[J].實驗技術(shù)與管理,2016,33(06):172-176+206.
[4] 凱姆·卡爾文,泰勒·卡爾文,龐明珠.Arduino與電子制作[J].電子制作,2012(08):68-73.
[5] 蔣萍花,張楠.數(shù)據(jù)采集系統(tǒng)串口通信的設(shè)計與實現(xiàn)[J].電子測量技術(shù),2015,38(06):139-142.
[6] 陳勇,林穎.基于特征臉的主成分分析人臉識別[J].計算技術(shù)與自動化,2017,36(02):122-124.
[7] 張勇,黃杰,徐科宇.基于PCA-LSSVR算法的WLAN室內(nèi)定位方法[J].儀器儀表學(xué)報,2015,36(02):408-414.
[8] 王坤,高贇.基于VC++實現(xiàn)串口通信的方法[J].信息化研究,2010,36(10):52-54.
【通聯(lián)編輯:梁書】