鄭海鵬,李玉榕
(福州大學(xué) 電氣工程與自動(dòng)化學(xué)院,福建 福州 350108)
手勢是人們?nèi)粘贤ń涣鞯闹匾绞?,人們可以通過幾個(gè)簡單的手勢表達(dá)出十分復(fù)雜的信息,而對于一部分信息通過語言文字去表達(dá)則要復(fù)雜許多。表面肌電信號包含了生物運(yùn)動(dòng)的各種信息并且它還超前于生物的運(yùn)動(dòng)行為。這一特性使得表面肌電信號在人機(jī)交互、假肢控制、手勢識(shí)別等領(lǐng)域得到了廣泛應(yīng)用。
通過分析手前臂肌肉的表面肌電信號,可以預(yù)測人的手勢動(dòng)作,再將識(shí)別出的手勢動(dòng)作作為計(jì)算機(jī)系統(tǒng)的輸入,從而實(shí)現(xiàn)人與計(jì)算機(jī)的交互。上海理工大學(xué)的劉萬陽等人基于尺側(cè)腕伸肌和尺側(cè)腕屈肌上的表面肌電信號對受試者的手勢進(jìn)行識(shí)別,并將識(shí)別的結(jié)果作為虛擬廚房的控制指令輸入虛擬廚房系統(tǒng)中,從而實(shí)現(xiàn)對虛擬廚房的控制。
表面肌電信號是生物運(yùn)動(dòng)時(shí)產(chǎn)生的生物電信號。它僅與生物運(yùn)動(dòng)有關(guān),而與外界光和聲音等因素?zé)o關(guān),這使得基于表面肌電信號的手勢識(shí)別的應(yīng)用場景十分廣泛。針對提高系統(tǒng)的魯棒性方法,葡萄牙科英不拉大學(xué)系統(tǒng)和機(jī)器人研究所的Mahmoud等人提出了利用支持向量機(jī)閾值法和設(shè)置鎖定手勢的方式來防止系統(tǒng)在人運(yùn)動(dòng)時(shí)的誤識(shí)別,從而使得基于表面肌電的手勢識(shí)別系統(tǒng)有了更大的應(yīng)用空間。
表面肌電信號采集十分簡單且無創(chuàng),使得表面肌電信號的采集實(shí)驗(yàn)十分容易被受試者接受。從肌電信號到手勢識(shí)別、再從手勢識(shí)別到計(jì)算機(jī)系統(tǒng)的人機(jī)交互方式是一種便捷且實(shí)用的人機(jī)交互方式。基于此,本文開展了健康人群的表面肌電信號的采集和分析,并對目標(biāo)動(dòng)作進(jìn)行識(shí)別,最后通過GUI界面實(shí)時(shí)顯示系統(tǒng)識(shí)別結(jié)果。
本文選取的目標(biāo)動(dòng)作為握拳、伸掌、伸腕和屈腕四個(gè)動(dòng)作。本文通過由肌電傳感器和Arduino UNO開發(fā)板組成的雙通道表面肌電信號采集系統(tǒng)實(shí)時(shí)采集手前臂的尺側(cè)腕屈肌和尺側(cè)腕伸肌的表面肌電信號,并在上位機(jī)中搭建模式識(shí)別系統(tǒng)對采集到的信號進(jìn)行預(yù)處理、活動(dòng)段提取、特征值提取和目標(biāo)動(dòng)作識(shí)別等,最后通過GUI界面實(shí)時(shí)顯示分類識(shí)別的結(jié)果。在實(shí)現(xiàn)在線識(shí)別的過程中,本文首先通過了多組離線實(shí)驗(yàn)來確定系統(tǒng)各個(gè)環(huán)節(jié)的方法和參數(shù),然后再根據(jù)離線實(shí)驗(yàn)確定的參數(shù)搭建在線識(shí)別系統(tǒng)。整體的系統(tǒng)框圖如圖1所示。
圖1 系統(tǒng)框圖
如圖2所示,本文所搭建的雙通道表面肌電信號采集系統(tǒng)主要包括DFROBOT Gravity肌電傳感器和Arduino UNO開發(fā)板,實(shí)驗(yàn)實(shí)物圖如圖3所示。通過在Arduino UNO開發(fā)板編寫程序,實(shí)現(xiàn)該雙通道表面肌電信號采集系統(tǒng)以475 Hz的采樣頻率采集受試者尺側(cè)腕伸肌和尺側(cè)腕屈肌上的表面肌電信號,并將采集到的信號通過串口傳輸?shù)缴衔粰C(jī)。
圖2 表面肌電信號采集系統(tǒng)設(shè)計(jì)框圖
圖3 實(shí)驗(yàn)實(shí)物圖
在采集實(shí)驗(yàn)中本文選擇了4名男性和1名女性共5名健康受試者作為實(shí)驗(yàn)對象,受試者詳細(xì)信息見表1所列。實(shí)驗(yàn)前,用酒精擦拭受試者皮膚表面,并待其自然風(fēng)干。采集過程中,首先要求受試者保持手臂完全放松,直至MATLAB打印“靜息段采集結(jié)束,實(shí)驗(yàn)開始”。本文要求受試者依次做握拳、伸掌、屈腕和伸腕四個(gè)動(dòng)作,每個(gè)動(dòng)作重復(fù)四次,每次動(dòng)作保持4 s,每次動(dòng)作中間休息3 s。四種目標(biāo)動(dòng)作如圖4所示。
表1 受試者信息
圖4 四種目標(biāo)動(dòng)作
(1)串口助手
本文最終目的是為了實(shí)現(xiàn)手勢的在線識(shí)別,故要求MATLAB(R2018b)能夠?qū)崟r(shí)讀取下位機(jī)通過串口傳輸至上位機(jī)的數(shù)據(jù)。本文利用MATLAB(R2018b)自帶的函數(shù)編寫一個(gè)串口工具,從而實(shí)現(xiàn)MATLAB(R2018b)對下位機(jī)傳輸?shù)臄?shù)據(jù)進(jìn)行實(shí)時(shí)顯示和保存。
(2)肌電信號預(yù)處理
表面肌電信號十分微弱,并且十分容易受到環(huán)境噪聲、工頻干擾和個(gè)人身體差異的影響,使得表面肌電信號的信噪比較低。為了獲得高信噪比并使在線系統(tǒng)具有良好的實(shí)時(shí)性,本文采用了工頻陷波器、絕對值整流和2階巴特沃茲低通濾波器的組合去噪方法對采集到的信號進(jìn)行預(yù)處理。
本文所采用的工頻陷波器傳遞函數(shù)如下:
其中:=-2cos(2π),=50 Hz,為采樣周期;=0.75。
本文所采用的2階巴特沃茲濾波器的傳遞函數(shù)如下:
其中:=[1-1.984 0.984];=10×[3.322 6.644 3.322]。
(3)去除基線
由于DFROBOT Gravity肌電傳感器和Arduino UNO開發(fā)板組成的信號采集系統(tǒng)采集到的信號中存在著較大的基線,并且MATLAB(R2018b)串口讀取函數(shù)與Arduino的串口通信函數(shù)存在版本不兼容問題,因此本文采用了兩段去基線的方法。首先在下位機(jī)中降低基線,然后在上位機(jī)中去除基線。而在下位機(jī)中降低基線的方法與在上位機(jī)中去除基線的思路相同,即通過采集一段靜息信號,并依據(jù)該段靜息信號求出一個(gè)預(yù)估基線,最后再用靜息段后的信號減去該預(yù)估基線。本文主要通過去除基線、去除工頻干擾、絕對值整流和巴特沃茲低通濾波等4個(gè)流程,對采集到的表面肌電信號進(jìn)行預(yù)處理。
(4)滑動(dòng)窗口設(shè)置
由于表面肌電信號采集實(shí)驗(yàn)是一個(gè)連續(xù)的過程,為了能夠劃分出活動(dòng)段和特征提取段,需要將采集到的信號劃分為一個(gè)個(gè)的小窗口。依據(jù)表面肌電信號超前于人行為動(dòng)作約300 ms的特性、在線手勢識(shí)別系統(tǒng)的實(shí)時(shí)性要求和表面肌電信號前后的關(guān)聯(lián)性,本文選擇了277 ms為一個(gè)窗口,并且每次滑動(dòng)139 ms。因?yàn)楸疚乃捎玫碾p通道表面肌電信號采樣系統(tǒng)的采樣頻率為475 Hz,所以每個(gè)窗口包含132個(gè)點(diǎn),每次滑動(dòng)66個(gè)點(diǎn),如圖5所示。
圖5 滑動(dòng)重疊窗
(5)活動(dòng)段檢測
人的表面肌電信號可分為活動(dòng)信號和靜息信號兩類?;顒?dòng)信號是人體做出動(dòng)作時(shí)肌肉收縮產(chǎn)生的信號變化,該部分的信號具有能量大和變化快的特點(diǎn);而靜息信號與活動(dòng)信號相反,其能量小且變化緩慢。依據(jù)該特點(diǎn),本文設(shè)置兩個(gè)能量閾值并計(jì)算每個(gè)窗口信號的絕對平均值;再將計(jì)算的每個(gè)窗口信號的絕對平均值與預(yù)先設(shè)置的開始和結(jié)束閾值進(jìn)行比較。當(dāng)該絕對平均值大于開始閾值時(shí),認(rèn)為信號進(jìn)入活動(dòng)段;而當(dāng)絕對平均值小于結(jié)束閾值時(shí),認(rèn)為活動(dòng)段結(jié)束。
(6)特征值提取
表面肌電信號的特征值可分為時(shí)域、頻域和時(shí)頻域三類,本文依據(jù)在線系統(tǒng)的實(shí)時(shí)性要求,選擇了計(jì)算量較小的絕對平均值、均方根和方差等三個(gè)時(shí)域特征值。以上三種特征值計(jì)算方法如下。
絕對平均值(MAV):反映了表面肌電信號在肌肉運(yùn)動(dòng)過程中的能量平均變化。
均方根(RMS):反映了肌電信號在運(yùn)動(dòng)過程中的能量有效值的變化。
方差(VAR):反映了肌電信號在運(yùn)動(dòng)過程中的能量變化速度。
本文在CPU主頻為2.5 GHz的上位機(jī)和MATLAB(R2018b)軟件平臺(tái)上通過兩組對照實(shí)驗(yàn)對比了支持向量機(jī)、隨機(jī)森林和KNN三種分類算法。
實(shí)驗(yàn)一:將受試者的數(shù)據(jù)分為訓(xùn)練集和測試集,再用訓(xùn)練集分別訓(xùn)練三種分類器,最后將測試集送進(jìn)訓(xùn)練集屬于同一受試者的分類器進(jìn)行預(yù)測。實(shí)驗(yàn)結(jié)果見表2所列。
表2 實(shí)驗(yàn)一:識(shí)別準(zhǔn)確率(單位:%)
實(shí)驗(yàn)二:用受試者1的數(shù)據(jù)訓(xùn)練三種分類器模型,再將剩余受試者的數(shù)據(jù)送進(jìn)訓(xùn)練好的三種分類器進(jìn)行預(yù)測。實(shí)驗(yàn)結(jié)果見表3所列。
表3 實(shí)驗(yàn)二:識(shí)別準(zhǔn)確率(單位:%)
從表2可以發(fā)現(xiàn),三種分類器的平均識(shí)別準(zhǔn)確率都達(dá)到了90%以上,其中KNN和支持向量機(jī)的最高識(shí)別率達(dá)到了97%。從分類器計(jì)算時(shí)間來看,KNN、隨機(jī)森林和支持向量機(jī)三種分類器的計(jì)算時(shí)間分別為0.041 s、0.135 s和0.002 s。支持向量機(jī)分類器計(jì)算時(shí)間要遠(yuǎn)小于其他兩種分類算法。從表3可以看到,相較于實(shí)驗(yàn)一,實(shí)驗(yàn)二中三種分類器模型的識(shí)別率都大大降低了,故可推測個(gè)人的身體差異對于分類器的識(shí)別準(zhǔn)確率有較大的影響。
根據(jù)三種分類算法的識(shí)別準(zhǔn)確率、算法的計(jì)算量和分類器模型的普適性,最終選擇了支持向量機(jī)作為本文的分類算法。
本文利用MATLAB(R2018b)的GUIE編輯器搭建了兩個(gè)GUI界面,分別用于實(shí)時(shí)顯示采集到的尺側(cè)腕屈肌和尺側(cè)腕伸肌的表面肌電信號和實(shí)時(shí)顯示分類識(shí)別結(jié)果,如圖6所示。
圖6 人機(jī)交互界面
本文通過GUI界面中開始按鈕的回調(diào)函數(shù)將前文介紹的串口助手、數(shù)據(jù)預(yù)處理、活動(dòng)段的檢測、特征提取和分類識(shí)別整合到一起,即首先通過串口助手接收下位機(jī)傳輸來的數(shù)據(jù),獲得的數(shù)據(jù)經(jīng)過信號預(yù)處理流程,然后選取最新窗口的數(shù)據(jù)進(jìn)行特征提取和分類識(shí)別,最后根據(jù)分類器識(shí)別結(jié)果將對應(yīng)動(dòng)作的圖片更新至GUI界面中,從而實(shí)現(xiàn)實(shí)時(shí)采集表面肌電信號和實(shí)時(shí)進(jìn)行動(dòng)作識(shí)別。
采用Arduino UNO和肌電傳感器組成的雙通道表面肌電信號采集系統(tǒng)采集受試者1的尺側(cè)腕屈肌和尺側(cè)腕伸肌表面肌電信號,并通過MATLAB(R2018b)觀測采集到的表面肌電信號,如圖7和圖8所示。
圖7 尺側(cè)腕屈肌上的表面肌電信號
圖8 尺側(cè)腕伸肌上的表面肌電信號
本文對串口助手接收到的受試者1的尺側(cè)腕屈肌和尺側(cè)腕伸肌的表面肌電信號分別進(jìn)行去除基線、去除工頻干擾、絕對值整流和巴特沃茲低通濾波等四個(gè)步驟,其輸出結(jié)果如圖9和圖10所示。
圖9 尺側(cè)腕屈肌肌電信號的信號處理后波形
圖10 尺側(cè)腕伸肌肌電信號的信號處理后波形
將利用受試者1的數(shù)據(jù)訓(xùn)練好的支持向量機(jī)分類器模型導(dǎo)入在線系統(tǒng),再由受試者1進(jìn)行在線手勢識(shí)別實(shí)驗(yàn)。以握拳手勢動(dòng)作為例,在線顯示結(jié)果如圖11所示。
圖11 受試者1在線實(shí)驗(yàn)結(jié)果
本文經(jīng)過多組離線實(shí)驗(yàn)測試,最終選出了最佳的參數(shù)和方法,并且本文提出的四種手勢的識(shí)別正確率最高達(dá)到97%。在上位機(jī)CPU主頻為2.5 GHz以及軟件平臺(tái)采用MATLAB(R2018b)的條件下進(jìn)行在線測試。當(dāng)受試者做出動(dòng)作,上位機(jī)GUI界面可以刷新肌電信號波形,并實(shí)時(shí)顯示識(shí)別出的動(dòng)作。