邱云明, 甘倬溢, 范 恩, 羅 旭, 劉 晶, 汪子涵
1(深圳大學(xué) 物理與光電工程學(xué)院, 深圳 518061)
2(紹興文理學(xué)院 計(jì)算機(jī)科學(xué)與工程系, 紹興 312000)
隨著人口老齡化程度的不斷加深, 空巢老人居家監(jiān)護(hù)已成為一個(gè)亟需解決的熱點(diǎn)問(wèn)題[1–3]. 越來(lái)越多的老年人需要看護(hù), 特別是獨(dú)居老人群體. 然而由于現(xiàn)實(shí)工作等客觀原因, 子女一般與老人分開(kāi)居住, 不能及時(shí)照看老人, 所以室內(nèi)安全監(jiān)測(cè)對(duì)保障獨(dú)居老人健康和安全變得十分重要[4–6]. 此外, 老人的室內(nèi)活動(dòng)規(guī)律會(huì)隨著他們年齡、季節(jié)、身體狀態(tài)的變化而變化, 他們?cè)谑覂?nèi)活動(dòng)的熱點(diǎn)區(qū)域以及駐留時(shí)間也會(huì)發(fā)生相應(yīng)的變化. 通過(guò)上述這些情況可以及時(shí)了解老人的生活狀態(tài), 發(fā)現(xiàn)異常行為并發(fā)出提醒郵件[7–10]. 因此, 利用遠(yuǎn)程監(jiān)測(cè)系統(tǒng)獲取監(jiān)控?cái)?shù)據(jù), 一方面可以實(shí)時(shí)監(jiān)測(cè)老人健康狀態(tài), 另一方面可以幫助分析老人行為習(xí)慣, 進(jìn)一步深入了解老人生理狀態(tài), 從而更好地看護(hù)老人.
相對(duì)傳統(tǒng)監(jiān)護(hù)方式, 利用遠(yuǎn)程監(jiān)護(hù)系統(tǒng)監(jiān)測(cè)獨(dú)居老人具有一定的優(yōu)勢(shì). 利用多傳感器監(jiān)測(cè)已廣泛應(yīng)用于諸多領(lǐng)域[11–13]. 文獻(xiàn)[14]利用藍(lán)牙信號(hào)的強(qiáng)弱獲得老人當(dāng)前位置, 提出一種基于位置信息的老人異常狀態(tài)監(jiān)測(cè)方法, 能夠降低穿戴設(shè)備的負(fù)擔(dān). 文獻(xiàn)[15]從情感感知的角度, 建立老人的居家行為模型, 提出一種基于隨機(jī)森林和行為相似性的老人居家行為識(shí)別方法.文獻(xiàn)[8]通過(guò)射頻識(shí)別標(biāo)簽以及設(shè)計(jì)內(nèi)置傳感器, 實(shí)時(shí)監(jiān)測(cè)老人異常位置, 并發(fā)出異常提醒. 在實(shí)際設(shè)計(jì)遠(yuǎn)程監(jiān)護(hù)系統(tǒng)的過(guò)程中, 既要考慮用戶的實(shí)際需求, 也要考慮信息的私密性. 因此, 實(shí)際上將攝像頭安裝在室內(nèi)合適的位置, 根據(jù)目標(biāo)的方位信息, 來(lái)分析老人的健康狀態(tài)和異常行為, 這樣既能夠保證用戶信息的私密性, 也能夠提供目標(biāo)可靠的信息, 更好地方便用戶對(duì)老人進(jìn)行遠(yuǎn)程看護(hù).
為此, 本文針對(duì)獨(dú)居老人室內(nèi)行為監(jiān)測(cè)及異常行為監(jiān)測(cè), 開(kāi)發(fā)出一款基于方位感知的老人居家行為監(jiān)測(cè)系統(tǒng), 并應(yīng)用于老人的實(shí)際生活場(chǎng)景. 該系統(tǒng)首先根據(jù)老人的室內(nèi)結(jié)構(gòu)圖, 以舵機(jī)為原點(diǎn), 建立室內(nèi)方位坐標(biāo)系, 將室內(nèi)劃分為不同的興趣區(qū)域; 然后通過(guò)編寫(xiě)Python 程序?qū)崿F(xiàn)攝像頭的自動(dòng)目標(biāo)(老人)搜索以及人臉識(shí)別、定位功能; 最后根據(jù)監(jiān)測(cè)目標(biāo)的方位信息和時(shí)間信息, 分析老人的日常行為, 同時(shí)判斷是否存在異常行為, 并發(fā)送提醒郵件. 實(shí)際應(yīng)用結(jié)果表明, 該監(jiān)測(cè)系統(tǒng)能夠?qū)崟r(shí)監(jiān)測(cè)目標(biāo)室內(nèi)行為, 具有靈活性高、實(shí)時(shí)性強(qiáng)、可靠性好等優(yōu)點(diǎn). 此外, 利用Python 語(yǔ)言對(duì)攝像頭進(jìn)行二次開(kāi)發(fā), 代碼復(fù)用性高、可擴(kuò)展性強(qiáng)、便于操作, 因此具有良好的應(yīng)用價(jià)值.
為了對(duì)獨(dú)居老人進(jìn)行監(jiān)護(hù), 本文開(kāi)發(fā)出一套基于方位感知的獨(dú)居老人監(jiān)測(cè)系統(tǒng). 具體設(shè)計(jì)思路如下:① 采用云象攝像頭獲取老人室內(nèi)的方位視頻圖像;② 利用目標(biāo)跟蹤算法獨(dú)居老人(目標(biāo))進(jìn)行檢測(cè)與跟蹤; ③ 根據(jù)目標(biāo)方位信息計(jì)算目標(biāo)所處空間位置; ④ 將目標(biāo)的相關(guān)數(shù)據(jù)保存于本地?cái)?shù)據(jù)庫(kù).
如圖1 所示, 基于方位感知的老人居家行為檢測(cè)系統(tǒng)主要由3 個(gè)模塊組成: 圖像數(shù)據(jù)信息采集處理模塊、數(shù)據(jù)傳輸模塊、圖形界面顯示和提示模塊. 圖像數(shù)據(jù)信息采集處理模塊由云象攝像頭、樹(shù)莓派處理器等硬件、OpenCV 和MySQL 數(shù)據(jù)庫(kù)組成. 它主要負(fù)責(zé)采集圖像數(shù)據(jù), 并存儲(chǔ)到數(shù)據(jù)庫(kù). 數(shù)據(jù)傳輸模塊主要是通過(guò)WiFi 網(wǎng)絡(luò)傳輸數(shù)據(jù). 圖形界面顯示和提示模塊主要由手機(jī)端和電腦端VCC 遠(yuǎn)程控制顯示構(gòu)成, 負(fù)責(zé)發(fā)送控制命令和接收提示信息.
圖1 系統(tǒng)功能架構(gòu)
云攝像頭: 30 萬(wàn)像素, 俯仰130°, 環(huán)視180°.
樹(shù)莓派處理器: 含有8 路帶過(guò)路流保護(hù)的PWM舵機(jī)接口, 單總線串口電路, 可直接控制串口舵機(jī)兩路可編程LED、清晰展示系統(tǒng)工作狀態(tài); 有兩路可編程的按鈕, 可以配置系統(tǒng); 預(yù)留IIC 的UART 接口, 可以拓展各種傳感器.
MySQL 數(shù)據(jù)庫(kù)模塊: 記錄目標(biāo)位置的數(shù)據(jù)表結(jié)構(gòu)圖. 其中, id 表示記錄表的索引, name 表示目標(biāo)名字,position 表示目標(biāo)位置, time 表示檢測(cè)時(shí)間. 通過(guò)此表可以記錄目標(biāo)的位置以及位置改變的時(shí)間. 因此, 通過(guò)數(shù)據(jù)庫(kù)中目標(biāo)在不同位置的停留時(shí)長(zhǎng)來(lái)判斷老人的行為以及可能存在的異常情況.
OpenCV 函數(shù)庫(kù): 它是開(kāi)放源代碼計(jì)算機(jī)視覺(jué)庫(kù),主要包括圖像處理、計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)等算法,能夠提供C、C++、Java、Python 等接口. 在本文視頻處理及圖像處理功能模塊, 主要是在OpenCV 函數(shù)的基礎(chǔ)上實(shí)現(xiàn)的.
WiFi 網(wǎng)絡(luò)/局域網(wǎng): 通過(guò)WiFi 將終端和攝像頭鏈接在同一局域網(wǎng), 實(shí)現(xiàn)不同終端之間的通信.
圖像化界面顯示和提示模塊: 將攝像頭采集的圖像信息傳送到電腦端, 再通過(guò)VCC 遠(yuǎn)程控制界面實(shí)時(shí)顯示.
如圖2 所示, 監(jiān)測(cè)系統(tǒng)的硬件部分主要由樹(shù)莓派、攝像頭和舵機(jī)組成, 用于實(shí)現(xiàn)自動(dòng)目標(biāo)搜索功能和人臉定位功能. 受到攝像頭分辨率以及所采用的目標(biāo)檢測(cè)算法性能的限制, 搭建好硬件監(jiān)測(cè)平臺(tái)后, 本文采用的主要監(jiān)測(cè)處理流程如下: 當(dāng)目標(biāo)距離較遠(yuǎn)時(shí), 系統(tǒng)將老人作為移動(dòng)目標(biāo)進(jìn)行檢測(cè), 能夠?qū)崟r(shí)檢測(cè)并跟蹤目標(biāo), 但此時(shí)人臉識(shí)別不連續(xù)或不穩(wěn)定; 當(dāng)目標(biāo)距離比近時(shí), 系統(tǒng)既能夠?qū)崟r(shí)檢測(cè)并跟蹤目標(biāo), 同時(shí)能夠連續(xù)、穩(wěn)定地識(shí)別目標(biāo)的人臉.
圖2 監(jiān)測(cè)硬件系統(tǒng)
自動(dòng)搜索功能主要由舵機(jī)和攝像頭聯(lián)合實(shí)現(xiàn). 舵機(jī)用于控制攝像頭上下和左右旋轉(zhuǎn), 攝像頭用于采集圖像數(shù)據(jù). 當(dāng)系統(tǒng)啟動(dòng)時(shí), 攝像頭首先進(jìn)入自動(dòng)搜索模式, 通過(guò)水平掃描, 捕捉室內(nèi)目標(biāo)及位置數(shù)據(jù). 當(dāng)沒(méi)有捕捉到目標(biāo)數(shù)據(jù)時(shí), 控制舵機(jī)向右旋轉(zhuǎn)5°, 直至最大角度, 再向相反方向開(kāi)始旋轉(zhuǎn). 在自動(dòng)搜索過(guò)程中, 對(duì)攝像頭上下位置進(jìn)行判斷, 如果與定義的水平位置存在差值, 那么就緩慢上下轉(zhuǎn)動(dòng)攝像頭, 直至修正為水平位置. 主要實(shí)現(xiàn)代碼如代碼1.
代碼1. 攝像頭自動(dòng)搜索if track != 0 and max_area == 0:#當(dāng)開(kāi)啟追蹤功能但是沒(méi)有檢測(cè)的人臉的時(shí)候#攝像頭水平復(fù)原函數(shù)
if servo1_face_track<1230: servo1_face_track=servo1_face_track+10 elif servo1_face_track>1270: servo1_face_track=servo1_face_track–10 else: servo1_face_track=1250 #攝像頭沒(méi)有檢測(cè)到人臉時(shí)的循環(huán)掃描實(shí)現(xiàn)if tmp2>10 and tmp1<2500: #當(dāng)攝像頭從初始角開(kāi)始轉(zhuǎn)時(shí) servo2_face_track=tmp1 tmp1=tmp1+10 time.sleep(0.01)if action_finish_face: dis_ok_face = True elif tmp1>=2500 and tmp2>10: #控制攝像頭回轉(zhuǎn) servo2_face_track=tmp2 tmp=tmp2–10 time.sleep(0.01)if action_finish_face: dis_ok_face = True else: tmp1=int(0) tmp2=int(2500)?
具體地, 在OpenCV 中: 首先, 采用函數(shù)cv2.resize()將每幀圖像的功能模塊設(shè)置成大小為320×240, 利用函數(shù)cv2.cvtColor()對(duì)圖像進(jìn)行灰度處理, 并使用函數(shù)cv2.GaussianBlur()對(duì)圖像高斯模糊化, 從而消除高斯噪聲; 然后, 比較兩幀圖像, 調(diào)用函數(shù)cv2.accumulate Weighted()檢測(cè)運(yùn)動(dòng)目標(biāo), 并采用cv2.absdiff()記錄差值; 接著, 利用函數(shù)cv2.threshold()將灰度圖二值化, 使用函數(shù)cv2.dilate() 對(duì)圖像膨脹處理, 通過(guò)函數(shù)cv2.drawContours()在繪制輪廓, 同時(shí)遍歷輪廓; 最后, 調(diào)用函數(shù)cv2.contourArea()計(jì)算目標(biāo)輪廓面積, 并根據(jù)門(mén)限值進(jìn)行判斷. 由于人體目標(biāo)相對(duì)較大, 門(mén)限值應(yīng)該設(shè)置較大, 以便過(guò)濾除較小目標(biāo)的影響, 調(diào)用cv2.bounding Rect()計(jì)算目標(biāo)輪廓的4 個(gè)坐標(biāo)值, 再利用cv2.rectangle()對(duì)輪廓邊框進(jìn)行標(biāo)注.
當(dāng)搜索到目標(biāo)后, 需要對(duì)目標(biāo)人臉進(jìn)行監(jiān)測(cè)和定位. 當(dāng)檢測(cè)到人臉面部時(shí), 將該區(qū)域標(biāo)記成一個(gè)框, 分別用x1、x2、y1、y2 這4 個(gè)值, 標(biāo)記該框的4 個(gè)角,然后根據(jù)公式計(jì)算人臉的坐標(biāo):
最后根據(jù)兩個(gè)坐標(biāo)與定義好的圖像中心坐標(biāo)進(jìn)行比較:
當(dāng)其差值較大時(shí), 即可以認(rèn)為人臉不在圖像中間部位, 此時(shí)控制舵機(jī)轉(zhuǎn)動(dòng), 保證人臉位于圖像中心位置,不超出圖像范圍. 主要實(shí)現(xiàn)代碼如代碼2.
代碼2. 人臉定位if track and max_area != 0:#當(dāng)開(kāi)啟人臉追蹤功能并且檢測(cè)到人臉時(shí), 控制舵機(jī)追蹤 center_x, center_y = (max_face[0]+int((max_face[2]–max_face[0]) / 2),max_face[1]+int((max_face[3]–max_face[1]) /2)) #最大的人臉的坐標(biāo) #上下pid 刷新 servo1_pid3.SetPoint = center_y if abs(img_center_y–center_y)<20 else img_center_y #離中心一定范圍內(nèi)的停止pid 操作 servo1_pid3.update(center_y) tmp = int(servo1_face_track–servo1_pid3.output) tmp = tmp if tmp>500 else 500 servo1_face_track = tmp if tmp<1950 else 1950 #舵機(jī)角度限位 #左右pid 刷新 servo2_pid4.SetPoint = center_x if abs(img_center_x–center_x)<40 else img_center_x #離中心一定范圍內(nèi)的停止pid 操作 servo2_pid4.update(2 * img_center_x–center_x) tmp = int(servo2_face_track+servo2_pid4.output) tmp = tmp if tmp>500 else 500 servo2_face_track = tmp if tmp<2500 else 2500 #舵機(jī)角度限位if action_finish_face: #圖像返回函數(shù) dis_ok_face = True
在OpenCV 中, 主要利用Haar 特征檢測(cè)人臉, 調(diào)用face_recognition()函數(shù)進(jìn)行識(shí)別. 這里, 用于描述人臉的特征主要分為4 類: 邊緣特征、線性特征、中心特征和對(duì)角線特征. 在具體計(jì)算特征值時(shí), 可以通過(guò)改變各類模板的大小和在子窗口中的位置, 得到不同的矩形特征, 然后利用這些特征計(jì)算子窗口中所有的特征值.
具體地, 當(dāng)攝像頭采集到每幀圖像后, 首先采用函數(shù)cv2.resize()將圖像大小設(shè)置為160×120, 并利用函數(shù)cv2.dnn.blobFromImage()對(duì)圖像進(jìn)行預(yù)處理, 包括減均值、比例縮放、裁剪、交換通道等; 然后, 利用函數(shù)net.setInput()輸入圖像, 通過(guò)net.forward()函數(shù)引入算法模型計(jì)算人臉預(yù)測(cè)結(jié)果, 并設(shè)置人臉檢測(cè)的可信度閾值. 當(dāng)可行度大于預(yù)設(shè)值時(shí), 記錄人臉的坐標(biāo), 求出當(dāng)前人臉面積, 并與之前人臉面積進(jìn)行比較, 判斷當(dāng)前是否為最大人臉, 如果是就更新人臉坐標(biāo). 最后, 對(duì)人臉坐標(biāo)進(jìn)行640×480 的坐標(biāo)轉(zhuǎn)換, 使其能夠匹配攝像頭, 并調(diào)用函數(shù)cv2.rectangle()對(duì)人臉進(jìn)行方框標(biāo)注.
第1 步采集圖像.
① 調(diào)用攝像頭: cv2.VideoCapture('http://127.0.0.1:8080/?action=stream?dummy=param.mjpg'). 其中,cv2.VideoCapture(0)表示創(chuàng)建一個(gè)cap 對(duì)象, 參數(shù)0 表示打開(kāi)筆記本內(nèi)置的攝像頭. 如果外接其他攝像頭, 則調(diào)整為相應(yīng)的參數(shù)值.
② 讀取攝像頭采集的圖像數(shù)據(jù): 調(diào)用cap.read(),返回值ret 為布爾值, Ture 表示讀取成功, False 表示讀取失敗; frame 表示返回一幀圖像.
③ 顯示采集圖像: 在樹(shù)莓派開(kāi)發(fā)系統(tǒng)上現(xiàn)實(shí)攝像頭采集的圖像.
第2 步人臉檢測(cè).
① 導(dǎo)入模塊. cv2 為opencv, 用于調(diào)用攝像頭以及并進(jìn)行相應(yīng)處理. face_recognition() 用于人臉識(shí)別,os 用于對(duì)人臉進(jìn)行標(biāo)注.
② 人臉?lè)诸惼鞴δ苣K. 通過(guò)調(diào)用dlib 庫(kù)中dlib.get_frontal_face_detector()可以調(diào)用人臉?lè)诸惼? 計(jì)算圖像中人臉的最大box 面積, 然后根據(jù)人臉檢測(cè)模塊,獲取人臉的可信度. 如果可信度達(dá)到標(biāo)準(zhǔn), 則在圖像上標(biāo)注人臉框.
3.2.1 記錄時(shí)段信息及位置
安裝好攝像頭后, 設(shè)置舵機(jī)度角范圍所匹配的區(qū)域. 當(dāng)攝像頭檢測(cè)到人臉面部信息時(shí), 記錄舵機(jī)的方位信息、對(duì)應(yīng)區(qū)域以及當(dāng)前時(shí)間.
當(dāng)目標(biāo)消失在某區(qū)域時(shí), 同事沒(méi)有在其他指定區(qū)域出現(xiàn), 不斷讀取當(dāng)前時(shí)間, 并與進(jìn)入此區(qū)域時(shí)間進(jìn)行差值比較. 如果時(shí)差大于設(shè)定值, 則可以判斷異常, 同時(shí)發(fā)送郵件信息提醒接收人, 并記錄當(dāng)前郵件發(fā)送的時(shí)間.
若在非設(shè)定區(qū)域檢測(cè)到人臉信息, 可以認(rèn)為目標(biāo)已經(jīng)離開(kāi)檢測(cè)區(qū)域, 此時(shí)將進(jìn)入此區(qū)域的時(shí)間清零. 主要代碼如代碼3.
代碼3. 記錄時(shí)段信息及位置if track and max_area != 0: #當(dāng)開(kāi)啟人臉追蹤功能并且檢測(cè)到人臉時(shí), 控制舵機(jī)追蹤if tmp>600 and tmp<1000: #假設(shè)衛(wèi)生間在攝像頭的600–1 000 方位 time1=int(time.time())#記錄下進(jìn)入衛(wèi)生間的時(shí)間else:
time1=0 # 進(jìn)入衛(wèi)生間的時(shí)間清零 time3=0 # 發(fā)送郵件時(shí)間清零if track != 0 and max_area == 0: time2=int(time.time()) #報(bào)警功能的實(shí)現(xiàn)if time1 != 0 and time3==0 and time2–time1>1200: mial_delivery() # 調(diào)用發(fā)送郵件的函數(shù) time3 = time2 # 記錄下發(fā)送郵件的時(shí)間elif time1!=0 and time3 != 0 and time2–time3>600: mial_delivery()#調(diào)用發(fā)送郵件的函數(shù) time3=time2?
3.2.2 發(fā)送數(shù)據(jù)模塊
攝像頭發(fā)送數(shù)據(jù)采用SMTP 服務(wù), 可以利用Python的兩個(gè)包來(lái)發(fā)送郵件, 即smtplib 和email. Python 中email 模塊里包含很多實(shí)用的郵件格式設(shè)置函數(shù), 可以用于創(chuàng)建郵件“包裹”. 利用MIMEText 對(duì)象, 可以為底層的 MIME 協(xié)議創(chuàng)建一封空郵件, 最后通過(guò)高層SMTP協(xié)議發(fā)送出去. MIMEText 對(duì)象msg 包括收發(fā)郵箱的地址、正文和主題. Python 通過(guò)它就可以創(chuàng)建一封格式正確的郵件. smtplib 模塊用來(lái)設(shè)置服務(wù)器連接的相關(guān)信息. 下面通過(guò)QQ 郵箱發(fā)送郵件.
代碼4. 發(fā)送數(shù)據(jù)模塊host_server = 'smtp.qq.com' #qq 郵箱smtp 服務(wù)器sender_qq = 'xxxxxxxx@qq.com' #發(fā)件人郵箱pwd = '你的授權(quán)碼'receiver = ['xxxxxxxx@qq.com']mail_title = 'Python 自動(dòng)發(fā)送的郵件' #郵件標(biāo)題mail_content = "python 登錄QQ 郵箱發(fā)送郵件測(cè)試—zep"msg = MIMEMultipart()msg["Subject"] = Header(mail_title, 'utf-8')msg["From"] = sender_qq msg['To'] = ";".join(receiver)msg.attach(MIMEText(mail_content, 'plain', 'utf-8'))smtp = SMTP_SSL(host_server) #ssl 登錄smtp.login(sender_qq, pwd)smtp.sendmail(sender_qq, receiver, msg.as_string())smtp.quit()
實(shí)際場(chǎng)景為一室一廳的獨(dú)立老年公寓, 如圖3 所示, 將公寓劃分為3 個(gè)區(qū)域, 分別標(biāo)識(shí)為A、B、C, 將攝像頭和檢測(cè)算法獲得老人在一天內(nèi)的歷史活動(dòng)數(shù)據(jù),將活動(dòng)時(shí)間高的地方稱為熱點(diǎn)區(qū)域, 將目標(biāo)在熱點(diǎn)區(qū)域之間的轉(zhuǎn)移用于描述目標(biāo)在日常生活中的行為變化.在實(shí)際檢測(cè)過(guò)程中, 首先需要將運(yùn)動(dòng)軌跡數(shù)據(jù)在熱點(diǎn)監(jiān)控區(qū)域進(jìn)行整合, 計(jì)算目標(biāo)在這些監(jiān)控區(qū)域的進(jìn)入時(shí)間及駐留時(shí)長(zhǎng), 然后通過(guò)Python 對(duì)記錄數(shù)據(jù)進(jìn)行處理, 獲取目標(biāo)活動(dòng)軌跡的中位數(shù), 如表1 所示.
圖3 室內(nèi)活動(dòng)場(chǎng)景
表1 時(shí)間分布表
實(shí)驗(yàn)中, 所采用舵機(jī)的相關(guān)參數(shù)為: 型號(hào)LFD-01,工作電壓6 V, 水平檢測(cè)范圍0–180°, 垂直監(jiān)測(cè)范圍0–130°, 初始位置為0°; 云攝像頭的相關(guān)參數(shù)為30w 像素; 樹(shù)莓派通過(guò)額外的Poe 供電, 用于處理數(shù)據(jù)信息;樹(shù)莓派擴(kuò)展板可直接控制串口舵機(jī)兩路可編程按鈕,方便配置系統(tǒng).
圖4 和圖5 給出了室內(nèi)目標(biāo)的檢測(cè)結(jié)果. 圖4 給出室內(nèi)近景對(duì)于目標(biāo)近景中人臉和人體的檢測(cè)結(jié)果.圖5 給出室內(nèi)遠(yuǎn)景中人體的檢測(cè)結(jié)果. 在室內(nèi)的行為異常的情況, 主要根據(jù)目標(biāo)在熱點(diǎn)區(qū)域的駐留時(shí)長(zhǎng)進(jìn)行判斷. 若超出統(tǒng)計(jì)給定的時(shí)長(zhǎng)閾值, 將進(jìn)行警報(bào)提示.因此, 利用監(jiān)測(cè)系統(tǒng)獲取目標(biāo)在熱點(diǎn)區(qū)域的駐留時(shí)間,可以得到目標(biāo)在識(shí)別區(qū)的駐留時(shí)間.
圖4 近景人臉和人體檢測(cè)結(jié)果
圖5 遠(yuǎn)景人體檢測(cè)結(jié)果
具體地, 如圖4 所示, 當(dāng)目標(biāo)距離攝像頭較近時(shí)(1.5 m 范圍內(nèi)), 系統(tǒng)可以同時(shí)準(zhǔn)確地檢測(cè)到目標(biāo)和人臉. 如圖5 所示, 當(dāng)目標(biāo)距離攝像頭較遠(yuǎn)時(shí)(1.5 m 到7.0 m 范圍內(nèi)), 系統(tǒng)依然能夠準(zhǔn)確地檢測(cè)到目標(biāo), 但是由于攝像頭性能的限制, 此時(shí)人臉圖像變得十分模糊,檢測(cè)不到人臉. 當(dāng)目標(biāo)距離太遠(yuǎn)時(shí)(超過(guò)7.0 m), 系統(tǒng)對(duì)目標(biāo)檢測(cè)的準(zhǔn)確性下降, 檢測(cè)性能不是很穩(wěn)定. 因此,從實(shí)驗(yàn)結(jié)果看, 系統(tǒng)能夠滿足常見(jiàn)的老人居住環(huán)境.
考慮到攝像頭、舵機(jī)的性能以及樹(shù)莓派數(shù)據(jù)處理能力的限制, 為了保證監(jiān)測(cè)的實(shí)時(shí)性, 在具體實(shí)驗(yàn)過(guò)程中, 設(shè)置舵機(jī)每0.01 s 轉(zhuǎn)動(dòng)5°. 當(dāng)系統(tǒng)未檢測(cè)到目標(biāo)時(shí),系統(tǒng)繼續(xù)水平轉(zhuǎn)動(dòng)搜索目標(biāo); 當(dāng)系統(tǒng)檢測(cè)到目標(biāo)時(shí), 系統(tǒng)進(jìn)入跟蹤模式, 根據(jù)目標(biāo)的位置進(jìn)行轉(zhuǎn)動(dòng). 一般地,由于針對(duì)的目標(biāo)是老人, 當(dāng)目標(biāo)相對(duì)舵機(jī)移動(dòng)角速度小于上述5°/0.01 s, 系統(tǒng)都能夠?qū)崟r(shí)檢測(cè)和跟蹤目標(biāo).而且當(dāng)目標(biāo)距離攝像頭2 m 范圍內(nèi), 還能夠同時(shí)檢測(cè)到人臉. 因此, 在系統(tǒng)具體設(shè)計(jì)過(guò)程中, 需要充分考慮到硬件平臺(tái)中樹(shù)莓派的數(shù)據(jù)處理能力以及舵機(jī)、攝像頭的性能, 并結(jié)合室內(nèi)居住環(huán)境的相關(guān)參數(shù), 才能設(shè)計(jì)出滿足實(shí)際要求的實(shí)時(shí)監(jiān)測(cè)系統(tǒng).
此外, 通過(guò)分析駐留時(shí)長(zhǎng), 可以統(tǒng)計(jì)目標(biāo)的主要活動(dòng)區(qū)域, 從側(cè)面反映該老人的生活規(guī)律. 如圖6 所示,當(dāng)出現(xiàn)超過(guò)某個(gè)特定閾值的時(shí)間值, 系統(tǒng)會(huì)自動(dòng)判定為發(fā)生特殊情況, 同時(shí)發(fā)送警示郵件給相關(guān)用戶, 提醒用戶及時(shí)查看監(jiān)控視頻, 觀察老人的行為狀態(tài).
圖6 預(yù)警郵件
本文針對(duì)獨(dú)居老人室內(nèi)行為及異常行為檢測(cè), 開(kāi)發(fā)出一款基于方位感知的老人居家行為監(jiān)測(cè)系統(tǒng). 該系統(tǒng)首先通過(guò)將室內(nèi)劃分為不同興趣區(qū)域, 利用WiFi連接樹(shù)莓派、攝像頭、舵機(jī), 采用Python 程序?qū)崿F(xiàn)攝像頭自動(dòng)目標(biāo)搜索以及人臉識(shí)別功能; 然后根據(jù)人臉識(shí)別結(jié)果、目標(biāo)熱點(diǎn)區(qū)域駐留時(shí)間等信息分析老人室內(nèi)行為, 同時(shí)判斷是否存在異常行為, 并發(fā)送提醒郵件.實(shí)測(cè)結(jié)果表明, 該監(jiān)測(cè)系統(tǒng)能夠?qū)崟r(shí)采集目標(biāo)的視頻和方位信息, 準(zhǔn)確分析目標(biāo)行為狀態(tài), 對(duì)目標(biāo)異常行為發(fā)送郵件預(yù)警, 有利于監(jiān)測(cè)老人居家安全, 具有良好的應(yīng)用前景.
增強(qiáng)出版
本文附有基于方位感知的老人居家行為監(jiān)測(cè)系統(tǒng)演示視頻,可點(diǎn)擊視頻鏈接或手機(jī)掃描二維碼觀看.