由于傳統電視機遙控器的按鍵操作比較機械且缺乏娛樂性,設計了一種以DSP2812為核心的手勢識別算法。通過將用戶手勢運動的信息轉換成相應的紅外信號,從而實現手勢遙控電視機更換頻道和調節音量的目的。該系統主要由雙端口RAM通信的雙DSP 并行處理器、CMOS 數字攝像頭、紅外遙控模塊、上位機調試軟件和以太網通信模塊組成。實驗測試表明,該系統能夠實現用戶手勢圖像的采集、手勢動作的識別、紅外遙控及以太網通信功能。 傳統電視機遙控器是一種按鍵操控方式,其操作比較機械且缺乏娛樂性。本文提出一種采用直接判斷使用者手部動作的方法遙控電視機,使用者在攝像頭拍攝范圍內按照規定的擺放方式移動手部,就能夠遙控電視機進行音量增減或頻道變換等操作。設計使人們對電視機的遙控操作更加便捷、人性化,豐富大眾的日常生活。 1 系統設計方案 手勢識別電視機遙控器是集合圖像采集、手勢識別和紅外遙控三大主要功能的控制裝置。依據要實現的采集圖像能力和DSP 處理視頻流能力的功能要求,確定系統結構如圖1 所示。 圖1 手勢識別電視遙控器系統結構 本系統采用了雙DSP 共同工作的方式,主要由六個模塊組成。 1) 攝像頭模塊: 由攝像頭OV7620 及驅動電路組成,負責手勢圖像采集。 2) DSP1: 核心是TMS320F2812,負責對圖像采集及預處理,與上位機網絡通信和用戶按鍵信息的輸入。 3) 上位機: 顯示實時采集的圖像,圖像處理結果和調試參數等。 4) 雙端口RAM 模塊: 實現兩個DSP 之間的高效數據通信。 5) DSP2: 負責提取手勢圖像特征和向紅外遙控模塊發送指令。它從雙端口RAM 獲取圖像數據,從圖像中提取有用的特征,并將判斷結果轉換成相應的遙控指令。 6) 紅外遙控模塊: 負責學習電視機配套遙控器的紅外遙控指令,將其放入指定的存儲空間中。在DSP2 給出發射指令時,查詢存儲空間,獲取對應的紅外指令并發射。 2 系統硬件設計 2. 1 雙DSP 處理器及內存空間設計 本設計使用雙TMS320F2812 的DSP 進行圖像采集、圖像處理并且實現紅外遙控和網絡通信等功能。這樣可以滿足并行圖像處理能力和快速響應的速度要求,同時兩個DSP 擴展了512 K × 16 位的RAM 空間,以滿足圖像處理的空間要求。 為了實現雙DSP 之間的通信,系統采用Cypress公司的一款64 K × 16 位的雙端口RAM 芯片CY7C028 搭建一個數據通道。DSP1 把采集到的圖像通過時間控制有規律寫入數據通道中,DSP2 從數據通道中提取圖像數據存放到自己的RAM 中,然后進行相關的圖像處理。在設計工作狀態時,使用雙端口中斷判優方式,數據傳遞采用握手的通信模式。當DSP1 向雙端口RAM 中寫完數據之后,通過中斷握手的方式,通知DSP2 讀取數據。DSP2 要求數據時,也會以同樣的方式通知DSP1,從而實現雙DSP 高速有規律地數據傳遞。雙端口RAM 與兩個DSP 之間的硬件連接如圖2 所示。 圖2 雙端口RAM 與雙DSP 的硬件連接圖 2. 2 圖像采集電路設計 本系統直接使用DSP1 通過外部中斷NMI 和INT2,分別同步攝像頭OV7620 的VSN 和HREF 信號,同時通過綁定DSP 的8 根I /O 線同步讀取圖像到DSP 內存中,從而實現了系統的圖像采集工作。為了讓DSP 的時鐘頻率與OV7620 的時鐘頻率匹配,必須要降低攝像頭的輸出時鐘頻率。對攝像頭OV7620 內部的寄存器進行設置,達到減慢數據傳輸速度的目的。OV7620 模塊與DSP1 的硬件連接和OV7620 的同步讀取時序分別如圖3 和圖4 所示。 圖3 藍牙發送模塊接口電路 圖4 OV7620 同步讀取時序圖 通過時序圖可知,DSP 先捕獲攝像頭的場中斷信號,準備好存儲一幀圖像的數組。然后,DSP 等待HREF 行中斷信號。最后,在行中斷中判斷PCLK信號,當PCLK 處于高電平時,DSP 讀取該像素值。為了在不丟失手勢特征信息的前提下采集盡量小的圖像,DSP 采集視野中間隔行的100 × 100 大小的圖像,存放在100 × 100 的數組中。通過修改讀取程序可以改變采集圖像的大小。 2. 3 內存及DSP 網絡通信設計 本系統采用RTL8019AS 與DSP1 通過連接對應的地址數據總線,設置片選信號,實現DSP 的以太網通信。RTL8019AS 與DSP1 的硬件連接如圖5 所示。 RTL8019AS 內部有兩塊RAM 區,一塊16 K 字節,地址為0 × 4000 ~ 0 × 7FFF; 一塊32 個字節,地址為0 × 0000 ~ 0 × 001F。RAM 按每256 字節為一頁存儲。一般將RAM 前12 頁( 即0 × 4000 ~ 0 ×4BFF) 存儲區作為發送緩沖區; 后52 頁( 即0 ×4C00 ~ 0 × 7FFF) 存儲區作為接收緩沖區。第0 頁只有32 字節( 地址為0 × 0000 ~ 0 × 001F) ,用于存儲以太網物理地址。要接收和發送數據包就必須通過DMA 讀寫RTL8019AS 內部的16KB RAM。 圖5 RTL8019AS 與DSP1 硬件連接圖 2. 4 紅外遙控模塊電路設計 紅外遙控模塊包括三個部分: 接收部分、發送部分和數據處理部分。接收部分包括光電轉換、解調、高速采樣以及數據分析等模塊,發送部分包括遙控發送和電光轉換模塊,數據處理部分包括中央處理以及存儲模塊。 3 系統軟件設計 3. 1 手勢圖像預處理算法 手勢圖像提取算法選擇幀間差分的方法實現手部圖像分割。利用間隔短暫時間的兩幀圖像比較,獲取兩張圖像運動方向的手部圍成的一小段白色區域,然后采用閾值分割的方法對獲取的圖像二值化,消除噪聲,最后根據此圖像序列含有的白色像素點的多少來確定圖像序列中有無物體存在。對手勢圖像預處理的算法描述如下: 1) 從視頻圖像序列中選取相鄰n 幀的兩幀圖像,其中前一幀圖像為Pk-1( x,y ) ,如圖6( a) 所示,后一幀圖像為Pk( x,y) ,如圖6( b) 所示; 圖6 從視頻圖像序列中選取的圖像 2) 為了減少計算量,將480 × 640 的圖像隔4 行6 列提取像素點,左右各忽略20 列,上下各忽略40行,獲得兩幀100 × 100 的圖像 和 ,如圖7( a) 和7( b) 所示; 圖7 縮小后的圖像 3) 計算后一幀與前一幀的差為Gk( x,y) ,得到目標的變化量,如圖8 所示; 圖8 兩幅圖像的目標變化量 4) 對幀間差分法得到的圖像按選定的閾值進行二值化,得到目標圖像序列的二值化圖像序列Fk( x,y) ,如圖9 所示。其中, 式( 1) 中,T 為閾值。對于給定視頻序列的圖像,假設像素點k 處沒有運動,其幀差dk服從均值為0,方差為σ2 的Gauss 分布N( 0,σ2) : 式( 2) 中,H0表示無運動假設,σ2 是幀差的統計方差,通常認為它等于攝像頭噪聲方差的兩倍。根據概率統計假設檢驗“3σ”法則和“正確的閾值T 應該能消除大部分噪聲”的原則。經試驗測試得閾值T選擇在35 ~ 45 之間比較合適。二值化后的圖像如圖9 所示。觀察Fk( x,y) 的圖像序列,可以看到圖像中的噪聲很少,這是因為①幀間差分法達到了加大目標信息的權重,同時抑制了靜態背景的效果;②攝像頭采集范圍背景比較單一,光線均勻。 Fk( x,y) 中主要存在兩大類的噪聲。一種是由于光線變化產生的噪聲,這種噪聲往往以孤立的黑色像素點的形式出現。第二種噪聲是一些面積較小的背景塊。為了盡可能消除這兩種噪聲,可以求每個N × M 小塊的灰度平均值,根據灰度平均值可估計出白色區域的大小。當灰度平均值小于某一閾值時,可以認為是噪聲,把對應的N × M 個點賦值為0。算法實現如下: ( 1) 建立一個大小是Fk( x,y) 的1 /25 倍的矩陣來存20 × 20 個5 × 5 像素塊的平均灰度值fk( x,y) 。 ( 2) fk( x,y) 和Hk( x,y) 滿足如下關系: 圖10 噪聲消除后的圖像 通過這種處理方法,原圖像中的小塊噪聲和椒鹽噪聲基本被消除,手部圖像邊緣的某些像素點也會被當作噪聲消除,但是不影響后續處理。經過噪聲消除后的圖像如圖10( a) 所示。使用同樣的處理算法,可以得到后一幀的圖像處理結果如圖10( b)所示。 3. 2 特征提取及動作識別 獲取只含手部運動區域的圖像Hk( x,y) 和Hk+1( x,y) 后,掃描出手部圖像邊界,通過比較與計算判斷手擺放位置和區域中心位置Pk( xk,yk) 和Pk+1( xk+1,yk+1) 。手部擺放位置可以判斷手的上下或是左右運動。圖像處理和特征提取流程圖如圖11 所示。 ( 1) Hk+1( x,y ) 和Hk( x,y ) 是相同的縱向擺放位置,手部在左右運動。 ( 2) 根據列坐標的大小來判斷手左右方向的移動如下: 判斷上下運動的算法與判斷左右類似。若出現無法判斷的情況,則重新采集圖像,進行處理和判斷,直到能夠判斷方向為止。 圖11 圖像處理算法流程圖 3. 3 紅外遙控算法原理 本系統選擇最常用的一種編碼方式uPD6121進行學習、解碼和發射。紅外遙控器的紅外信號一般都是通過38 ~ 40kHz的載波調制而成。先對接收到的紅外信號進行解調,再記錄遙控編碼信號的脈沖寬度。學習子程序的流程圖如圖12 所示。采用計數器對信號高低電平計數的方法采集數據并保存。 發射模塊根據DSP2 發送的指令找到對應的編碼信號在外擴RAM 的位置,將編碼調入內存,然后通過編碼發送子程序,將編碼調制在38 kHz 載波上發送出去。用定時中斷0 產生38 kHz 的載波信號,用學習到的遙控編碼信號的低電平去控制載波輸出,此時定時器0 定時長度由相應的遙控信號低電平寬度計數值確定。如果需發射的遙控信號為高電平,關定時中斷0; 如果為低電平,則開定時中斷0,從而實現遙控信號的脈寬調制發射。發射子程序流程如圖13 所示。 圖12 學習子程序流程圖 圖13 發射子程序流程圖 3. 4 網卡驅動程序及上位機軟件設計 3. 4. 1 網卡驅動程序及UDP 協議實現 RTL8019AS 已經實現以太網通信物理層功能,只需初始化芯片相應的寄存器,編寫DSP 下驅動,便可啟動RTL8019AS。本系統采用TCP /IP 協議族中的UDP 協議( user datagram protocol) 進行通信,實現通過網絡把DSP 采集到的圖像信息發送到上位機。 3. 4. 2 上位機軟件編寫 上位機軟件采用C#語言編寫,實現UDP通信協議。上位機軟件實現接收下位機的數據,還原圖像數據并顯示等功能。同時,上位機還可以向下位機發送命令,方便系統調試。 3. 4. 3 圖像數據發送及還原 下位機采用UDP發送數據,把數據的每一行作為一個UDP數據包,一幅圖像分成100個數據包進行發送。為了讓上位機完整接收一幅圖像,在每幅圖像開始發送之前,先發送一個規定的幀開頭數據包,在每一幅圖像發送完畢之后,也發送一個規定幀結尾數據包。上位機根據這些標定將100個數據包利用C#語言的相關函數,轉換一定的圖片格式,在上位機進行顯示。 4 系統測試 4. 1 測試流程 創建手勢樣本庫、手勢圖像預處理、特征提取、實時手勢圖像與庫模型預測、識別結果、執行操作等。 4. 2 測試結果 本設計自定義手勢及編號如圖14所示,其中手勢1表示開機,手勢2表示關機、手勢3表示換臺的遞增,手勢4表示換臺的遞減,手勢5表示音量增加,手勢6表示音量減小等功能。 對組裝好硬件電路系統進行整體測試。測試者在攝像頭的拍攝范圍內進行上述6種手勢各從左向右、從右向左、從上向下和從下向上10次緩慢運動,在每種手勢40次的識別中識別率如表1所示。 表1 識別率 測試結果表明,本算法識別手勢的準確率在96%左右,遙控的有效范圍在4 m 左右,能夠實現電視機的頻道更換和音量調節功能。 5 總結 本文設計的手勢識別電視遙控器系統,利用攝像頭使手勢動作與電視機進行交互,采用紅外信號遙控電視機,在紅外傳輸有效距離內,可以根據個人喜好,任意改變手勢識別樣本庫系統,使得電視遙控更加人性化,并為實現家庭數字設備操控一體化提供可能。 圖14 自定義手勢及編號 |