一種基于三軸加速度傳感器的手勢識別方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及手勢識別技術(shù),尤其是涉及一種基于三軸加速度傳感器的手勢識別方 法。
【背景技術(shù)】
[0002] 手勢是一種自然、直觀、易于學(xué)習(xí)的人機交互手段,手勢輸入是實現(xiàn)自然、直接人 機交互不可缺少的關(guān)鍵技術(shù)。目前的手勢識別技術(shù)主要分為基于數(shù)據(jù)手套和基于視覺兩 種。這兩種方法各有自己的長處,也都取得了一些研究成果,但都還不成熟。手勢輸入作為 一種自然、豐富、直接的交互手段在人機交互技術(shù)中占有重要的地位。
[0003] 手勢識別利用各類傳感器對手部/手持工具的形態(tài)、位移等進(jìn)行持續(xù)采集,每隔 一段時間完成一次建模,形成一個模型信息的序列幀,再將這些信息序列轉(zhuǎn)換為對應(yīng)的指 令,用來控制實現(xiàn)某些操作。
[0004] 目前市面上已經(jīng)存在的手勢識別算法大都比較復(fù)雜,對硬件平臺的要求較高,無 法在一些運算性能較低的平臺(比如AVR 8位單片機)上實現(xiàn),為了適應(yīng)Arduino平臺的 應(yīng)用,有必要研發(fā)一種對硬盤件平臺要求低的手勢識別算法。
【發(fā)明內(nèi)容】
[0005] 為了克服現(xiàn)有基于三軸加速度傳感器的手勢識別方法的不足,本發(fā)明提供一種新 型的基于三軸加速度傳感器的手勢識別方法,該基于三軸加速度傳感器的手勢識別方法, 該識別方法對于硬件平臺的要求極低,只需占用512字節(jié)的內(nèi)存空間就可以正常運行。
[0006] 為實現(xiàn)上述發(fā)明目的,本發(fā)明采用如下技術(shù)方案:
[0007] -種基于三軸加速度傳感器的手勢識別方法,適用于裝載有三軸加速度傳感器的 Arduino平臺,包括如下步驟:
[0008] 建立標(biāo)準(zhǔn)手勢庫,以及相應(yīng)的標(biāo)準(zhǔn)庫權(quán)重值;
[0009] 通過三軸加速度傳感器獲取用戶手勢變化中各個時刻的三軸的加速度序列,對該 加速度序列依次進(jìn)行歸一化處理、冗余數(shù)據(jù)過濾獲得中間序列,對該中間序列進(jìn)行加速路 徑規(guī)劃;通過對每組中間序列進(jìn)行約束獲取手勢主要的速度變化的方向;接著對該約束后 的中間序列進(jìn)行冗余數(shù)據(jù)二次過濾以及平滑濾波去除誤差,通過加速度序列積分處理得到 速度序列并對其進(jìn)行歸一化處理;
[0010] 然后對速度序列進(jìn)行分析得到速度方向序列,對速度方向序列進(jìn)行方向冗余序列 過濾得到最簡化的手勢運動序列,然后按照順序從序列中找出符合條件的手勢狀態(tài)值,乘 以其權(quán)值,然后再尋找下一個狀態(tài)值,再乘以其權(quán)值,直到結(jié)束,最后這些值相加即可得到 運動的權(quán)重值;
[0011] 將新的權(quán)重值與標(biāo)準(zhǔn)庫權(quán)重值進(jìn)行一一相比得出多組匹配值,選取最大的匹配值 的相對應(yīng)的標(biāo)準(zhǔn)庫權(quán)重值,并根據(jù)標(biāo)準(zhǔn)庫權(quán)重值從標(biāo)準(zhǔn)手勢庫中獲取相應(yīng)的手勢,并輸出 至Arduino平臺。
[0012] 進(jìn)一步的,在采集加速度序列之間還需進(jìn)行喚醒檢測,包括如下:
[0013] 對所述三軸加速度傳感器進(jìn)行震動或晃動,三軸加速度傳感器獲取十次滿足強度 閾值的喚醒加速度值,當(dāng)有五組以上的喚醒加速度值超過強度閾值,完成喚醒。
[0014] 進(jìn)一步的,還包括手勢識別開始檢測以及手勢識別結(jié)束檢測,包括如下:
[0015] 手勢識別開始檢測包括:預(yù)先建立加速度檢測值,獲取手勢開始時的當(dāng)前加速度, 獲得當(dāng)前加速度與加速度檢測值的絕對差值,確定絕對差值大于所述閾值時,手勢開始;
[0016] 手勢結(jié)束檢測包括:獲取當(dāng)前加速度值,獲得該當(dāng)前加速度值與上一個加速度值 的絕對差值,判斷該絕對差值是否滿足強度閾值,如果連續(xù)若干次滿足強度閾值,則手勢結(jié) 束,。
[0017] 進(jìn)一步的,歸一化處理的區(qū)間范圍為[-100,100]。
[0018] 進(jìn)一步的,冗余數(shù)據(jù)過濾的過程為:獲得每組歸一化處理后的兩軸加速度的絕對 值,確定絕對值小于15時,直接過濾去除。
[0019] 進(jìn)一步的,加速度序列積分處理的公式為
實中 a (k)表示加速度序列中的第K個采樣點的加速度值,Λ t為質(zhì)點A呈一維運動,從某點移動 到另一點的運動時間,v(〇)表示初始速度。
[0020] 進(jìn)一步的,所述權(quán)重值的提取的過程為:根據(jù)上述步驟中獲得的手勢主要的速度 變化的方向,在標(biāo)準(zhǔn)手勢庫中選擇相同方向的標(biāo)準(zhǔn)手勢以及標(biāo)準(zhǔn)手勢的標(biāo)準(zhǔn)庫權(quán)重值。
[0021] 本發(fā)明的有益效果在于:本發(fā)明提供的提供一種基于三軸加速度傳感器的手勢識 別方法,具有計算量小、誤判率低、配置要求低的特點,本發(fā)明對于硬件平臺的要求極低,只 需占用512字節(jié)的內(nèi)存空間就可以正常運行,因而特別適合Arduino平臺實現(xiàn)對電腦的接 觸式指令輸出。
【附圖說明】
[0022] 圖1為本發(fā)明的手勢動作示意圖。
[0023] 圖2為本發(fā)明基于三軸加速度傳感器的手勢識別方法的流程示意圖。
[0024] 圖3為本發(fā)明的喚醒流程示意圖。
[0025] 圖4為本發(fā)明的手勢開始檢測流程示意圖。
[0026] 圖5為本發(fā)明的手勢結(jié)束檢測流程示意圖。
[0027] 圖6為手勢識別處理流程示意圖。
【具體實施方式】
[0028] 為了便于理解本發(fā)明,下面將參照相關(guān)附圖對本發(fā)明進(jìn)行更全面的描述。附圖中 給出了本發(fā)明的較佳實施例。但是,本發(fā)明可以以許多不同的形式來實現(xiàn),并不限于本文所 描述的實施例。相反地,提供這些實施例的目的是使對本發(fā)明的公開內(nèi)容的理解更加透徹 全面。
[0029] 請參閱圖1至圖6,上述的基于三軸加速度傳感器的手勢識別方法,適用于裝載有 三軸加速度傳感器的Arduino平臺,包括如下步驟:
[0030] 建立標(biāo)準(zhǔn)手勢庫,以及對應(yīng)的標(biāo)準(zhǔn)庫權(quán)重值,如圖1所示,在本實施例中,共采用 15種不同的手勢,那么可定義如下值,相應(yīng)的標(biāo)準(zhǔn)庫權(quán)重值:
[0031]
[0032] 相應(yīng)的權(quán)重值表為:
[0033]
[0034] 進(jìn)行喚醒檢測,包括如下:對所述三軸加速度傳感器進(jìn)行震動或晃動,三軸加速度 傳感器獲取十次滿足強度閾值的喚醒加速度值,當(dāng)有五組以上的喚醒加速度值超過強度閾 值,完成喚醒;
[0035] 完成喚醒后,用戶開始執(zhí)行手勢,需要對手勢識別開始檢測:預(yù)先建立加速度檢測 值,獲取手勢開始時的當(dāng)前加速度,獲得當(dāng)前加速度與加速度檢測值的絕對差值,確定絕對 差值大于所述閾值時,手勢開始;
[0036] 手勢檢測成功后通過三軸加速度傳感器檢測用戶手勢變化中各個時刻的X軸、Y 軸以及Z軸的加速度序列,完成手勢加速度序列的采集后,執(zhí)行手勢結(jié)束檢測,包括:獲取 當(dāng)前加速度值,獲得該當(dāng)前加速度值與上一個加速度值的絕對差值,判斷該絕對差值是否 滿足強度閾值,如果連續(xù)若干次滿足強度閾值,則手勢結(jié)束。
[0037] 然后對采集到的多組加速度序列依次進(jìn)行歸一化處理,即系將采樣得到的加速度 序列歸一化到[-100, 100]的區(qū)間內(nèi),歸一化處理后,兩個軸上的加速度值的絕對值若均小 于15,則認(rèn)是冗余數(shù)據(jù),直接過濾掉獲得中間序列,對該中間序列進(jìn)行加速路徑規(guī)劃:通過 對每組中間序列進(jìn)行約束獲取手勢主要的速度變化的方向,具體的是對比兩個軸上的加 速度值,根據(jù)比值來調(diào)整優(yōu)化加速度序列,如果比值Ratio xz > 3,則accez = 0 ;若Ratioxz < 0· 33,則 accex = Ο ;若 0· 6 < = Ratioxz < 1· 7,則 accez = accex = (accex+accez) /2,下 面結(jié)合一實例加以說明,某時刻3:( = 80, ay = 10,因為ax :ay = 8,則落于區(qū)間[-100,100] 內(nèi),則使其比值標(biāo)準(zhǔn)化,那么約束后,ax = 80,ay = 0,如果比值不落于上述區(qū)間的士和\均 保持不變;
[0038] 接著對該約束后的中間序列進(jìn)行冗余數(shù)據(jù)二次過濾以及平滑濾波去除誤