基于ARM平臺的遠程視頻監(jiān)控系統(tǒng)的研究
摘要 介紹了一種基于S3C2440[1]硬件平臺和嵌入式Linux操作系統(tǒng)[2]的遠程視頻監(jiān)控系統(tǒng)的總體設(shè)計方案,詳細闡述了系統(tǒng)的總體結(jié)構(gòu)和各部分功能特點,對系統(tǒng)視頻采集,MPEG-4壓縮的實現(xiàn)進行了詳細分析,并給出關(guān)鍵功能的軟件實現(xiàn)方法,與傳統(tǒng)的視頻監(jiān)控系統(tǒng)比較,該方案具有體積小,成本低,穩(wěn)定可靠等優(yōu)點。
關(guān)鍵詞 視頻采集;MPEG-4編碼;嵌入式Linux;驅(qū)動程序
引言
視頻監(jiān)控系統(tǒng)是安全防范系統(tǒng)的組成部分,它是一種防范能力較強的綜合系統(tǒng)。現(xiàn)今監(jiān)控系統(tǒng)已經(jīng)步入了數(shù)字化、網(wǎng)絡(luò)化時代,即視頻從前端圖像采集設(shè)備輸出時即為數(shù)字信號,并以網(wǎng)絡(luò)為傳輸媒介,基于TCP/IP協(xié)議,采用流媒體技術(shù)實現(xiàn)視頻在網(wǎng)上的多路復(fù)用傳輸。使用嵌入式系統(tǒng)實現(xiàn)遠程視頻監(jiān)控技術(shù),符合網(wǎng)絡(luò)化數(shù)字化的特點,對公安、安防等行業(yè)有著重要的現(xiàn)實意義。
視頻監(jiān)控系統(tǒng)一般采用基于PC機平臺+視頻采集卡的形式,該方案系統(tǒng)體積大、成本高,在遠距離、多點系統(tǒng)中實現(xiàn)困難。本設(shè)計采用三星公司的S3C2440[1]硬件平臺(CPU芯片含有視頻采集接口),軟件平臺是Linux-2.4.20操作系統(tǒng)內(nèi)核,由于Linux操作系統(tǒng)的開放特性、優(yōu)良的網(wǎng)絡(luò)支持性能、模塊化的結(jié)構(gòu),較好滿足系統(tǒng)的需要。
1.系統(tǒng)硬件設(shè)計
系統(tǒng)主要由視頻采集和傳輸部分組成。有嵌入式處理器、CMOS圖像傳感器、存儲器、以太網(wǎng)接口、串口、及電源管理電路。嵌入式處理器是韓國三星公司的基于ARM920T內(nèi)核的16/32 位RISC嵌入式微處理器(型號:S3C2440),主要面向高性價比、低功耗的應(yīng)用。為了處理圖像數(shù)據(jù),CPU的工作頻率可達400MHz。S3C2440的資源包括LCD控制器,SDRAM控制器,攝像頭接口,3路串行接口,IIC BUS接口,USB接口,觸摸屏接口。在處理器豐富資源的基礎(chǔ)上,還進行了相關(guān)的擴展,配置了32M Flash ROM和256MB SDRAM。在嵌入式處理器的控制下,CMOS圖像傳感器(片上)采集到的數(shù)據(jù)經(jīng)幀同步信號觸發(fā)產(chǎn)生中斷后被拷貝到SDRAM,經(jīng)過MPEG-4編碼后由網(wǎng)口發(fā)送到遠端監(jiān)控中心顯示,系統(tǒng)框圖如圖一所示。
1.1視頻采集模塊的設(shè)計
圖像傳感器接口電路是硬件設(shè)計的關(guān)鍵部分,如何有效的采集數(shù)據(jù)也是系統(tǒng)的關(guān)鍵問題。視頻采集模塊采用OV9640圖像傳感器[3],它是一款高集成度、高分辨率(1280*960)的CMOS傳感芯片,內(nèi)部集成了時序電路,模擬信號處理電路,數(shù)字信號處理電路。該芯片支持RGB(4:2:2),YUV(4:2:2),YCrCb(4:2:2)數(shù)據(jù)輸出格式,內(nèi)置138個設(shè)備控制寄存器,地址分
別從0x00到0x8A,通過SCCB(Serial Camera Control Bus)接口可以方便的設(shè)置傳感器視窗大小、增益、白平衡校正、曝光控制、飽和度、色調(diào)等。由于S3C2440芯片有一個專用的視頻接口,所以CPU可以直接和CMOS圖像傳感器連接。圖像傳感器輸出的數(shù)據(jù)及控制信號包括像素時鐘(PCLK)、水平參考(HREF)、幀同步(VSYNC)和數(shù)據(jù)總線(D0-D7),分別和主處理器的相應(yīng)信號相連。PCLK與HREF在處理器內(nèi)部相與后產(chǎn)生有效的像素時鐘信號,在有效時鐘信號的上升沿或下降沿將數(shù)據(jù)鎖定[4]。模塊和S3C2440接口電路如圖二所示。在OV9640圖像傳感器中,如果輸出YUV格式[5],要用到數(shù)據(jù)線的Y2-Y9;如果輸出RGB格式,則要用數(shù)據(jù)線Y0-Y9。本設(shè)計中采用了YUV格式。
圖二 視頻采集模塊接口
1.2網(wǎng)絡(luò)接口的設(shè)計
在S3C2440芯片上無網(wǎng)絡(luò)接口,為了實現(xiàn)在系統(tǒng)調(diào)試時,下載操作系統(tǒng)內(nèi)核、文件系統(tǒng)映像,及在系統(tǒng)運行中實現(xiàn)視頻數(shù)據(jù)的網(wǎng)絡(luò)傳輸?shù)裙δ埽栽谙到y(tǒng)中擴展網(wǎng)絡(luò)接口模塊(DM90000)。該芯片為10M/100M以太網(wǎng)物理層芯片,具有通用的處理器接口。模塊與2440接口如圖三所示:其中CMD為命令類型引腳,在高電平時為數(shù)據(jù)周期,在低電平時為地址周期??赏ㄟ^CMD與數(shù)據(jù)總線訪問內(nèi)部54個控制及狀態(tài)寄存器。當AS9-AS8設(shè)置成高,SA7設(shè)置成低,SA6-4與TXD2-0匹配時,DM90000由AEN引腳唯一控制是否被選中。此外,DM9000工作在正常模式,TEST1-4依次為1、1、0、0。為了保證DM90000收發(fā)正常,還要加上25M的晶振。
2.系統(tǒng)的軟件設(shè)計
軟件平臺由三部分組成:系統(tǒng)引導(dǎo)加載程序、嵌入式Linux內(nèi)核、文件系統(tǒng)及應(yīng)用程序。本設(shè)計中通過向ARM平臺移植u-boot-1.1.1實現(xiàn)系統(tǒng)的引導(dǎo)加載,uboot除了正常的引導(dǎo)嵌入式Linux外,還可以方便的切換到下載更新模式,利用TFTP功能對內(nèi)核映像及文件系統(tǒng)實時更新。嵌入式操作系統(tǒng)采用Linux2.4.20,開發(fā)模式采用最為普遍的宿主開發(fā)模式,即在宿主機上編譯內(nèi)核及應(yīng)用程序然后通過網(wǎng)口下載到目標平臺上運行,通過打印終端打印調(diào)試信息。文件系統(tǒng)是嵌入式系統(tǒng)軟件平臺占用存儲量最大的一部分,它存儲了系統(tǒng)配置文件、系統(tǒng)程序和系統(tǒng)外設(shè)驅(qū)動程序。嵌入式Linux內(nèi)核移植[2]好后,主要工作就變成在操作系統(tǒng)下編寫驅(qū)動程序。在這里我們著重介紹OV9640的驅(qū)動程序的開發(fā)及MPEG-4編碼的實現(xiàn)。
圖三:以太網(wǎng)模塊接口
2.1 OV9640驅(qū)動的開發(fā)[6]
在Linux下編寫OV9640 CMOS圖像傳感器驅(qū)動,首先要初使化OV9640。通過SCCB總線設(shè)置OV9640的工作模式,各種參數(shù),分配連續(xù)內(nèi)存空間,容量與采集圖像的點陣數(shù)相匹配。然后用request_irq()函數(shù)為OV9640登記中斷,其中斷號為06。當S3C2440捕捉到VSYNC信號時觸發(fā)中斷,把一幀圖像數(shù)據(jù)拷貝到用戶空間。如此反復(fù),視頻數(shù)據(jù)源源不斷的被采集到SDRAM。軟件流程如圖四所示。
圖四 讀取OV9640數(shù)據(jù)流程
我們知道,用戶進程是通過設(shè)備文件同硬件打交道,對設(shè)備文件的操作就是一些系統(tǒng)調(diào)用。要想把系統(tǒng)調(diào)用和設(shè)備驅(qū)動程序關(guān)聯(lián)起來,必須用到一個非常關(guān)鍵的數(shù)據(jù)結(jié)構(gòu):struct file_operations{ }。因此編寫設(shè)備驅(qū)動的主要工作就是編寫數(shù)據(jù)結(jié)構(gòu)中定義的子函數(shù),并填充file_operations的各個域。
攝像頭file_operations的數(shù)據(jù)結(jié)構(gòu)如下
static struct file_operations cam_fops =
{ owner : THIS_MODULE,
open : cam_open,
read : cam_read,
ioctl : cam_ioctl,
release : cam_release,
};
編寫好成員函數(shù)后,接下來編寫module_init()和module_exit()。module_init()是驅(qū)動程序的入口,當用insmod命令加載模塊時自動運行。此函數(shù)中包括①初使化CMOS圖像傳感器②分配連續(xù)內(nèi)存地址空間③注冊設(shè)備文件④登記中斷。module_exit()函數(shù)在rmmod卸載模塊時調(diào)用。函數(shù)功能包括①釋放內(nèi)存空間②釋放中斷③注銷設(shè)備文件。
至此,驅(qū)動模塊編寫好了,編譯加載后,我們就可以像操作普通文件一樣對攝像頭進行讀取數(shù)據(jù)了
2.2基于MPEG4的數(shù)據(jù)壓縮算法的實現(xiàn)
2.2.1 MPEG-4[7]壓縮標準
數(shù)字視頻流的數(shù)據(jù)量是巨大的,以QVGA圖像,每秒20幀為例,每秒鐘的數(shù)據(jù)量為2.92M,假設(shè)系統(tǒng)有十路傳感器,如果不經(jīng)過壓縮,實現(xiàn)數(shù)據(jù)在網(wǎng)上的多路復(fù)用傳輸是相當困難的,為了系統(tǒng)可靠的運行,本設(shè)計采用高壓縮率的MPEG-4視頻壓縮編碼。MPEG-4最顯著的特點是基于內(nèi)容的編碼方法,即把一段視頻序列看成有不同的視頻對象VO組成,編碼器根據(jù)實際情況對各個視頻對象面VOP進行編碼,其最大壓縮率可達到100:1。
2.2.2 MPEG-4的實現(xiàn)與優(yōu)化
XVID是一種開源的MPEG-4視頻編碼軟件,是目前所有開源視頻編碼軟件中比較優(yōu)秀的一個,它嚴格按照GPL發(fā)布,圖像質(zhì)量可以達到DVD的效果,而數(shù)據(jù)量只有DVD的1/8。XVID最新的版本為xvidcore1.1.0,這里我們選擇xvidcore1.1.0作為進一步優(yōu)化的基礎(chǔ)。從 www.xvidcore.org 下載xvidcore1.1.0源碼,修改MAKEFILE文件,把XVID移植到ARM平臺。具體的實現(xiàn)方法可參照example下的例子,結(jié)合項目的實際,寫出自己的應(yīng)用程序。然后進入xvidcore-1.1.0/build/generic目錄,執(zhí)行./configure –disable –assembly命令,手工配置platform.inc文件,修改CC=/opt/host/armv41/bin/arm4l-unknown-linux-gcc,再執(zhí)行make clean,make。最后把生成的庫拷貝到example目錄下,修改example下的Makefile文件,編譯下載到目標板上運行即可。
經(jīng)過測試,XVID的壓縮比是很高的,可達到20:1,最重要的是編碼速度快,壓縮解壓后的圖像質(zhì)量稍有降低,完全可以達到實用的要求。
3.結(jié)束語
利用嵌入式系統(tǒng)實現(xiàn)遠程視頻監(jiān)控符合數(shù)字化、網(wǎng)絡(luò)化的發(fā)展趨勢,具有布線集中,設(shè)備簡單,體積小,成本低等特點,與傳統(tǒng)的視頻監(jiān)控方案比較有不可比擬的優(yōu)越性。前端采集部分采用S3C2440微處理器,利用其自身提供的視頻接口,圖像采集的速度完全可以達到動態(tài)顯示的要求(在400M的時鐘頻率下,QVGA圖像可以達到20幀/秒的顯示速率)。本文作者的創(chuàng)新點:采用圖像壓縮編碼和網(wǎng)絡(luò)技術(shù),可實現(xiàn)視頻數(shù)據(jù)的多路復(fù)用傳輸。監(jiān)控端采用基于MPEG-4的視頻對象分割方法,利用相鄰幀視頻對象的差異,實現(xiàn)智能報警的功能。該系統(tǒng)性價比較高,使用方便,值得推廣使用。
4.參考文獻
[1]S3C2440X RISC MICROPROCESSOR date sheet.samsung electronics.2003
[2]張積紅,吳強.嵌入式linux研究及其在ARM上的移植.電腦知識與技術(shù),2005,(8)
[3]OV9640 version1.0.Omnivision Technologies.2003
[4]王曉明,一種MPEG-4視頻采集與傳輸系統(tǒng)的研究與實現(xiàn),計算機測量與控制,2005,(8)
[5]陳福,馬莉等.基于嵌入式系統(tǒng)的視頻圖像捕獲研究與實現(xiàn).微計算機信息,2005,(12)
[6]李駒光,鄭耿.基于嵌入式linux的設(shè)備驅(qū)動程序開發(fā)(二).電腦編程技巧與維護,2005,(12)
[7]ISO/IEC JTC1/SC29/WG11 Document N4668,Overview of the MPEG-4 Standard.March 2002