|
單片機(jī)SPCA563B是凌陽(yáng)科技公司推出的一顆用于圖象識(shí)別領(lǐng)域的IC,不僅具有一般單片機(jī)的控制功能,而且具有圖象識(shí)別與處理能力,本圖象識(shí)別系統(tǒng)就是以它為核心進(jìn)行數(shù)據(jù)處理與控制,該系統(tǒng)已實(shí)現(xiàn)的功能有:物體顏色和形狀識(shí)別,字符識(shí)別以及手勢(shì)識(shí)別等,利用這些識(shí)別的結(jié)果,可以開(kāi)發(fā)游戲、趣味教學(xué)、智能玩具、文字輸入以及智能識(shí)別等應(yīng)用系統(tǒng)。
本文通過(guò)介紹整個(gè)系統(tǒng)以及在整個(gè)系統(tǒng)上實(shí)現(xiàn)的簡(jiǎn)單的手勢(shì)識(shí)別,使大家更好地了解此系統(tǒng)在圖象識(shí)別和文字識(shí)別方面的強(qiáng)大功能和易用性。
1 系統(tǒng)硬件架構(gòu)
如圖1所示,圖象識(shí)別硬件系統(tǒng)主要由SPCA563B單片機(jī)、USB控制器、圖像傳感器、存儲(chǔ)器控制器和語(yǔ)音輸出控制器等組成。

1.1 SPCA563B單片機(jī)
SPCA563B單片機(jī)的硬件特征如下:提供320×320的8位CMOS圖像傳感器接口,具有自動(dòng)白平衡和獲得參數(shù)控制功能,具有圖像顏色校正和圖像Gamma校正功能,具有7種顏色過(guò)濾功能,具有良好的減小噪聲和濾波器,能夠在一張圖片中檢測(cè)到21個(gè)目標(biāo)物體的大小和位置,并將其結(jié)果存放于嵌入在CPU內(nèi)部的RAM中;16位μ inSP CPU內(nèi)核,內(nèi)嵌1K×16位的RAM和32K×16位的ROM;具有可選擇的外部RAM和ROM接口,具有USB1.1的接口;3.3V電壓供電,128/64腳LQFP封裝(其中128腳有可選擇的并行接口,48腳則沒(méi)有)。此系統(tǒng)采用48腳的LQFP封裝,其硬件電路如圖2所示。

1.2 USB控制器
SPCA563B內(nèi)嵌USB1.1的控制器,利用USB接口可以與PC進(jìn)行通信,結(jié)合PC端軟件來(lái)實(shí)現(xiàn)ISP及在線(xiàn)調(diào)試程序,此外可以利用USB來(lái)為系統(tǒng)供電,其電路如圖3所示。

1.3 圖像傳感器
本系統(tǒng)采用SPCA3010A CMOS圖像傳感器,圖像輸出為QVGA(320×240)大小的RGB格式,SPCA563B通過(guò)I2S接口來(lái)控制SPCA3010A CMOS圖像傳感器,此CMOS圖像傳感器支持stand by省電模式,其電路如圖4所示。

1.4 存儲(chǔ)器控制器
外擴(kuò)SPR4096A Flash存儲(chǔ)器,主要用來(lái)存儲(chǔ)系統(tǒng)需要的語(yǔ)音數(shù)據(jù),SPR4096A Flash具有如下特征:512K×8位的存儲(chǔ)空間;內(nèi)嵌4K×8位的SRAM;外部CPU可以通過(guò)串行接口或8位并行接口來(lái)訪(fǎng)問(wèn)Flash/SRAM;I/O接口的電壓范圍為2.25-3.6V,并支持stand by的省電模式,在數(shù)據(jù)存儲(chǔ)量比較小的情況下,用SPR4096A可以大大降低系統(tǒng)的成本,電路如圖5所示。

2 系統(tǒng)軟件設(shè)計(jì)
本圖象識(shí)別系統(tǒng)的識(shí)別功能主要通過(guò)軟件系統(tǒng)來(lái)實(shí)現(xiàn),為了提高程序的可移植性。為將來(lái)該系統(tǒng)功能擴(kuò)展預(yù)留空間,整個(gè)軟件系統(tǒng)采用分模塊、分層次的方法編寫(xiě)程序,采用匯編語(yǔ)言實(shí)現(xiàn)對(duì)寄存器的讀/寫(xiě)以及對(duì)中斷的控制,并為上層的開(kāi)發(fā)提供靈活的接口,上層采用C語(yǔ)言編寫(xiě),通過(guò)調(diào)用底層函數(shù)來(lái)間接對(duì)硬件資源進(jìn)行操作,這樣編寫(xiě)程序使整個(gè)系統(tǒng)結(jié)構(gòu)清晰,程序可移植性和可擴(kuò)展性增強(qiáng),而且占用硬件資源少,為系統(tǒng)功能的擴(kuò)展和進(jìn)一步開(kāi)發(fā)預(yù)留充分的空間。

整個(gè)軟件系統(tǒng)由主程序,圖象識(shí)別功能模塊子程序、中斷服務(wù)子程序和語(yǔ)音輸出子程序等組成,主程序負(fù)責(zé)整個(gè)系統(tǒng)的協(xié)調(diào)和控制工作,通過(guò)調(diào)用不同的子程序來(lái)實(shí)現(xiàn)不同的功能,主程序流程如圖7所示。

為突出系統(tǒng)的特點(diǎn),下面通過(guò)手勢(shì)識(shí)別的實(shí)例來(lái)重點(diǎn)描述圖象識(shí)別原理,手勢(shì)識(shí)別包含兩個(gè)步驟:手形的輪廓跟蹤,提取其輪廓的相關(guān)數(shù)據(jù),手勢(shì)的識(shí)別,在上一步得到的數(shù)據(jù)的基礎(chǔ)上進(jìn)行分析判斷而得到結(jié)果。

2.1 輪廓跟蹤算法實(shí)現(xiàn)
輪廓跟蹤的目的是獲得圖像的外部輪廓特征(包括目標(biāo)物體邊緣點(diǎn)的坐標(biāo)和方向),為圖像的形狀分析做準(zhǔn)備,SPCA563B的DSP針對(duì)膚色有一系列的顏色處理,這樣系統(tǒng)就可以方便圖像轉(zhuǎn)化為膚色與非膚色的二值圖像,通過(guò)對(duì)暫存在SRAM中的二值圖像進(jìn)行數(shù)據(jù)分析,來(lái)提取手形的邊緣輪廓。
輪廓跟蹤算法步驟如下:
1)按從上到下,從左到右的順序掃描圖像,尋找第一個(gè)非白象素作為邊界起始點(diǎn)A[0],記錄A[0]點(diǎn)的坐標(biāo)(A[0],x,A[0],y)。A[0]是具有最小行和列值的邊界點(diǎn),再定義一個(gè)掃描方向變量dir。該變量用于記錄上一步中沿著前一個(gè)邊界點(diǎn)到當(dāng)前邊界點(diǎn)的移動(dòng)方向,其初始化取值為A[0],dir=7;掃描方向定義如圖8所示。
假設(shè)當(dāng)前的坐標(biāo)為(x,y,則其8個(gè)鄰域坐標(biāo)如下:
方向0:(x+1,y);方向1:(x+1,y-1); 方向2:(x,y-1);方向3:(x-1,y-1); 方向4:(x-1,y);方向5:(x-1,y+1); 方向6:(x,y+1);方向7:(x+1,y+1)。
2)按逆時(shí)針?lè)较蛩阉鳟?dāng)前象素的3×3的鄰域,其起始搜索方向設(shè)定如下:
若A[n-1],dir為奇數(shù),則。ˋ[n-1],dir+7)mod 8;
若A[n-1],dir為偶數(shù),則取(A[n-1],dir+6)mod 8。
在3×3鄰域中搜索到的第一個(gè)與當(dāng)前象素相同的象素便為新的邊界點(diǎn)A[n],同時(shí)更新記錄從上一點(diǎn)搜索到邊界點(diǎn)A[n]的方向變量A[n].dir,記錄新的邊界點(diǎn)的坐標(biāo)(A[n],x,A[n],y)。
3)如果邊界點(diǎn)A[n]等于第一個(gè)邊界點(diǎn)A[0],即(A[n],x==A[0],x&&A[n],y==A[0],y)。停止搜索,結(jié)果跟蹤,否則重復(fù)步驟2。
由邊界點(diǎn)A[0]、A[1]、A[2]、…、A[n]構(gòu)成的邊界便為要跟蹤的邊界。
2.2 手勢(shì)識(shí)別算法實(shí)現(xiàn)
我們的主要目的是找出伸出手指的個(gè)數(shù),開(kāi)使用行掃描的方法通過(guò)行內(nèi)從0→1或1→0黑白象素變化的次數(shù)來(lái)確定伸出手指的個(gè)數(shù),但這種算法對(duì)于傾斜一定角度的手指數(shù)目判斷存在一定問(wèn)題,因此轉(zhuǎn)而采用"提取指尖點(diǎn)算法"。
提取指尖點(diǎn)的方法著眼于從手勢(shì)輪廓中搜索出指尖點(diǎn),一個(gè)指尖點(diǎn)對(duì)應(yīng)于一根手指,最后根據(jù)得到指尖點(diǎn)的個(gè)數(shù)來(lái)判定手指數(shù)目,判斷是不是指尖;
分析手的形狀,手指的兩邊基本上是平行的,一直按逆時(shí)針?lè)较蚯斑M(jìn),每經(jīng)過(guò)一次指尖,手形輪廓的走向發(fā)生反向的變化,由于手形輪廓的邊緣存在一定的毛刺,因此可以用多點(diǎn)方向的平均來(lái)減小毛刺的影響,這里取36點(diǎn)方向的平均,表示為Average_dir[i]。是否經(jīng)過(guò)指尖的判斷條件1:126<=|Average_dir[i-1]-Average_dir[i+1]|<=162,(說(shuō)明:兩點(diǎn)方向相反,其方向值差4,3.5×36=126,4.5×36=162。)
再分析手的形狀,兩手指之間邊緣輪廓的走向也滿(mǎn)足判斷條件1,故必須添加判斷條件,如圖10所示,當(dāng)沿著一個(gè)方向搜索手的邊緣輪廓時(shí),經(jīng)過(guò)指尖走向一定與手指間缺口走向相反,因此,必須假設(shè)判定條件2:
Is_FingerVertex(dir0,dir1,dir2);
這個(gè)函數(shù)是用來(lái)通過(guò)連續(xù)3點(diǎn)的方向來(lái)判斷這3點(diǎn)是否為逆時(shí)針走向,由于是沿著逆時(shí)針?lè)较蛩阉鬟吘壿喞,故在判定條件1成立的前提下加上
Is_FingerVertex(Average_dir[i-1],Average_dir[i],Average_dir[i+1]就可以判斷是否為指尖,從而判定手指的數(shù)目,順序3點(diǎn)是否為逆時(shí)針走向,具體在程序中可以構(gòu)造一個(gè)循環(huán)隊(duì)列來(lái)實(shí)現(xiàn),測(cè)試結(jié)果表明這種算法非常穩(wěn)定。
結(jié)語(yǔ)
SPCA563B內(nèi)部嵌入功能強(qiáng)大的圖像顏色處理的DSP,用它來(lái)做圖象識(shí)別系統(tǒng)的主控芯片十分方便、快捷。同時(shí)該系統(tǒng)具有語(yǔ)音輸出提示功能,操作更加人性化,并且可以通過(guò)USB1.1接口與PC進(jìn)行通信,配合PC端的調(diào)試工具,還可以大大縮短圖象識(shí)別功能開(kāi)發(fā)的周期。 |