徐 望,朱宜炳,張常泉
(江西科技學(xué)院,江西 南昌 330098)
我國(guó)經(jīng)濟(jì)已由高速增長(zhǎng)階段轉(zhuǎn)向高質(zhì)量發(fā)展階段,人民群眾對(duì)生活質(zhì)量的要求也在不斷提升,尤其是對(duì)自身息息相關(guān)的居住環(huán)境要求越來(lái)越高。由于社區(qū)住戶(hù)之間的相互交流往往比較少,因此良好的社區(qū)安防質(zhì)量是人們選擇居住環(huán)境的一個(gè)重要因素。為了加強(qiáng)社區(qū)安全,高檔社區(qū)通常都會(huì)建立昂貴的專(zhuān)有視頻監(jiān)控網(wǎng)絡(luò)。近年來(lái),隨著計(jì)算機(jī)網(wǎng)絡(luò)及其應(yīng)用技術(shù)的不斷發(fā)展,基于廉價(jià)以太網(wǎng)技術(shù)的視頻監(jiān)控網(wǎng)絡(luò)在信息傳輸和數(shù)據(jù)處理能力等方面都有了長(zhǎng)足進(jìn)步,基于WLAN的無(wú)線視頻監(jiān)控技術(shù)也是步步跟進(jìn)、不斷發(fā)展,使得普通社區(qū)也能夠以較低的成本部署視頻監(jiān)控網(wǎng)絡(luò)來(lái)提升社區(qū)安全性[1]。雖然基于以太網(wǎng)的視頻監(jiān)控網(wǎng)絡(luò)已經(jīng)有了多種實(shí)現(xiàn)方案,但是有的方案可升級(jí)性和穩(wěn)定性較差,有的方案不夠智能,有的方案建設(shè)成本依然不便宜[2-3]。本文對(duì)基于樹(shù)莓派的視頻監(jiān)控網(wǎng)絡(luò)進(jìn)行了研究與探索,期望能為用戶(hù)提供一種新的選擇。
樹(shù)莓派是銀行卡般大小的單板計(jì)算機(jī),使用了ARM芯片的同時(shí)還配備了諸多外接接口,可以接入屏幕、攝像頭、鍵盤(pán)鼠標(biāo)等諸多外設(shè)。2019年發(fā)布的樹(shù)莓派4代搭載1.5Ghz的64位ARM A53處理器和最大8G內(nèi)存,內(nèi)置的GPU支持4K分辨率的H.265視頻流,另外還集成Wi-Fi、千兆有線網(wǎng)卡和低功耗藍(lán)牙,USB接口也擴(kuò)展到了4個(gè)。如此強(qiáng)大的單板機(jī)售價(jià)才35美元起步,使得很多“創(chuàng)客”想法可以利用樹(shù)莓派平臺(tái)來(lái)實(shí)現(xiàn)[4]。
運(yùn)動(dòng)目標(biāo)偵測(cè)(Motion detection technology)又稱(chēng)移動(dòng)檢測(cè),是指攝像頭對(duì)指定區(qū)域采集圖像后,利用CPU根據(jù)一定算法計(jì)算與比較判斷畫(huà)面是否發(fā)生了變化,然后和事先設(shè)定的閾值比較后做出一定的響應(yīng)。比如感知到有人時(shí)則立刻進(jìn)行視頻流傳輸,沒(méi)人時(shí)則停止視頻流傳輸以節(jié)省帶寬和存儲(chǔ)空間。比較常見(jiàn)的運(yùn)動(dòng)目標(biāo)檢測(cè)算法有減背景法、幀差法和光流法這幾種[5]。
Python是一種用途廣泛的多范式編程語(yǔ)言,可以直接在樹(shù)莓派上運(yùn)行并實(shí)現(xiàn)系統(tǒng)的業(yè)務(wù)邏輯,從而減少必須傳輸?shù)椒?wù)器端的數(shù)據(jù)量。它還可以直接與傳感器、執(zhí)行器和外設(shè)等進(jìn)行交互,其解釋性特點(diǎn)也可以讓更改后的代碼立刻生效,使得程序的編寫(xiě)和調(diào)試比其他語(yǔ)言快的多。Python的另一優(yōu)點(diǎn)就是擁有海量開(kāi)源庫(kù)的支持,包括IoT庫(kù),這些庫(kù)讓設(shè)備端的開(kāi)發(fā)工作碰到困難時(shí)總能夠找到對(duì)應(yīng)的解決方案[6]。
整個(gè)視頻監(jiān)控網(wǎng)絡(luò)的出口部分使用單核心路由設(shè)計(jì),使用光纖線路連接外網(wǎng),并在路由器上使用PAT地址轉(zhuǎn)換來(lái)實(shí)現(xiàn)內(nèi)外網(wǎng)的劃分。同時(shí)添加ACL訪問(wèn)控制列表以提升網(wǎng)絡(luò)的安全性,最后在核心交換機(jī)與核心路由器上運(yùn)行RIPv2協(xié)議來(lái)提供動(dòng)態(tài)路由。核心交換機(jī)需要高性能和高可靠設(shè)計(jì),故選擇支持?jǐn)U展的型號(hào)以便后期升級(jí)與改造,同時(shí)在核心交換機(jī)上激活DHCP,以便為樹(shù)莓派自動(dòng)分配IP地址和網(wǎng)關(guān),其架構(gòu)如圖1所示。
圖1 基于樹(shù)莓派的視頻監(jiān)控網(wǎng)絡(luò)結(jié)構(gòu)
R1(config)#interface FastEthernet0/0//進(jìn)入接口f0/0
R1(config-if)#ip address 202.106.1.1 255.255.255.0//為接口f0/0配置IP地址和子網(wǎng)掩碼
R1(config)#interface FastEthernet0/1//進(jìn)入接口f0/1
R1(config-if)#ip address 192.168.10.3 255.255.255.0//為接口f0/1配置IP地址和子網(wǎng)掩碼
//定義訪問(wèn)控制列表,以list 1為例
R1(config)#access-list 1 permit 192.168.1.0 0.0.0.255
//外接口地址的服用及IP地址的動(dòng)態(tài)轉(zhuǎn)換
R1(config)#ip nat inside source list 1 interface f0/0 overload
//開(kāi)啟端口f0/0和f0/1的PAT功能
R1(config-if)#int f0/0//進(jìn)入端口f0/0
R1(config-if)#ip nat outside//將端口f0/0劃分為外網(wǎng)
R1(config-if)#int f0/1//進(jìn)入端口f0/1
R1(config-if)#ip nat inside////將端口f0/1劃分為內(nèi)網(wǎng)
//添加指向外網(wǎng)的默認(rèn)路由
R1(config-if)#ip route 0.0.0.0 0.0.0.0 f0/0
//核心路由器RIP配置,以f0/0為例
R1(config)#router rip//激活RIP協(xié)議
R1(config-router)#version 2//使用RIP-V2版本的協(xié)議
R1(config-router)#no auto-summary//關(guān)閉路由協(xié)議的自動(dòng)匯總功能
//指定網(wǎng)段接口使能rip路由
R1(config-router)#network 202.106.1.0//以單個(gè)為例,余下的不在重復(fù)展示
SW(config)#vlan 10//創(chuàng)建VLAN 10
SW(config-vlan)#interface vlan 10//進(jìn)入VLAN 10之中
SW(config-if)#ip address 192.168.1.1 255.255.255.0//給VLAN 10配置IP地址
//將對(duì)應(yīng)接口劃入VLAN中,以接口f0/2為例
SW(config)#int f0/2//進(jìn)入端口f0/2
SW(config-if)#Switchport mode access//強(qiáng)制接口f0/2成為access接口
SW(config-if)#Switchport access vlan 10//將端口f0/2劃分到VLAN 10中
//DHCP協(xié)議配置,以地址池20為例
SW(config)#ip dhcp pool 20//創(chuàng)建dhcp地址池20
SW(dhcp-config)#network 192.168.2.0 255.255.255.0
SW(dhcp-config)#default-router 192.168.2.1//默認(rèn)路由設(shè)置為192.168.2.1
SW(dhcp-config)#ip dhcp excluded-add 192.168.2.1//將網(wǎng)關(guān)從地址池中排除
SW(config-if)#ip routing//啟用三層交換機(jī)的路由轉(zhuǎn)發(fā)功能
小區(qū)視頻監(jiān)控場(chǎng)景復(fù)雜多樣,為了降低網(wǎng)絡(luò)流量和視頻監(jiān)控服務(wù)器的存儲(chǔ)壓力,有必要在監(jiān)控端就對(duì)視頻流進(jìn)行預(yù)處理。所以在樹(shù)莓派監(jiān)控層中加入了運(yùn)動(dòng)目標(biāo)偵測(cè)技術(shù),檢測(cè)到運(yùn)動(dòng)物體則傳輸影像,未檢測(cè)到運(yùn)動(dòng)物體則停止傳輸。
本文采用的方案是基于Python語(yǔ)言實(shí)現(xiàn)的幀差法,該方案雖然簡(jiǎn)單但是很高效,核心編碼實(shí)現(xiàn)如下:
import cv2#導(dǎo)入opencv的包
import numpy as np#導(dǎo)入NumPy拓展,用來(lái)存儲(chǔ)和處理圖像矩陣
kernel=np.ones((5,5),np.uint8)#設(shè)置卷積核和圖像類(lèi)型
BG=None#首先設(shè)置背景為空
camera=cv2.VideoCapture(0)
#使用VideoCapture()函數(shù)定義攝像頭對(duì)象,其參數(shù)0表示第一個(gè)攝像頭
while True:#循環(huán)讀入攝像頭的幀
ret,frame=camera.read()#參數(shù)ret表示是否讀取到幀
#使用顏色空間轉(zhuǎn)換函數(shù)創(chuàng)建灰色框架
G_frame = cv2.cvtColor (frame, cv2.COLOR_BGR2GRAY)
G_frame=cv2.GaussianBlur(G_frame,(21,21),0)#利用高斯濾波對(duì)灰色框架降噪
Continue
diff=cv2.absdiff(BG,G_frame)#將背景圖和灰色框架圖進(jìn)行相減,返回差值
#把得到的幀差結(jié)果二值化
diff=cv2.threshold(diff,25,255,cv2.THRESH_BINARY)[1]#將diff圖像中灰度值小于25的點(diǎn)歸零,灰度值大于25的置255,THRESH_BINARY為閾值類(lèi)型
#將得到的幀差結(jié)果進(jìn)行膨脹處理
diff=cv2.dilate(diff,es,iterations=2)
#對(duì)得到的幀差結(jié)果進(jìn)行輪廓檢索
image,cnts,hierarcchy=
cv2.findContours (diff.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
#cv2.findContours()函數(shù)返回兩個(gè)值,一個(gè)是輪廓本身,另一個(gè)是每條輪廓對(duì)應(yīng)的屬性
for c in cnts:
if cv2.contourArea(c)<1500:
#將輪廓小于1500的區(qū)域舍去,這通常是噪點(diǎn)
為了進(jìn)一步驗(yàn)證方案的有效性,本次研究完成了基于樹(shù)莓派的視頻監(jiān)控終端設(shè)計(jì),監(jiān)控終端采用紅外攝像頭,在夜晚也能獲得清晰的影像。由于樹(shù)莓派4支持IEEE802.3af以太網(wǎng)供電標(biāo)準(zhǔn),一根網(wǎng)線即可完成供電和數(shù)據(jù)傳輸,因此大大簡(jiǎn)化了視頻監(jiān)控網(wǎng)絡(luò)的布線任務(wù)。完成的視頻監(jiān)控終端實(shí)物如圖2所示,在服務(wù)器端也可以對(duì)監(jiān)控終端進(jìn)行遠(yuǎn)程管理,如圖3所示。
圖2 視頻監(jiān)控終端
綜上所述,基于樹(shù)莓派的視頻監(jiān)控方案依托已經(jīng)存在的社區(qū)寬帶網(wǎng)絡(luò),把廉價(jià)單板機(jī)引入到社區(qū)的安防監(jiān)控工作中,同傳統(tǒng)監(jiān)控方案相比有著極大的成本優(yōu)勢(shì)。而且樹(shù)莓派在軟件和硬件上的定制性很高,在軟件上可以實(shí)現(xiàn)各種算法,比如人臉識(shí)別和邊緣計(jì)算等,在硬件上可以添加多種傳感器和執(zhí)行器模塊,為以后的升級(jí)留下空間。隨著我國(guó)5G網(wǎng)絡(luò)的大規(guī)模鋪設(shè),還可以利用5G模塊來(lái)擴(kuò)大視頻監(jiān)控網(wǎng)絡(luò)的規(guī)模,使得廣大農(nóng)村也能夠完成監(jiān)控覆蓋,從而提升社會(huì)的治安防控水平。