新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于ARM和Linux的圖像采集與傳輸設(shè)計(jì)

基于ARM和Linux的圖像采集與傳輸設(shè)計(jì)

作者: 時(shí)間:2014-07-02 來(lái)源:網(wǎng)絡(luò) 收藏

  0 引言

本文引用地址:http://butianyuan.cn/article/249130.htm

  隨著嵌入式技術(shù)的迅猛發(fā)展和在信息行業(yè)中的廣泛應(yīng)用,視頻采集與傳輸系統(tǒng)作為遠(yuǎn)程視頻監(jiān)控、可視電話(huà)會(huì)議和工業(yè)自動(dòng)控制領(lǐng)域的一項(xiàng)核心技術(shù),近年來(lái)已經(jīng)得到了飛速的發(fā)展。本文在基于嵌入式系統(tǒng)平臺(tái)上,采用USB攝像頭捕捉視頻信號(hào),利用V4L內(nèi)核應(yīng)用編程接口函數(shù),實(shí)現(xiàn)了視頻連續(xù)幀圖像的采集,并保存成文件的形式利用無(wú)線(xiàn)傳輸方式傳輸給接收端。這里著重討論視頻采集發(fā)送端的實(shí)現(xiàn)。

linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)

  1 系統(tǒng)組成

  1.1 統(tǒng)的硬件構(gòu)成

  本系統(tǒng)包括發(fā)送端和接收端2部分,兩部分均采用Samsung公司生產(chǎn)的S3C2410處理器做硬件開(kāi)發(fā)平臺(tái)。S3C2410在片上集成了豐富的組件:分開(kāi)的16 KB指令Cache和16 KB數(shù)據(jù)Cache、用于虛擬存儲(chǔ)器管理的MMU、支持STN和TFT的LCD控制器、NAND Flash啟動(dòng)裝載器、具有片選邏輯和SDRAM控制器的系統(tǒng)管理器、3通道UART、4通道DMA、4通道PWM定時(shí)器、I/O口、RTC、8通道10 位ADC和觸摸屏接口、I2C總線(xiàn)接口、I2S總線(xiàn)接口、USB主設(shè)備、USB從設(shè)備、SD卡和MMC卡接口、2通道的SPI以及PLL時(shí)鐘發(fā)生器,還采用了AMBA(advanced micrcocontroller bus architecture)新型總線(xiàn)結(jié)構(gòu)。

  應(yīng)用S3C2410處理器平臺(tái)搭建的發(fā)送端硬件結(jié)構(gòu)如圖1所示:包括S3C2410處理器、 RS232接口、JTAG接口、RJ-45接口、SDRMA、Flash、電源、通過(guò)USB口連接的視頻采集模塊和通過(guò)USB接口連接的視頻發(fā)射模塊。 RS232串口用于人機(jī)交互及低速數(shù)據(jù)的收發(fā),應(yīng)用電平轉(zhuǎn)換芯片MAX-323進(jìn)行串口電平和TTL/CMOS電平的轉(zhuǎn)換。JTAG接口用于下載 Bootloader。RJ-45接口用于和以太網(wǎng)連接,下載操作系統(tǒng)內(nèi)核、根文件系統(tǒng)和應(yīng)用軟件。SDRMA用于系統(tǒng)的數(shù)據(jù)存儲(chǔ)器、 Flash用于系統(tǒng)的程序存儲(chǔ)器。



  應(yīng)用S3C2410處理器平臺(tái)搭建的接收端硬件電路如圖2所示:與發(fā)送終端相比,多了SD卡和LCD顯示器。SD卡主要用來(lái)存儲(chǔ)數(shù)據(jù),LCD顯示器主要用來(lái)顯示視頻圖像。



  1.2 系統(tǒng)軟件設(shè)計(jì)

  系統(tǒng)的軟件構(gòu)成分為引導(dǎo)驅(qū)動(dòng)程序、操作系統(tǒng)、文件系統(tǒng)和應(yīng)用程序4部分,如圖3所示。引導(dǎo)驅(qū)動(dòng)程序在系統(tǒng)啟動(dòng)時(shí)進(jìn)行內(nèi)存重映射,將保存在 Flash中的操作系統(tǒng)和應(yīng)用程序重新映射到SDRAM中。Linux的內(nèi)核版本為L(zhǎng)inIix2.6。文件系統(tǒng)是Yaffs,它包括模塊、配置文件和庫(kù)等。系統(tǒng)的應(yīng)用程序建立在嵌入式Linux內(nèi)核、攝像頭驅(qū)動(dòng)和文件系統(tǒng)之上。



  2 視頻采集的具體實(shí)現(xiàn)

  USB攝像頭連接簡(jiǎn)單、使用靈活、價(jià)格低廉且具有良好的性能,因此,得到了廣泛的應(yīng)用。Linux內(nèi)核包含了多種USB攝像頭驅(qū)動(dòng),最常用的有基于OV5ll及其兼容芯片。OV511芯片主要包括CAMERA接口、DRMA接口、ISO FIFO接口和OmniCE以及USB控制器等部分。本設(shè)計(jì)使用的是在低端市場(chǎng)占有率較高的中芯微公司生產(chǎn)的ZC030x系列攝像頭芯片。Linux系統(tǒng)中的視頻子系統(tǒng)’Vide04linux為視頻應(yīng)用程序提供了一套統(tǒng)一的API,視頻應(yīng)用程序通過(guò)調(diào)用API即可操作各種不同的視頻捕獲設(shè)備,包括電視卡、視頻捕捉卡和USB攝像頭等。本設(shè)計(jì)的具體實(shí)現(xiàn)過(guò)程如下所述:

  2.1 攝像頭驅(qū)動(dòng)的實(shí)現(xiàn)

  1)配置Vide04linux內(nèi)核

  在終端使用make menuconfig命令打開(kāi)S3C24lOlinux內(nèi)核編譯的main menu窗口,并進(jìn)入“multimedia device———>”菜單選項(xiàng),然后將Video for Linux配置為模塊,即:

  Device driver———>

  Multimedia devices———>

  <*>Video for linux

  2)配置OV511驅(qū)動(dòng)

  返回主菜單,在進(jìn)入“USB support———>”菜單選項(xiàng),然后將USB OV5llcamera support設(shè)置為模塊,即:

  SUB suppor———>

  <*>USB OV5llcamera support(NEW)

  3)模塊安裝

  執(zhí)行以下命令安裝視頻輸入模塊:

  insmod videodev.o

  執(zhí)行以下命令安裝視頻輸入設(shè)備驅(qū)動(dòng)模塊:

  insmod usbcore.o

  insmod usb-ohci-s3c2410.ko

  insmod ov511.o

  由于使用的設(shè)備是USB接口的攝像頭,所以在加載ov511.o模塊前,需要加載USB內(nèi)核驅(qū)動(dòng)和主機(jī)控制器驅(qū)動(dòng)。

  2.2 利用Vide041inux實(shí)現(xiàn)

  在安裝了設(shè)備驅(qū)動(dòng)后,只需要再編寫(xiě)一個(gè)對(duì)視頻采集的應(yīng)用程序就可以采集視頻圖像。在Linux系統(tǒng)中,視頻文件是設(shè)備文件,可以像訪問(wèn)普通文件一樣對(duì)其進(jìn)行讀寫(xiě),攝像頭文件一般是/dev/v4l/video。在進(jìn)行視頻捕捉之前,需要做一些必要的設(shè)置工作。這些設(shè)置涉及到如下結(jié)構(gòu):



  V4L下視頻采集編程首先要打開(kāi)視頻設(shè)備:

  Int fd="open"(“/dev/v4l/video”,O_RDONLY);

  If(fd

  接著對(duì)攝像頭參數(shù)進(jìn)行設(shè)置。一般是先通過(guò)I/O控制命令讀取設(shè)備信息,然后對(duì)特定項(xiàng)進(jìn)行修改,最后通過(guò)I/O控制命令保存到內(nèi)核中。由于篇幅有限源程序不再贅述。

  獲取基本信息后,可以輸出顯示,也可以通過(guò)ioctl系統(tǒng)調(diào)用對(duì)這些值進(jìn)行修改。然后調(diào)用函數(shù) Char*Carmera_get_image(video_device*vd)獲得圖像數(shù)據(jù)指針。此函數(shù)比較重要,關(guān)系到的效率。獲取圖像數(shù)據(jù)有2種方法:一是通過(guò)映射得到視頻驅(qū)動(dòng)的數(shù)據(jù)緩沖,然后直接對(duì)映射后的緩沖進(jìn)行讀操作;二是直接讀設(shè)備,及調(diào)用read函數(shù)。下面分別介紹:

  (1)read系統(tǒng)調(diào)用方式比較簡(jiǎn)單,只需將前面得到攝像頭參數(shù)傳入read函數(shù)中,得到圖像數(shù)據(jù)指針picture_p后返回即可:read(vd->fd,picture_p,width*hight);其中vd_>fd為設(shè)備文件描述符。

  (2)利用mmap方式先使用ioctl(fd,VIDIOCGMBUF,&grab_vm)函數(shù)獲得攝像頭存儲(chǔ)緩沖區(qū)的幀信息,之后修改voideo_mmap中的設(shè)置,例如重新設(shè)置圖像幀的垂直及水平分辨率、彩色顯示格式,使用如下語(yǔ)句:

  grab_buf.height=240;

  grab_buf.width=320;

  grab—buf.format=VIDEO_PALETTE_RGB24;

  接著把攝像頭對(duì)應(yīng)的設(shè)備文件映射到內(nèi)存區(qū),具體使用grab_data=(unsigned char*)mmap(O,grab_vm.size,PROT_READ|PROT_WRITE,MAP_SHARED,grab_fd,O)操作。這樣設(shè)備文件的內(nèi)容就映射到內(nèi)存區(qū),該映射內(nèi)容區(qū)可讀可寫(xiě)并且不同進(jìn)程間可共享。該函數(shù)成功時(shí)返回圖像數(shù)據(jù)的指針,失敗時(shí)返回值為-1。

  3 無(wú)線(xiàn)傳輸模塊

  本系統(tǒng)選用西門(mén)子的MC235作為GPRS通信模塊,來(lái)實(shí)現(xiàn)圖像的無(wú)線(xiàn)傳輸。該模塊結(jié)合語(yǔ)音、數(shù)據(jù)傳輸、短信服務(wù)等功能,最大傳輸速率可以達(dá)到85.6 Kbps,具有豐富的AT指令使模塊與微處理器通信,功能強(qiáng)大,操作靈活方便,特別適用于數(shù)據(jù)的監(jiān)測(cè)和傳輸。

  在進(jìn)行GPRS傳輸操作之前需對(duì)模塊進(jìn)行設(shè)置,主要有:(1)設(shè)置通信波特率;(2)設(shè)置接入網(wǎng)關(guān);(3)設(shè)置移動(dòng)終端類(lèi)別;(4)測(cè)試 GPRS服務(wù)是否開(kāi)通,激活GPRS功能。這些設(shè)置都在主程序的初始化代碼段完成。通過(guò)測(cè)試,GPRS驅(qū)動(dòng)正常工作,能很好地支持?jǐn)?shù)據(jù)/命令復(fù)合協(xié)議傳輸,其協(xié)議的丟包率、吞吐量等性能指標(biāo)與無(wú)線(xiàn)模塊的指標(biāo)無(wú)實(shí)質(zhì)性差別,整個(gè)系統(tǒng)工作正常,基本達(dá)到設(shè)計(jì)要求。

  4 結(jié)束語(yǔ)

  本文基于S3C2410的硬件平臺(tái)和嵌入式Linux的軟件平臺(tái),實(shí)現(xiàn)了視頻信號(hào)的采集和網(wǎng)絡(luò)傳輸。發(fā)送端由于把圖像壓縮和網(wǎng)絡(luò)功能集成到一個(gè)體積很小的設(shè)備內(nèi),并直接通過(guò)無(wú)線(xiàn)方式接入GPRS網(wǎng),省掉各種復(fù)雜的電纜連接,安裝方便;用軟件的方法替代了以往許多用硬件模塊實(shí)現(xiàn)的功能,同時(shí)實(shí)現(xiàn)了收發(fā)雙方體積的小型化和低功耗,在網(wǎng)絡(luò)狀況較為理想的情況下,系統(tǒng)在圖像分辨率為352×288,像素為16位的情況下,可以實(shí)現(xiàn)每秒鐘傳送1幀圖像。整個(gè)系統(tǒng)具有穩(wěn)定可靠、安裝簡(jiǎn)便、成本低廉等特點(diǎn),可擴(kuò)展應(yīng)用在工業(yè)控制、視頻會(huì)議系統(tǒng)、可視電話(huà)、遠(yuǎn)程監(jiān)控系統(tǒng)等諸多領(lǐng)域。

linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)

linux相關(guān)文章:linux教程


攝像頭相關(guān)文章:攝像頭原理


關(guān)鍵詞: ARM Linux 圖像采集

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉