【安防知識(shí)網(wǎng)】硬件設(shè)計(jì)
由于本系統(tǒng)使用Blackfin 561 DSP進(jìn)行開發(fā),因而整個(gè)系統(tǒng)可采用一塊BF561 EZ-KIT Lite評(píng)估板、一臺(tái)CCD攝像機(jī)、一臺(tái)PC機(jī)和一個(gè)Blackfin USB-LAN EZ-Extender卡。
BF561 EZ-KIT Lite評(píng)估板主要用來實(shí)現(xiàn)智能處理算法以及對(duì)視頻流的壓縮編碼功能。因?yàn)樵贐F561 EZ-KIT Lite評(píng)估板上包括有:視頻處理芯片ADSP BF561;外部總線接口單元(EBIU)、SPORT接口、SPI接口、PPI接口、UART接口、JTAG仿真接口等。視頻A/D模塊采用ADV7183視頻解碼芯片。BF561 EZ-KIT Lite評(píng)估板結(jié)構(gòu)如圖1所示。
圖1 BF561 EZ-KIT Lite評(píng)估板結(jié)構(gòu)
Blackfin USB-LAN EZ-Extender卡
Blackfin USB-LAN EZ-Extender卡可連接USB設(shè)備,并通過網(wǎng)絡(luò)傳輸已壓縮的視頻數(shù)據(jù)到PC客戶端。因?yàn)樵贐lackfin USB-LAN EZ-Extender卡上包含有一個(gè)USB 2.0接口;一個(gè)10/100自適應(yīng)網(wǎng)口等。
CCD攝像機(jī)
這一臺(tái)CCD攝像機(jī),主要用來采集視頻。
PC客戶端
該P(yáng)C客戶端主要用來接收壓縮視頻,配置和控制終端控制系統(tǒng)工作方式,并且能夠存儲(chǔ)系統(tǒng)的輸出。
軟件設(shè)計(jì)
基于Blackfin 561 DSP的智能視頻監(jiān)控系統(tǒng)軟件部分,由上層PC監(jiān)控服務(wù)軟件和底層DSP監(jiān)控功能軟件兩部分組成。上層PC部分主要進(jìn)行監(jiān)控功能選擇和監(jiān)控結(jié)果的顯示,底層DSP部分主要進(jìn)行智能監(jiān)控和壓縮編碼的算法實(shí)現(xiàn)。視頻監(jiān)控系統(tǒng)通過使用UART和USB接口作為聯(lián)系PC和DSP的通道,以實(shí)現(xiàn)數(shù)據(jù)的交換。其中,使用異步串口(UART)作為監(jiān)控系統(tǒng)與PC端監(jiān)控軟件的通信接口,完成底層監(jiān)控程序和PC端監(jiān)控服務(wù)軟件之間的通信;使用USB控制器作為壓縮碼流的數(shù)據(jù)傳輸接口,完成壓縮碼流向PC端的輸送任務(wù)。 [nextpage]
智能視頻監(jiān)控系統(tǒng)同時(shí)使用Blackfin 561 DSP的兩個(gè)核進(jìn)行處理,通過PC服務(wù)軟件和DSP端監(jiān)控功能軟件協(xié)同工作,其主要工作流程如圖2所示。
圖2 智能視頻監(jiān)控系統(tǒng)的工作流程
DSP端接收到一幀圖像后,利用Blackfin 561 DSP的兩個(gè)核完成智能視頻監(jiān)控處理和視頻編碼壓縮處理。智能視頻監(jiān)控處理部分,利用Blackfin 561 DSP的核A進(jìn)行,它首先通過UART通信模塊獲得PC端監(jiān)控功能選擇模塊的當(dāng)前功能,以及這一功能的相應(yīng)參數(shù),然后根據(jù)相應(yīng)的功能調(diào)用監(jiān)控功能模塊中對(duì)應(yīng)的監(jiān)控函數(shù)進(jìn)行處理;最后再利用UART通信模塊將處理的結(jié)果傳送到PC端顯示。視頻編碼壓縮處理部分,使用Blackfin 561 DSP的核B進(jìn)行,利用由ADI公司提供的H.264編碼函數(shù)和USB驅(qū)動(dòng)函數(shù)實(shí)現(xiàn),這里就不贅述了。
PC端進(jìn)行不同監(jiān)控功能的切換或調(diào)整功能參數(shù),在下一幀輸入圖像中將進(jìn)行監(jiān)控功能的切換和參數(shù)的調(diào)整。
客戶端軟件
客戶端軟件是用戶實(shí)現(xiàn)DSP監(jiān)控操作的平臺(tái),主要由監(jiān)控軟件界面、監(jiān)控功能選擇模塊、驅(qū)動(dòng)函數(shù)模塊組成。
監(jiān)控軟件界面是監(jiān)控系統(tǒng)和用戶進(jìn)行信息交互的平臺(tái),它整合了各個(gè)監(jiān)控功能模塊,用戶通過它完成各個(gè)監(jiān)控功能模塊的調(diào)用、參數(shù)的選擇、結(jié)果的顯示等。
PC監(jiān)控功能選擇模塊完成對(duì)底層DSP監(jiān)控功能的調(diào)用,從而實(shí)現(xiàn)用戶需要的相應(yīng)的監(jiān)控功能。
驅(qū)動(dòng)函數(shù)模塊包括UART驅(qū)動(dòng)和USB驅(qū)動(dòng)。UART驅(qū)動(dòng)的作用是實(shí)現(xiàn)上層PC的監(jiān)控服務(wù)軟件和底層DSP的監(jiān)控功能程序之間的UART接口通信;USB驅(qū)動(dòng)的作用是通過USB接口接收底層DSP發(fā)送的壓縮碼流。
DSP端監(jiān)控功能軟件
DSP監(jiān)控功能軟件是整個(gè)監(jiān)控功能實(shí)現(xiàn)的核心,由監(jiān)控功能模塊、H.264視頻壓縮模塊和UART通信模塊組成。
DSP監(jiān)控功能模塊經(jīng)PC端監(jiān)控功能選擇模塊進(jìn)行調(diào)用,直接負(fù)責(zé)完成相應(yīng)的監(jiān)控功能,并將結(jié)果傳輸?shù)絇C端。
H.264視頻壓縮模塊負(fù)責(zé)將輸入視頻圖像進(jìn)行H.264壓縮,并使用USB接口將壓縮后的視頻圖像傳輸?shù)絇C端。
UART通信模塊負(fù)責(zé)利用協(xié)議實(shí)現(xiàn)和PC端的通信。 [nextpage]
1、DSP監(jiān)控功能模塊
本文所設(shè)計(jì)的智能視頻監(jiān)控系統(tǒng)需要實(shí)現(xiàn)8個(gè)不同的智能視頻監(jiān)控功能。根據(jù)監(jiān)控功能的不同性質(zhì)和處理手段,主要分為:物體檢測(cè)與數(shù)量統(tǒng)計(jì)、自動(dòng)跟蹤、入侵和遺留物體檢測(cè)、攝像機(jī)模糊、遮擋及非法移動(dòng)等4類不同功能。本模塊通過從PC端功能選擇模塊獲取監(jiān)控信息,選擇單一視頻監(jiān)控功能進(jìn)行處理。監(jiān)控功能模塊流程如圖3所示。
圖3 監(jiān)控功能模塊流程
監(jiān)控功能模塊中大部分功能首先都需要進(jìn)行相同的前期處理過程-運(yùn)動(dòng)對(duì)象的提取。本系統(tǒng)運(yùn)動(dòng)對(duì)象的提取主要包括背景建模和連通域標(biāo)記兩個(gè)部分,其主要流程如圖4所示。
圖4 運(yùn)動(dòng)對(duì)象提取
· 物體檢測(cè):物體檢測(cè)需要根據(jù)運(yùn)動(dòng)檢測(cè)的結(jié)果判斷當(dāng)前運(yùn)動(dòng)物體所屬的類別,如人體、四足動(dòng)物、四輪機(jī)動(dòng)車、非機(jī)動(dòng)車等。其使用高斯背景模型進(jìn)行運(yùn)動(dòng)檢測(cè),提取目標(biāo)的形狀特征,并對(duì)它們進(jìn)行分類,最后輸出運(yùn)動(dòng)物體的位置、類別;
· 數(shù)量統(tǒng)計(jì):數(shù)量統(tǒng)計(jì)需要在物體檢測(cè)的基礎(chǔ)上,統(tǒng)計(jì)各類物體或一類物體的數(shù)目,在統(tǒng)計(jì)過程中,還需要區(qū)分個(gè)體和群體。其在分類的基礎(chǔ)上,使用計(jì)數(shù)器統(tǒng)計(jì)當(dāng)前幀中各種目標(biāo)的數(shù)量。最后輸出各類物體數(shù)目,如個(gè)體數(shù)目、群體數(shù)目;
· 入侵檢測(cè):入侵檢測(cè)需要判斷場(chǎng)景中運(yùn)動(dòng)物體是否進(jìn)入某一固定區(qū)域。其在運(yùn)動(dòng)檢測(cè)的基礎(chǔ)上,判斷目標(biāo)的位置與標(biāo)定的”禁入”位置的相對(duì)關(guān)系,以實(shí)現(xiàn)入侵檢測(cè),最后輸出入侵物體位置和類別;
· 遺留物體檢測(cè):遺留物體檢測(cè)主要是檢測(cè)固定區(qū)域內(nèi)箱包類物體的非法滯留問題。具體說,主要是檢測(cè)行人將箱包等遺留到場(chǎng)景中的情況(重點(diǎn)是為了排除爆炸物和危禁品)。當(dāng)然,也包括將場(chǎng)景中原有物體拿走的情況。通過判斷物體在監(jiān)控場(chǎng)景中出現(xiàn)的時(shí)間的長(zhǎng)短,來判斷是否為遺留物體,輸出遺留物體的位置及大小;
· 自動(dòng)跟蹤:自動(dòng)跟蹤實(shí)現(xiàn)對(duì)于運(yùn)動(dòng)對(duì)象的連續(xù)檢測(cè),通過對(duì)運(yùn)動(dòng)物體的跟蹤,獲得其位置、速度、運(yùn)動(dòng)軌跡等運(yùn)動(dòng)信息。使用卡爾曼濾波的方法進(jìn)行目標(biāo)跟蹤,輸出運(yùn)動(dòng)物體的位置及中心坐標(biāo)等;
· 攝像機(jī)模糊、遮擋及非法移動(dòng)檢測(cè):攝像機(jī)模糊、遮擋及非法移動(dòng)檢測(cè)是需要發(fā)現(xiàn)影響監(jiān)控?cái)z像機(jī)正常工作或者威脅監(jiān)控?cái)z像機(jī)自身安全的活動(dòng)。使用DCT變換,統(tǒng)計(jì)全局的圖像變化信息,判斷攝像機(jī)是否模糊;利用圖像灰度直方圖變化信息,判斷攝像機(jī)是否被遮擋;使用模板匹配的方法,判斷攝像機(jī)是否非法移動(dòng),輸出模糊、遮擋及非法移動(dòng)情況信息和程度。 [nextpage]
系統(tǒng)優(yōu)化
1、三緩沖結(jié)構(gòu)
設(shè)置三緩沖組成緩沖區(qū)隊(duì)列。在實(shí)際處理過程中,使用其中兩個(gè)緩沖區(qū)進(jìn)行數(shù)據(jù)接收,另外一個(gè)緩沖區(qū)進(jìn)行圖像處理等(具體的三緩沖區(qū)結(jié)構(gòu)如圖5所示)。
圖5 三緩沖結(jié)構(gòu)
利用回調(diào)函數(shù)對(duì)緩沖區(qū)進(jìn)行管理,每接收完一整幅圖像后產(chǎn)生一次回調(diào)。使用三個(gè)變量維護(hù)當(dāng)前緩沖區(qū)狀態(tài),F(xiàn)rame Buffer1和Frame Buffer2用于維護(hù)在循環(huán)中接收的兩個(gè)緩沖區(qū),F(xiàn)rame Counter為當(dāng)前最新接收到的緩沖區(qū)。每次接收數(shù)據(jù)的存儲(chǔ)位置根據(jù)Frame Buffer1和Frame Buffer2的值決定。
在主循環(huán)過程中,使用一個(gè)變量Active Index維護(hù)當(dāng)前處理中的緩沖區(qū)。每當(dāng)開始處理新的一幀時(shí),交換Frame Counter和Active Index的值,并同時(shí)更新Frame Buffer1和Frame Buffer2。實(shí)現(xiàn)將上一幀處理結(jié)束的緩沖區(qū)加到輸入緩沖中,而將最新一幀緩沖并進(jìn)行處理的目的。
2、算法優(yōu)化
系統(tǒng)對(duì)大部分的功能實(shí)現(xiàn)算法進(jìn)行了優(yōu)化。在物體檢測(cè)、數(shù)量統(tǒng)計(jì)、自動(dòng)跟蹤、入侵檢測(cè)、遺留物體檢測(cè)等算法中都需要使用背景模型。因此,系統(tǒng)重點(diǎn)對(duì)背景建模算法進(jìn)行了優(yōu)化。
背景建模主要包括兩個(gè)部分:一是用當(dāng)前圖像和背景模型的均值和方差矩陣進(jìn)行比較,得到前景圖像和更新后的背景模型;二是對(duì)前景圖像進(jìn)行膨脹、腐蝕的形態(tài)學(xué)運(yùn)算。
· 背景模型更新:模型更新過程涉及的數(shù)據(jù)有:當(dāng)前圖像幀緩沖(8位)、當(dāng)前前景幀圖像(8位)、背景均值模型(32位)、背景方差模型(32位)、前景駐留時(shí)間矩陣(16位)。為了提高運(yùn)算速度,需要首先將內(nèi)存搬運(yùn)到L1中再進(jìn)行處理。其步驟如下:
第一步:在L1內(nèi)存中分配行緩存區(qū)用于計(jì)算,采用PINGPONG結(jié)構(gòu)設(shè)計(jì)雙緩沖區(qū)。
第二步:使用兩個(gè)DMA通道用于輸入和輸出。首先使用異步DMA方式輸入一行輸入圖像、均值和方差矩陣及駐留時(shí)間矩陣,交替使用current和bck指針分別指向輸入和處理緩沖區(qū),并不斷更新實(shí)現(xiàn)雙緩沖結(jié)構(gòu)。這里要求從第二行輸入起使用同步DMA方式進(jìn)行傳輸,因此使用了回調(diào)函數(shù)Line In Caqll Back和input_index變量,實(shí)現(xiàn)依次輸入4個(gè)緩沖區(qū)。
由于這里要求將輸入并計(jì)算后的新均值、方差和駐留時(shí)間行矩陣傳回SDRAM中,因此輸出DMA采用異步方式,等待完成后才會(huì)開始下一次的DMA輸入。這樣,在一定程度上,可避免同時(shí)向一個(gè)SDRAM區(qū)讀/寫內(nèi)存。
· 膨脹、腐蝕算法:這里同樣也使用行處理方式進(jìn)行膨脹、腐蝕兩步運(yùn)算。根據(jù)膨脹、腐蝕算法的特點(diǎn),需要輸入3行緩沖,然后進(jìn)行一行的處理。因此,需設(shè)計(jì)使用6行輸入的前景緩沖和兩行膨脹、腐蝕處理結(jié)果作為3行輸入和1行輸出雙緩沖。由于輸入和輸出的緩沖區(qū)沒有沖突問題,因而輸入和輸出均采用同步模式,并注意輸入緩沖增量設(shè)為一行。