基于ARM9的嵌入式無線視頻監(jiān)控系統(tǒng)
2 視頻采集模塊設(shè)計(jì)與實(shí)現(xiàn)
視頻捕獲模塊是整個(gè)視頻采集終端的核心。它通過嵌入式Linux操作系統(tǒng)調(diào)度V4L (video4linux)和影像設(shè)備驅(qū)動(dòng)程序來完成視頻捕獲。V4L 是Linux影像系統(tǒng)與嵌入式影像的基礎(chǔ),是Linux kernel里支持影像設(shè)備的一組APIs,配合適當(dāng)?shù)囊曨l采集卡與視頻采集卡驅(qū)動(dòng)程序,V4L可以實(shí)現(xiàn)影像采集、AM/FM無線廣播、影像CODEC、頻道切換等功能。目前,V4L 主要應(yīng)用在影像串流系統(tǒng)與嵌入式影像系統(tǒng)里,其應(yīng)用范圍相當(dāng)廣泛,比如:遠(yuǎn)程教學(xué)、遠(yuǎn)程醫(yī)療、視頻會(huì)議、視頻監(jiān)控、可視電話等。V4L為2層式架構(gòu),最上層為V4L驅(qū)動(dòng)程序,最下層則是影像設(shè)備驅(qū)動(dòng)程序。
在Linux操作系統(tǒng)中,外部設(shè)備都作為設(shè)備文件來管理,因此,對(duì)外部設(shè)備的操作就轉(zhuǎn)變成對(duì)設(shè)備文件的操作。視頻設(shè)備文件位于/dev/目錄下,一般情況下為video0。當(dāng)攝像頭通過USB接口連接到視頻采集終端后,在程序中調(diào)用V4L APIs對(duì)設(shè)備文件video0的讀操作即可實(shí)現(xiàn)攝像頭視頻數(shù)據(jù)采集。其主要過程如下:
1) 打開設(shè)備文件: int v4l_open(char *dev, v4l_device *vd){}打開影像源的設(shè)備文件;
2) 初始化picture: int v4l_get_picture(v4l_device *vd){} 獲取輸入的影像信息;
3) 初始化channel:int v4l_get_channels(v4l_device *vd){} 獲取每個(gè)channel的信息;
4) 對(duì)channel設(shè)置norm:int v4l_set_norm(v4l_device *vd, int norm){} 對(duì)所有的channel設(shè)置norm;
5) 設(shè)備地址映射:v4l_mmap_init(v4l_device *vd){} 返回存放圖像數(shù)據(jù)的地址;
6) 初始化mmap緩沖區(qū): int v4l_grab_init(v4l_device *vd, int width, int height){};
7) 視頻捕獲同步: int v4l_grab_sync(v4l_device *vd){};
8) 視頻捕獲: int device_grab_frame(){}。
通過以上操作,即可將攝像頭視頻數(shù)據(jù)采集到內(nèi)存。采集到內(nèi)存的視頻數(shù)據(jù)既可采用文件的形式保存,也可將其壓縮后封裝進(jìn)數(shù)據(jù)包,通過網(wǎng)絡(luò)傳輸?shù)綌?shù)據(jù)處理中心。本設(shè)計(jì)采用后一種處理方法,即:先將采集的視頻數(shù)據(jù)進(jìn)行JPEG壓縮,再將其封裝進(jìn)數(shù)據(jù)包傳輸?shù)揭曨l應(yīng)用服務(wù)端處理。
3 視頻壓縮模塊設(shè)計(jì)
由于視頻采集模塊采集的視頻數(shù)據(jù)信息量較大,如果直接通過網(wǎng)絡(luò)傳輸,則會(huì)增加數(shù)據(jù)傳輸系統(tǒng)的負(fù)擔(dān),大大降低數(shù)據(jù)傳輸效率。為此,本設(shè)計(jì)采用JPEG —Joint Photographic Experts Group壓縮編碼算法對(duì)視頻數(shù)據(jù)進(jìn)行壓縮。JPEG是一個(gè)適用于彩色、單色多灰度、連續(xù)色調(diào)靜止數(shù)字圖像的壓縮標(biāo)準(zhǔn),是靜態(tài)數(shù)字圖像壓縮的國(guó)際標(biāo)準(zhǔn),不僅適用于靜止圖像壓縮,而且適用于電視圖像序列的幀內(nèi)圖像壓縮。由于JPEG壓縮采用的是全彩影像標(biāo)準(zhǔn),其主要處理過程包括:色彩模型轉(zhuǎn)換、離散余弦— DCT變換、重排DCT結(jié)果、量化、編碼等。
在本設(shè)計(jì)中,采用最基本的JPEG算法,其主要步驟為:首先,通過離散余弦變換(DCT)去除數(shù)據(jù)冗余;其次,使用量化表對(duì)DCT系數(shù)進(jìn)行量化;最后,采用Huaffman可變字長(zhǎng)編碼對(duì)量化后的DCT系數(shù)進(jìn)行編碼,使其熵達(dá)到最小。通過實(shí)驗(yàn),數(shù)據(jù)壓縮效果良好,圖像壓縮率可以達(dá)到70%左右。
4 nRF2401無線發(fā)射、接收模塊設(shè)計(jì)
本設(shè)計(jì)采用nRF2401 2.4GHz無線收發(fā)芯片完成視頻數(shù)據(jù)的無線傳輸。nRF2410是一款單片射頻收發(fā)芯片,工作在2.4GHz~2.5GHz ISM頻段,該芯片內(nèi)置頻率合成器、功率放大器、晶振和調(diào)制解調(diào)器等功能模塊,其輸出功率和通信頻道等參數(shù)都可以通過程序進(jìn)行配置。內(nèi)置的 DuoCeiver接收器使nRF2401可以使用同一天線同時(shí)接收兩個(gè)不同頻道的數(shù)據(jù),這為視頻數(shù)據(jù)的傳輸提供了有利條件。
nRF2401在發(fā)送和接收數(shù)據(jù)時(shí)主要完成以下操作:
1)初始化發(fā)送端和接收端:主要完成I/O端口的配置,使能發(fā)送器/接收器,啟動(dòng)計(jì)數(shù)器等;
2)發(fā)送器/接收器配置:先打開配置方式,再配置發(fā)送/接收器,最后使能收發(fā)功能;
3)接收包/接收包處理:
4)發(fā)送/接收數(shù)據(jù):完成數(shù)據(jù)包的發(fā)送/接收操作;
5)讀取A/D轉(zhuǎn)換結(jié)果:等待AD轉(zhuǎn)換完成后,讀取A/D轉(zhuǎn)換結(jié)果數(shù)據(jù),并開始接受新的轉(zhuǎn)換;
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論