鄭佳罄, 石守東, 胡加鈿, 房志遠
(寧波大學 信息科學與工程學院,浙江 寧波 315211)
在日常學習、工作與生活中,坐姿是人們最主要的姿態,坐姿檢測有助于減少不良坐姿造成的近視、頸椎病、脊椎彎曲等健康問題,也可以輔助教師觀察課堂教學中學生的學習行為,另外,其在自動駕駛領域也有一定的應用前景。目前,坐姿檢測的研究方法主要分為基于接觸式傳感器與基于計算機視覺兩方面[1]。接觸式傳感器的坐姿檢測方法主要基于壓力傳感器[2,3]、加速度計[4,5]及表面肌電信號[6]等進行研究,這類方法測量數據精度較高,但數據單一,并且傳感器設備需要人體接觸,可能會因磨損或擠壓等因素而損壞,從而導致無法收集信息。而基于計算機視覺的坐姿檢測算法可擴展性高、信息豐富且更加靈活,適合實際應用。隨著深度圖像傳感器的發展,研究者們開始關注人體骨架信息在坐姿檢測方面的優勢,然而此類方法大多利用Kinect來提取骨骼關鍵點,過于依賴設備[7],且成本較高。
為了解決上述問題,本文采用骨骼檢測算法,利用雙目攝像頭代替Kinect,實現低成本、實時的坐姿檢測。
本文提出的實時坐姿檢測方法的流程如圖1所示,首先對雙目攝像頭進行標定,然后利用其獲取實時的坐姿圖像,從中提取出左眼、鼻子、脖子、左肩以及右肩5個骨骼關鍵點,接著計算出眼部關鍵點的深度信息,最后利用骨骼關鍵點的相關信息進行9種坐姿的檢測,9種坐姿包括距離過遠、距離過近、頭部左傾、頭部右傾、身體左傾、身體右傾、肩膀不平行、駝背以及正確坐姿。

圖1 坐姿檢測流程
由于受到制造工藝、環境等因素的影響,相機中不可避免地存在畸變和誤差[8],為了確定相機的內參和外參,從而校正畸變,計算圖像深度,需要對相機進行標定。文獻[9]對比了三種常用的相機標定方法,其中張正友標定法[10]因其標定精度高、操作簡單、魯棒性好等優點,被廣泛應用,因此,本文采用張正友標定法進行相機標定。
如圖2所示,使用雙目相機,通過不同角度下棋盤格模板的圖片進行標定,為了使標定的結果更加準確,共采集30組圖片。

圖2 相機標定過程
文獻[7]對比了目前主流的兩種骨骼關鍵點檢測方法OpenPose[11]和AlphaPose[12],通過分析兩種方法的優缺點并結合研究需要,本文選擇受光線影響較小、在近景中表現較好且速度較快的OpenPose進行骨骼關鍵點檢測。
典型的人體骨架模型包括18個關鍵點,由于本文檢測的坐姿主要依賴腰部以上的關鍵點,為了減小計算量,提高運算速度,將模型簡化,只保留左眼、 鼻子、脖子、左肩、右肩5個關鍵點,由關鍵點坐標可計算出各個關鍵點之間的距離以及脖子與肩膀的夾角,如圖3所示。

圖3 人體骨架模型簡化
對相機采集的雙目圖像進行骨骼關鍵點檢測,結果如圖4所示,簡化后的算法可以成功檢測5個關鍵點,且左、右關鍵點對應。

圖4 骨骼關鍵點檢測
半全局立體匹配[13](semi-global matching,SGM)算法被提出以來,因其兼顧實時性與精確性一直受到廣泛關注和研究,是目前綜合性能較優的幾個算法中最為主流的匹配方法[14]。原始的SGM算法利用互信息計算匹配代價,計算原理較復雜,效率不高,因此基于Census變換[15]的方法被廣泛用于匹配代價計算。Census變換利用中心像素點與其鄰域像素的相對灰度關系來計算漢明距離,具體計算方法如下

(1)
(2)
(3)
式中p=(x,y)為左圖中尺寸為w×h的窗口內的中心像素點,q為p鄰域內的像素點,I(p),I(q)分別為對應點的灰度值,?為按位連接,d為視差值。先按式(1)將中心像素灰度值與其鄰域像素灰度值進行比較,再按式(2)將獲得的布爾值連接,得到點p的Census編碼串,然后計算點p在右圖中,視差為d的對應點的Census編碼串,最后將兩個編碼串的漢明距離作為點p的初始匹配代價。這種方法簡單易實現,但由于直接將窗口中心像素點的灰度值作為參考值,過于依賴中心像素點,對噪聲較為敏感,為了解決這個問題,本文對上述編碼過程進行改進。

圖5 切尾均值計算示意
如圖5所示,以3×3的窗口為例,將點pn(n=1,2,…,8)按灰度值I(pn)升序排列,計算灰度值的切尾均值,參考值I(p)的確定方法如下
(4)
式中I(p0)為中心像素點的灰度值,I(x,y)為除灰度值最大、最小的點以及中心像素點外,窗口內剩余像素點的灰度值。按式(4)計算閾值τ,若與中心像素的灰度差值大于閾值,則用代替I(p0)來計算Census編碼串。分別用中心像素點灰度值、窗口灰度值的切尾均值以及改進的方法選擇參考值,計算Census編碼串,結果如圖6所示。結果表明,改進后的Census對中心像素點的依賴降低。

圖6 Census編碼串計算
為了進一步提高代價的可靠性,在初始代價中融入梯度信息,基于梯度信息的代價計算方法為
原來,東方宇軒將北斗七星陣演繹成七絕逍遙陣之后,請七圣上摘星樓參詳指點。七圣歷練江湖既久,已各有驚人藝業與武功,遂進一步發揮七絕逍遙陣,以俠客島北斗七星陣為本,以南華真人《逍遙游》為神,依據東方宇軒悟出的奇變,又求索琴棋書畫醫卜星相七重境界,合七圣的內力修為,一重一重演繹,化奇藝為絕境,遂成萬花第一深奧武學。當年逍遙陣初成,七圣手舞足蹈,歡欣鼓舞,在摘星樓前縱聲長嘯,萬花谷空谷回音,上達星辰,明月照山河,繁星空宇宙,好像都為人間傳來的矯矯龍吟失神了一瞬。

(5)

C(p,d)=2-exp[-Cren(x,y,d)/λcen]+
exp[-Cgrad(x,y,d)/λgrad]
(6)
利用Middlebury提供的Tsukuba,Venus,Cones,Teddy共4組標準圖像對進行測試,用非遮擋區域平均誤匹配率(Nooc)和所有區域平均誤匹配率(All)來描述算法的準確性,結果如表1所示,與基于Census變換的傳統SGM比較,本文提出的優化算法有效降低了誤匹配率。

表1 傳統SGM與優化SGM的誤匹配率 %
根據三角測量原理,通過視差進一步計算深度信息。
如圖7所示,OL,OR分別為左右相機的投影中心,基線T為兩投影中心的距離,PL,PR為空間中的一點P在左、右相平面的成像點,f為相機焦距,由相似三角形可推出視差d與深度D的關系為
d=xL-xR,D=Z=Tf/d
(7)

圖7 雙目相機幾何原理
由于每個人的坐姿習慣不同,不同的人在同一坐姿下存在差異性,且考慮到實時性的要求,用戶在使用時需要先采用正確坐姿。以攝像頭實時采集的畫面左上角為坐標原點,水平向右方向為x軸正方向,垂直向下方向為y軸正方向,建立坐標系,系統記錄正確坐姿下的5個關鍵點坐標為標準,結合關鍵點之間的距離、關鍵點連線的夾角以及設定的閾值進行坐姿判斷。用戶坐姿下,記左眼關鍵點與攝像頭的距離為D′,與正確坐姿相比,將左眼在x軸上的移動距離記為左傾偏量ΔL,右眼在x軸上的移動距離記為右傾偏量ΔR,頸部在y軸上的偏移量記為頸部偏量ΔH,具體的坐姿判斷標準如下:距離過近:D′小于30 cm;距離過遠:D′大于50 cm;肩膀不平行:左、右肩關鍵點在y軸上的差值大于τ1;頭部左偏:角α大于0°且小于等于70°;頭部右偏:角α大于110°且小于等于160°;身體左傾:ΔL大于閾值τ2;身體右傾:ΔR大于閾值τ2;脊椎彎曲:ΔH大于閾值τ3;正確坐姿:上述情況以外的其他坐姿。其中,各閾值的具體數值:τ1,τ2,τ3分別為20,120,100像素。
本文在Windows 10,Intel?CoreTMi7—9750 H,2.26 GHz CPU,8 GB RAM的系統上進行實驗,為了驗證本文方法的有效性,邀請20名用戶進行準確性測試,對每位用戶的9種坐姿分別測試3次,共測試540次測試,結果如表2所示。

表2 9種坐姿的檢測效果
由測試結果可知,本文提出的實時坐姿檢測算法在身體左右傾斜以及駝背這三種坐姿上存在一定的誤檢測,但檢測9種坐姿的平均準確率達到95.56 %,總體表現較好。為了進一步提高交互性,當系統連續3次檢測到同一不正確的坐姿時,將語音播報提醒用戶。考慮到實際工作學習中不宜過于頻繁地提醒用戶坐姿,系統每隔2 s進行一次檢測。
為了解決了穿戴式傳感器易損耗、檢測不便,以及類似Kinect的深度傳感器過于依賴設備功能、成本較高等問題,本文設計了一種基于雙目攝像頭的實時坐姿檢測方法。首先,用張正友標定法對雙目攝像頭進行標定,矯正畸變;為了提高速率,對Openpose骨架模型進行簡化,并利用簡化模型提取人體的5個骨骼關鍵點;接著,針對傳統的SGM算法過于依賴中心像素點的問題進行優化,并通過優化SGM計算左眼與攝像頭的距離;最終,利用關鍵點的坐標以及設定的閾值實現對用戶坐姿的實時檢測。然而,受實際檢測時的光線、復雜背景等因素的干擾,本文算法還存在一定的誤檢測,另外,本文算法只檢測了九種常見的坐姿,如何進一步提高算法的魯棒性、擴大使用范圍是今后可研究的方向。