, ,張杰,,
(北京工業(yè)大學 信息學部,北京 100124)
近些年,因事故、疾病等因素,導致上肢運動功能障礙的人數(shù)逐年提升[1]。這些患者出現(xiàn)了不同程度的勞動能力喪失問題,有些甚至影響到了日常生活。對于這些運動功能障礙者,除了初期的治療外,仍需要后續(xù)的長期康復訓練。
研究表明,通過大量密集、重復的康復訓練,病患可以最大限度的恢復機體功能,提高工作和生活自理能力[2]。因此,康復訓練是必要的治療過程,在上肢運動障礙疾病的治療中具有非常重要的作用。
目前傳統(tǒng)的康復訓練方法主要是在醫(yī)護人員的指導下一對一進行的,雖然這是效果很好的訓練方式,但是它具有明顯的缺點:1)受限于醫(yī)護人員資源;2)訓練過程枯燥;3)訓練數(shù)據(jù)難以記錄。
這些問題困擾著醫(yī)生與病患[3-5]。因此,一種可自主進行訓練、具有較高趣味性、對訓練數(shù)據(jù)可以詳細記錄與查詢的康復訓練系統(tǒng)是當前的重要研究課題。
Saposnik等人基于任天堂Wii游戲系統(tǒng)開發(fā)了一個康復訓練系統(tǒng)[6],用于輕度偏癱患者的上肢功能康復訓練。阿爾斯特大學的J.W.Burke、P.J.Morrow等人提出了一個基于視覺游戲的中風病人上肢康復系統(tǒng)[7]。漢諾威萊布尼茲大學的Bruckner H、 Bartels C,等人提出了基于慣性傳感器的人體運動康復系統(tǒng)[8]。河北工業(yè)大學設(shè)計了結(jié)合主動和被動運動訓練的跟關(guān)節(jié)康復系統(tǒng)用于踝關(guān)節(jié)的康復訓練[9]。
然而這些系統(tǒng)并沒有與互聯(lián)網(wǎng)緊密結(jié)合。應用人機交互技術(shù),結(jié)合互聯(lián)網(wǎng)構(gòu)建康復訓練系統(tǒng),是一種新穎的思路,具有廣闊的應用場景。
本文設(shè)計的康復訓練系統(tǒng),利用動作采集技術(shù),通過對人體動作的匹配,使患者在康復訓練中與計算機交互,由計算機引導患者進行康復訓練,擺脫了需要訓練場所與專業(yè)人員的限制。通過互聯(lián)網(wǎng),病人的訓練記錄以及訓練過程中采集到的運動數(shù)據(jù)可以方便的存儲與查詢,訓練教練等專業(yè)人員可以隨時查看病人的訓練數(shù)據(jù),追蹤病人的訓練情況。
系統(tǒng)的使用人員主要為兩類:患者與醫(yī)護人員。系統(tǒng)為患者提供PC端軟件,可用它進行自主康復訓練;為醫(yī)護人員提供康復訓練數(shù)據(jù)管理系統(tǒng),可通過瀏覽器查詢病人的訓練記錄與相關(guān)數(shù)據(jù)。PC端軟件會將患者訓練過程中的數(shù)據(jù)發(fā)送到訓練數(shù)據(jù)管理系統(tǒng)進行記錄。整個系統(tǒng)的結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)
PC端軟件通過Kinect傳感器采集患者訓練過程中的運動數(shù)據(jù),并通過USB傳輸數(shù)據(jù)。PC端軟件利用運動數(shù)據(jù)計算出姿勢、動作的匹配結(jié)果,通過圖形界面指導病人進行康復訓練以及康復游戲。對于病人的訓練記錄數(shù)據(jù),PC端軟件通過HTTP協(xié)議將數(shù)據(jù)發(fā)送到訓練數(shù)據(jù)管理系統(tǒng),存儲到數(shù)據(jù)庫。
通過瀏覽器可以訪問訓練數(shù)據(jù)管理系統(tǒng)。瀏覽器向系統(tǒng)服務端發(fā)起HTTP請求,接收到請求后,服務端查詢數(shù)據(jù)庫中滿足條件的數(shù)據(jù),并將結(jié)果數(shù)據(jù)渲染為HTML代碼,響應給瀏覽器。瀏覽器將HTML代碼渲染為可視化頁面,展示給用戶。
系統(tǒng)功能模塊如圖2所示。
圖2 系統(tǒng)功能
整個系統(tǒng)主要包括兩部分:PC端與康復訓練數(shù)據(jù)管理系統(tǒng)。
PC端功能包括康復訓練、康復游戲、動作錄入??祻陀柧毷怯嬎銠C指導患者進行自主康復的功能模塊,訓練過程中系統(tǒng)播放標準動作,患者需做出相同的姿勢動作。模塊計算出患者動作與標準動作的匹配度,若匹配度滿足要求則進行下一動作的訓練,否則需重試;康復游戲模塊構(gòu)建3D游戲場景,利用康復訓練的匹配結(jié)果作為輸入信號,對游戲內(nèi)的物體進行驅(qū)動,使患者與游戲場景進行交互。動作錄入模塊用于采集標準動作的數(shù)據(jù),提供給康復訓練與康復游戲。
康復訓練數(shù)據(jù)管理系統(tǒng)包括動作管理、訓練管理、訓練記錄管理3個模塊。動作管理模塊提供標準動作數(shù)據(jù)的查看、刪除操作,從PC端動作錄入模塊錄入的標準動作可在本模塊中管理。訓練管理模塊用于編輯訓練信息,利用已有標準動作構(gòu)建訓練。訓練記錄管理模塊用于查看病患的訓練記錄數(shù)據(jù),提供了表格、折線圖、柱狀圖3種可視化方式。
Kinect是微軟發(fā)布的一款體感設(shè)備[10-11],集成了許多計算機視覺技術(shù)。Kinect傳感器包含一個紅外發(fā)射器、紅外接收器、RGB攝像頭,當人進入Kinect的視角范圍時,Kinect會以每秒30幀的速率采集彩色視頻流、深度視頻流。Kinect把人體分為32部分,使用隨機決策森林的分類算法與概率近似度的匹配方法,識別人體關(guān)節(jié)點,生成人體骨骼數(shù)據(jù)[12-13]。每幀骨骼數(shù)據(jù)包含20個人體關(guān)鍵關(guān)節(jié)點的空間坐標信息,如圖3所示。
圖3 人體骨架關(guān)節(jié)點
20個關(guān)節(jié)點分別為:頭部、肩部中心、左手、右手、左手腕、右手腕、左肘部、右肘部、左肩、右肩、脊柱、髖部中心、左髖、右髖、左膝蓋、右膝蓋、左腳踝、右腳踝、左腳、右腳。每個關(guān)節(jié)點的數(shù)據(jù)包含x、y、z三維空間坐標,Kinect的世界坐標系是右手坐標系,其中,Z軸正方向為Kinect傳感器的朝向方向,Y軸正方向為正上方方向,X軸正方向為Kinect的左方向。
靜態(tài)姿勢為人在某一幀的骨骼狀態(tài),基于Kinect采集到的人體骨骼關(guān)節(jié)點坐標數(shù)據(jù),本文提出了一種上肢靜態(tài)姿勢特征的計算方法。
本文采用4個向量來描述人體上肢,即左肩-左肘、左肘-左手、右肩-右肘、右肘-右手腕這4個向量作為特征來描述一個靜態(tài)姿勢。兩個動作的相似度,由四組對應向量的余弦相似度來表示。
采用這種方式的優(yōu)點為:
1)向量的平移不變性,可保證不同的位置不會影響相似度。
2)兩向量的余弦相似度僅與兩向量的夾角有關(guān),與向量的模無關(guān),此性質(zhì)可保證不同的身材不會影響相似度。
通過Kinect獲取左肩、左肘、左手腕、右肩、右肘、右手腕這6個點的坐標。設(shè)某個向量起點關(guān)節(jié)、終點關(guān)節(jié)的坐標分別為(x1,y1,z1)、(x2,y2,z2),則對應的向量為:
v=(x2-x1,y2-y1,z2-z1)
(1)
分別計算四組向量的余弦相似度,對于兩個向量a(x1,y1,z1)與b(x2,y2,z2),余弦相似度為:
(2)
余弦相似度的取值范圍為[-1,1],當值為1時兩向量方向相同,相似度最高;值為-1時兩向量方向相反,相似度最低。為了方便求和運算,本文采用1-cos的值作為兩向量的相似度,將余弦相似度映射到[0,2]上,其值越小相似度越高。故最終相似度的計算公式為:
(3)
對于兩個動作的匹配,本文采用的方法為:計算兩個動作對應的四組上肢向量的相似度Sim1、Sim2、Sim3、Sim4,當且僅當4個的相似度均滿足某個閾值條件時,兩個姿勢匹配成功,否則匹配失敗。
此閾值越低則對兩個姿勢的相似度要求越高,經(jīng)過試驗表明,將此閾值設(shè)置為0.1能取得較好的效果。
動作是一組靜態(tài)姿勢的序列,每一幀都是一個靜態(tài)姿勢。本系統(tǒng)的訓練策略為訓練者模仿標準動作,將病人的實際動作與標準動作進行匹配,故采用幀匹配的方法,每組對應的幀之前計算相似度,最后計算所有對應幀相似度的平均值作為兩個動作的相似度。
然而對于同一個動作,由于動作快慢的因素,兩個序列可能長度不同,且不同的運動節(jié)奏也會導致兩個動作序列在時間軸上有一定的差異,幀不是簡單的按順序一對一對應關(guān)系。采用動態(tài)時間規(guī)整算法DTW(dynamic time warping)可以找到兩個序列最佳的對齊方式。
DTW是在孤立詞語音識別中最簡單有效的算法,基于動態(tài)規(guī)劃(DP)的思想,解決了長短發(fā)音不同的模板匹配問題,是語音識別中出現(xiàn)較早、較為經(jīng)典的一種算法,有著廣泛的應用。 算法利用動態(tài)規(guī)劃的思想,尋找兩個不同長度序列的最小匹配路徑,匹配路徑上的點就是兩個序列的對應關(guān)系。DTW算法可以消除時間軸上的差異,規(guī)整時間軸,找到最佳對齊方式[14]。
設(shè)有兩序列R、T,長度分別為M、N:
(4)
記Rm與Tn之間的距離為d(Rm,Tn),簡寫為d(m,n),1≤m≤M,1≤n≤N。對齊的Rm與Tn,表示為a(m,n),則連個序列對齊的路徑A可表示為:
A=a1,a2,…,ak,…,aK
max(M,N)≤K≤M+N
(5)
則兩個序列的匹配距離為A的累積距離為:
(6)
對于路徑A,有以下3個約束條件:
1)邊界約束:路徑必須從起點(1,1)到達終點(M,N)。
2)單調(diào)性約束:路徑保證時間順序單調(diào)不減,對于兩個匹配ak-1(m,n)、ak(x,y),則存在m≤x,n≤y。
3)連續(xù)性約束:m和n只能依次增加0或者1,即(m,n)后的點必須是(m+1,n)、(m,n+1)或(m+1,n+1)中的其中一個。
具有最小累積距離的路徑是最優(yōu)規(guī)整路徑,滿足上述約束條件,DTW的遞推公式為:
(7)
兩個序列的匹配路徑與對齊關(guān)系如圖4所示。
圖4 匹配路徑與對齊關(guān)系
Kinect采集的動作序列為30幀/秒,由于每兩幀之間相隔時間過短,差異過小,故每3幀抽取1幀,即每秒抽取10幀。兩姿勢幀之間的相似度d(m,n)用4對四肢向量的相似度平均值來表示,即:
(8)
最終求得路徑上的累積相似度和D(R,T),路徑長度Len(R,T),則路徑平均相似度為:
Meand=D(R,T)/Len(R,T)
(9)
若路徑的平均相似度小于閾值時,則兩個動作匹配成功。經(jīng)過試驗表明,將此閾值設(shè)置為0.05時,匹配精度與完成難度能達到較好的平衡。
系統(tǒng)會實時采集訓練者的運動數(shù)據(jù)作為樣本數(shù)據(jù)與模板動作進行匹配。模板動作由康復教練錄入到系統(tǒng),動作的起點和終點可人工進行選擇。而對于在訓練過程中實時采集的樣本數(shù)據(jù),則需要找到動作起點和終點。
在本系統(tǒng)中,起點和終點的判定策略如下:當前的實時姿勢與模板動作的起始姿勢相匹配時,則將此姿勢標記為起點;在起點已標記的情況下,若3秒內(nèi)姿勢的變化程度很小,即認定為沒有變化時,則將3秒前的姿勢標記為終點。
終點標記成功后,樣本動作數(shù)據(jù)為起點、終點間的姿勢序列數(shù)據(jù)。
PC端的功能模塊與數(shù)據(jù)流如圖5所示。
圖5 PC端功能模塊與數(shù)據(jù)流
其中,Kinect通過 USB連接到計算機;數(shù)據(jù)接收模塊采用Kinect SDK提供的事件模型獲取骨骼數(shù)據(jù);姿勢向量模塊計算出上肢姿勢向量后,將向量數(shù)據(jù)發(fā)送到姿勢匹配、動作匹配、動作采集模塊,通過消息隊列、采用生產(chǎn)者-消費者模式進行數(shù)據(jù)的傳輸與處理,生產(chǎn)者為姿勢向量計算模塊,消費者為姿勢匹配、動作匹配、動作采集模塊;由于姿勢匹配、動作匹配與康復游戲之間存在環(huán)境隔離,且只需要發(fā)送識別結(jié)果,數(shù)據(jù)量較小,因此采用TCP協(xié)議,通過Socket進行數(shù)據(jù)的傳遞;PC端各模塊與數(shù)據(jù)管理平臺之間通過Http協(xié)議,采用json數(shù)據(jù)格式進行數(shù)據(jù)的傳遞。
PC端為患者提供了康復訓練、康復游戲兩種方式??祻陀柧毞绞?,會在窗口上顯示要完成的標準姿勢、動作,當病患完成的動作與標準動作匹配成功或超時,則會進行下一個動作的練習;訓練的所有動作都完成后訓練結(jié)束,如圖6(a)所示。
在動作訓練過程中,Kinect實時采集姿勢幀數(shù)據(jù),在某個時刻會有3種狀態(tài):初始、開始、結(jié)束。其中,初始狀態(tài)存在于開始動作采集且還沒有標記到動作起點的時刻;開始狀態(tài)存在于已標記動作起點且還沒有標記到動作終點的時刻;結(jié)束狀態(tài)存在于標記終點后的時刻。
最初,系統(tǒng)處于初始狀態(tài);在初始狀態(tài)下,當動作起點標記完成后進入開始狀態(tài);在開始狀態(tài)下,當動作終點標記完成后進入結(jié)束狀態(tài);在結(jié)束狀態(tài)下,起點與終點之間的動作數(shù)據(jù)會與模板動作進行匹配,匹配完成后則再次進入初始狀態(tài),開始新一輪的動作數(shù)據(jù)采集。
康復游戲采用Unity3D平臺進行開發(fā),采用賽跑的游戲策略,控制人物與貓進行賽跑。游戲可以選擇簡單、一般、困難3個難度,難度越高貓的移動速度越快。游戲接收姿勢、動作匹配模塊的匹配結(jié)果,當匹配成功時會控制游戲人物角色前進3秒,時間可累加。若控制的人物角色先到達終點則游戲勝利,否則游戲失敗,如圖6(b)所示。
圖6 PC端軟件界面
角色的前進包括兩部分:空間位置的移動與角色動畫的播放。在改變角色坐標的同時播放角色的奔跑動畫,便可實現(xiàn)角色的前進效果。
累積前進時間每秒都會減1,若累積時間大于0角色會前進,當累積時間減至0則停止前進。累積時間的自動減少通過Unity中的協(xié)程(IEnumerator)來實現(xiàn),協(xié)程執(zhí)行的程序會提交到主線程中運行,因此不會導致線程不安全的問題。
本游戲的跑道在Unity場景的世界坐標系中是沿著Z軸方向的,因此可通過判斷角色位置的Z坐標是否超過終點線的Z坐標來判別是否抵達終點。
醫(yī)護人員可以利用動作采集功能,向系統(tǒng)錄入標準姿勢、動作。點擊采集頁面上的開始按鈕會開始采集數(shù)據(jù),點擊停止按鈕會停止錄制。錄制完成后可以調(diào)節(jié)兩個滑動條分別選擇起點、終止幀,在輸入框輸入名稱后上傳姿勢、動作。上傳的姿勢是起點幀對應的姿勢,上傳的動作為起點、終點幀之間的動作。
數(shù)據(jù)管理系統(tǒng)采用MVC模式,將程序分為三部分:模型(Model)、視圖(View)、控制器(Controller)。Moel層用于實現(xiàn)系統(tǒng)功能的處理邏輯;View層用于實現(xiàn)用戶與頁面的交互邏輯;Controller層是Model與View之間的橋梁。MVC模式實現(xiàn)了系統(tǒng)的職能分工,降低系統(tǒng)的耦合性[15]。
數(shù)據(jù)管理系統(tǒng)使用SSM框架進行開發(fā)。SpringMVC框架負責請求的轉(zhuǎn)發(fā),根據(jù)請求的URL調(diào)用相應的處理方法處理請求;MyBatis框架負責對象關(guān)系映射,使得數(shù)據(jù)庫的操作更加的便捷;Spring框架作為Bean容器,提供了IOC與AOP的特性,接管了對象的創(chuàng)建、組裝工作,使得程序的開發(fā)更加的便捷。3個框架整合后簡化了程序的開發(fā)工作。
數(shù)據(jù)管理系統(tǒng)提供了權(quán)限管理、動作管理、訓練管理、訓練記錄管理的功能。
權(quán)限管理是管理系統(tǒng)的基礎(chǔ)模塊,用于區(qū)分限制不同用戶的功能與數(shù)據(jù)的操作權(quán)限。在本系統(tǒng)中,用戶的角色分為3種:系統(tǒng)管理員、醫(yī)護人員、病患。系統(tǒng)管理員能夠創(chuàng)建用戶、分配用戶角色、為病患用戶分配醫(yī)護人員;醫(yī)護人員可以查看病患信息、姿勢數(shù)據(jù)、動作數(shù)據(jù)、訓練數(shù)據(jù)、訓練記錄數(shù)據(jù)。對于病患信息、訓練記錄數(shù)據(jù),醫(yī)護人員只能查看分配給自己的病患的數(shù)據(jù)。
動作管理用于管理錄入的標準姿勢、動作,提供了查看、編輯、刪除的功能,如圖7(a)所示。
訓練管理可以讓醫(yī)護人員利用已有的標準姿勢、動作,自由組合搭配,構(gòu)建康復訓練,如圖7(b)所示。
圖7 數(shù)據(jù)管理系統(tǒng)web端界面
訓練記錄管理可以查看病患的訓練記錄,包括病患在某次訓練中每個動作的用時、完成情況數(shù)據(jù),如圖7(c)所示。此外,系統(tǒng)提供了柱狀圖與折線圖的數(shù)據(jù)可視化方式,可以查看指定病患歷次訓練的訓練總用時、完成度趨勢折線圖,以及某次訓練各中各動作的用時、完成度柱狀圖,分別如圖7(d)與圖7(e)所示。
本文設(shè)計的系統(tǒng)包含PC端與訓練數(shù)據(jù)管理系統(tǒng)兩部分,PC端提供給患者,用于進行自主康復訓練;訓練數(shù)據(jù)管理系統(tǒng)可以記錄、管理訓練動作數(shù)據(jù)及病患的訓練記錄,并在WEB端提供多種可視化方式供醫(yī)護人員查看數(shù)據(jù)。經(jīng)實驗,本系統(tǒng)可以供病患進行自主康復訓練,并能夠有效地解決醫(yī)護人員資源限制、訓練過程枯燥、訓練數(shù)據(jù)與記錄不易管理等問題。綜上,本文所述基于Kinect的上肢康復網(wǎng)絡(luò)系統(tǒng),在病患康復訓練方面有著廣闊的應用場景。