摘要:本文以發展具有人臉辨識和運動跟蹤功能的智能機器人為目標。機器人的名稱為“跟我走機器人”。它能夠根據人臉辨識的結果,判斷用戶的身份,并跟隨該用戶。系統的開發建基于英特爾XScale PXA270微處理器平臺、Linux操作系統和QT/Embedded圖形使用者接口。為了建構一個智能機器人,我們在系統上加入了基于彈性圖匹配(EBGM)的人臉辨識程序,運用了塊匹配算法的運動跟蹤功能。系統提供了簡易的用戶介面,方便管理和下達指令?!案易邫C器人”除了應用于娛樂外,亦可勝任各種工業應用。
關鍵詞:PXA270;嵌入式Linux;機器人;人臉辨識;彈性圖匹配;運動跟蹤;塊匹配
前言
機器人在社會中的重要性與日俱增,原因在于我們每日所完成的許多工作都是按部就班進行的,無需思慮。這些工作可以由一個機器人來輕松地完成,有時候,機器人的表現要遠遠優于人類的表現。隨著SONY“機器狗”Ⅲ的流行,近年來涌現出一類新的機器人。這類能模仿人類行為的新型機器人在國際玩具市場上目前極為流行。

為了將這種智能玩具技術推向更高的發展水平,我們開發了“跟我走”機器人,它擁有能識別人并跟蹤人的新功能。面部識別的功能使得機器人更為人性化,能辨認出不同的人。這一功能使得機器人在很大程度上實現了人性化,主人的家庭可以輕松地接納它為家庭中的一員。我們選擇人臉作為驗證的依據,因為它的可分辨性好,而且難以為其他人所復制。此外,與虹膜識別和指紋識別相比,用戶在進行人臉識別時所費的周章更少,而且用戶不那么容易察覺到識別過程的存在。
在本系統中,我們選用了彈性圖匹配(ElasticBunch Graph Matching,EBGM)方法作為識別時的面部辨認算法。該算法的細節將在后面詳細解釋。運動跟蹤功能也是機器人的一項基本功能,它可以使機器人自動跟隨主人,從而增強了系統的可移動性。
在人臉識別方面存在的主要困難,是如何確定圖像中人臉的位置。本系統的解決之道是多次采集用戶的圖像,并要求用戶眨眼睛以便能找到眼睛的所在。這種方法也防止了其他人拿著用戶的相片來欺騙系統。
擁有XScale處理器PXA270的LIOD系統成為我們所研制的這款機器人的內核。Xscale處理器的軟件經過了優化,使得它能夠瞬時執行面部識別算法和運動跟蹤功能。XScale PXA270處理器對我們的應用來說已經足夠了,因為我們的系統所用的EBGM算法針對運行時間的需求進行了優化,它適合于移植到嵌入式系統。
在本文的余下部分,我們將逐步闡述我們的思想和實現方法,展示系統整體的工作流程,軟件和硬件之間的協同以及本項目的實驗結果。
這是一個精簡版的報告,完整版本可以從如下網址下載:http://pc89225.cse.cuhk.edu.hk/intdcup/。
系統描述
總體結構
本項目需要采用的一個主要部件就是攝像機。一旦系統啟動,攝像機就必須完成初始化。
圖1示出了系統的總體工作流程。系統由3個部分組成,包括“識別”,“登記”和“運動跟蹤”。用戶在啟動任何其他流程前應該啟動“識別模式”。這可以確保機器人能夠在執行任何功能前識別出合法主人。如果驗證后沒有指令發送到系統中,它會保持在“空閑模式”。
處于“空閑模式”時,系統連續捕捉和顯示圖像,同時等待進一步指令。用戶此時可以選擇“登記模式”還是“運動跟蹤模式”。
“登記模式”允許有新用戶添加到系統中。在“運動跟蹤”模式中,機器人將自動跟蹤它的主人。下面,我們將依次討論這3個部分。
識別/登記模式
“識別模式”和“登記模式”基本上是類似的。
為了執行“識別/登記步驟”,系統必須首先通過基于圖像差異技術的“眼部檢測算法”來獲取眼睛的位置。當用戶眨眼睛時,在由攝像機連續捕捉到的圖像上,除了其眼睛位置出現差異外,其余部分將始終保持不變。于是,一旦用戶進入“識別/登記模式”,系統將連續捕捉圖像,并傳遞給“眼睛捕捉算法”,以找出眼睛的位置。如果系統能正確找出眼睛的位置,用戶可以選擇進入“識別”或是登記步驟,這將觸發彈性圖匹配(EBGM)算法。
“眨眼”判斷法利用了網絡攝像頭可以輕松捕捉多幅圖像的特點,可以讓用戶參與到驗證過程中,從而增強了機器人的可交互特性。

在“登記步驟”中將存儲一個記錄,以備進一步的匹配。對于“識別步驟”來說,它是一個“1對N”的過程。系統將對每項記錄進行比較,如果用戶與那些已登記的圖像一致,則顯示一個記號。這一工作流程的優點在于,在傳遞到“識別/登記步驟”(人臉識別算法)之前,對眼睛位置的識別的正確性得到了保證。該工作流程提高了人臉識別算法的檢測成功率。
運動跟蹤模式
當運動跟蹤功能啟動時,程序以固定的間隔連續運行。為了實現圖像的平滑顯示,一旦用戶進入“運動跟蹤模式”,程序控制就轉回主程序執行。“以QT捕捉和顯示”則與“運動跟蹤步驟”并行執行。不利之處在于“運動跟蹤步驟”可能會丟棄部分圖像。系統可能無法保持對微小運動的敏感性。但是,這樣的安排仍然適合于我們的應用,能夠跟蹤人的移動。
具體實現
硬件
·總體結構
圖2示出了系統的總體架構。我們下面將對這些部件逐個進行討論。
·機器人(見圖3)
87C552微控制器
87C552微控制器起到PXA270開發板與電機驅動之間的橋梁作用。我們之所以選用87C552,是因為它支持一個集成化的脈寬調制(PWM)模塊,它可以提供2個8bit PWM通道。MCU接收來自于PXA270板的控制指令,從而產生輸出到L298電機驅動器的PWM信號。
·其他元件
MAX232-RS232電平轉換器。
L298電機驅動器——提供驅動電機所需的大電流。
軟件
·概述
為了支持人臉識別,捕獲的圖像必須有足夠高的分辨率。期望值是320×420,因為如果分辨率低于該值,圖像品質就太差,不能保證余下算法的執行,此時即指“人臉識別”和“運動跟蹤”算法。如果分辨率被設為640×480,圖像的采集就需要花費接近ls的時間。由于嵌入式系統的計算能力極為有限,故難以在執行余下的算法時處理分辨率如此之高的圖像。
系統使用1對N識別流程來找出哪位用戶將會使用該系統,該流程將在剩下的部分進行討論。
系統的GUI利用QT/Embedded進行編程。編譯工具是ARM Linux g++。系統中所包括的模塊數極少(參見圖1、圖2和圖3):多線程的GUI界面、網絡攝像頭捕捉、眼睛檢測算法、人臉識別算法和運動跟蹤算法。
·多線程GUI界面
參見圖3,因為圖像的捕捉和顯示功能必須與運動跟蹤功能同步執行,故需要采用多線程程序。不過,缺省的Qq-庫并不支持這一功能。為了實現該功能特色,我們已經用version2.3.7對QT庫進行了重新編譯,該庫現在支持多線程功能。
·帶解壓的USB網絡攝像頭驅動
雖然內核中可以啟用驅動程序,我們后來發現該驅動只能支持160×120分辨率圖像的捕捉。如要捕捉320×420的圖像,我們還需要向Linux系統添加一個解壓縮驅動程序。它的作用是讓攝像機對攝像機內部進行過壓縮的圖像進行解壓縮處理,然后再傳回LIOD。
·眼睛檢測流程

在大多數人臉識別算法中,眼睛都被視為面部構建啟動所需的一個主要的基準點。機器人對眼睛進行識別辨認出用戶,就顯得極為重要。一般來說,眼睛的虹膜可以通過紅內(inⅡa—red)發射器和傳感器來確定,但所用的設備將非常昂貴,而且極為復雜,難以集成到嵌入式系統中。因此,在我們的系統中,用戶眨一次眼睛的動作也將作為一個信號,觸發眼部檢測流程。該技術只需要單個攝像機。它也可以幫助系統從被染色的圖像中識別出真正的人的圖像。(圖4中示出了眨眼的實例)
眼部檢測的步驟流程
A.輸入來自于系統的兩幅連續的圖像,一幅記錄了睜開的眼睛,另一幅記錄了合上的眼睛。
B.預處理:首先,計算出圖像間的差異。然后執行分區和組合,以減少計算的復雜性。此外,要除去不規則的分區和噪聲,以減少虛假的檢測結果。執行該操作后,我們可以獲得我們感興趣的用于搜索的區域。
C.檢測:每個所關心的區域與預先確定的眼睛標記模板進行比較。對于在閾值之上的最近似的結果,其坐標將傳遞到后面的階段,用于進行人臉識別。
限制和不足
我們的眼睛識別算法存在一些限制和不足。首先,攝像機的捕捉幀速率決定了檢測的有效性。所用的幀速率越低,在兩幅圖像間檢測出噪聲的機會就越大。不過,無需讓幀速率高于人眨眼的速率,試驗表明該速率大致為50-lOOms。如果幀速率高于20Hz,在眼睛真正開始眨動時,噪聲可能會被錯誤地識別為眼睛動作的信號。在開發過程中我們發現,每秒進行3~10次捕捉就足以供眼睛檢測之用。
其次,眨眼僅是一個指示標記,用于告訴系統可能存在眼睛的位置。系統不能認定所有的圖像變化都是由眨眼所造成的。因此,在某些條件下(例如,人搖頭時),眉毛或者頭發會被錯誤地識別為眼睛。
雖然眨眼睛并不是純自然的眼部運動,有時甚至可以被視為有意的行為,但它在發現眼睛位置方面是一種簡單而有效的指示標志。于是它被選為我們的眼睛檢測算法。
·人臉識別流程
人臉識別是一系列模式識別問題。有兩種主要的表示方式:基于局部特征(部件)的和基于全局特征的系統。前一種系統強調了從面部不同部位,如眼睛、鼻子、嘴唇和耳朵,來獲取人臉特征。后一種系統將面部作為整體來處理,提取整個面部的統計信息。
基于全局特征的系統將來自于同一個人的所有的面部圖像作為不同的類來處理。它在針對單個人的各部位分辨率中可以起到很好的效果,但在不同人員間的識別方面則效果不佳。因此它并不適合于我們的識別系統,該系統必須能通過驗證才能贏得對機器人的控制的授權。另一方面,基于局部特征的系統,使用幾何方法來表征一個面部的結構。它在面部特征提取中允許出現合理的位移量,從而能減緩圖像變形問題的出現。由于彈性圖匹配算法對圖像變形和姿勢變化具有魯棒性,我們在面部識別方面采用了這種有代表性的和流行的局部特征型識別系統。
·運動跟蹤算法
完成人臉識別后,我們的機器人可以跟隨用戶運動。于是實現了一種運動跟蹤算法。我們的目標是要實現一種魯棒性的運動跟蹤算法,以使機器人不至于錯過目標。
為了實現魯棒性的運動跟蹤,必須同時找到某個人的位置和運動方向。其概念是,當一個人從場景的中央移向某一側時,機器人應該旋轉,跟隨人的運動。不過,如果一個人出現在右側而向左側行走,機器人不應當把自己旋轉到右側,否則它將有可能錯過這個人。
我們的項目將圖像差異比較和塊匹配算法結合起來。機器人根據每一對連續的灰度級圖像來估計目標的位置和運動方向。目標的位置是根據圖像的差異來獲得的,目標的運動方向通過在目標位置處執行塊匹配算法來找出。

運動方向
欲找出運動的方向,就需要對區域位置的檢測結果的歷史進行記錄并執行運動檢測算法。第一種辦法并不現實,因為攝像機的角度將頻繁更新。一旦機器人發生旋轉,位置的歷史記錄就無法給出移動物體的運動方向。因此,我們需要另一種運動檢測算法來找出運動的方向。
現在已經有若干種運動檢測算法,包括塊匹配算法(BMA),基于梯度的技術和立體視覺?;谔荻鹊募夹g是一種計算密集的方法,因此并不適合于嵌入式系統。立體視覺很高的I/O開銷將會顯著地降低視頻捕捉的幀速率。因此,塊匹配算法被選為運動檢測算法。
塊匹配算法的思想是將視頻幀劃分為尺寸相等的小塊。在視頻幀中的每一塊,我們都試圖找出在下一幀中的對應方塊區域。一個塊區與下一幀中所對應的塊區之間的相對位置變化與一個運動矢量聯系起來(該運動矢量在圖7中用箭頭標注出來)。通過運動矢量的平均,我們就可以得到對物體的移動情況的總體描述。在我們的項目中,為了提高運行時間性能,在執行塊匹配算法時視頻幀的分辨率被調低。
系統測試
全系統的試驗
結果表明,QT顯示占用了很多資源。為了找出眨眼時圖像的差異,時間滯后應該極小。否則,由于背景噪聲的存在,兩幅圖像間會出現多處差異。這就是為何我們選擇在執行眼睛檢測算法時不顯示第二幅所捕獲圖像的原因。
眼部檢測試驗
我們在真實條件下對眼睛算法的可靠性進行了測試。眼睛檢測的性能在室內和室外環境中進行了測試。室內的照明采用熒光燈,而室外的主要背景照明光源為日光。3位系統不熟悉的候選人被選中作為測試對象,每人站在網絡攝像頭前面,由系統進行眼睛探測算法,直到完成50次成功檢測為止。所需眨眼的總次數以及完成一次成功的檢測所需的錯誤接受的次數被記錄下來。計算公式是:總的眨眼次數=錯誤接受一錯誤拒絕-l。試驗結果列在表1中。
試驗結果表明,在室內和室外環境中完成一次成功的眼睛檢測所需的平均眨眼次數少于4次,這對于實時應用來說是可以接受的。很高的“錯誤拒絕/錯誤接受比”還表明所用的算法會抑制可疑的情況。它可以更準確地讓系統找到眼睛的位置。
結語
我們已經利用人臉識別算法和運動跟蹤算法成功地實現了我們的“跟我走”機器人。樣機的設計存在某些限制,例如,機器人在人群擁擠的區域會失去對用戶的跟蹤。機器人仍然認為用戶會從前面接近它從而捕捉他/她的正面圖像。機器人不支持自動對焦。
不過,我們最初的目標已經在機器人設計中實現了。快速和可靠的面部識別程序已得到實驗。只需眨幾次眼睛,就能以很高的正確率自動檢測出眼睛的位置。我們預計,正確的眼睛位置的獲取,將把人臉識別性能的精確度提高到80%以上。該例程可以在幾秒內完成,這對于嵌入式系統來說是可以接受的。運動跟蹤功能還可以讓機器人在無人控制與干預的情況下跟隨人移動。擁有完全自行通過邏輯判斷來決定行動的能力,正是機器人具有智能的原因。
經過進一步改進后,我們相信,我們的低成本通用型機器人可以用于家政管理、玩具、兒童和老人的看護、運輸及后勤物流,并可以用于娛樂用途。
由于“跟我走”機器人具有很高的可擴展性,我們預計未來將出現更多的工業和商業應用。
參考文獻
1.AIBO Entertainment Robot,http://www.sony.net/Products/aibo/
2.Wiskott,L.,Fellous,J.M.,Kr U ger,N.,and VOPder Malsburg,C..\"Face Recognition bv Elastic BunchGraph Matching\",In Intelligent BiomeNc Techniquesin Fingerprint and Face Recognition,eds.L.C.Jain e1aI.,pubI.CRC Press,ISBN 0-8493-2055-0,Chapter 11,pp.355-396,1999