吳春香,吳 戀
(1.貴州大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,貴州 貴陽 550025;2.貴州師范學(xué)院,貴州 貴陽 550018)
智能監(jiān)控是安防中的重要組成部分,已廣泛應(yīng)用于變電站[1]、建筑工地[2]、監(jiān)獄[3]、鐵路等[4-6]場(chǎng)所。人員入侵作為視頻監(jiān)控的重要內(nèi)容,越來越受行業(yè)重視。為了更高效地進(jìn)行人員入侵檢測(cè),研究開發(fā)自動(dòng)化、高效的智能入侵防護(hù)系統(tǒng)非常必要[7]。
目前主流的前景目標(biāo)提取方法是基于圖像處理的背景建模法[8-9],該方法易受到光照突變和樹葉擺動(dòng)等背景因素的干擾造成穩(wěn)定性差。而基于深度學(xué)習(xí)的行人檢測(cè)算法可以不受光照突變和樹葉擺動(dòng)等背景的影響,主要分為one-stage和two-stage[10]兩類。其中one-stage類方法有SSD[11-12]系列和yolo[13]系列,two-stage類方法有faster-rcnn[14]、mask-rcnn等[15]。但two-stage類算法參數(shù)較多,無法滿足實(shí)時(shí)性要求[16]。針對(duì)該問題,該文提出了一種不受光照和樹葉擺動(dòng)因素干擾,精度高、魯棒性強(qiáng)的實(shí)時(shí)人員入侵檢測(cè)算法。該算法采用數(shù)據(jù)流簡(jiǎn)單且計(jì)算速度快的yolov3[17-18]對(duì)行人進(jìn)行識(shí)別與定位,并針對(duì)不同監(jiān)控角度下的行人分別將行人矩形框的上邊框中心點(diǎn)、下邊框中心點(diǎn)和矩形框中心點(diǎn)作為入侵算法檢測(cè)點(diǎn),解決了在入侵檢測(cè)中多監(jiān)控角度問題和高度敏感區(qū)域的檢測(cè)問題。傳統(tǒng)的入侵檢測(cè)方法是用檢測(cè)到的運(yùn)動(dòng)目標(biāo)對(duì)單幀圖片建立入侵判斷規(guī)則,這會(huì)引起高誤報(bào)率。針對(duì)這一問題,利用目標(biāo)連續(xù)多幀位置均值作為判斷依據(jù),將目標(biāo)連續(xù)多幀位置分為兩段,分別求位置均值作為判斷依據(jù),再與當(dāng)前幀的位置點(diǎn)結(jié)合進(jìn)行判斷,當(dāng)檢測(cè)目標(biāo)連續(xù)多幀位于禁區(qū)內(nèi)啟動(dòng)報(bào)警。傳統(tǒng)的點(diǎn)在區(qū)域內(nèi)判斷準(zhǔn)則[19-20]誤判率高或無法滿足實(shí)時(shí)性要求,所以文中采用判斷準(zhǔn)確率較高、計(jì)算簡(jiǎn)單的向量叉積公式替代。將以上各部分整合,獲得區(qū)域入侵檢測(cè)算法和越線入侵檢測(cè)算法。
文中方法描述如下:針對(duì)多監(jiān)控角度下的行人,分別采用行人矩形框的上邊框中心點(diǎn)、下邊框中心點(diǎn)和矩形框中心點(diǎn)作為入侵算法的行人位置點(diǎn);將行人連續(xù)幀位置點(diǎn)求均值作為判斷依據(jù),即選擇離當(dāng)前幀最近的L個(gè)連續(xù)幀中位置點(diǎn)判斷,對(duì)前L/2個(gè)位置點(diǎn)和后L/2個(gè)位置點(diǎn)分別求均值作為判斷依據(jù),并與判斷當(dāng)前幀的位置點(diǎn)相結(jié)合,最后根據(jù)行人連續(xù)幀處于禁區(qū)內(nèi)報(bào)警;通過設(shè)計(jì)區(qū)域入侵檢測(cè)算法和越線入侵檢測(cè)算法達(dá)到系統(tǒng)智能監(jiān)控的目的。
對(duì)于系統(tǒng)的設(shè)計(jì)與安排如下:系統(tǒng)設(shè)計(jì)分為服務(wù)器端和客戶端,服務(wù)器端運(yùn)行yolov3檢測(cè)行人,并針對(duì)不同監(jiān)控角度選擇合適的行人位置點(diǎn)送入?yún)^(qū)域入侵檢測(cè)算法或越線檢測(cè)算法內(nèi),對(duì)入侵幀用數(shù)據(jù)庫存儲(chǔ)。瀏覽器作為客戶端,分別設(shè)計(jì)以下模塊:(1)檢測(cè)相機(jī)的基本信息設(shè)置模塊,如相機(jī)IP、相機(jī)用戶名、相機(jī)密碼。(2)檢測(cè)像機(jī)數(shù)量設(shè)置模塊。(3)檢測(cè)線與檢測(cè)區(qū)域繪制模塊。(4)檢測(cè)結(jié)果實(shí)時(shí)顯示模塊,如攝像機(jī)IP、入侵類型、入侵時(shí)間。
客戶端提供檢測(cè)相機(jī)信息、檢測(cè)線、檢測(cè)區(qū)域等數(shù)據(jù)傳送給服務(wù)器,服務(wù)器執(zhí)行入侵檢測(cè)算法并在客戶端實(shí)時(shí)顯示檢測(cè)結(jié)果。
針對(duì)不同監(jiān)控角度下用yolov3檢測(cè)的行人,分別采用矩形框上邊框中心點(diǎn)、下邊框中心點(diǎn)以及矩形框中心點(diǎn)作為行人的位置點(diǎn)來檢測(cè)。針對(duì)禁區(qū)為窗戶等離地面有一定距離的豎直區(qū)域,行人入侵初期沒有完全處于禁區(qū),若用背景建模法會(huì)出現(xiàn)漏報(bào)和精度低的問題,提出根據(jù)攝像角度和禁區(qū)與地面距離設(shè)置行人矩形框的上邊框中心點(diǎn)或行人矩形框的中心點(diǎn)作為位置點(diǎn)檢測(cè);針對(duì)地面禁區(qū)采用行人矩形框中心點(diǎn)檢測(cè)會(huì)出現(xiàn)行人已經(jīng)進(jìn)入禁區(qū)而系統(tǒng)判斷為非入侵狀態(tài)的問題,采用行人矩形框下邊框中心點(diǎn)檢測(cè);針對(duì)高度敏感區(qū)域中攝像范圍狹窄全為禁區(qū)場(chǎng)景,可根據(jù)需求設(shè)置行人檢測(cè)框下邊框中心點(diǎn)或上邊框中心點(diǎn)為檢測(cè)點(diǎn)。
為解決采用單幀圖片對(duì)檢測(cè)到的行人進(jìn)行入侵判斷準(zhǔn)確率不高和相似物干擾引起誤判的問題,提出采用目標(biāo)連續(xù)幀位置點(diǎn)求均值作為判斷依據(jù)。具體規(guī)則如下:設(shè)運(yùn)動(dòng)目標(biāo)的跟蹤鏈長度(運(yùn)動(dòng)步數(shù))為L,考慮最近的2M個(gè)位置點(diǎn),根據(jù)L的大小使用分段函數(shù)來求平均位置點(diǎn)的值,通過實(shí)驗(yàn)最終選擇4為斷點(diǎn)且斷點(diǎn)可被修改。
(a)若L<4,則目標(biāo)不會(huì)有入侵發(fā)生,因?yàn)楦欐溸^小。
(b)若4≤L<2M,則通過當(dāng)前的第1~L/2個(gè)位置點(diǎn)的均值1和第L/2+1~L個(gè)位置點(diǎn)的均值2來判斷入侵。
(c)若L≥2M,則通過當(dāng)前的1~M個(gè)位置點(diǎn)的均值1和M+1~2M個(gè)位置點(diǎn)的均值2來判斷入侵。
(x2-xQ)·(y1-yQ)
(1)
2.4.1 區(qū)域入侵
根據(jù)離當(dāng)前檢測(cè)幀最近的2m幀的入侵狀態(tài)進(jìn)行報(bào)警與解除判斷。當(dāng)離檢測(cè)幀最近的m幀處于入侵狀態(tài)而較遠(yuǎn)的m幀處于非入侵狀態(tài)且報(bào)警次數(shù)沒有達(dá)到閾值時(shí),則報(bào)警產(chǎn)生;當(dāng)離檢測(cè)幀最近的m幀處于非入侵狀態(tài)而較遠(yuǎn)的m幀處于入侵狀態(tài)時(shí),則報(bào)警解除;當(dāng)最近的2m幀都處于非入侵狀態(tài)則不產(chǎn)生報(bào)警。具體的區(qū)域入侵報(bào)警與解除條件說明如表1所示。
2.4.2 越線入侵
根據(jù)離當(dāng)前檢測(cè)幀最近的2m幀的入侵狀態(tài)進(jìn)行報(bào)警與解除判斷。如果離當(dāng)前檢測(cè)幀最近的前m幀都處于入侵狀態(tài)而后m幀處于非入侵狀態(tài)且報(bào)警沒有達(dá)到閾值時(shí),單向越線報(bào)警和雙向越線報(bào)警產(chǎn)生;如果離當(dāng)前檢測(cè)幀最近的前m幀處于非入侵狀態(tài)而后m幀處于入侵狀態(tài)且報(bào)警沒有達(dá)到閾值,則單線越線報(bào)警解除,雙向越線報(bào)警產(chǎn)生;如果離當(dāng)前檢測(cè)幀最近的前m幀處于非入侵狀態(tài)而后m幀處于入侵狀態(tài)且報(bào)警達(dá)到閾值,單向越線報(bào)警與雙向越線報(bào)警解除。具體的越線入侵報(bào)警解除與條件說明如表2所示。
表1 區(qū)域入侵報(bào)警與解除產(chǎn)生條件
表2 越線入侵報(bào)警與解除產(chǎn)生條件
整體的入侵檢測(cè)流程為:針對(duì)具體監(jiān)控角度和場(chǎng)景,對(duì)yolov3檢測(cè)到的行人進(jìn)行位置點(diǎn)的選取與保存,將所得位置送入?yún)^(qū)域(越線)入侵算法中判斷,當(dāng)被判斷為入侵時(shí)對(duì)入侵結(jié)果進(jìn)行存儲(chǔ),其流程如圖1所示。
2.5.1 區(qū)域入侵算法
通過跟蹤鏈中的位置均值點(diǎn)與區(qū)域入侵報(bào)警與解除產(chǎn)生條件可寫出區(qū)域入侵檢測(cè)算法如下:首先利用跟蹤鏈中每個(gè)跟蹤節(jié)點(diǎn)位置均值點(diǎn)判斷入侵狀態(tài),再用當(dāng)前幀的位置點(diǎn)進(jìn)行區(qū)域入侵狀態(tài)的判斷,如果目標(biāo)被判斷為入侵狀態(tài)則修改目標(biāo)狀態(tài)并累計(jì)入侵幀,當(dāng)入侵幀數(shù)達(dá)到閾值,則不再進(jìn)行報(bào)警提示。具體算法如下所示:
For 遍歷跟蹤鏈中的每個(gè)跟蹤節(jié)點(diǎn)
If 跟蹤目標(biāo)沒有處于入侵狀態(tài)
If 跟蹤目標(biāo)被判斷準(zhǔn)則判斷為入侵狀態(tài)
修改目標(biāo)為入侵狀態(tài),并累加入侵幀數(shù)
If 跟蹤目標(biāo)處于合并狀態(tài)
在跟蹤目標(biāo)上顯示所有參與合并的目標(biāo)的信息
else //跟蹤目標(biāo)沒有處于合并狀態(tài)
在跟蹤目標(biāo)上顯示其相關(guān)信息
End
Endif
else//跟蹤目標(biāo)處于入侵狀態(tài)
if 跟蹤目標(biāo)被判斷準(zhǔn)則判斷為仍處于入侵狀態(tài)
if 報(bào)警次數(shù)沒有達(dá)到入侵閾值
累加入侵幀數(shù)
if 跟蹤目標(biāo)處于合并狀態(tài)
在跟蹤目標(biāo)上顯示所有參與合并的目標(biāo)的信息
else//跟蹤目標(biāo)沒有處于合并狀態(tài)
在跟蹤目標(biāo)上顯示其相關(guān)信息
Endif
else//報(bào)警次數(shù)達(dá)到閾值
解除入侵狀態(tài)
Endif
else//跟蹤目標(biāo)沒有處于入侵狀態(tài)
解除入侵狀態(tài)
Endif
Endif
Endfor
圖1 入侵檢測(cè)流程
2.5.2 越線入侵算法
與區(qū)域入侵算法結(jié)構(gòu)相似,越線入侵分為單線越線入侵與雙線越線入侵。根據(jù)報(bào)警與解除條件可得越線入侵檢測(cè)算法如下:首先也是遍歷跟蹤節(jié)點(diǎn)并利用位置均值點(diǎn)作為判斷依據(jù),判斷當(dāng)前幀是否處于單線越線狀態(tài)或雙向越線狀態(tài),最后根據(jù)目標(biāo)連續(xù)幀是否入侵和是否達(dá)到報(bào)警閾值來產(chǎn)生和解除報(bào)警。具體算法如下所示:
For 遍歷跟蹤鏈中的每個(gè)跟蹤節(jié)點(diǎn)
If 跟蹤目標(biāo)沒有處于越線狀態(tài)
If 使用判斷準(zhǔn)則判斷跟蹤目標(biāo)為越線入侵狀態(tài)
修改目標(biāo)為越線入侵狀態(tài),并累加越線入侵幀數(shù)
If 跟蹤目標(biāo)處于合并狀態(tài)
跟蹤目標(biāo)上顯示所有參與合并的目標(biāo)的信息
else//跟蹤目標(biāo)沒有處于單向越線入侵狀態(tài)
if 當(dāng)前為雙向越線模式
if 跟蹤目標(biāo)被判斷準(zhǔn)則判斷為從入侵區(qū)域進(jìn)入非入侵區(qū)域
產(chǎn)生雙向越線報(bào)警,并累加報(bào)警幀數(shù)
If 跟蹤目標(biāo)處于合并狀態(tài)
在跟蹤目標(biāo)上顯示所有參與合并的目標(biāo)的信息
else //跟蹤目標(biāo)沒有處于合并狀態(tài)
在跟蹤目標(biāo)上顯示其相關(guān)信息
End
Endif
Endif
Endif
else //跟蹤目標(biāo)處于越線狀態(tài)
if 跟蹤目標(biāo)被判斷準(zhǔn)則判斷為仍處于越線入侵狀態(tài)
if 報(bào)警次數(shù)沒有達(dá)到越線入侵閾值
累加報(bào)警幀數(shù)
if 跟蹤目標(biāo)處于合并狀態(tài)
在跟蹤目標(biāo)上顯示所有參與合并的目標(biāo)的信息
else//跟蹤目標(biāo)沒有處于合并狀態(tài)
在跟蹤目標(biāo)上顯示其相關(guān)信息
Endif
else//報(bào)警次數(shù)達(dá)到閾值
解除越線入侵狀態(tài)
Endif
else//跟蹤目標(biāo)沒有處于單向越線入侵狀態(tài)
if 當(dāng)前為雙向越線模式
if 報(bào)警次數(shù)沒有達(dá)到閾值
累加報(bào)警幀數(shù)
if 跟蹤目標(biāo)處于合并狀態(tài)
在跟蹤目標(biāo)上顯示所有參與合并的目標(biāo)的信息
else//跟蹤目標(biāo)沒有處于合并狀態(tài)
在跟蹤目標(biāo)上顯示其相關(guān)信息
Endif
else//報(bào)警次數(shù)達(dá)到閾值
解除報(bào)警狀態(tài)
Endif
else//當(dāng)前為單向越線模式
解除入侵狀態(tài)
Endif
Endif
Endif
Endfor
yolov3的微調(diào):因訓(xùn)練好的yolov3模型是對(duì)20種類別進(jìn)行檢測(cè)與識(shí)別,其中人的類別序列號(hào)為0,所以將相機(jī)檢測(cè)圖片幀修改為yolov3特定輸入格式并送入神經(jīng)網(wǎng)絡(luò)中,對(duì)輸出進(jìn)行當(dāng)且僅當(dāng)類別序列號(hào)為0時(shí)輸出其位置框與分?jǐn)?shù)的設(shè)置操作,得到的幀作為入侵算法的輸入幀。
區(qū)域入侵檢測(cè)模塊:客戶端:用戶通過設(shè)置網(wǎng)絡(luò)攝像頭的相關(guān)信息并用鼠標(biāo)進(jìn)行區(qū)域的繪制后將信息傳遞給服務(wù)器端,并實(shí)時(shí)查看入侵檢測(cè)結(jié)果和對(duì)入侵證據(jù)的調(diào)取。服務(wù)端:將客戶端的網(wǎng)絡(luò)攝像頭獲取的視頻信息與禁區(qū)信息送入入侵算法執(zhí)行,并將入侵證據(jù)存儲(chǔ)于數(shù)據(jù)庫中。
越線入侵檢測(cè)模塊:客戶端:用戶設(shè)置網(wǎng)絡(luò)攝像頭信息并用鼠標(biāo)在視頻中畫出警戒線后系統(tǒng)自動(dòng)將信息傳遞給服務(wù)器端,并實(shí)時(shí)查看檢測(cè)結(jié)果與調(diào)取入侵證據(jù)。服務(wù)端:將客戶端的信息送入入侵檢測(cè)程序執(zhí)行并將入侵證據(jù)存入數(shù)據(jù)庫。
數(shù)據(jù)庫模塊:為存儲(chǔ)入侵檢測(cè)結(jié)果,利用MySQL數(shù)據(jù)庫對(duì)其所用的網(wǎng)絡(luò)攝像頭信息、區(qū)域信息以及入侵信息進(jìn)行區(qū)域入侵和越線入侵證據(jù)的存儲(chǔ),具體的系統(tǒng)功能結(jié)構(gòu)如圖2所示。
系統(tǒng)部署:為實(shí)現(xiàn)系統(tǒng)線上實(shí)時(shí)應(yīng)用,采用Flask框架與Gunicorn代理進(jìn)行系統(tǒng)的線上部署。
為驗(yàn)證該算法,在光照突變場(chǎng)景、光照不足的夜間場(chǎng)景、背景中樹葉擺動(dòng)場(chǎng)景和行人檢測(cè)數(shù)據(jù)集(http://cvlab.epfl.ch)上進(jìn)行實(shí)驗(yàn)。為進(jìn)一步驗(yàn)證該算法,分別用混合高斯背景建模法、ViBe和三幀差法這三個(gè)經(jīng)典算法與該算法進(jìn)行對(duì)比。實(shí)驗(yàn)結(jié)果如圖3所示。其中圖(a)、(b)是光照充足的行人檢測(cè)數(shù)據(jù)集上的測(cè)試結(jié)果,圖(c)、(d)是光照發(fā)生突變的測(cè)試結(jié)果,圖(e)、(f)是光照不足的夜間測(cè)試結(jié)果,圖(g)、(h)是樹葉擺動(dòng)下的測(cè)試結(jié)果。本實(shí)驗(yàn)主要檢測(cè)對(duì)象是行人,針對(duì)不同監(jiān)控角度采用不同位置點(diǎn)的行人通過禁區(qū)或靠近警戒線,系統(tǒng)根據(jù)對(duì)應(yīng)算法選擇報(bào)警。為進(jìn)一步驗(yàn)證該算法的有效性,在光照充足的白天狀態(tài)與經(jīng)典算法中的混合高斯背景法、Vibe法與三幀差法進(jìn)行對(duì)比后的結(jié)果如表3所示。
圖2 系統(tǒng)結(jié)構(gòu)
圖3 入侵實(shí)驗(yàn)結(jié)果 表3 算法對(duì)比 %
算法準(zhǔn)確率虛警率漏警率混合高斯背景81.7321.9417.53ViBe82.8918.7315.34三幀差法84.5817.9513.86文中算法89.7315.8010.55
由表3可知,文中算法效果優(yōu)于混合高斯背景建模法、ViBe和三幀差法。這是因?yàn)榛旌细咚贡尘敖V豢紤]了單個(gè)像素在時(shí)間上的特性,當(dāng)動(dòng)態(tài)場(chǎng)景如樹葉擺動(dòng)使背景發(fā)生突變時(shí),會(huì)產(chǎn)生像素差值,從而導(dǎo)致將擺動(dòng)的樹葉判斷為前景目標(biāo);ViBe算法中光照突然變化時(shí)會(huì)引起背景像素值發(fā)生改變,算法誤將部分背景判斷為前景而造成虛警現(xiàn)象;采用三幀差法丟掉了相互獨(dú)立的目標(biāo)輪廓,造成目標(biāo)輪廓斷裂和空洞,導(dǎo)致前景目標(biāo)的提取不正確。
通過實(shí)驗(yàn)數(shù)據(jù)可以看出,文中算法檢測(cè)效率更高,既能在光照突變場(chǎng)景下實(shí)現(xiàn)對(duì)行人的檢測(cè)并判斷,也能在光照不足的夜間場(chǎng)景完成入侵檢測(cè),適用性廣泛。最主要的原因是文中算法用yolov3提取前景目標(biāo)而沒有涉及像素角度的背景建模,所以對(duì)光照突變和樹葉擺動(dòng)這種背景突變有強(qiáng)魯棒性。但該算法也存在一定的實(shí)驗(yàn)誤差,主要體現(xiàn)為以下兩種現(xiàn)象,一是行人與行人之間高度重合,造成行人識(shí)別不完整或漏識(shí)別,二是對(duì)距離監(jiān)控?cái)z像頭較遠(yuǎn)的小目標(biāo)行人會(huì)出現(xiàn)漏檢。其主要的原因是yolov3算法對(duì)遮擋度高的行人和小目標(biāo)行人的檢測(cè)準(zhǔn)確率低,將來的工作也將致力于這兩方面的改進(jìn)。
研究了一種區(qū)域入侵算法和越線入侵算法,該算法選擇檢測(cè)到的行人框三個(gè)不同點(diǎn)作為位置點(diǎn),擴(kuò)大了不同監(jiān)控角度適用性。通過行人多幀位置點(diǎn)取平均值作為入侵判斷依據(jù),結(jié)合當(dāng)前幀行人位置點(diǎn)進(jìn)行入侵狀態(tài)判斷,提高了判斷準(zhǔn)確率。實(shí)驗(yàn)結(jié)果表明,該算法相對(duì)傳統(tǒng)算法有明顯優(yōu)勢(shì),解決了傳統(tǒng)方法容易受到光照突變和相似物干擾引起誤報(bào)這一問題,魯棒性強(qiáng)、實(shí)時(shí)性高,系統(tǒng)結(jié)構(gòu)簡(jiǎn)單,可廣泛應(yīng)用于各種視頻監(jiān)控場(chǎng)景。