李述良,陳 超,謝兆鴻
(武漢工業(yè)學(xué)院電氣信息工程系,湖北武漢 430023)
隨著通信和計(jì)算機(jī)技術(shù)的飛速發(fā)展,人們已經(jīng)不再滿足于通過有線途徑傳輸圖像數(shù)據(jù),更期望能在無線的條件下實(shí)現(xiàn)圖像傳輸。如在城市交通監(jiān)控、安全生產(chǎn)監(jiān)控、森林安防監(jiān)控等場(chǎng)所,無線視頻監(jiān)控顯得很有必要。傳統(tǒng)的視頻監(jiān)控系統(tǒng)主要是通過大量布線來采集視頻信號(hào),既需要大量布線,又不易實(shí)現(xiàn)遠(yuǎn)距離和靈活的監(jiān)控。本文提出了一種基于嵌入式的低功耗大規(guī)模模塊化集成電路的無線視頻監(jiān)控系統(tǒng),解決了傳統(tǒng)視頻監(jiān)控系統(tǒng)成本高、體積大、傳輸距離有限、功耗大、安裝不方便等問題。該系統(tǒng)的實(shí)現(xiàn)在安防、遠(yuǎn)程教育、視頻會(huì)議、醫(yī)療系統(tǒng)等無線視頻領(lǐng)域具有廣闊的應(yīng)用前景。
無線視頻傳輸系統(tǒng)是具有無線發(fā)射和接收?qǐng)D像的收發(fā)機(jī),它以自由空間為傳輸介質(zhì)、通過無線傳輸?shù)姆绞綄?shí)現(xiàn)視頻通信[1]。典型的無線視頻傳輸系統(tǒng)總體構(gòu)成如圖1所示。其中,發(fā)射機(jī)為系統(tǒng)發(fā)端,接收機(jī)為系統(tǒng)收端,在發(fā)端和收端之間建立正確的無線通信連接,即實(shí)現(xiàn)了整個(gè)視頻傳輸系統(tǒng)。
無線視頻傳輸發(fā)射端的主要功能是:視頻圖象的采集、壓縮編碼、分段送入 TCP/IP協(xié)議棧處理,最后發(fā)送至無線網(wǎng)卡;接收端的主要功能是:數(shù)據(jù)接收,TCP/IP協(xié)議棧處理,數(shù)據(jù)段拼接,最后解碼顯示圖象,即完成了無線視頻傳輸系統(tǒng)的構(gòu)建。
圖1 典型的無線傳輸系統(tǒng)總體構(gòu)成
由無線視頻傳輸系統(tǒng)的總體框圖及其各模塊的功能,可以得出無線視頻監(jiān)控發(fā)射端應(yīng)該包括處理控制模塊、存儲(chǔ)模塊、調(diào)試升級(jí)接口、云臺(tái)控制模塊、無線通信模塊、圖像數(shù)據(jù)采集模塊以及電源時(shí)鐘等模塊組成。系統(tǒng)無線視頻發(fā)射端的硬件總體結(jié)構(gòu)圖和總體結(jié)構(gòu)原理圖如圖2所示。
圖2 監(jiān)控系統(tǒng)的組成原理圖
其中,處理控制模塊的 CPU采用 Samsung公司的ARM920T內(nèi)核嵌入式處理器 S3C2440A,主要用于圖像數(shù)據(jù)的處理以及打包發(fā)送至無線網(wǎng)卡,同時(shí)還用于控制系統(tǒng)各模塊間協(xié)調(diào)工作;圖像數(shù)據(jù)采集模塊使用 OV9650圖像傳感器,該圖像傳感器具有130萬像素,分辨率可達(dá) 1280×1024,具有 10 bit數(shù)據(jù)接口和標(biāo)準(zhǔn)的 SCCB接口,采用 CSP-28封裝,體積小,內(nèi)部集成了時(shí)序電路、模擬信號(hào)處理電路和數(shù)字信號(hào)處理電路;無線數(shù)據(jù)傳輸模塊采用 USB無線網(wǎng)卡,一方面使得系統(tǒng)結(jié)構(gòu)簡單,同時(shí),Linux內(nèi)核集成了眾多的 USB無線網(wǎng)卡驅(qū)動(dòng),方便移植和調(diào)試;另一方面可以根據(jù)環(huán)境需要對(duì)軟硬件系統(tǒng)進(jìn)行升級(jí)。
S3C2440A是一個(gè)高性價(jià)比、低功耗的微處理器,主頻可達(dá) 533MHz,具備 16 KB數(shù)據(jù) Cache和 16 KB指令 Cache,帶外部存儲(chǔ)控制器,兼容 SD、MMC接口協(xié)議,2個(gè) USB Host控制器,支持最大 4096×4096相機(jī)接口,并支持普通、慢速、空閑和掉電四種工作模式。這些功能特性可以很好地滿足本系統(tǒng)對(duì)現(xiàn)場(chǎng)環(huán)境的控制,特別是可用于大量實(shí)時(shí)數(shù)據(jù)的處理和記錄[2]。
OV9650是 Omni Vision公司的一款高集成度彩色 CMOS圖像傳感器芯片,該圖像傳感器具有 130萬像素并且具有 10位數(shù)據(jù)接口和標(biāo)準(zhǔn)的 SCCB接口 (Serial Camera Control Bus),可支持 SXVGA,VGA,QVGA,QQVGA,CIF,QCIF,QQCIF模式,同時(shí),它還支持三種數(shù)據(jù)輸出格式:RGB(4:2:2),YUV(4:2:2),YCrCb(4:2:2),內(nèi)置從 0x00到 0x8A的138個(gè)設(shè)備控制寄存器,通過 SCCB接口,可以方便的設(shè)置傳感器視窗大小、增益、白平衡校正、曝光控制、飽和度、色調(diào)等參數(shù)。
S3C2440有一個(gè)專用的攝像頭接口,CPU可以直接和 CMOS圖像傳感器連接,當(dāng) OV9650輸出數(shù)據(jù)格式為 8位的 YUV時(shí),要用到數(shù)據(jù)線 D2—D9(D9為MSB位,D2為 LSB位);當(dāng)輸出的數(shù)據(jù)格式為 10位 RGB,用數(shù)據(jù)線 D0—D9(D9為 MSB位,D0為LSB位),OV9650輸出的數(shù)據(jù)及控制信號(hào)包括像素時(shí)鐘 (PCLK)、水平參考 (HREF)、幀同步(VSYNC)和數(shù)據(jù)總線 (D0—D9)、分別和主處理器的相應(yīng)信號(hào)引腳相連。
IEEE802.11標(biāo)準(zhǔn)定義了單一的MAC層和多樣的物理層,已有 IEEE802.11d/g/n等多種協(xié)議,支持這些協(xié)議的網(wǎng)卡也有 PCI、PCMC IA和 USB三種[3]。為簡化接口設(shè)計(jì),本系統(tǒng)使用基于 ZyDAS ZD1211系列芯片組的 TP-L INK WN322G+型 USB無線網(wǎng)卡,該網(wǎng)卡支持 802.1lb/g協(xié)議,速率可達(dá) 54 Mbps,工作于 2.4—2.4835 GHz頻段,與主流 AP有良好的兼容性。根據(jù)實(shí)際情況,覆蓋范圍、監(jiān)控點(diǎn)數(shù)量多少來決定所需 AP數(shù)量,若監(jiān)控點(diǎn)數(shù)量較多或物理距離遠(yuǎn),可使用多個(gè) AP并進(jìn)行橋接。如果監(jiān)控區(qū)內(nèi)已布有無線網(wǎng)絡(luò)則可直接接入現(xiàn)有AP中。
本系統(tǒng)采用 2.6.30.4版本的 Linux系統(tǒng)。Linux因其優(yōu)異的性能和技術(shù)開放性而被廣泛用于嵌入式系統(tǒng),Linux2.6版內(nèi)核相對(duì)于其它版本更加穩(wěn)定,并提供了豐富的網(wǎng)絡(luò)和總線協(xié)議棧,能有效降低開發(fā)成本,縮短開發(fā)周期。本系統(tǒng)把包括 TCP/IP協(xié)議棧、USB協(xié)議棧、802.1lx協(xié)議棧、攝像頭驅(qū)動(dòng)及其它基本模塊的 2.6版內(nèi)核通過交叉編譯移植到S3C2440A上。
OV9650圖像傳感器在 Linux中作為字符設(shè)備來描述,其驅(qū)動(dòng)程序提供給應(yīng)用程序一個(gè)流控制接口。若要將系統(tǒng)調(diào)用和設(shè)備驅(qū)動(dòng)程序關(guān)聯(lián)起來,需用到 struct file_operations這個(gè)關(guān)鍵數(shù)據(jù)結(jié)構(gòu)。因此,編寫設(shè)備驅(qū)動(dòng)的主要工作就是編寫數(shù)據(jù)結(jié)構(gòu)中定義的子函數(shù),并填充 file_operations的各個(gè)域,攝像頭 file_operations的數(shù)據(jù)結(jié)構(gòu)如下。
static struct file_operations csi_fops=
{
open:csi_open,
read:csi_read,
ioctl:csi_ioctl,
write:csi_write,
release:csi_release,
};
函數(shù) csi_read通過系統(tǒng)調(diào)用 copy_to_user(buf,csi_data_buf,size)把內(nèi)核空間的緩存數(shù)據(jù)復(fù)制到用戶空間進(jìn)行處理。
在 OV9650驅(qū)動(dòng)中,函數(shù) csi_write不具體地實(shí)現(xiàn)寫操作功能,對(duì)設(shè)備發(fā)送控制指令由 csi_ioctl函數(shù)來實(shí)現(xiàn)。Static int csi_ioctl(struct inode*inode,struct file*file,unsigned int cmd,unsigned long arg)是用戶進(jìn)程向 OV9650設(shè)備進(jìn)行 I/O控制的方法。
成員函數(shù)設(shè)計(jì)完成后,需要編寫 module_init()和 module_exit()函數(shù)。其中,module_init()是驅(qū)動(dòng)程序的入口,包括以下步驟:
(1)初始化 OV9650 Camera設(shè)備,通過 i2c_write寫 0x00到 0x8A控制寄存器來配置模塊工作模式和各種參數(shù)。
(2)通過系統(tǒng)調(diào)用 ioctl_get_free_pages(GGP_KERNEI,8)來分配 512K系統(tǒng)連續(xù)內(nèi)存空間。
(3)調(diào)用 devfs_register_chrdev(“csi2c”,&csi_fops)來注冊(cè)自字符設(shè)備。
(4)調(diào)用 request_irq(31,csi_intr_handler,“csi”,null)來向系統(tǒng)注冊(cè)中斷處理函數(shù) csi_intr_handler。當(dāng) S3C2440捕捉到 VSYNC信號(hào)時(shí)觸發(fā)中斷,將一幀圖像數(shù)據(jù)拷貝到用戶空間。重復(fù)上述過程,則將視頻數(shù)據(jù)拷貝到 SDRAM中。
module_exit()函數(shù)在 r mmod卸載模塊時(shí)調(diào)用,其功能為釋放內(nèi)存空間和中斷,注銷設(shè)備文件。
Linux內(nèi)核的編譯是通過內(nèi)核源碼中根目錄和各子目錄中的Makefile分級(jí)管理的,驅(qū)動(dòng)也是內(nèi)核中的一部分。OV9650驅(qū)動(dòng)編譯加載的一般步驟如下。
(1)編寫 OV9650芯片的驅(qū)動(dòng)并存放在系統(tǒng)內(nèi)核源碼的 drivers/char/目錄下。
(2)OV9650攝像模塊驅(qū)動(dòng)程序編寫好后,為了實(shí)現(xiàn)內(nèi)核對(duì) OV9650驅(qū)動(dòng)的加載,使配置內(nèi)核可自由裁減,需對(duì) kbuild腳本進(jìn)行配置,即修改內(nèi)核源碼中 drivers/char/目錄下 Config和 Makefile文件。驅(qū)動(dòng)模塊編譯加載后,便可像操作普通文件一樣對(duì)攝像頭進(jìn)行數(shù)據(jù)讀寫操作。在 Kconfig文件中找到字符設(shè)備段 menu“Character devices”,在后面添加代碼如下:
ConfigOV9650_Drivers
tristate“OV9650 Drivers for S3C2440 Board”
depends on ARCH_S3C2440
help
Drivers for S3C2440 Board OV9650.c
在Makefile文件中添加對(duì)驅(qū)動(dòng)的編譯指令如下:
Obj-$(CONFIG_OV9650_Drivers) +=OV9650_Cam.o
(3)最后在內(nèi)核中可以找到第 (2)步中添加的驅(qū)動(dòng)支持選項(xiàng)并配置如下:
Device Drivers→
Multimedia devices→
[* ]Video capture adapters→
—Video capture adapters
<M >OV9650 Drivers for S3C2440 Board
V4L其全稱是 Video4Linux(Video for Linux),是在 Linux內(nèi)核中關(guān)于視頻設(shè)備的 API接口,涉及開關(guān)視頻設(shè)備、采集并處理視頻圖像信息等功能。它為 2層式架構(gòu),最上層為 V4L驅(qū)動(dòng)程序,最下層則是影像設(shè)備驅(qū)動(dòng)程序。
V4L視頻采集模塊是嵌入式網(wǎng)絡(luò)攝像機(jī)的核心模塊之一。它通過操作系統(tǒng)調(diào)用 V4L和影像設(shè)備驅(qū)動(dòng)程序來完成視頻捕獲。在 Linux下攝像頭設(shè)備的文件描述符為“/dev/video0”,采集程序調(diào)用 V4L API函數(shù)對(duì)設(shè)備文件 viedo0進(jìn)行操作,即可實(shí)現(xiàn)視頻數(shù)據(jù)采集。主要函數(shù)及其功能描述如下。
(1)Camera_open();開啟視頻設(shè)備文件,使用前需先聲明一個(gè) video device類型的設(shè)備文件。
(2)Camera_get_capability();通過調(diào)用 ioctl()函數(shù)取得設(shè)備文件的相關(guān)信息,并存放到 video capability結(jié)構(gòu)里。
(3)Camera_get_picture();通過調(diào)用 ioctl()函數(shù)取得圖像的想關(guān)信息,并存放到 video picture結(jié)構(gòu)里。
多病因慢性心力衰竭高發(fā)人群為老年人,是一種復(fù)雜的臨床綜合征,主要為多種原因?qū)е滦呐K功能受損,進(jìn)而出現(xiàn)慢性心力衰竭,內(nèi)分泌疾病、高血壓等都會(huì)導(dǎo)致慢性心力衰竭的出現(xiàn)[3]。在臨床上,很多心血管疾病患者最終發(fā)展成慢性心力衰竭,也成為患者死亡的主要原因。多病因慢性心力衰竭患者診斷較為困難,病情復(fù)雜且預(yù)后差,由此可見,及時(shí)診斷慢性心力衰竭患者在改善患者預(yù)后方面具有重要意義。
(4)Camera_grab_init();通過調(diào)用 ioctl()函數(shù)來初始化設(shè)備。
(5)Camera_grab_image();用來采集圖像,采用mmap方式,直接將設(shè)備文件/dev/video0映射到內(nèi)存,加速文件 I/O操作,還可以使多個(gè)線程共享數(shù)據(jù)。
(6)Camera_close();用來關(guān)閉設(shè)備文件。
采集到內(nèi)存的視頻數(shù)據(jù)信息量巨大,為便于網(wǎng)絡(luò)數(shù)據(jù)傳輸,需對(duì)采集的視頻數(shù)據(jù)進(jìn)行壓縮。因此,本設(shè)計(jì)采用高性能 ARM9處理器對(duì)采集到的數(shù)據(jù)進(jìn)行 MJPEG壓縮。MJPEG是 Motion JPEG(Joint Photographic Experts Group)的縮寫,即動(dòng)態(tài) JPEG。它將動(dòng)畫播放與 JPEG結(jié)合,按照 25 f/s的速度使用 JPEG算法,完成動(dòng)態(tài)視頻的壓縮。
在Linux-2.6.30.4內(nèi)核中包含了很多款 USB無線網(wǎng)卡的驅(qū)動(dòng),本文中使用的 TP-L INKWN322G+型USB無線網(wǎng)卡驅(qū)動(dòng)已加載到內(nèi)核中。該無線網(wǎng)卡有兩個(gè)版本,其芯片分別為 ZyDAS系列的Zd1211芯片和雷凌科技 rt系列的 rt73芯片。在linux內(nèi)核中的配置如下所示。
Device Drivers→
[* ]Network device support→
[*]WirelessLAN(IEEE 802.11)
<M >ZyDAS ZD1211/ZD1211B
USB-wireless support
[*]ZyDAS Zd1211 debugging(NEW)
<M >Ralink driver support→
—Ralink driver support
<M >Ralink rt2501/rt73(USB)support
[*]Ralink debug output
PC監(jiān)控端軟件采用 VC++編寫,其操作界面如圖3所示。該軟件可以通過網(wǎng)線連接局域網(wǎng)內(nèi)制定 IP及開放端口號(hào)的設(shè)備,憑借 PC機(jī)的高速數(shù)據(jù)處理以及高性能的 S3C2440嵌入式系統(tǒng),不難實(shí)現(xiàn)更多功能的軟件,如具有自動(dòng)報(bào)警、圖像處理、云臺(tái)控制、移動(dòng) PDA監(jiān)控、Web監(jiān)控等,通過 Internet網(wǎng)絡(luò)、GPRS網(wǎng)絡(luò)、3G網(wǎng)絡(luò)還可以實(shí)現(xiàn)遠(yuǎn)程移動(dòng)視頻監(jiān)控,或者將監(jiān)控信息通過短信、彩信的方式發(fā)送出去。
圖3 監(jiān)控顯示終端軟件截圖
在測(cè)試程序中,在控制臺(tái)中通過指令設(shè)置OV9650輸出為 YUV422格式,視頻幀速為 60 f/s,分辨率為 960×720,系統(tǒng)使用指令對(duì) OV9650設(shè)置后反饋回來的視頻參數(shù)截圖如圖4所示。監(jiān)控平臺(tái)通過無線網(wǎng)卡收到的視頻效果如上述圖3所示。
圖4 圖像采集的視頻截圖
通過實(shí)驗(yàn)得出的結(jié)果發(fā)現(xiàn):①在 ARM體系中采用 CMOS圖像傳感器采集的圖像畫質(zhì)色彩尚可,在畫質(zhì)要求不太高的場(chǎng)合充分體現(xiàn)了功耗和集成度的優(yōu)勢(shì);②在 200 m范圍內(nèi)的空曠環(huán)境中,系統(tǒng)性能達(dá)到了 60 f/s,視頻較為流暢,基本達(dá)到了實(shí)時(shí)傳輸,但是在有障礙的情況下,系統(tǒng)性能下降較快,同時(shí)出現(xiàn)了延時(shí)現(xiàn)象,這需要在以后進(jìn)一步改善;③本系統(tǒng)已在 S3C2440A開發(fā)板上實(shí)現(xiàn),監(jiān)控效果理想,不會(huì)給已有的無線網(wǎng)絡(luò)帶來過大的流量壓力,WLAN除監(jiān)控之外的無線應(yīng)用亦可滿足。
在實(shí)驗(yàn)結(jié)果中,當(dāng)有障礙存在時(shí),系統(tǒng)性能下降較快的原因主要是因?yàn)闊o線信號(hào)變?nèi)?使得接收的圖像感覺有延遲。這個(gè)問題可以通過提高無線網(wǎng)卡的發(fā)射功率、給無線網(wǎng)卡增加高增益的天線或增加無線中繼來解決。
另外,系統(tǒng)還存在功耗的問題,由于電池容量的限制,發(fā)射系統(tǒng)由 USB無線網(wǎng)卡、攝像頭等多個(gè)集成模塊器件構(gòu)成,需要較大的功耗。如果能將無線網(wǎng)絡(luò)模塊和攝像頭控制芯片進(jìn)一步集成,不僅成本低功耗也能減少,這是下一步的工作。如果攝像點(diǎn)有市電,或者采用太陽能與蓄電池結(jié)合的供電方式,則電源問題可以解決。
本文介紹了一種將 S3C2440A與圖像傳感器OV9650和 USB無線網(wǎng)卡有效地整合,實(shí)現(xiàn)攝像及無線傳輸功能的方案,軟件采用嵌入式 Linux操作系統(tǒng),設(shè)計(jì)出了一種基于 V4L的無線低功耗監(jiān)控?cái)z像裝置,并在 S3C2440A開發(fā)板上成功地進(jìn)行了實(shí)驗(yàn)。
由于系統(tǒng)采用軟件壓縮和處理,因此具有結(jié)構(gòu)簡單、性能靈活、成本低、布線 (無數(shù)據(jù)線和電源線)方便等優(yōu)點(diǎn),而且監(jiān)控范圍廣,還具備直接接入Internet進(jìn)行遠(yuǎn)程監(jiān)控的功能,在需要永久或臨時(shí)現(xiàn)場(chǎng)視頻實(shí)時(shí)監(jiān)控的領(lǐng)域具有廣闊的應(yīng)用前景。
[1] 田淑強(qiáng).基于WinCE與Web的無線視頻傳輸系統(tǒng)的研究[D].大連:大連理工大學(xué),2008.
[2] Samsung Electronics.S3C2440A Microprocessor User's Manual(Revision 1)[Z].Samsung Electronics,2008.
[3] 張金剛.基于ARM和WLAN的室內(nèi)監(jiān)控系統(tǒng)研究[J].長沙通信職業(yè)技術(shù)學(xué)院學(xué)報(bào),2008,7(4):1-5.
[4] 張綺文,解書鋼.ARM9嵌入式常用模塊與綜合系統(tǒng)設(shè)計(jì)實(shí)例精講 (第 2版)[M].北京:電子工業(yè)出版社,2008.