基于SPCA563B芯片的圖像識別系統設計
關(guān)鍵詞 SPCA563B 圖像識剮 手勢識別
單片機SPCA563B是凌陽(yáng)科技公司推出的一顆用于圖像識別領(lǐng)域的IC,不僅具有一般單片機的控制功能,而且具有圖像識別與處理能力。本圖像識別系統就是以它為核心進(jìn)行數據處理與控制。該系統已實(shí)現的功能有:物體顏色和形狀識別、字符識別以及手勢識別等。利用這些識別的結果,可以開(kāi)發(fā)游戲、趣味教學(xué)、智能玩具、文字輸入以及智能識別等應用系統。
本文通過(guò)介紹整個(gè)系統以及在這個(gè)系統上實(shí)現的簡(jiǎn)單的手勢識別,使大家更好地了解此系統在圖像識別和文字識別方面的強大功能和易用性。
1 系統硬件架構
如圖l所示.圖像識別硬件系統主要由SPCA563B單片機、USB控制器、圖像傳感器、存儲器控制器和語(yǔ)音輸出控制器等組成。
1.1 SPCA563B單片機
SPCA563B單片機的硬件特征如下:提供320240的8位CMOS圖像傳感器接口;具有自動(dòng)白平衡和獲得參數控制功能;具有圖像顏色校正和圖像Gamma校正功能;具有7種顏色過(guò)濾功能;具有良好的減小噪聲的濾波器;能夠在一張圖片中檢測到21個(gè)目標物體的大小和位置,并將其結果存放于嵌入在CPU內部的RAM中;16位μnSP CPU內核,內嵌1K16位的RAM和32K16位的ROM;具有可選擇的外部RAM和ROM接口;具有USBl.1的接口;3.3V電壓供電;128/64腳LQFP封裝(其中128腳有可選擇的并行接口,48腳則沒(méi)有)。此系統采用48腳的LQFP封裝,其硬件電路如圖2所示。
1.2 USB控制器
SPCA563B內嵌USBl.1的控制器,利用USB接口可以與PC進(jìn)行通信,結合PC端軟件來(lái)實(shí)現ISP及在線(xiàn)調試程序,此外可以利用USB來(lái)為系統供電。其電路如圖3所示。
1.3 圖像傳感器
本系統采用SPCA3010A CMOS圖像傳感器,圖像輸出為QVGA(320240)大小的RGB格式。SPCA563B通過(guò)I2S接口來(lái)控制SPCA3010A CMOS圖像傳感器。此CMOS圖像傳感器支持stand by省電模式,其電路如圖4所示。
1.4 存儲器控制器
外擴SPR4096A Flash存儲器,主要用來(lái)存儲系統需要的語(yǔ)音數據。SPR4096A FJash具有如下特征:512K8位的存儲空間;內嵌4K8位的SRAM;外部CPU可以通過(guò)串行接口或8位并行接口來(lái)訪(fǎng)問(wèn)Flash/SRAM;I/O接口的電壓范圍為2.25~3.6 V,并支持stancl by的省電模式。在數據存儲量比較小的情況下,用SPR40396A可以大大降低系統的成本。電路如圖5所示。
1.5 語(yǔ)音輸出控
語(yǔ)音輸出控制器的主要作用是將SPCA563B的兩路音頻輸出通過(guò)SPY0030放大,由揚聲器播放。其硬件電路如圖6所示。
2 系統軟件設計
本圖像識別系統的識別功能主要通過(guò)軟件系統來(lái)實(shí)現。為了提高程序的可移植性,為將來(lái)該系統功能擴展預留空間,整個(gè)軟件系統采用分模塊、分層次的方法編寫(xiě)程序,采用匯編語(yǔ)言實(shí)現對寄存器的讀/寫(xiě)以及對中斷的控制,并為上層的開(kāi)發(fā)提供靈活的接口。上層采用C語(yǔ)言編寫(xiě),通過(guò)調用底層函數來(lái)間接對硬件資源進(jìn)行操作。這樣編寫(xiě)程序使整個(gè)系統結構清晰,程序可移植性和可擴展性增強,而且占用硬件資源少,為系統功能的擴展和進(jìn)一步開(kāi)發(fā)預留充分的空間。
整個(gè)軟件系統由主程序、圖像識別功能模塊子程序、中斷服務(wù)子程序和語(yǔ)音輸出子程序等組成。主程序負責整個(gè)系統的協(xié)調和控制工作,通過(guò)調用不同的子程序來(lái)實(shí)現不同的功能。主程序流程如圖7所示。
為突出系統的特點(diǎn),下面通過(guò)手勢識別的實(shí)例來(lái)重點(diǎn)描述圖像識別原理。手勢識別包含兩個(gè)步驟:手形的輪廓跟蹤,提取其輪廓的相關(guān)數據;手勢的識別,在上一步得到的數據的基礎上進(jìn)行分析判斷而得到結果。
2.1 輪廓跟蹤算法實(shí)現
輪廓跟蹤的目的是獲得圖像的外部輪廓特征(包括目標物體邊緣點(diǎn)的坐標和方向),為圖像的形狀分析做準備。SPCA563B的DSP針對膚色有一系列的顏色處理,這樣系統就可以方便圖像轉化為膚色與非膚色的二值圖像。通過(guò)對暫存在SRAM中的二值圖像進(jìn)行數據分析,來(lái)提取手形的邊緣輪廓。
輪廓跟蹤算法步驟如下:
①按從上到下、從左到右的順序掃描圖像,尋找第一個(gè)非白像素作為邊界起始點(diǎn)A[0],記錄A[0]點(diǎn)的坐標(A[0].x,A[0].y)。A[0]是具有最小行和列值的邊界點(diǎn)。再定義一個(gè)掃描方向變量dir,該變量用于記錄上一步中沿著(zhù)前一個(gè)邊界點(diǎn)到當前邊界點(diǎn)的移動(dòng)方向。其初始化取值為A[0].dir=7;掃描方向定義如圖8所示。
假設當前的坐標為(x,y),則其8個(gè)鄰域坐標如下:
②按逆時(shí)針?lè )较蛩阉鳟斍跋袼氐?3的鄰域,其起始搜索方向設定如下:
若A[n-1].dir為奇數,則取(A[n-1].dir+7)rood 8;
若A[n-1].dir為偶數,則取(A[n-1].dir+6)mod 8。
在33鄰域中搜索到的第一個(gè)與當前像素相同的像素便為新的邊界點(diǎn)A[n],同時(shí)更新記錄從上一點(diǎn)搜索到邊界點(diǎn)A[n]的方向變量A[n].dir,記錄新的邊界點(diǎn)的坐標(A[n].x,A[n].y)。
③如果邊界點(diǎn)A[n]等于第一個(gè)邊界點(diǎn)A[0],即(A[n].x==A[O].xA[n].y==A[0].y)。停止搜索。結束跟蹤。否則重復步驟②。
由邊界點(diǎn)A[O]、A[1]、A[2]、…、A[n]構成的邊界便為要跟蹤的邊界。算法中步驟①的作用足找出第一個(gè)邊界點(diǎn),步驟③的作用是找出所有的邊界點(diǎn)。如圖9所示,左邊為原始圖像,右邊是用該算法仿真的結果。
2.2 手勢識別算法實(shí)現
我們的主要目的是找出伸出手指的個(gè)數。開(kāi)始用行掃描的方法通過(guò)行內從O→1或1→O黑白像素變化的次數來(lái)確定伸出手指的個(gè)數,但這種算法對于傾斜一定角度的手指數目判斷存在一定問(wèn)題,因此轉而采用“提取指尖點(diǎn)算法”。
提取指尖點(diǎn)的方法著(zhù)眼于從手勢輪廓中搜索出指尖點(diǎn),一個(gè)指尖點(diǎn)對應于一根手指,最后根據得到指尖點(diǎn)的個(gè)數來(lái)判定手指數目。判斷是不是指尖:分析手的形狀,手指的兩邊基本上是平行的。一直按逆時(shí)針?lè )较蚯斑M(jìn),每經(jīng)過(guò)一次指尖,手形輪廓的走向發(fā)生反向的變化。由于手形輪廓的邊緣存在一定的毛刺,因此可以用多點(diǎn)方向的平均來(lái)減小毛刺的影響。這里取36點(diǎn)方向的平均,表示為Average_dix[i]。是否經(jīng)過(guò)指尖的判斷條件1:126=|Average_dir[i-1]一Average_dir[i+1]|=162。(說(shuō)明:兩點(diǎn)方向相反,其方向值差4,3.536=126,4.536=162。)
再分析手的形狀,兩手指之間邊緣輪廓的走向也滿(mǎn)足判斷條件l,故必須添加判斷條件。如圖10所示,當沿著(zhù)一個(gè)方向搜索手的邊緣輪廓時(shí),經(jīng)過(guò)指尖走向一定與手指間缺口走向相反。因此,必須假設判定條件2:
Is_FingerVertex(dir0,dirl,dir2);
這個(gè)函數是用來(lái)通過(guò)連續3點(diǎn)的方向來(lái)判斷這3點(diǎn)是否為逆時(shí)針走向。由于是沿著(zhù)逆時(shí)針?lè )较蛩阉鬟吘壿喞?,故在判定條件1成立的前提下加上Is_FingerVertex(Average_dir[i-1],Average_dir[i],Average_dir[i+1])就可以判斷是否為指尖,從而判定手指的數目。順序3點(diǎn)是否為逆時(shí)針走向,具體在程序中可以構造一個(gè)循環(huán)隊列來(lái)實(shí)現。測試結果表明這種算法非常穩定。
結語(yǔ)
SPCA563B內部嵌入功能強大的圖像顏色處理的DSP,用它來(lái)做圖像識別系統的主控芯片十分方便、快捷。同時(shí)該系統具有語(yǔ)音輸出提示功能,操作更加人性化,并且可以通過(guò)USBl.1接口與PC進(jìn)行通信;配合PC端的調試工具,還可以大大縮短圖像識別功能開(kāi)發(fā)的周期。
評論