李昌鋒,童文琴,林 蔚
(福建生物工程職業(yè)技術學院康復保健系,福州350007)
定期的視力檢測是早期發(fā)現(xiàn)兒童和青少年近視的最重要和最為有效的手段[1]。傳統(tǒng)的《標準對數(shù)視力表》檢測方式是受檢者在醫(yī)師的引領下完成的。醫(yī)師通過指示桿依次隨機指向某個視標“E”,受檢者根據(jù)視標方向做出相應的手勢移動應答,醫(yī)師根據(jù)應答信息判斷受檢者是否能看清楚該級別的視標。傳統(tǒng)的檢測方式需要人工輔助,不夠便捷,無法實現(xiàn)單人自助式檢測。而基于人機交互技術的視力檢測系統(tǒng)取代傳統(tǒng)視力檢測中依靠人工交互的方式,無需醫(yī)師輔助,節(jié)省醫(yī)護人力資源成本,提高了視力檢測效率,可實現(xiàn)視力自助式檢測和共享化檢測[2]。
早期的自助式視力檢測系統(tǒng)研究多數(shù)是基于嵌入式單片機技術,如許劍銳等[3]利用STM32F103RCT6型單片機作為系統(tǒng)控制核心搭建了一套視力檢測儀器,該檢測儀器在一定程度上可實現(xiàn)自助式視力檢測。但該檢測儀器以按鍵輸入代替手勢信息判別,不符合常規(guī)視力檢測的手勢作答習慣,且不容易實現(xiàn)商場、社區(qū)等公共場所的共享檢測。近年來,基于計算機視覺的手勢識別技術被引入到人機交互設備中,大大提升了人機交互效率,受到越來越多研究人員的關注[4-5]。目前,已有研究人員開始將靜態(tài)手勢識別技術運用到視力檢測場景中,構建基于人機交互方式的視力檢測系統(tǒng),其中何啟莉提出一種基于膚色分割和GR-AlexNet 的深度學習算法,用于視力檢測中的靜態(tài)手勢識別,可提高手勢識別的準確率[6]。但此類方法面臨著視力檢測手勢數(shù)據(jù)集較少,靜態(tài)手勢圖像采集容易受到膚色、光照影響,以及利用復雜模型檢測的實時性不高等問題的挑戰(zhàn)。
動態(tài)手勢跟蹤作為手勢交互方式中的重要環(huán)節(jié)[7],將用戶的自然手勢轉化為可理解的機器指令,從而實現(xiàn)人機交互的無縫連接,因此基于動態(tài)手勢的跟蹤技術廣泛應用于人機交互系統(tǒng)[8]。本研究設計一種基于動態(tài)手勢跟蹤算法的視力檢測系統(tǒng),通過構建一個主要由攝像頭、信息處理計算機以及用戶端的動態(tài)手勢組成的人機交互環(huán)境實現(xiàn)視力檢測[9]。在該環(huán)境中,攝像頭取代了傳統(tǒng)醫(yī)師在視力檢測中的視覺信息獲取角色,信息處理計算機則承擔了流程控制和檢測結果判斷的任務,而用戶的動態(tài)手勢被引入作為一種新型的輸入方式,取代了傳統(tǒng)的鼠標和鍵盤[10]。整個人機交互環(huán)境的核心在于動態(tài)手勢跟蹤算法,該算法相當于醫(yī)師的大腦,可以對攝像頭所獲取的動態(tài)手勢信息進行方向識別。本系統(tǒng)可解決視力檢測過程中手勢啟動和終止的識別難題,同時克服受光照條件和人臉膚色等因素影響的問題,從而顯著提升手勢移動方向識別的準確率;其次系統(tǒng)的實時性好,可以快速識別手勢移動,實現(xiàn)高效檢測。
動態(tài)手勢跟蹤中存在著手勢發(fā)起和結束識別的難題[11],因此本研究中需要結合常規(guī)的視力檢測習慣,定義手勢的初始狀態(tài)、終止狀態(tài)、移動動作。
(1)初始狀態(tài)Sstart:受檢者在檢測開始之前,一只手舉起,手掌張開朝正前方,全身保持靜止,手勢進入待移動狀態(tài),如圖1 中初始狀態(tài)所示。
圖1 向右移動的手勢定義
(2)終止狀態(tài)Send:手勢移動完成后,手勢出現(xiàn)的停頓或者靜止視為手勢結束。
(3)移動動作A(向上移動Aup、向下移動Adown、向左移動Aleft、向右移動Aright):檢測開始,視標“E”顯示在屏幕上,攝像頭啟動捕捉圖像,語音提示“開始”。手掌開始向上、下、左、右中的一個方向做連續(xù)移動,移動軌跡盡可能橫平豎直。移動過程中每一幀的狀態(tài)依次記為S1、S2、…、Sn-1、Sn,n為幀數(shù)。為了避免手勢移動時間過短以及誤啟動動作造成的檢測錯誤,經(jīng)實驗測定,一次有效的手勢移動幀數(shù)需滿足n≥10。
一次完整的視力檢測過程為Sstart→A→Send,即Sstart→S1→S2…Sn-1→Sn→Send,其中Sstart→S1為啟動動作Astart,Sn→Send為結束動作Aend,所以移動動作A可分解為啟動動作、連續(xù)滑動、結束動作。圖1 所示為向右移動的手勢定義。
算法總體思想:首先,利用幀間差分算法快速識別視力檢測過程中的啟動動作Astart和結束動作Aend,以及分離出的手勢移動動作A在每個狀態(tài)下的輪廓圖;然后,利用Shi-Tomasi 角點檢測算法提取每張輪廓圖的角點集,并結合手勢的幾何特征選取合適的角點集作為輪廓的特征代表,計算輪廓圖的運動軌跡中心點;最后,根據(jù)運動軌跡點集的統(tǒng)計特征進行方向判別。該算法計算量小,能夠快速、實時檢測出場景中移動目標的運動輪廓軌跡,適用于視力檢測中的上、下、左、右手勢移動方向判別。
1.2.1 手勢目標檢測
幀間差分算法的基本原理:將時間上連續(xù)的2幀圖像數(shù)據(jù)相減,取絕對值后與設定好的閾值進行比較,大于閾值的為運動目標區(qū)域,否則為靜止區(qū)域[12]。本研究中定義Ik(x,y)和Ik+1(x,y)為采集圖像序列中連續(xù)2 幀灰度圖像,Dk(x,y)為差分后的結果。T為二值化閾值,該值的選取會直接影響到運動目標的檢測效果,在本算法中經(jīng)實驗測定T的取值范圍為20~30。運動目標Mk(x,y)為二值圖像,可表示為
采用幀間差分算法能夠在背景圖像中找到運動目標,并將運動目標從圖像中分離出來,從而確定運動目標的位置[13]。該算法計算量小、靈敏度高、實時性強,可快速檢測出動態(tài)手勢跟蹤中的啟動動作和結束動作。檢測流程如圖2、3 所示。
圖2 啟動動作檢測流程圖
圖3 結束動作檢測流程圖
1.2.2 形態(tài)學處理
數(shù)學形態(tài)學的基本思想是用具有一定形態(tài)的結構元素去度量和提取圖像中的對應形狀以達到對圖像進行分析和識別的目的[14]。數(shù)學形態(tài)學包括膨脹、腐蝕、開運算、閉運算等基本運算。其中開運算是一種先腐蝕后膨脹的形態(tài)學處理過程,可用于去除孤立的小點和毛刺,平滑較大物體的邊界,同時并不明顯改變該物體的面積。
開運算處理過程為:X?B=(X B)⊕B,其中X為被處理的圖像,B為結構元素,?為開運算符,為腐蝕操作運算符,⊕為膨脹操作運算符。本研究選擇結構元素B為3×3 的像素塊對手勢采集的灰度圖像進行腐蝕和膨脹的遍歷操作,然后按照先腐蝕后膨脹的開運算對手勢運動部分的區(qū)域中出現(xiàn)的噪聲點進行處理,從而更好地提取手勢邊緣和輪廓特征。
1.2.3 手勢特征提取
角點是圖像中最基本的一種興趣點,角點檢測是一種重要的特征檢測與匹配方法[15]。本研究選用Shi-Tomasi 角點檢測算法進行手勢特征提取。該算法的基本思想和簡要推導過程[16]如下:
假設某個窗口L的中心位于灰度圖像的坐標位置為(x,y),該位置的像素灰度值為I(x,y)。如果該窗口分別向x和y方向移動一個小的位移u和v,新位置的坐標為(x+u,y+v),該位置的像素灰度值就是I(x+u,y+v)。定義窗口在各個方向上移動(u,v)所造成的像素灰度值的變化量為E(u,v):
式中,w(x,y)為位置(x,y)處的窗口函數(shù),表示窗口內各像素的權重。
通過上述公式計算E(u,v),計算量非常大,因此本研究使用泰勒展開式來得到該公式的近似形式。根據(jù)泰勒公式,I(x+u,y+v)可以展開簡化為
令M 矩陣如下式:
求出M 的特征值λ1和λ2。
(1)當λ1、λ2值都很小時,待檢測點落入圖像平坦區(qū)域,為非特征點;
(2)當λ1>>λ2或者λ1<<λ2時,待檢測點落在圖像邊緣上,為非特征點;
(3)當λ1、λ2值都很大時(較小值大于某閾值),待檢測點為特征點。
Shi-Tomasi 角點檢測算法是在Harris 算法的基礎上進行創(chuàng)新與改進,穩(wěn)定性較好,自適應能力強,不易受到圖像旋轉、光照條件、視角變化和噪聲等影響[17]。圖4 展示了一個手勢移動的某個狀態(tài)下經(jīng)過幀間差分、二值化、開運算和角點檢測等處理后的圖像效果。這些處理步驟能夠有效地去除噪聲、增強角點特征,并為后續(xù)的手勢分析提供了有力的數(shù)據(jù)支持。
圖4 某個狀態(tài)下的手勢特征提取效果圖
1.2.4 手勢方向判別
移動動作A包含的狀態(tài)集合S={Si}(i=1,2,…,n;n≥10),共采集到n幀輪廓圖像。Si表示第i個狀態(tài),Si狀態(tài)下的輪廓圖記為第i幀輪廓圖,采集到的角點個數(shù)記為ci,第i幀輪廓圖的角點集合記為Mi={(xij,yij)|j=1,2,...,ci},所有幀輪廓的角點集合記為M={M1,M2,…,Mn}。移動動作的檢測流程如圖5 所示。
圖5 移動動作檢測流程圖
如圖4(d)中所示,在做移動動作A時,手掌移動會帶動手臂做整體移動,手臂移動輪廓的角點分散、不穩(wěn)定,會對運動軌跡點的計算造成干擾。而除拇指外的四指指尖的角點特征典型,在任何方向的移動中均可被穩(wěn)定檢測,因此本研究選取四指指尖區(qū)域的角點集Mi'的中心點作為該幀圖像輪廓運動的軌跡坐標點。
四指指尖區(qū)域的定位如圖6 所示,從沿y軸方向的幾何特征上看,四指指尖區(qū)域的高度占比滿足如下要求:
圖6 四指指尖區(qū)域定位
移動動作A所有狀態(tài)下的輪廓圖的運動軌跡點集記為D,D={p1,p2…,pn}={(x1,y1),(x2,y2),…,(xn,yn)}。圖7 為隨機采集到的4 個方向的有效手勢移動軌跡。手勢在移動過程中如果遇到攝像頭抖動、背景物體運動、受檢者身體或者頭部晃動等干擾時,運動軌跡點就會大幅度脫離原來的移動路徑。假設第i個軌跡點的移動距離記為前i-1 個軌跡點的移動平均距離記為為了排除上述干擾,需要設定有效手勢移動應該滿足一定的條件,即每一幀輪廓軌跡點的移動距離di應保持在一定倍數(shù)的范圍內波動。因此,本研究引入波動參數(shù)γ(一般取值為2~3 倍),使移動距離滿足
通過上述的干擾排除處理后,就可以獲取到單次有效手勢移動的軌跡點集D。由圖7 可以看出,手勢在橫向方向移動(向左、向右移動)的軌跡點集在縱坐標上的波動幅度遠小于在橫坐標上的波動幅度,手勢在縱向方向移動(向上、向下移動)的軌跡點集規(guī)律剛好相反,因此利用統(tǒng)計學方法可以進行手勢移動方向判別。
對于某次手勢移動動作A,所有軌跡點的橫坐標均值縱坐標均值W為攝像頭采集圖像的寬度,H為攝像頭采集圖像的高度,通過歸一化處理后,軌跡點的橫坐標方差縱坐標方差手勢移動橫向位移Dh=xn-x1,縱向位移Dv=yn-y1。
本系統(tǒng)的硬件包括Windows 系統(tǒng)主機、顯示屏、攝像頭(前置)、語音播報器以及數(shù)據(jù)通信裝置等。主機為森克SK-15 型號,采用Windows 10 操作系統(tǒng),是視力檢測系統(tǒng)的控制核心,負責全流程的控制。前置攝像頭為800 萬像素的奧尼A8S 高清攝像頭,用于采集手勢移動信息。顯示屏為主機系統(tǒng)配置的電容觸控屏,尺寸為32 in(1 in=25.4 mm),屏幕分辨力為1 080 像素×1 920 像素,亮度值為500 cd/m2,顯示屏發(fā)光均勻、亮度恒定,滿足視力檢測要求。主機內置的語音播報器可進行語音播報提示,提高人機交互的便捷性;內置的數(shù)據(jù)通信裝置用于網(wǎng)絡的連接,實現(xiàn)數(shù)據(jù)通信、存儲和傳輸。本系統(tǒng)的硬件實物圖如圖8所示,該立式一體機已應用于學校、社區(qū)、商場等場景區(qū)域,可提供共享式視力檢測服務。
圖8 視力檢測立式一體機
視力檢測示意圖如圖9 所示,人眼與視標處在同一水平面上,兩者之間的水平距離為檢測距離d,本系統(tǒng)可設置d的范圍為1.5~5 m。攝像頭被設置在正對受檢者手勢的位置。攝像頭與手部之間的水平距離為攝像頭的工作距離d',其可調節(jié)范圍一般為0.5~1.5 m。本系統(tǒng)的硬件配置要求可擴展兼容家庭用便攜式計算機,當采用集成攝像頭的便攜式計算機進行視力檢測時d=d',為了保證攝像頭處于正常工作距離以及防止視標“E”顯示變形,建議設置d=d'=1.5 m。
圖9 視力檢測示意圖
2.2.1 視標生成
根據(jù)國家標準GB 11533—2011《標準對數(shù)視力表》,目前常用視力記錄是5 分記錄L,L=5-lg α,其中α 為外界物體上兩點在眼結點處所夾的角[18]。L與α 是一一對應的關系,兩者的數(shù)據(jù)可通過查詢國家標準得到。不同視力水平對應的視標“E”的邊長l與檢測距離d和視角α 存在的關系為:l=5d×tan α,即l=5d×tan 105-L,通過此式可以計算出在不同視力水平和不同檢測距離情況下視標“E”的大小。視標在液晶屏上顯示,因此又與屏幕的分辨力和尺寸有關系。假設屏幕的分辨力為W×H,尺寸為w×h,則視標“E”在橫軸方向的邊長的像素點個數(shù)為nx=[l/w×W],在縱軸方向的邊長的像素點個數(shù)為ny=[l/h×H]。
2.2.2 視力檢索
受檢者單次辨認某個視標是通過調用動態(tài)手勢跟蹤算法完成。對于某一個級別視力水平的判定規(guī)則為:受檢者連續(xù)2 次辨認正確或者在3 次辨認中只有1 次失敗則認定為可看清楚該級別視標;連續(xù)2 次辨認錯誤或者在3 次辨認中只有1 次成功則認定為不能看清該級別視標。視力檢索算法是調用單級別視力水平判定規(guī)則,根據(jù)歷史視力水平Eb選擇順序或者二分檢索方式,從4.0~5.3 中檢索出受檢者的當前視力水平Ec。該視力檢索算法的性能直接影響視力檢測的速度。
啟動視力檢測前會要求用戶輸入歷史視力水平Eb以及檢測距離d等參數(shù),Eb作為可選項,其默認值為0。視力檢索會根據(jù)Eb是否已知分成2 種不同的檢索方式。如果已知Eb,采用初始值為Eb的順序檢索方法;如果Eb=0,采用二分法檢索,從視力水平中間值4.6 開始進行折半搜索。相對于傳統(tǒng)的順序檢索方式,這種方法將級別水平從7 個降低到4 個,從而有效地縮短了檢測所需時間,顯著提升了檢測效率,也提高了用戶的體驗度。
2.2.3 軟件設計
根據(jù)《標準對數(shù)視力表》進行軟件設計,并在Windows 環(huán)境下采用Python 3.7 語言開發(fā)完成。軟件中設定了一套完整的流程模擬人工視力檢測,全程均有語音提示,用戶根據(jù)語音提示進行操作即可完成整個視力檢測過程,檢測流程如圖10 所示,軟件界面如圖11 所示。軟件實現(xiàn)的主體功能為:由主機按預設規(guī)則在顯示屏上隨機顯示視標“E”,受檢者觀察到視標方向后,按照手勢規(guī)則進行移動,主機通過攝像頭進行圖像采集,并調用動態(tài)手勢跟蹤算法進行方向判別,進而調整視標“E”的大小和方向,重復循環(huán),直至可以確定受檢者能看清的最小視標。
圖10 視力檢測流程圖
圖11 視力檢測軟件界面
測試群體:隨機選取60 名志愿者,為年齡7~25歲的兒童和青少年,其視力水平覆蓋4.0~5.3 的范圍。
測試環(huán)境:室內,光線明亮,顯示屏和攝像頭無陽光或者強光直射,人身后的背景無移動物體干擾。
系統(tǒng)參數(shù)設置:可移動攝像頭和手勢的距離d'=0.5 m。
算法參數(shù)設置:二值化閾值T=25,高度占比參數(shù)α=0.1,波動參數(shù)γ=3。
測試方法:每位志愿者按照定義的手勢規(guī)則完成100 次手勢移動識別測試,包括向上、向下、向左、向右4 個方向各25 次。測試過程中屏幕上會隨機出現(xiàn)手勢移動方向說明,測試軟件界面如圖12 所示。
圖12 動態(tài)手勢跟蹤算法測試軟件界面
測試結果與分析:準確率測試結果見表1,測試總樣本數(shù)為60×100=6 000 次,總的誤檢次數(shù)為134次,正確率達到97.8%。橫向左右移動的正確率略高于縱向上下移動,原因在于常規(guī)習慣下人們在橫向的手勢移動跨度會高于縱向方向,這對于本研究中的動態(tài)手勢跟蹤算法的敏感度更高。從圖12 中還可以看出,單次手勢移動識別平均耗時為0.568 s,表明算法的實時性高,檢測速度快。
表1 手勢移動識別準確率測試結果
在視力檢測實驗中,測試群體、測試環(huán)境、系統(tǒng)參數(shù)、算法參數(shù)這些設置和手勢移動識別測試實驗一致。不同的是視力測試涉及檢測距離的設置,為了更好地與《標準對數(shù)視力表》檢測法進行地對比,設置檢測距離d=5 m。
測試方法:60 名志愿者按照定義的手勢規(guī)則以及視力水平的判定規(guī)則完成2 組測試。測試一:在醫(yī)師的指引下,按照《標準對數(shù)視力表》完成左眼和右眼的視力檢測,一共獲得120 組單只眼睛的視力數(shù)據(jù);測試二:志愿者根據(jù)本研究的視力檢測系統(tǒng)語音流程提示自助完成視力檢測,同樣獲得120 組單只眼睛的視力數(shù)據(jù)。
測試結果與分析:在臨床醫(yī)學,特別是醫(yī)療器械的研究中,經(jīng)常會涉及評價2 種不同方法(金標準和新方法)測量結果一致性的問題。Bland-Altman 方法因具備理解簡單、分析直觀、結果可靠等特點,在臨床醫(yī)學研究中得到廣泛應用[19-20]。因此,本研究采用Bland-Altman 圖對利用本系統(tǒng)進行視力檢測和利用《標準對數(shù)視力表》進行視力檢測的結果一致性進行評價。經(jīng)過計算,2 種視力檢測方法所測結果的差值的平均值=-0.000 8,采用配對t檢驗,P(H0:平均值=0)=0.828 3>0.05,2 種方法所測得的視力數(shù)據(jù)未呈現(xiàn)顯著性差異,即差值并未明顯偏離零,說明2 種測量方法所測量的結果具有一致性。從圖13 中也可以看出,中間的紅色水平實線(代表差值平均值為0的位置)與黑色水平虛線(代表差值的平均值d)基本處于重合狀態(tài),同樣也表示2 種方法測量結果的一致程度非常高。另外,上、下2 條藍色水平實線表示偏差在0.1 內可接受的范圍界限,高達96.7%的數(shù)據(jù)點處在這個范圍內,也表明2 種方法測量結果的一致程度很高。綜上所述,本系統(tǒng)采集的視力數(shù)據(jù)和《標準對數(shù)視力表》所采集的數(shù)據(jù)具有高度一致性。
圖13 Bland-Altman 一致性評價圖
再從檢測時間維度上進行比較分析,受檢者準備工作就緒后第一個視標出現(xiàn)時開始計時,根據(jù)視力水平判定規(guī)則無法看清視標時結束計時。采用本系統(tǒng)完成雙眼視力檢測的平均時間為99 s,略高于采用《標準對數(shù)視力表》方法的平均時間(92 s),檢測效率高,用戶體驗度好。
本研究利用基于幀間差分、開運算、Shi-Tomasi角點檢測、手勢方向判別等處理流程的動態(tài)手勢跟蹤算法,根據(jù)《標準對數(shù)視力表》國家標準以及視力檢索算法,設計了一種基于人機交互的視力檢測系統(tǒng)。本系統(tǒng)硬件搭建便捷、人機交互操作體驗好、檢測效率高、準確度高,能夠實現(xiàn)視力自助式檢測和共享化檢測,適用于家庭、學校、社區(qū)等多場景應用,可更好地幫助兒童和青少年實現(xiàn)高頻次定期視力檢測。本系統(tǒng)的核心算法是建立在自主定義的手勢規(guī)則基礎上的,雖然算法的手勢規(guī)則和常規(guī)視力檢測的手勢規(guī)則基本相同,但還是存在細節(jié)上的差異,因此脫離手勢規(guī)則將會影響視力檢測的準確性。后續(xù)一方面需要繼續(xù)深入研究算法,以降低因個人手勢移動習慣差異而導致的手勢識別錯誤率;另一方面需要增加測試樣本數(shù)量,以及增加不同檢測距離下的視力檢測對比實驗,以驗證視力檢測系統(tǒng)的穩(wěn)定性和可靠性。