徐 威,廖義奎
(廣西民族大學(xué)電子信息學(xué)院,廣西 南寧 530006)
我國(guó)人口老齡化趨勢(shì)逐漸明顯,如何保障老年人的身體健康和人身安全成為不可忽視的社會(huì)問(wèn)題[1]。老年人身體素質(zhì)較差,一旦發(fā)生跌倒行為而未能及時(shí)就醫(yī),就很有可能會(huì)導(dǎo)致終身殘疾,甚至危及生命,給老人的家庭帶來(lái)不可磨滅巨大的負(fù)擔(dān)。隨著人工智能技術(shù)的興起,各種智能化設(shè)備層出不窮,比如自動(dòng)駕駛、智能人臉識(shí)別、智能導(dǎo)航,不僅給人們帶來(lái)了極大的便利,而且大大節(jié)省了人力成本。目前,市面上主流的跌倒檢測(cè)系統(tǒng)有以下幾種:(1)基于可穿戴方式的老人跌倒預(yù)警系統(tǒng)設(shè)計(jì)[2];(2)基于視覺(jué)識(shí)別的人體跌倒檢測(cè)研究[3]。由于穿戴設(shè)備的監(jiān)測(cè)需要的設(shè)備比較多,穿戴不便,所以不易推廣。本文提出的基于計(jì)算機(jī)視覺(jué)的監(jiān)控系統(tǒng)具有較大的應(yīng)用優(yōu)勢(shì),只需要配置監(jiān)控設(shè)備就能夠監(jiān)控記錄獨(dú)居老人的日常生活,并將實(shí)時(shí)視頻流推送到SRS流媒體服務(wù)器中,然后本地服務(wù)端拉取SRS流媒體服務(wù)器上的視頻流,通過(guò)目標(biāo)檢測(cè)算法進(jìn)行識(shí)別并把結(jié)果返回給本地客戶端進(jìn)行顯示。若判定為跌倒?fàn)顟B(tài),系統(tǒng)會(huì)啟動(dòng)短信進(jìn)程,準(zhǔn)備發(fā)送信息給監(jiān)護(hù)人。如果在設(shè)置的閾值時(shí)間內(nèi),老人自行起來(lái)或者有人攙扶起來(lái),系統(tǒng)會(huì)重新識(shí)別老人為正常狀態(tài),若此時(shí)信息未發(fā)送,程序會(huì)終止短信進(jìn)程。通過(guò)多次實(shí)驗(yàn)發(fā)現(xiàn),該模型能夠準(zhǔn)確檢測(cè)獨(dú)居老人的跌倒行為,可以滿足對(duì)獨(dú)居老人行為監(jiān)測(cè)的需求。
整個(gè)系統(tǒng)主要由四個(gè)部分組成,分別是監(jiān)控?cái)z像頭、SRS流媒體服務(wù)器、GPU服務(wù)器、本地客服端。監(jiān)控?cái)z像頭推送實(shí)時(shí)視頻流到SRS服務(wù)器中,SRS流媒體服務(wù)器可以查看和管理視頻流,GPU服務(wù)器則負(fù)責(zé)拉取視頻流進(jìn)行識(shí)別、分析,并將識(shí)別后的結(jié)果發(fā)送給本地客戶端進(jìn)行顯示。rtmp是實(shí)時(shí)消息傳輸協(xié)議,視頻流都是基于此協(xié)議進(jìn)行傳輸?shù)?。具體流程如圖1所示。
圖1 跌倒檢測(cè)系統(tǒng)架構(gòu)流程圖Fig.1 Architecture flow chart of fall detection system
流媒體服務(wù)器是流媒體應(yīng)用的核心系統(tǒng),是流媒體應(yīng)用系統(tǒng)的基礎(chǔ),也是系統(tǒng)最重要的組成部分之一[4],而SRS流媒體服務(wù)器是由國(guó)人開(kāi)發(fā)且開(kāi)源的一款用于視頻直播的服務(wù)器,作為后起之秀,因其簡(jiǎn)潔的代碼及強(qiáng)大的性能,備受IT工作者的青睞。SRS流媒體服務(wù)器支持多種協(xié)議的傳輸方式。開(kāi)發(fā)人員可以將視頻文件或者監(jiān)控設(shè)備采集到的視頻流推送到流媒體上。流媒體接收到推流視頻后,可以通過(guò)控制臺(tái)進(jìn)行處理和管理,非常高效。SRS流媒體需要在Linux環(huán)境下運(yùn)行,所以需要一臺(tái)Linux服務(wù)器,通過(guò)git clone的方式拉取SRS開(kāi)源代碼,本文使用的是SRS5.0版本。下載SRS開(kāi)源代碼后,進(jìn)入srs/trunk文件目錄下,輸入./configure &&make進(jìn)行編譯,然后進(jìn)行SRS的相關(guān)配置,可以參考官方文檔,里面有詳細(xì)的配置說(shuō)明。最后輸入./objs/srs-conf/srs.conf啟動(dòng)SRS服務(wù)器,至此SRS搭建完畢,可以通過(guò)手機(jī)ip攝像頭進(jìn)行推流測(cè)試。如圖2所示為SRS客戶端推流信息。
圖2 SRS客戶端Fig.2 SRS client
使用手機(jī)代替監(jiān)控設(shè)備進(jìn)行實(shí)時(shí)推流,推流到服務(wù)器上的視頻流可以在SRS進(jìn)行預(yù)覽,如圖3所示,GPU服務(wù)器可以通過(guò)SRS提供的拉流地址對(duì)視頻流進(jìn)行識(shí)別處理,然后顯示在客戶端。
圖3 手機(jī)推流Fig.3 Mobile streaming
本系統(tǒng)采用本地GPU服務(wù)器運(yùn)行項(xiàng)目代碼,本地電腦顯卡版本是Geforce GTX 950M,GPU內(nèi)存為8 GB,下載對(duì)應(yīng)的Pytorch及cuda版本。通過(guò)GPU對(duì)圖像進(jìn)行并行運(yùn)算,可以使運(yùn)行速度大大加快,視頻流是一個(gè)實(shí)時(shí)的圖像,只有實(shí)現(xiàn)速度和準(zhǔn)確率的同時(shí)提升,才能保證系統(tǒng)正常運(yùn)行。搭建好本地GPU環(huán)境后,再設(shè)計(jì)客戶端,客服端是基于PyQt5(開(kāi)發(fā)可視化界面的Python庫(kù))設(shè)計(jì)的。PyQt5作為Python眾多模塊中的一個(gè),功能多樣,有多種圖形化界面的庫(kù)及模塊,同時(shí)它也支持在各種主流操作系統(tǒng)上運(yùn)行。如圖4所示為系統(tǒng)客服端界面,左邊有跌倒檢測(cè)框及識(shí)別結(jié)果顯示框,右邊是視頻的播放界面,右下角有三個(gè)按鈕。點(diǎn)擊打開(kāi)監(jiān)控按鈕可以顯示監(jiān)控實(shí)時(shí)畫(huà)面,關(guān)閉監(jiān)控則停止播放畫(huà)面,點(diǎn)擊跌倒檢測(cè)可以對(duì)監(jiān)控視頻流進(jìn)行識(shí)別,并在播放界面顯示識(shí)別后的監(jiān)控畫(huà)面,識(shí)別結(jié)果欄會(huì)打印當(dāng)前時(shí)間及識(shí)別結(jié)果。
圖4 檢測(cè)系統(tǒng)界面Fig.4 Detection system interface
YOLO(You Only Look Once)是REDMON等[5]提出的目標(biāo)檢測(cè)算法,作為單階段(one-stage)的代表算法,目前YOLO已經(jīng)更新到了YOLOv5。相比于Two stage目標(biāo)檢測(cè)算法,YOLO是直接從網(wǎng)絡(luò)中提取特征,并預(yù)測(cè)物體的類別和具體位置,一步到位。此后,REDMON在此基礎(chǔ)上提出了YOLO9000[6]等檢測(cè)算法,使系統(tǒng)的檢測(cè)性能得到進(jìn)一步提升。在YOLOv3的基礎(chǔ)上繼續(xù)改進(jìn)升級(jí),并最終得到Y(jié)OLOv4。YOLOv4網(wǎng)絡(luò)結(jié)構(gòu)主要由CSPDarknet53特征提取網(wǎng)、SPP(空間金字塔池化)模塊、PANet特征融合模塊、Yolo Head分類器組成[7-8]。YOLOv5算法使用CSPDarknet(跨階段局部網(wǎng)絡(luò))作為特征提取網(wǎng)絡(luò),從輸入圖像中提取目標(biāo)信息。如今,YOLOv5無(wú)論是在準(zhǔn)確率還是速度上,都已經(jīng)達(dá)到較好的效果。所以,本文采用YOLOv5訓(xùn)練模型,并將其應(yīng)用在跌倒檢測(cè)系統(tǒng)中。結(jié)合YOLOv5算法構(gòu)建跌倒檢測(cè)系統(tǒng),具體檢測(cè)流程如圖5所示。
圖5 YOLOv5算法檢測(cè)流程圖Fig.5 Flow chart of YOLOv5 algorithm detection
跌倒檢測(cè)技術(shù)需要大量數(shù)據(jù)集的支持,而市面上的跌倒數(shù)據(jù)集還鮮有公開(kāi)的,所以本文通過(guò)自建數(shù)據(jù)集訓(xùn)練模型,數(shù)據(jù)集主要來(lái)源為通過(guò)拍攝日常生活中和采取爬蟲(chóng)技術(shù)爬取網(wǎng)站上的老年人跌倒圖片,將跌倒視頻分成一幀幀的圖片,最終得到7,000 張圖片,其中跌倒圖片和正常狀態(tài)圖片的比例為1:1.8。使用標(biāo)注軟件labelImg對(duì)數(shù)據(jù)集進(jìn)行標(biāo)注,圖片標(biāo)注過(guò)程如圖6所示。對(duì)7,000 張圖片進(jìn)行標(biāo)注完成之后,會(huì)生成7,000 個(gè)xml文件,xml文件記錄了標(biāo)注框的類別及位置信息。
圖6 圖片標(biāo)注Fig.6 Image annotation
利用寫(xiě)好的python腳本將7,000 個(gè)xml文件轉(zhuǎn)換成txt文件,YOLOv5訓(xùn)練所需要的文件格式類型是txt,并將數(shù)據(jù)集劃分為訓(xùn)練集和驗(yàn)證集,訓(xùn)練集和驗(yàn)證集的比例為1:4。具體數(shù)據(jù)集分配情況如表1所示。
表1 數(shù)據(jù)集分配Tab.1 Data set allocation(單位:張)
本次試驗(yàn)采用查全率(Recall)、精確率(Precision)、所有類別平均值(mAP)衡量模型的好壞。我們假設(shè)up是正樣本,fall是負(fù)樣本,如表2所示。在信息檢索領(lǐng)域,精確率指返回文檔中相關(guān)文檔所占的比例,查全率指返回的相關(guān)文檔占所有相關(guān)文檔的比例[9]。TP表示實(shí)際是正樣本預(yù)測(cè)是正樣本,F(xiàn)P表示實(shí)際是負(fù)樣本預(yù)測(cè)是正樣本,F(xiàn)N表示實(shí)際是正樣本預(yù)測(cè)是負(fù)樣本,TN表示實(shí)際是負(fù)樣本預(yù)測(cè)也是負(fù)樣本。精確率和查全率的具體計(jì)算如公式(1)和公式(2)所示。
表2 精確率和查全率Tab.2 Precision and recall
而實(shí)際訓(xùn)練過(guò)程中,精確度和查全率是成反比的。隨著精確度的提高,查全率會(huì)不斷下降,這時(shí)必須權(quán)衡兩者之間的關(guān)系,才能得到準(zhǔn)確、優(yōu)秀的網(wǎng)絡(luò)模型。
本次實(shí)驗(yàn)在Pytorch深度學(xué)習(xí)框架下進(jìn)行,訓(xùn)練過(guò)程使用本地GPU服務(wù)器[10],YOLOv5有四個(gè)模型,分別是YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x。本文采用的是YOLOv5s的模型,因?yàn)榇四P退俣茸羁欤P土考?jí)較小,準(zhǔn)確率較高。將模型訓(xùn)練的迭代次數(shù)設(shè)置為50 次,開(kāi)始訓(xùn)練。經(jīng)過(guò)一天的時(shí)間,最終訓(xùn)練得到跌倒檢測(cè)模型權(quán)重文件。如圖7所示,模型訓(xùn)練到40 次以后開(kāi)始慢慢收斂,其中Box、Objectness、Classification已經(jīng)降到了較低的水平。其中,Box是bounding box(邊界框)的定位損失,也就是模型預(yù)測(cè)框與真實(shí)框的差值,差值越小,說(shuō)明模型預(yù)測(cè)框越準(zhǔn);Objectness為置信度損失,損失越小,說(shuō)明目標(biāo)檢測(cè)準(zhǔn)確度越高;Classification為分類損失,數(shù)值越小,說(shuō)明分類準(zhǔn)確度越高??偟膿p失函數(shù)就是計(jì)算三者之和,所以損失函數(shù)的變化就是Box、Objectness和Classification的變化。
圖7 損失函數(shù)變化Fig.7 Loss function change
如圖8所示,Precision和Recall在逐漸上升,達(dá)到了比較理想的效果,將精確率和查全率作為x軸和y軸,并作圖得到圍成的面積,即mAP,如圖8(c)所示,其中map最大值為94.23%。
圖8 評(píng)價(jià)指標(biāo)變化圖Fig.8 Change chart of evaluation indicators
將訓(xùn)練所得的模型文件放在源代碼下的weights文件夾下,接下來(lái)進(jìn)行跌倒檢測(cè)系統(tǒng)的測(cè)試與實(shí)現(xiàn)。本系統(tǒng)需要配置一個(gè)監(jiān)控設(shè)備用于拍攝實(shí)時(shí)畫(huà)面,并將監(jiān)控畫(huà)面的視頻流推流到SRS流媒體服務(wù)器中,通過(guò)客戶端可視化界面顯示流媒體中的視頻流,這時(shí)點(diǎn)擊跌倒檢測(cè),開(kāi)始對(duì)視頻流進(jìn)行識(shí)別。由于實(shí)時(shí)監(jiān)控跌倒的情況不多,因此難以實(shí)現(xiàn)測(cè)試的效果,所有本次測(cè)試采用網(wǎng)上下載的視頻文件進(jìn)行無(wú)限推流,并發(fā)送至流媒體服務(wù)器上,后續(xù)部署時(shí)可以將監(jiān)控視頻流推送到流媒體上。本地GPU服務(wù)器運(yùn)行項(xiàng)目代碼,客戶端應(yīng)用彈出顯示主界面,打開(kāi)監(jiān)控,顯示視頻。原始視頻流如圖9所示。
圖9 原始視頻流Fig.9 Original video stream
打開(kāi)跌倒檢測(cè)系統(tǒng)可以查看識(shí)別后的視頻流,運(yùn)行界面如圖10所示。從圖10中可以看到,畫(huà)面中有老人摔跤時(shí),跌倒檢測(cè)系統(tǒng)能夠準(zhǔn)確地檢測(cè)出來(lái),并將結(jié)果顯示在左邊欄框內(nèi),這時(shí)系統(tǒng)會(huì)根據(jù)老年人的跌倒情況進(jìn)行下一步處理。
圖10 識(shí)別后的視頻流Fig.10 Recognized video stream
再好的模型也會(huì)出現(xiàn)誤測(cè)的情況,這就會(huì)導(dǎo)致某一幀圖片本來(lái)是up卻被識(shí)別為fall,這時(shí)系統(tǒng)一旦檢測(cè)到fall就會(huì)發(fā)送短信,導(dǎo)致信息頻繁發(fā)送。所以,本文通過(guò)設(shè)置源代碼中的閾值解決誤判的情況,只有當(dāng)連續(xù)檢測(cè)到視頻幀的圖片均為fall,并達(dá)到系統(tǒng)給定的閾值時(shí),系統(tǒng)才會(huì)判斷有人摔跤,否則視為誤測(cè)。如圖11所示,系統(tǒng)檢測(cè)到有人真實(shí)摔跤時(shí),便會(huì)提示在5 s內(nèi)發(fā)送短信給監(jiān)護(hù)人。
圖11 準(zhǔn)備發(fā)送短信Fig.11 Preparation for sending SMS
當(dāng)檢測(cè)到老人跌倒時(shí),跌倒檢測(cè)系統(tǒng)則會(huì)開(kāi)啟發(fā)短信進(jìn)程,5 s后開(kāi)始發(fā)送信息。如圖12所示,監(jiān)護(hù)人收到推送短信。
圖12 監(jiān)護(hù)人收到短信Fig.12 The guardian's receiving of the text message
有時(shí),系統(tǒng)檢測(cè)到老人確實(shí)是真實(shí)跌倒,但并不是每次摔跤都比較嚴(yán)重或者有人立即將老人攙扶起來(lái),如果此時(shí)短信進(jìn)程開(kāi)啟,但是還未發(fā)送,系統(tǒng)會(huì)終止進(jìn)程,停止發(fā)送信息。除了以上實(shí)驗(yàn),本文還進(jìn)行了一些其他情況下的跌倒和起立的實(shí)驗(yàn)。跌倒行為包括絆倒、滑倒、暈倒、撞倒,也采集了可能發(fā)生誤判的類似跑、坐下、走路、跳舞等較為激烈的正常生活行為[11]。針對(duì)以上情況進(jìn)行實(shí)驗(yàn),本文對(duì)105 個(gè)視頻文件進(jìn)行測(cè)試實(shí)驗(yàn),其中每個(gè)狀態(tài)有15 個(gè)視頻,分別統(tǒng)計(jì)預(yù)測(cè)為up和fall的視頻次數(shù)及發(fā)送短信的次數(shù),實(shí)驗(yàn)結(jié)果見(jiàn)表3。
表3 實(shí)驗(yàn)結(jié)果Tab.3 Experimental result(單位:個(gè))
由表3數(shù)據(jù)可知,系統(tǒng)對(duì)于跑、走路、跳舞的視頻都能正常識(shí)別為up且均未發(fā)送短信,符合預(yù)期效果。只針對(duì)坐下的狀態(tài),系統(tǒng)有時(shí)會(huì)將坐在地上的某些時(shí)刻識(shí)別為fall,所以導(dǎo)致不該發(fā)短信的時(shí)候發(fā)送短信,這也是后面需要改進(jìn)的地方。對(duì)于實(shí)際摔倒的視頻文件,基本能識(shí)別出暈倒、絆倒、撞倒的情況,并且成功發(fā)送短信提醒監(jiān)護(hù)人。所以105 個(gè)視頻只有2 個(gè)視頻未達(dá)到預(yù)期效果,故短信發(fā)送成功率為98.10%。由此可見(jiàn),系統(tǒng)能達(dá)到很好的預(yù)警效果。
基于YOLOv5的空巢老人跌倒檢測(cè)系統(tǒng)的設(shè)計(jì)與研究,通過(guò)自建數(shù)據(jù)集對(duì)模型進(jìn)行訓(xùn)練得到訓(xùn)練權(quán)重文件,并對(duì)系統(tǒng)的架構(gòu)進(jìn)行搭建,最終構(gòu)建空巢老人跌倒檢測(cè)系統(tǒng)。本系統(tǒng)設(shè)計(jì)的初衷是為空巢老人提供一份安全保障,讓在外打工的親人能夠踏實(shí)工作。經(jīng)過(guò)實(shí)驗(yàn)測(cè)試和分析后,證明基于YOLOv5的空巢老人跌倒檢測(cè)系統(tǒng),無(wú)論是準(zhǔn)確率還是實(shí)時(shí)性都可以達(dá)到較好的效果,有進(jìn)一步研究的價(jià)值。本系統(tǒng)不足之處在于,搭建SRS流媒體服務(wù)器的Linux系統(tǒng)的性能相對(duì)較差,真實(shí)監(jiān)控畫(huà)面時(shí)間和在客戶端上看到的時(shí)間存在一定延時(shí)問(wèn)題。后續(xù)部署可以更換更好的Linux服務(wù)器。此外,算法的性能可能在人多的應(yīng)用場(chǎng)景或者人群應(yīng)用場(chǎng)景中的識(shí)別效果較差,對(duì)臥倒及坐下?tīng)顟B(tài)會(huì)出現(xiàn)誤判的情況,有待進(jìn)一步研究完善。但是,針對(duì)空巢老人獨(dú)居在家的應(yīng)用場(chǎng)景,系統(tǒng)對(duì)日常生活中的跌倒識(shí)別準(zhǔn)確率較高,基本能夠滿足對(duì)獨(dú)居老人行為監(jiān)測(cè)的需求。