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