李源 常慶麗 劉浩林
摘 要:【目的】解決中風(fēng)、腦血栓等疾病造成的肢體損傷在后期康復(fù)訓(xùn)練中,采用傳統(tǒng)康復(fù)訓(xùn)練需要康復(fù)醫(yī)師全程參與的局限性。【方法】將Kinect與Unity3D相結(jié)合,構(gòu)建了一套上肢康復(fù)訓(xùn)練系統(tǒng),實現(xiàn)對患者信息管理、訓(xùn)練設(shè)置、康復(fù)訓(xùn)練、康復(fù)訓(xùn)練結(jié)果查詢等功能。Kinect負(fù)責(zé)采集患者肢體運動狀態(tài)信息;Unity3D作為系統(tǒng)開發(fā)工具,實現(xiàn)對患者信息管理,同時也是康復(fù)訓(xùn)練游戲的開發(fā)工具。系統(tǒng)采用SQLite數(shù)據(jù)庫并部署在騰訊云服務(wù)器上?!窘Y(jié)果】該系統(tǒng)提供的多個簡單、趣味、易操作的游戲能極大地提高患者康復(fù)訓(xùn)練的積極性和主動性,從而達(dá)到患者康復(fù)訓(xùn)練的效果?!窘Y(jié)論】該系統(tǒng)對上肢運動障礙患者的康復(fù)訓(xùn)練具有積極的應(yīng)用價值。
關(guān)鍵詞:Kinect;Unity3D;康復(fù)訓(xùn)練
中圖分類號:TP3;TM623.1? 文獻(xiàn)標(biāo)志碼:A???? 文章編號:1003-5168(2024)08-0036-04
DOI:10.19968/j.cnki.hnkj.1003-5168.2024.08.007
Design and Implementation of Upper Limb Rehabilitation Training
System Based on Kinect
LI Yuan CHANG Qingli LIU Haolin
(School of Computer Science and Information Engineering, Anyang Institute of Technology, Anyang 455000, China)
Abstract: [Purposes] In order to solve the limitations of the traditional rehabilitation training in the late rehabilitation training for the limb injury caused by stroke, cerebral thrombosis and other diseases, the full participation of rehabilitation doctors is required. [Methods] In this paper, Kinect and Unity3D are combined to build a set of upper limb rehabilitation training system, which realized the functions of patient information management, training setting, rehabilitation training and querying rehabilitation training results. Kinect is responsible for collecting the information of patients' limb movement status, and Unity3D, as a system development tool, realizes the management of patient information and is also a development tool for rehabilitation training games. The system adopts SQLite database and deploys it on Tencent cloud server. [Findings] A number of games that are simple, interesting and easy to operate provided by the system can greatly improve the enthusiasm and initiative of patients' health training, so as to achieve the effect of rehabilitation training for patients. [Conclusions] The system has positive application value for rehabilitation training of patients with upper limb movement disorders.
Keywords: Kincect; Unity3D; rehabilitation training
0 引言
隨著社會的發(fā)展,人們的生活方式愈加多樣,生活質(zhì)量不斷提高。但由于交通事故、中風(fēng)、腦血栓等造成的肢體損傷也越來越普遍。統(tǒng)計結(jié)果表明,70%~85%的此類患者會伴隨一定程度的肢體功能障礙甚至缺失,嚴(yán)重影響患者的生活質(zhì)量,同時也給患者家庭帶來了沉重負(fù)擔(dān)。研究表明,大量重復(fù)的肢體康復(fù)訓(xùn)練能幫助患者改善身體機能、最大限度地恢復(fù)患者的肢體運動功能,從而提高患者的生活質(zhì)量[1-2]。
為了改進(jìn)傳統(tǒng)康復(fù)訓(xùn)練存在的不足,本研究通過結(jié)合Kinect與計算機虛擬實現(xiàn)技術(shù),開發(fā)一套基于Kinect的上肢康復(fù)訓(xùn)練系統(tǒng),實現(xiàn)患者在社區(qū)或家里都能進(jìn)行康復(fù)訓(xùn)練。借助該上肢康復(fù)訓(xùn)練系統(tǒng),康復(fù)醫(yī)師僅需為患者制定合理的康復(fù)訓(xùn)練計劃并簡單指導(dǎo)患者進(jìn)行康復(fù)訓(xùn)練即可,從而減輕康復(fù)醫(yī)師的勞動強度?;颊咭部梢愿鶕?jù)自己的實際情況進(jìn)行的針對性康復(fù)訓(xùn)練,使患者從傳統(tǒng)康復(fù)訓(xùn)練中的被動者變?yōu)橹鲃诱摺?/p>
Kinect具備強大的識別和提取用戶身上特征點并進(jìn)行后續(xù)動作骨架追蹤的功能,因此可以使用Kinect作為信息采集傳感器。開發(fā)人員不必自行分析人體骨架節(jié)點信息,可以將主要精力投入到體感界面的設(shè)計。Kinect廣泛應(yīng)用于體感游戲的人體動作數(shù)據(jù)采集[3-4],但隨著Kinect應(yīng)用推廣,Kinect的應(yīng)用也延伸到舞蹈和體育的輔助教學(xué)中[5-7]。為了將Kinect應(yīng)用于醫(yī)療康復(fù)領(lǐng)域,科研人員進(jìn)行了大量的研究工作,且取得了一系列成果[8-10]。本研究以Kinect為患者肢體信息采集傳感器、Unity3D為開發(fā)工具、SQLite為數(shù)據(jù)庫設(shè)計開發(fā)了一套上肢康復(fù)訓(xùn)練系統(tǒng),實現(xiàn)對患者信息管理、康復(fù)訓(xùn)練等功能。該系統(tǒng)的應(yīng)用,不僅能減輕康復(fù)醫(yī)師的工作量,同時也能讓患者在康復(fù)訓(xùn)練過程中獲得更好的體驗。
1 康復(fù)訓(xùn)練系統(tǒng)的設(shè)計
1.1 系統(tǒng)設(shè)計
本研究設(shè)計的康復(fù)訓(xùn)練系統(tǒng)框架結(jié)構(gòu)如圖1所示,系統(tǒng)主要包括患者信息管理、訓(xùn)練設(shè)置、康復(fù)訓(xùn)練、訓(xùn)練結(jié)果查詢等模塊。其中患者信息管理模塊包括患者信息注冊、修改、查詢、登錄等功能;訓(xùn)練設(shè)置模塊包括設(shè)置訓(xùn)練肢體(左肢/右肢)、訓(xùn)練難度(簡單/一般/困難)、訓(xùn)練時間等功能;康復(fù)訓(xùn)練模塊包括4個可供選擇的康復(fù)訓(xùn)練小游戲(切水果/煎雞蛋/插墻/太空大戰(zhàn));訓(xùn)練結(jié)果查詢模塊包括按患者姓名或編號查詢康復(fù)訓(xùn)練的結(jié)果。
1.2 Kinect人體骨骼信息提取
本研究所采用的人體骨骼信息采集傳感器為微軟公司開發(fā)設(shè)計的Kinect型號為Kinect for XBox One,實物如圖2所示。Kinect for XBox One是Kinect for XBox的升級版,相較于上一代產(chǎn)品,新一代產(chǎn)品不僅外觀設(shè)計不同,而且在性能、精準(zhǔn)度、識別手指運動、識別面部表情等方面均有很大提升。
Kinect能夠同時追蹤6個人形物體,但最多只能選擇優(yōu)先進(jìn)入Kinect視野的前2位進(jìn)行詳細(xì)的姿態(tài)和骨骼點的三維坐標(biāo)信息計算;其余4位最多僅傳回其質(zhì)心位置。Kinect for Windows SDK開放了人體重要的20個關(guān)節(jié)點信息,人體20個骨骼點示意如圖3所示?;貍鹘o應(yīng)用程序的數(shù)據(jù)對象以骨骼幀形式提供。
在SDK中,每個骨骼點用Joint類型表示,20個骨骼點組成基于Joint類型的每一幀數(shù)據(jù)集合。Joint類型包含JointType、Position、TrackingState 3個屬性信息,其中JointType是類型為枚舉型的骨骼點類型,列舉了20個骨骼點的特定名稱;Position是類型為SkeletonPoint的骨骼點位置信息,SkeletonPoint是一個包含X,Y,Z三個數(shù)據(jù)成員的結(jié)構(gòu)體,用以存儲骨骼點的三維坐標(biāo)信息;TrackingState也是一種類型為枚舉型的骨骼點類型,表示骨骼點的追蹤狀態(tài)。Tracked、NotTracked、Inferred分別表示骨骼點“正確捕捉到”“沒有捕捉到”“不確定”三種追蹤狀態(tài)。
1.3 彩色圖像
Kinect的彩色圖像流由KinectSensor對象的ColorStream屬性提供,在使用彩色圖像流前需要調(diào)用其Enable方法啟動彩色圖像流。Kinect傳回的彩色圖像分為4種:①GRB格式,也是Kinect默認(rèn)傳回的圖像格式;②YUV、Raw YUV格式,要傳回此格式的圖像需要應(yīng)用程序在開啟彩色圖像流時進(jìn)行特別指定;③RAW Bayer格式;④Infared格式,紅外線灰階圖像,由紅外線攝像機所拍攝的紅外線圖像。
2 康復(fù)訓(xùn)練系統(tǒng)主界面設(shè)計
本研究的康復(fù)訓(xùn)練系統(tǒng)主界面設(shè)計采用Unity3D(版本為2021.3.26)為開發(fā)工具,C#為開發(fā)語言,數(shù)據(jù)庫采用SQLite數(shù)據(jù)庫并部署在騰訊云服務(wù)器上。數(shù)據(jù)庫主要包含患者信息表(paint_info)和康復(fù)訓(xùn)練信息表(train_info)。
系統(tǒng)UI界面元素采用Unity3D系統(tǒng)自帶的UGUI設(shè)計,系統(tǒng)主界面包含“患者信息管理”“訓(xùn)練設(shè)置”“康復(fù)訓(xùn)練”“訓(xùn)練信息查詢”“退出”等功能按鈕。在系統(tǒng)主界面(MenuUI)對象上掛載系統(tǒng)主界面管理腳本(MainManage.cs),MainManage.cs的Start()函數(shù)實現(xiàn)監(jiān)聽每個功能按鈕是否被按下并做出對應(yīng)處理。按鈕的監(jiān)聽函數(shù)為Button對象的onClick屬性中AddListener()方法,AddListener()方法可以接收一個Lambda表達(dá)式作為方法的實際參數(shù)。
3 Unity3D與Kinect結(jié)合
3.1 在Unity3D中使用Kinect
在Unity3D中使用Kinect,需要先下載并安裝Kinect SDK 2.0驅(qū)動,再下載kinect for unity3d插件包并把該插件包導(dǎo)入Unity3D新建的上肢康復(fù)訓(xùn)練系統(tǒng)工程中。kinect for unity3d插件包中KinectManager.cs和KinectGestures.cs兩個腳本是最核心的部分,負(fù)責(zé)Kinect與Unity3D的交互。在場景中新建一個空物體并命名為KinectController,然后把插件中主要的腳本掛載到該物體上,這樣在Unity3D中即可正常使用Kinect。以上肢康復(fù)訓(xùn)練系統(tǒng)中游戲1(切水果游戲)為例,介紹Kinect與康復(fù)游戲的交互過程。
3.2 在游戲界面中顯示玩家灰階圖像
實現(xiàn)游戲背景圖中實時顯示玩家灰階圖像,首先,需要在游戲場景中添加一個命名為PlayerImage、類型為RawImage的UI物體對象;其次,在控制玩家的腳本PayerControl.cs中定義一個類型為RawImage的變量PlayerRawImage,并把物體對象PlayerImage拖拽到變量PlayerRawImag中;再次,將KinectManager中ComputerUserMap屬性值設(shè)置為User Texture,并勾選Compute User Map;最后,在Update函數(shù)中添加代碼。
if(KinectManager.Instance.IsInitialized())
{
if(PlayerRawImag.texture == null)
{
Texture2D _texture = KinectManager.Instance.GetUsersLblTex();
PlayerRawImag.texture = _texture;
}
}
IsInitialized()函數(shù)返回的是Kinect設(shè)備是否完成初始化的Boolean類型值;GetUsersLblTex()函數(shù)返回的是Kinect設(shè)備檢測到的深度圖像數(shù)據(jù)。
3.3 判定玩家交互意圖
Kinect前方出現(xiàn)多人時,可能導(dǎo)致應(yīng)用程序在執(zhí)行命令時出現(xiàn)異常,這就需要判定處于Kinect傳感器視野內(nèi)的玩家是否具有與應(yīng)用程序進(jìn)行交互的意圖。有兩種方式可以判定玩家交互意圖,方式1,讓玩家做出特定動作;方式2,讓玩家向Kinect發(fā)出語音命令。由于方式2受距離、方言、識別發(fā)聲玩家等因素影響,成功率較低,于是本研究采用方式1。
KinectManager中定義了一個類型為Gestures的變量playerCalibrationPose,Gestures是在KinectGestures.cs腳本中聲明的枚舉類型,Gestures中枚舉了各種人體的激活動作,如“RaiseRightHand”“RaiseLeftHand”“Tpose”分別表示“抬起右手高于肩膀”“抬起左手高于肩膀”“T姿勢”等人體動作。本系統(tǒng)中設(shè)置playerCalibrationPose值為“Tpose”,即當(dāng)應(yīng)用程序檢測到Kinect傳感器視野內(nèi)的玩家做出“T姿勢”并保持1.5秒以上,則確定該玩家可與應(yīng)用程序進(jìn)行交互如圖4所示。
3.4 生成手指運動軌跡
在游戲場景中添加一個組件類型為Effects的Trail,并命名為Knife,根據(jù)需要設(shè)置Knife包含的組件拖尾渲染器(TrailRenderer)的屬性值。先在PayerControl腳本中確定一個Knife類型的對象knifeObj,把組件Knife拖拽到knifeObj上;接著在PayerControl腳本的Update函數(shù)中調(diào)用KinectManager腳本中的GetJointKinectPosition函數(shù),獲取Kinect識別到當(dāng)前正與應(yīng)用程序交互的玩家手中的世界坐標(biāo)handPos;然后調(diào)用自定義函數(shù)CalculateCoordinates把handPos坐標(biāo)轉(zhuǎn)換為二維屏幕坐標(biāo)handSenPos;最后執(zhí)行如下代碼,即可實現(xiàn)隨著上肢帶動手的運動,從而在游戲場景中出現(xiàn)刀痕拖尾的效果如圖5所示。
knifeObj.GetComponent
4 結(jié)論
本研究把Kinect傳感器與Unity3D游戲引擎技術(shù)相結(jié)合,設(shè)計一套上肢康復(fù)訓(xùn)練系統(tǒng)并實現(xiàn)了其功能。該系統(tǒng)以Unity3D游戲引擎為開發(fā)工具,實現(xiàn)患者信息管理、訓(xùn)練設(shè)置、康復(fù)訓(xùn)練、康復(fù)訓(xùn)練結(jié)果查詢等功能,在康復(fù)訓(xùn)練模塊提供了4款簡單、趣味、易操作的小游戲,讓患者在愉快的游戲中,達(dá)到康復(fù)訓(xùn)練的效果。
參考文獻(xiàn):
[1]王靜,馬景全,陳長香,等.體感游戲Kinect改善腦卒中患者執(zhí)行功能的效果研究[J].中國康復(fù)醫(yī)學(xué)雜志,2014,29(8):748-751.
[2]王尚書,陳長香,張衛(wèi)紅,等.互動體感游戲?qū)δX卒中患者運動和平衡功能的康復(fù)效果[J].中國康復(fù)理論與實踐,2013,19(7):658-661.
[3]劉晉鋼,劉衛(wèi)斌,劉晉霞.Kinect與Unity3D數(shù)據(jù)整合技術(shù)在體感游戲中的應(yīng)用研究[J].電腦開發(fā)與應(yīng)用,2014,27(11):7-11,14.
[4]張帥,周恒杰,張琳濤.基于Unity3D和Kinect的體感跑酷游戲開發(fā)關(guān)鍵技術(shù)設(shè)計與實現(xiàn)[J].三明學(xué)院學(xué)報,2015,32(6):32-36.
[5]朱依晨,李御之,田豐.基于Kinect的舞蹈教學(xué)系統(tǒng)的設(shè)計與實現(xiàn)[J].工業(yè)控制計算機,2022,35(4):107-109.
[6]黃攀,張宇.基于Kinect的舞蹈動作姿勢輔助識別系統(tǒng)設(shè)計[J].自動化與儀器儀表,2022(9):136-142.
[7]閔亞榮,牟莉.基于多個Kinect的體育輔助訓(xùn)練系統(tǒng)的研究[J].電子設(shè)計工程,2021,29(18):115-120.
[8]程楊,唐堯.基于Kinect的運動訓(xùn)練輔助決策支持系統(tǒng)設(shè)計[J].現(xiàn)代電子技術(shù),2021,44(24):123-126.
[9]千承輝,張昕昊,陶錦,等.基于Kinect的康復(fù)訓(xùn)練系統(tǒng)設(shè)計與研究[J].吉林大學(xué)學(xué)報(信息科學(xué)版),2020,38(1):92-98.
[10]楊海清,錢濤.基于Kinect的動態(tài)姿勢識別方法在醫(yī)療康復(fù)中的應(yīng)用[J].電子技術(shù)應(yīng)用,2020,46(12):94-96,102.
(欄目編輯:孫 焱)
收稿日期:2023-09-22
基金項目:安陽市科技攻關(guān)項目“基于Kinect的上肢康復(fù)訓(xùn)練與評估系統(tǒng)的研究”(2022C01SF111)。
作者簡介:李源(1981—),男,碩士,副教授,研究方向:康復(fù)機器人、人工智能;常慶麗(1986—),女,碩士,講師,研究方向:信息系統(tǒng);劉浩林(2002—),男,本科生,研究方向:計算機網(wǎng)絡(luò)、信息系統(tǒng)。