張 飛,朱建鴻
(江南大學(xué) 物聯(lián)網(wǎng)工程學(xué)院,無錫 214122)
我國社會(huì)的老齡化問題日益加劇,老年人由于摔倒產(chǎn)生的身心傷害已經(jīng)成為一個(gè)重要的醫(yī)療問題.每年,65歲及以上的成年人中每3人就有1人摔倒過[1],由摔倒引起的身心健康問題亟待解決.因此,對人體摔倒檢測技術(shù)進(jìn)行研究具有重要的意義.
目前,國內(nèi)外對摔倒檢測的研究主要分為3類:(1)基于穿戴式傳感器的摔倒檢測系統(tǒng)[2];(2)基于環(huán)境式傳感器的摔倒檢測系統(tǒng)[3];(3)基于計(jì)算機(jī)視覺的摔倒檢測系統(tǒng)[4].而市場上現(xiàn)有的摔倒檢測系統(tǒng)大多是基于傳感器的,并且基本上是電子設(shè)備.老年人需要佩戴或放入口袋中,這些可穿戴式摔倒檢測儀通常使用加速度計(jì)或手動(dòng)幫助按鈕作為傳感器來檢測摔倒[5].然而,這些可穿戴式摔倒探測儀有一些缺點(diǎn).其缺點(diǎn)之一是老年人可能會(huì)忘記佩戴,如果摔倒后失去知覺,幫助按鈕也會(huì)失效.計(jì)算機(jī)視覺技術(shù)的最新進(jìn)展為克服這些缺點(diǎn)帶來了一種新的解決方案.基于視覺的摔倒檢測系統(tǒng)一個(gè)主要優(yōu)點(diǎn)是,這種系統(tǒng)不需要人佩戴任何東西,與可穿戴傳感器相比,它的侵入性更小.此外,與普通的可穿戴傳感器相比,計(jì)算機(jī)視覺系統(tǒng)提供了更多關(guān)于人的行為的信息.因此,基于視覺的家庭監(jiān)測系統(tǒng)能夠提供有關(guān)摔倒的信息以及對家庭健康監(jiān)測有用的日常生活行為的其他活動(dòng),如藥物攝入、進(jìn)餐時(shí)間和睡眠時(shí)間.本文設(shè)計(jì)的摔倒檢測系統(tǒng),首先,改進(jìn)Vibe算法,提高前景檢測的準(zhǔn)確性,避免鬼影問題帶來的干擾,然后采用閾值分析法與支持向量機(jī)(SVM)相結(jié)合的摔倒檢測算法,同時(shí)采用雙攝像頭進(jìn)行檢測,避免了人體平行與攝像頭摔倒,其外接矩形框與站立類似而無法檢測出的缺點(diǎn).實(shí)驗(yàn)結(jié)果顯示,該檢測系統(tǒng)能夠有效地區(qū)分摔倒與其他日常行為,實(shí)時(shí)性好,檢測精度高.
Vibe算法使用第一幀圖像初始化背景模型,初始化時(shí),在第一幀圖像中為每個(gè)像素點(diǎn)隨機(jī)選取N個(gè)八領(lǐng)域像素值,構(gòu)成一個(gè)N維的樣本空間[6].像素點(diǎn)的初始化背景模型可表示為:
其中,vi表示背景樣本空間中索引為i的像素值;N表示樣本空間的大小.
當(dāng)讀取到視頻的第2幀開始,Vibe算法開始進(jìn)行前景檢測.設(shè)v(x)為像素點(diǎn)x在給定歐式顏色空間中的像素值,SR(v(x))為以v(x)為中心,R為半徑的圓形區(qū)域,統(tǒng)計(jì)M(x)與v(x)之間的歐式距離小于R的總數(shù),記為#R,如果匹配樣本總數(shù)#R小于閾值#min,則判斷該像素點(diǎn)為前景點(diǎn),否則為背景點(diǎn)[7],如式(2)和式(3)所示.
Vibe算法基于隨機(jī)替換像素原則,采用保守更新方法和前景點(diǎn)計(jì)數(shù)方法的組合來進(jìn)行背景模型更新.在此策略中,如果判定一個(gè)像素點(diǎn)為背景點(diǎn),則它擁有1/α(α為更新因子)的概率替換掉自己的樣本集的值,同時(shí)擁有等概率隨機(jī)替換掉它鄰域像素點(diǎn)的樣本集的值.
Vibe算法由于采用第一幀進(jìn)行初始化建模,若第一幀中存在運(yùn)動(dòng)目標(biāo)時(shí),就會(huì)錯(cuò)誤地將其初始化為背景模型,在第一幀的位置處就會(huì)存在鬼影區(qū)域,對目標(biāo)檢測產(chǎn)生影響.
為了解決鬼影問題,本文選擇幀間差分法的前景檢測結(jié)果與Vibe算法的前景檢測結(jié)果進(jìn)行對比確定鬼影區(qū)域.如式(4)所示,設(shè)相鄰兩幀的差分結(jié)果記為Dk(x,y),設(shè)定一個(gè)閾值T對Dk(x,y)進(jìn)行二值化處理,若Dk(x,y)大于閾值T,則為前景點(diǎn),否則為背景點(diǎn).
為每個(gè)像素點(diǎn)設(shè)立計(jì)數(shù)器T(x,y).由于兩幀相減不易產(chǎn)生鬼影,差分結(jié)果與Vibe算法處理結(jié)果進(jìn)行比較,對于幀差后像素值為0的像素點(diǎn)以及Vibe算法處理后像素值為255的像素點(diǎn),將其計(jì)數(shù)器加1.
式中,f1(x,y)為幀間差分法后的像素值,f2(x,y)為Vibe算法處理后的像素值.
由于鬼影區(qū)域存在時(shí)間較長,設(shè)定閾值Th,若計(jì)數(shù)器大于閾值,則認(rèn)為該像素點(diǎn)為鬼影區(qū)域,反之則為前景,如式(6)所示.
原Vibe算法并沒有對鬼影區(qū)域的判斷機(jī)制,且鬼影產(chǎn)生時(shí),鬼影區(qū)域與非鬼影區(qū)域的背景更新策略相同,導(dǎo)致鬼影消除需要很長的時(shí)間.因此,本文通過實(shí)驗(yàn)確定合適的鬼影區(qū)域更新因子.如圖1所示,分別為更新因子為2,5,16時(shí)的前景目標(biāo)檢測效果圖,可以看出原算法采用16的更新因子,鬼影消除緩慢,仍存在著鬼影;當(dāng)更新因子為2時(shí),由于更新因子太小導(dǎo)致像素點(diǎn)極大概率成為背景像素點(diǎn),導(dǎo)致人體有空洞產(chǎn)生,檢測效果不好.因此,本文對于鬼影區(qū)域選取更新因子為5進(jìn)行背景更新策略.
圖1 不同更新因子下前景檢測對比圖
算法1.改進(jìn)的Vibe算法(1)首先通過視頻首幀利用Vibe算法建立一個(gè)樣本數(shù)為N的背景模型,進(jìn)行初始化;(2)從視頻第2幀開始,將當(dāng)前幀與前一幀進(jìn)行相減,用式(4)進(jìn)行二值化操作;(3)遍歷Vibe算法與幀差后的像素值,對每個(gè)像素點(diǎn)的計(jì)數(shù)器T(x,y)采用式(5)進(jìn)行計(jì)數(shù),然后采用式(6)進(jìn)行鬼影區(qū)域的判斷;(4)對于鬼影的區(qū)域的每個(gè)像素點(diǎn)采用更新因子為5 以加快更新周期,同時(shí)也將該像素點(diǎn)隨機(jī)更新到鄰域背景模型中,非鬼影區(qū)域仍采用原算法的更新因子16;(5)得到去除鬼影后的前景目標(biāo),算法結(jié)束.
本文采用運(yùn)動(dòng)目標(biāo)檢測算法的標(biāo)準(zhǔn)視頻庫www.changedetection.net 中的視頻進(jìn)行測試,并與原Vibe算法進(jìn)行對比實(shí)驗(yàn).本實(shí)驗(yàn)中,采用的部分參數(shù)與原Vibe算法一致,其中背景樣本大小N=20,模型更新半徑R=20,匹配點(diǎn)個(gè)數(shù)閾值#min=2.改進(jìn)部分鬼影區(qū)域更新采樣概率為5,非鬼影區(qū)域采用原算法的16,閾值Th=10.
因需要視頻第一幀中出現(xiàn)運(yùn)動(dòng)目標(biāo),所以選取pedestrians 視頻序列中帶有運(yùn)動(dòng)目標(biāo)的第317幀進(jìn)行初始化,實(shí)驗(yàn)結(jié)果如圖2所示,其中圖2(c)、圖2(d)分別為第333、345幀Vibe算法結(jié)果,圖2(e)、圖2(f)分別為第333、345幀本文算法結(jié)果.由此可以看出,在第333幀時(shí),原算法與本文算法均存在鬼影,但本文算法已經(jīng)開始消除鬼影;在第345幀時(shí)原算法仍存在鬼影,而本文算法已完全消失.實(shí)驗(yàn)結(jié)果表明,本文算法對運(yùn)動(dòng)目標(biāo)檢測的效果明顯優(yōu)于原Vibe算法.
圖2 本文算法與原Vibe算法鬼影消除對比圖
特征提取的好壞直接影響后續(xù)摔倒行為判別的精確度,目前常采用外接矩形或橢圓的方式對人體行為進(jìn)行描述[8].本文采取外接矩形的方式將人體框定出來,并在此基礎(chǔ)上得到相關(guān)的幾何特征數(shù)據(jù).在日常生活中,人體的行為復(fù)雜多樣,而僅僅依靠一兩個(gè)特征值,難以進(jìn)行區(qū)分,容易造成誤檢,因此本文采用多特征融合的方式.分析人體摔倒過程中顯著的特征變化,選取的特征有高度特征、高寬比特征、Hu矩特征以及質(zhì)心加速度特征.
無論人體的高矮胖瘦,當(dāng)人體摔倒時(shí)其高度必定在極短的時(shí)間內(nèi)快速下降,相比于下蹲、坐下等日常行為,其高度下降值最大.人體的高度采用外接矩形的高度來表示,為了避免人體由近到遠(yuǎn)產(chǎn)生的高度差異,對高度特征進(jìn)行歸一化,歸一化的公式如下:
式中,Valuei為第i幀歸一化的高度值,n為幀數(shù),Heighti為第i幀的高度值.圖3給出了不同行為下人體高度特征值.
定義人體外接矩形4個(gè)頂點(diǎn)分別為R1(x,y),R2(x,y),R3(x,y),R4(x,y),則外接矩形的高度H與寬度W可以通過以下公式計(jì)算:
高寬比的計(jì)算公式如(10)所示,圖4給出了不同行為下人體高寬比特征值.
圖4 不同行為下高寬比對比圖
Hu矩是在1962年由Hu 提出的,Hu矩是基于統(tǒng)計(jì)學(xué)理論,由于其具有平移、旋轉(zhuǎn)、尺度變換不變性[9],又稱為不變矩,現(xiàn)已廣泛應(yīng)用于計(jì)算機(jī)模式識(shí)別領(lǐng)域.Hu矩計(jì)算形式簡單,相較于其他矩特征,諸如Zernike矩、小波矩等,其所消耗的時(shí)間在這幾種矩消耗是最短的.若能夠?qū)⒍祷蟮膱D像看成二維或三維概率密度分布函數(shù),則矩就能用來分析圖像的特征[10].對于Hu矩來說,不同階的Hu矩代表了不同的含義,通過零階矩能夠獲得圖像的面積,通過一階矩可以獲得圖像的質(zhì)心,更高階的矩則反映了圖像更多的細(xì)節(jié).
其中,
I(i,j)表示像素點(diǎn)(i,j)處的亮度,M和N分別表示圖像的寬度與高度.
表1顯示了行走、下蹲、摔倒時(shí)的7個(gè)Hu矩特征.從表中可以看出,不同行為計(jì)算得到的Hu矩特征具有明顯的差異性,能夠很好地描述出圖像目標(biāo)的具體細(xì)節(jié),且具有不變性的特點(diǎn),相同行為的Hu矩具有相似性,能夠準(zhǔn)確區(qū)分出摔倒行為與日常行為.故本文選取7個(gè)Hu矩作為圖像的描述特征.
表1 行走、下蹲、摔倒時(shí)的7個(gè)Hu矩特征
質(zhì)心是幾何物體的中心,當(dāng)人體運(yùn)動(dòng)時(shí)其質(zhì)心也會(huì)相應(yīng)地發(fā)生變化產(chǎn)生位移,對于行走、下蹲活動(dòng),質(zhì)心在y軸方向下降緩慢,當(dāng)人體突發(fā)摔倒時(shí),質(zhì)心在y軸方向迅速下降,其質(zhì)心加速度明顯大于其他正?;顒?dòng),進(jìn)而可以區(qū)分下蹲或坐下等行為,定義相鄰兩幀的質(zhì)心為(xi,yi)(xi-1,yi-1),首先定義質(zhì)心在y軸方向的速度為:
其中,t為兩幀圖像的時(shí)間間隔,定義第i幀時(shí)質(zhì)心在y軸方向的加速度為:
通過獲得質(zhì)心在y軸方向的加速度值,能夠有效地區(qū)分人體摔倒與下蹲、躺下等行為.
據(jù)相關(guān)統(tǒng)計(jì)[11],人體從站立到摔倒時(shí)持續(xù)時(shí)間約為0.4~0.8 s,實(shí)驗(yàn)選用的視頻幀率為30 fps,因此一個(gè)摔倒周期內(nèi)的視頻幀數(shù)約為12~24幀,為了更詳細(xì)的描述摔倒行為,本文選取25幀作為一個(gè)動(dòng)作周期,由于相鄰幾幀人體差異不大,本文每隔4幀提取特征向量,總共選取5個(gè)關(guān)鍵幀的特征向量進(jìn)行融合,對于視頻的第i幀構(gòu)成的特征向量為:
對于完整的動(dòng)作周期來說,需要提取5個(gè)關(guān)鍵幀的特征向量,構(gòu)成5×10維的特征向量空間,如式(18)所示:
本文通過對特征分析,發(fā)現(xiàn)當(dāng)人體摔倒時(shí),其歸一化后的高度值遠(yuǎn)小于1,而人體行走過程中高度值基本都在1附近,且對于攝像頭采集的視頻或者視頻序列,行走狀態(tài)占很大的一部分.為了提高算法的效率,減小計(jì)算量,提高系統(tǒng)的實(shí)時(shí)性,本文將閾值法與支持向量機(jī)結(jié)合,基于雙攝像頭的摔倒檢測算法具體如算法2.
算法2.摔倒檢測算法(1)首先同時(shí)讀取兩個(gè)不同視進(jìn)的Vibe算法提取運(yùn)動(dòng)的人角的視頻序列,對于每一個(gè)視頻采用改體目標(biāo)并框選出人體;
(2)提取人體的高度特征值,采用閾值法進(jìn)行判斷.若高度比大于閾值0.9,則可以排除日常生活中最常見的行走行為;若高度比小于閾值0.9,則提取5個(gè)關(guān)鍵幀構(gòu)成的特征向量,并利用支持向量機(jī)分類器進(jìn)行區(qū)分摔倒與其他一些高度小于0.9的日?;顒?dòng);(3)經(jīng)SVM 判別后,若兩個(gè)視頻序列中存在摔倒行為,則判定人體發(fā)生摔倒.
基于雙攝像頭的摔倒檢測流程圖如圖5所示.
圖5 基于雙攝像頭的摔倒檢測流程圖
本實(shí)驗(yàn)在Windows10系統(tǒng)計(jì)算機(jī)上完成,主機(jī)CPU為Inter(R)Core(TM)i5-9400,主頻為2.90 GHz,使用Python語言進(jìn)行編程,并調(diào)用圖像處理庫OpenCV,支持向量機(jī)選用臺(tái)灣大學(xué)林智仁教授開發(fā)的Libsvm 包,其提供了Python、Matlab 等接口,能夠滿足大多數(shù)訓(xùn)練分類的情況.
實(shí)驗(yàn)數(shù)據(jù)集采用了加拿大蒙特利爾大學(xué)的一個(gè)公開視頻庫Multiple cameras fall dataset,其中包括了24個(gè)視頻段,每個(gè)視頻段包含了8個(gè)視頻,由布置在房間中不同位置的8個(gè)攝像頭進(jìn)行拍攝,攝像頭的視角均為俯視,每個(gè)攝像頭的視野能夠覆蓋到整個(gè)房間,總共192個(gè)視頻,其中每個(gè)視頻包含著1~4個(gè)動(dòng)作,摔倒行為包括向前摔倒、向后摔倒、左側(cè)摔倒、右側(cè)摔倒以及坐著時(shí)摔倒,日常行為包括下蹲與坐下.圖6為8個(gè)攝像頭下拍攝的摔倒事件.
本文選用敏感度(Sensitivity)與特異度(Specificity)作為算法的評(píng)價(jià)指標(biāo)[12].
其中,TP為包含摔倒的視頻被檢測為摔倒,FP為不包含摔倒的視頻被檢測為摔倒,TN為不包含摔倒的視頻沒被檢測為摔倒,FN為摔倒的視頻沒被檢測為摔倒.對比結(jié)果如表2所示.
圖6 8個(gè)攝像頭下的摔倒事件
表2 不同摔倒檢測方法對比實(shí)驗(yàn)(單位:%)
表2的方法均在同一摔倒數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn).其中文獻(xiàn)[13]采用8個(gè)攝像頭重建人的3D形狀,獲得了最高的特異度,但其使用簡單的閾值指標(biāo)判斷人是否摔倒,敏感度最差;文獻(xiàn)[15]采用單一攝像頭的視頻,通過PCANet進(jìn)行單幀的訓(xùn)練,再通過SVM進(jìn)行摔倒識(shí)別,而本文采用雙攝像頭檢測的方法敏感度明顯高于其算法;文獻(xiàn)[14]具有較高的敏感度,但其采用了4個(gè)攝像頭進(jìn)行檢測,處理速度為5 fps,實(shí)時(shí)性較差,而本文方法為20 fps 更具有實(shí)際應(yīng)用價(jià)值.
本文對采用雙攝像頭的人體摔倒檢測技術(shù)進(jìn)行研究.采用改進(jìn)的Vibe算法進(jìn)行人體目標(biāo)檢測,融合幀間差分法去除了鬼影的干擾.對于每個(gè)攝像頭拍攝的視頻采取閾值法與支持向量機(jī)結(jié)合的方法進(jìn)行識(shí)別,從實(shí)驗(yàn)結(jié)果可以看出采用雙攝像頭的方法能夠有效的提高識(shí)別的準(zhǔn)確率,在智能視頻監(jiān)控系統(tǒng)領(lǐng)域有著良好的應(yīng)用前景.在實(shí)驗(yàn)中發(fā)現(xiàn),對于人體快速地坐下或躺下仍有可能誤檢,在未來工作中將該方案與深度學(xué)習(xí)相結(jié)合,從而進(jìn)一步提高摔倒行為識(shí)別的準(zhǔn)確率.