鐘建敏 李曉冬* 李家健 陸任貴 常子鍵
(桂林電子科技大學電子電路國家級實驗教學示范中心,廣西 桂林 541004)
我國是聽障人口數量最多的國家,其人口已達2780萬人[1]。作為聽障者使用的主要溝通手段,手語在健全人群體中普及率非常低,這成為他們融入社會的巨大障礙。為了填補這一鴻溝,2016年8月,國務院印發了《“十三五”加快殘疾人小康進程規劃綱要》,強調了“殘疾人服務科技應用等創新要素”的重要性。如何利用現代科技實現手語翻譯,幫助聽障者與健全人更好地溝通交流成為亟待解決的問題。
當前手語識別技術大體可分為三種技術路徑:
(1)基于視覺的手語識別。該方案利用攝像頭采集手語動作的圖像信息后進行識別[2],其優點是無須穿戴,體驗較好,但數據處理量巨大,實時性差,而且易受外界環境影響,在遮擋、強光、弱光或移動環境下識別困難,在日常交流過程中有很大的局限性。
(2)基于SEMG表面肌電傳感器和慣性測量傳感器的手語識別。該方案利用皮膚表面的肌電信號配合手部運動加速度信息識別手部動作,優點是穿戴的體驗感較好,但成本較高,識別準確率與使用者手部肌肉信號強度關系緊密,個體差異較大。
(3)基于數據手套的手語識別。該方案利用數據手套上的彎曲度傳感器和慣性測量傳感器識別手部動作,識別率較高[3-5],而且成本較低。
聽障人群大多處于社會底層,收入較低,在保證手語識別準確率的前提下,盡可能地降低成本是推廣普及手語翻譯系統的關鍵,因此,本文選擇了第三條技術路徑。
系統由數據手套和手機App部分組成,如圖1所示。數據手套分為左手和右手,右手為主端,左手為從端。從端將采集到的左手手部動作數據通過藍牙發送給主端,主端將雙手的動作數據融合后對手型進行初步判斷分類再通過藍牙發送到手機端,手機端App利用HMM模型中的Viterbi算法對接收到的數據進行二次分類最終確定手語類型,并顯示文本、播放語音。數據手套實物及手機App運行界面如圖2所示。

圖1 系統總體框架

圖2 數據手套實物及手機App運行界面
2.1.1 主控模塊
主控模塊采用STM32l4R5處理器,該處理器基于標準的ARM架構,采用了為高性能、低成本、低功耗的嵌入式應用專門設計的Cortex-M內核,主頻120 MHz,運算性能 150 MIPS,功耗 43 μA/MHz,配置了高達640KB的RAM和2 048 KB的FLASH,集成了12位的ADC、SPI等眾多外設,此外還帶有FPU單元和DSP指令集,足以滿足手型分類相關算法對運算速度的要求。
2.1.2 手部動作采集模塊
(1)彎曲度傳感器
彎曲度傳感器是一種用來測量彎曲程度的柔性傳感器,利用其在彎曲過程中的阻值變化反映彎曲程度。彎曲度傳感器固定在數據手套的5個手指位置,通過分壓電路將變化的電阻信號轉換為電壓信號再經過AD采樣電路即可獲取手指彎曲數據。
(2)慣性測量傳感器
慣性測量傳感器采用MPU9250,與另一款常用的慣性傳感器MPU6050相比,前者在內置三軸MEMS陀螺儀和MEMS加速度計的基礎上增加了磁力計,有效解決了Z軸的漂移問題,精度更高。MPU9250的陀螺儀用于測量手部X、Y、Z三軸的角速度分量,加速度計用于測量三軸的加速度分量,磁力計則用于測量三軸的地磁分量,利用這9個量通過姿態解算就能得到手部的運動姿態信息。
2.1.3 通信模塊
通信模塊采用支持藍牙5.0BLE(Bluetooth Low Energy)的nRF52832芯片,該芯片提供了一個UART接口,2個I2C接口和3個主動SPI接口,功耗僅為5 mA[6]。
2.1.4 電源模塊
考慮到便攜性和續航能力,數據手套選用了330 mAh、3.7 V的聚合物鋰電池,尺寸僅為6 mm厚、22 mm寬、26 mm長。充電電路選擇tp4056單節鋰電池充電芯片,電路中各模塊、芯片要求3.3 V供電電壓而電池的輸出電壓范圍為2.7~3.7 V,因此,需要穩壓電路。電路如圖3所示,左端為充電電路,右端為穩壓電路。
2.2.1 程序流程
系統初始化后進入數據采集循環,通過彎曲度傳感器和慣性測量傳感器獲取的數據先分別歸一化,再進行數據融合,然后采用KNN(K-最近鄰分類)算法在樣本集中找到與當前手勢最接近的K個手勢樣本數據及其所屬的m個分類,最后將這些分類編號及其概率(獲得的投票數)通過藍牙發送到手機端做進一步處理,流程圖如圖4所示。

圖3 電源電路

圖4 數據手套端程序流程圖
2.2.2 KNN算法
KNN算法是機器學習算法中最簡單的分類算法之一,當要對一個新的數據進行分類時,根據與它距離最近的K個已有數據的類別來判斷其屬性,本文采用歐式距離,計算公式如下:

式中,xk為待分類數據,yi為樣本數據,xkj為xk的第j個分量,yij為樣本數據yi的第j個分量,n為樣本及待分類數據的維數。
KNN算法只需簡單增加樣本集,即可應對詞匯量的增加,無需進行大量參數調整就能獲得不錯的性能表現,分類準確率比較高。使用KNN算法前,需要為每一個手勢采集多組數據,建立手勢樣本集,當樣本集較大時,基于窮舉搜索的KNN算法的時間復雜度將會很大,達到了O(N),因此,本文采用了基于KDTree的KNN算法,其時間復雜度為O(log2N)[7],同時K取值為3,這樣可以在保證準確性的同時大幅度降低計算復雜度。當然,KNN算法也存在著無法解決手勢的時間可變性問題:同樣的手勢,不同的人,在不同時間做出來會有差異,這會降低識別率,因此,初步分類結果還需在手機端采用其他算法作進一步分析。
系統初始化后,循環監聽數據手套端發來的初判數據,并分析其連續狀態是否結束,當連續狀態結束時,表明使用者已經用一組手語表達完整一段話,程序調用Viterbi算法計算出這組手語最有可能表達的語句組合并返回每一個詞匯的ID序列,最后播放這組ID對應的音頻,顯示其文字,流程圖如圖5所示。

圖5 手機App程序流程圖
手語屬于自然語言,完整的表達通常需要連續的手語動作,是一種較為典型的時間序列,其上下文中相鄰詞間具有較大的關聯性,因此,可以使用隱馬爾科夫模型(HMM)對其進行建模以彌補KNN算法的不足。對于一段完整的手語,數據手套采集到的每個手語動作數據是一組已知的觀察序列O={O1,O2,...OT},而這些動作數據所表示的含義則是隱藏序列S={S1,S2,...,ST};初始狀態概率向量π是這段手語表達里首個手語動作可能的m個含義對應的概率組成的向量;狀態轉移概率矩陣A表示每一個手語詞匯之間的語言統計關系,可通過語料庫計算出來,這里使用NGram語言模型中的二元Bi-Gram模型,即一個詞的出現僅依賴于它前面出現的一個詞;發射概率矩陣為每個手語詞匯可能對應的手語動作數據的概率關系,由KNN算法獲得。 上述HMM 模型里,λ=(A,B,π)和觀測序列O都已知,需要計算的是給定觀測序列條件下,概率P(S|O,λ)最大的隱藏序列S,這是一個解碼問題,可采用Viterbi算法實現。當手語詞匯表比較大時,為減少檢索時間,用哈希表建立狀態轉移概率矩陣的數據結構,理論上其時間復雜度只需O(1)。
本設計選擇了5位掌握手語的健康測試者對系統錄入的30個手語詞匯進行了測試,測試內容分為單一手語測試和連續手語測試兩項。在單一手語測試中,測試者對每個手語動作分別操作10次;在連續手語測試中,測試者利用系統中的30個手語詞匯隨機表達300句話,測試結果如表1所示。
測試結果表明單一手語的識別準確率超過了93%,連續手語的識別準確率略低,但也超過了90%。
本文設計的手語翻譯系統采用了數據手套+手機App方案,實現難度相對較低,受使用環境影響較??;結合了KNN和HMM模型中的Viterbi兩種算法,在識別精度上表現良好,且成本較低,手語詞匯的可擴展性較好。輸出端以手機為載體,普通人只需下載安裝App即可與佩戴數據手套的聽障人士實時交流,其便捷性不言而喻。

表1 系統測試結果