《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于Linux+ARM的多格式視頻圖像采集系統(tǒng)的設(shè)計(jì)
基于Linux+ARM的多格式視頻圖像采集系統(tǒng)的設(shè)計(jì)
2014年微型機(jī)與應(yīng)用第21期
趙楠楠1,2 ,,楊秀虎1
(1.遼寧科技大學(xué) 電子與信息工程學(xué)院,遼寧 鞍山 114051; 2.國(guó)家金融安全及系統(tǒng)裝備工程技術(shù)研究中心,,遼寧 鞍山 114051)
摘要: 設(shè)計(jì)了基于S3C2440微處理器的視頻圖像采集系統(tǒng),詳細(xì)分析了該系統(tǒng)的啟動(dòng)過(guò)程,。在一塊裸板上搭建起整個(gè)視頻圖像采集系統(tǒng),。結(jié)合V4L2技術(shù)完成了支持YUV、MJPEG圖像格式的USB攝像頭和支持RGB圖像格式的CMOS攝像頭的多格式視頻圖像采集系統(tǒng),。測(cè)試結(jié)果表明,,該系統(tǒng)可以在LCD顯示屏上動(dòng)態(tài)顯示多格式攝像頭所采集到的視頻圖像,且視頻圖像具有清晰度高,、流暢性好,、穩(wěn)定性強(qiáng)等特點(diǎn),具有進(jìn)一步推廣使用的廣闊前景,。
Abstract:
Key words :

  摘 要: 設(shè)計(jì)了基于S3C2440微處理器的視頻圖像采集系統(tǒng),,詳細(xì)分析了該系統(tǒng)的啟動(dòng)過(guò)程。在一塊裸板上搭建起整個(gè)視頻圖像采集系統(tǒng),。結(jié)合V4L2技術(shù)完成了支持YUV,、MJPEG圖像格式的USB攝像頭和支持RGB圖像格式的CMOS攝像頭的多格式視頻圖像采集系統(tǒng)。測(cè)試結(jié)果表明,,該系統(tǒng)可以在LCD顯示屏上動(dòng)態(tài)顯示多格式攝像頭所采集到的視頻圖像,,且視頻圖像具有清晰度高、流暢性好,、穩(wěn)定性強(qiáng)等特點(diǎn),,具有進(jìn)一步推廣使用的廣闊前景。

  關(guān)鍵詞u-boot與系統(tǒng)啟動(dòng),;V4L2,;多格式視頻圖像采集;video2lcd

0 引 言

  當(dāng)下隨著多媒體技術(shù),、集成電子技術(shù),、計(jì)算機(jī)技術(shù)的高速發(fā)展,視頻圖像采集技術(shù)也不斷發(fā)展,它的應(yīng)用場(chǎng)合也更加廣泛。尤其近年來(lái),隨著嵌入式技術(shù)的發(fā)展,,ARM處理器運(yùn)算的能力不斷地增強(qiáng)以及處理圖像的技術(shù)不斷地提高,,使基于ARM的圖像采集廣泛地應(yīng)用于各個(gè)領(lǐng)域[1-4]。視頻圖像采集更是成為了研究熱點(diǎn),。嵌入式這一技術(shù)的發(fā)展使得視頻采集系統(tǒng)具有了體積小,、成本低、性能高等特點(diǎn),能夠擴(kuò)展到很多領(lǐng)域[5],?;谶@樣的背景,本文進(jìn)行了一套有益研究,。

  本系統(tǒng)采用三星公司S3C2440微處理器搭建一個(gè)全新的視頻圖像采集系統(tǒng),,包括分析改進(jìn)u-boot源代碼,使之支持所用JZ2440開發(fā)板,,支持開發(fā)板的串口,、網(wǎng)卡功能,支持Nand啟動(dòng)等,,且大大簡(jiǎn)化冗余代碼,,編譯出簡(jiǎn)潔高效的u-boot.bin文件,能夠?qū)崿F(xiàn)快速燒寫和擦除,,從而實(shí)現(xiàn)系統(tǒng)快速啟動(dòng),。在搭建好開發(fā)環(huán)境之后,結(jié)合V4L2技術(shù)分析數(shù)據(jù)采集系統(tǒng)流程,,編寫應(yīng)用程序veido2lcd完成支持YUV,、MJPEG圖像格式的USB攝像頭和支持RGB圖像格式的CMOS攝像頭的多格式視頻圖像采集系統(tǒng),最后對(duì)系統(tǒng)進(jìn)行測(cè)試和分析,。

1 開發(fā)環(huán)境搭建

  1.1 系統(tǒng)軟硬件平臺(tái)

  視頻圖像采集系統(tǒng)最終是要移植到嵌入式系統(tǒng)的,,所以要搭建嵌入式平臺(tái)來(lái)完成交叉編譯等工作,文中采用支持V4L2的Linux系統(tǒng),。硬件平臺(tái)采用三星公司的ARM9開發(fā)板JZ2440,,其硬件特性如下:

  CPU處理器: 16/32 bit S3C2440A;

  Flash存儲(chǔ)器: 512 MB NandFlash,,64 MB NorFlash,;

  內(nèi)存支持: 64 MB SDRAM,4 KB片內(nèi)SRAM

  USB總線與接口: 1個(gè)USB Host,,1個(gè)USB Slave;

  網(wǎng)卡支持: DM9000;

  LCD顯示屏: 4.3英寸TFT LCD屏,;

  攝像頭支持: YUV格式的USB攝像頭,MJPEG格式的USB攝像頭,,RGB格式的CMOS攝像頭,。

  1.2 系統(tǒng)交叉編譯工具的安裝

  Linux開發(fā)所用的交叉編譯工具是arm-linux-gcc-4.3.2,,設(shè)置環(huán)境變量:PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/arm/4.3.2/bin"完成安裝交叉編譯工具鏈。

  它不能夠適應(yīng)現(xiàn)有硬件環(huán)境,,需要對(duì)其進(jìn)行如下修改:

  (1) 修改U-boot源代碼以支持S3C2440開發(fā)板

  在單板相關(guān)的配置文件boards.cfg中添加:

  ssmdk2440 arm arm920t - samsung s3c24x0

  (2) 配置時(shí)鐘參數(shù)以適應(yīng)于S3C2440

  需要對(duì)CPU的MPLL進(jìn)行設(shè)置,,否則內(nèi)存不能正常使用。在start.S里增加對(duì)MPLL的設(shè)置:

 ?、僭O(shè)置CPU為異步總線模式,;

  ②設(shè)置分頻系數(shù)和MPLLCON寄存器將系統(tǒng)時(shí)鐘頻率設(shè)定為400 MHz,。

  (3) 支持S3C2440的硬件配置

  在include/configs/smdk2440.h中去掉宏CONFIG_S3C2410,,增加配置宏CONFIG_S3C2440以支持S3C2440的相關(guān)硬件配置,比如串口波特率正常,。

  (4) 支持Nand啟動(dòng)

  由于Nand啟動(dòng)時(shí)只能復(fù)制最前面的4 KB代碼到SDRAM,,這要求重定位之前的啟動(dòng)代碼應(yīng)該少于4 KB。原來(lái)的代碼在鏈接時(shí)加了"-pie"選項(xiàng), 使得生成的u-boot.bin里多了"*(.rel*)",、 "*(.dynsym)"、導(dǎo)致編譯出來(lái)的u-boot非常大,,不能支持Nand啟動(dòng),,需修改代碼來(lái)減小u-boot。

 ?、偃サ?"-pie"選項(xiàng)

  在arch/arm/config.mk:75:LDFLAGS_u-boot += -pie中去掉該行以減少代碼,。

  ②修改include/configs/smdk2440.h中的連接地址:

  #define CONFIG_SYS_TEXT_BASE 0x33f80000

  將鏈接地址改為0x33f00000,,這是因?yàn)镾DRAM大小為64 MB,,它的基地址是0x30000000,尾址是0x34000000,,在0x33f00000~0x34000000之間1 MB空間足夠用來(lái)存放u-boot代碼,。

  ③修改start.S,,實(shí)現(xiàn)代碼的重定位,,即上電后把NandFlash內(nèi)前4 KB的代碼復(fù)制到片內(nèi)SRAM,然后由這4 KB代碼實(shí)現(xiàn)將NandFlash上的u-boot代碼復(fù)制到SDRAM上鏈接地址以0x33f00000開始的地方,。

  (5) 支持DM9000網(wǎng)卡

  在smdk2440.h中增加宏定義define CONFIG_DRIVER_DM9000完成S3C2440對(duì)網(wǎng)卡DM9000的支持,。

  將修改好的u-boot重新make,編譯通過(guò),,生成新的u-boot.bin文件,。

  以Nor方式啟動(dòng)開發(fā)板,通過(guò)tftp工具將編譯好的u-boot.bin文件燒寫到開發(fā)板,,然后關(guān)閉開發(fā)板,,撥為Nand啟動(dòng)方式重啟開發(fā)板,,啟動(dòng)后效果如圖1所示,這樣就完成了一個(gè)支持Nand啟動(dòng),支持DM9000網(wǎng)卡的u-boot的移植,。

001.jpg

2 視頻圖像采集系統(tǒng)設(shè)計(jì)

  2.1 Linux內(nèi)核下的V4L2驅(qū)動(dòng)框架

  在Linux系統(tǒng)下,,通過(guò)VideoforLinux實(shí)現(xiàn)對(duì)Linux視頻采集設(shè)備的支持通常將其稱為V4L[6]。它是Linux內(nèi)核中有關(guān)視頻設(shè)備的驅(qū)動(dòng)程序,。Linux內(nèi)核提供Video4Linux2 應(yīng)用程序接口,,在程序開發(fā)時(shí)首先是基于Video4Linux2 API函數(shù)來(lái)設(shè)計(jì)程序[7]。

  視頻圖像的采集流程如圖2所示,。

002.jpg

  首先使用open函數(shù)打開攝像頭設(shè)備,,以獲取該攝像設(shè)備的文件描述符,接著調(diào)用攝像頭設(shè)備的接口函數(shù)vidioc_querycap()來(lái)獲取設(shè)備的參數(shù)信息,,從而確定接入的是圖像捕捉設(shè)備,。由于V4L2所支持的視頻格式有多種,而所接入攝像頭設(shè)備支持YUV,、MJPEG,、RGB三種格式中的哪一種也是事先未知的,所以V4L2中包含對(duì)格式的一系列的操作,,包括枚舉,、獲得、測(cè)試,、設(shè)置等接口函數(shù),,完成對(duì)攝像頭設(shè)備所支持圖像格式的獲取、測(cè)試和設(shè)置工作,。比如確定了攝像頭為MJPEG格式之后,,V4L2就要為視頻流數(shù)據(jù)申請(qǐng)緩沖區(qū)并查詢緩沖區(qū)信息。為了加快對(duì)I/O的訪問(wèn)速度,,使用mmap()函數(shù)將攝像頭相應(yīng)的設(shè)備文件映射到內(nèi)存區(qū)并且把獲得的緩沖區(qū)通過(guò)函數(shù)vidioc_qbuf()放入隊(duì)列中,。準(zhǔn)備工作完成之后通過(guò)執(zhí)行vidioc_streamon()啟動(dòng)視頻流數(shù)據(jù)的采集。這里使用poll機(jī)制等待數(shù)據(jù)的到來(lái),,有了數(shù)據(jù)之后就可以執(zhí)行vidioc_dqbuf()函數(shù)從緩沖區(qū)隊(duì)列中獲取一幀視頻流數(shù)據(jù),,當(dāng)不再采集的時(shí)候就可以調(diào)用vidioc_streamoff()停止視頻流的采集。

  2.2 應(yīng)用程序video2lcd骨架

  要使視頻數(shù)據(jù)顯示到LCD顯示屏上,,需要將攝像頭采集到的視頻數(shù)據(jù)經(jīng)過(guò)格式轉(zhuǎn)換,、縮放、合并,、顯示等操作才能最終顯示到LCD顯示屏上,。整個(gè)過(guò)程的流程圖如圖3所示。

003.jpg

 ?、艛?shù)據(jù)格式的轉(zhuǎn)換:由于LCD顯示屏只能支持RGB一種格式,,而攝像頭采集到的數(shù)據(jù)有YUV,、MJPEG、 RGB三種格式,,故需要進(jìn)行數(shù)據(jù)格式的轉(zhuǎn)換(RGB格式不需要進(jìn)行轉(zhuǎn)換的),。函數(shù)static int Yuv2RgbConvert(PT_VideoBuf ptVideoBufIn, PT_VideoBuf ptVideoBufOut)用來(lái)把內(nèi)存里的YUV圖像轉(zhuǎn)換為RGB圖像。函數(shù)static int Mjpeg2RgbConvert(PT_VideoBuf ptVideoBufIn, PT_VideoBuf ptVideoBufOut)用來(lái)將內(nèi)存里的MJPEG圖像轉(zhuǎn)換為RGB圖像,。

 ?、茍D像的縮放:由于攝像頭采集到的圖像分辨率與LCD的分辨率并不吻合,為了得到清晰流暢的視頻圖像,,需要進(jìn)行圖像大小的縮放,。函數(shù)int picZoom(PT_PixelDatas ptOriginPic, PT_PixelDatas ptZoomPic) 用來(lái)實(shí)現(xiàn)這一功能。

 ?、菆D像轉(zhuǎn)入緩存:即將縮放后的圖像轉(zhuǎn)入FrameBuffer,,使用函數(shù)intPicMerge(iTopLeftX, iTopLeftY, &ptVideoBufCur->tPixelDatas, PT_PixelDatas ->ptFrameBuffer)來(lái)完成。緩存Framebuffer中的數(shù)據(jù)就可以直接在LCD屏幕上顯示,。

  當(dāng)完成以上工作后,,video2lcd應(yīng)用程序就編寫完成,它能夠?qū)z像頭采集到的視頻圖像數(shù)據(jù)清晰流暢地顯示在LCD屏幕上,,同時(shí)支持YUV,、MJPEG、RGB三種格式的視頻圖像的采集,,支持多款USB攝像頭的同時(shí)也支持CMOS攝像頭。將交叉編譯通過(guò)后的video2lcd傳輸?shù)介_發(fā)板的文件系統(tǒng),。

3 應(yīng)用測(cè)試與分析

  以Nand方式啟動(dòng)開發(fā)板,,首先將支持YUV格式的USB攝像頭插到開發(fā)板的USB接口,這在串口界面執(zhí)行命令:./video2lcd /dev/video0,回車之后就可以看到LCD顯示屏上有視頻圖像了,,晃動(dòng)攝像頭可見視頻圖像清晰流暢,,以同樣的操作分別將支持MJPEG格式的USB攝像頭和支持RGB格式的CMOS攝像頭接到開發(fā)板上,觀察視頻圖像,。圖4即為USB攝像頭采集到的MJPEG格式的視頻圖像以及CMOS攝像頭采集到的RGB格式視頻圖像在4.3英寸LCD屏幕上的顯示效果圖,,通過(guò)與筆記本上圖像的對(duì)比可見,視頻圖像非常清晰且視頻流暢,。

004.jpg

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

  基于S3C2440微處理器和ov7740視頻處理芯片搭建了嵌入式視頻圖像采集平臺(tái),,為開發(fā)實(shí)現(xiàn)多格式視頻圖像的實(shí)時(shí)采集與傳輸提供了可行方案。采用嵌入式技術(shù),,使系統(tǒng)具有體積小,、成本低、普適性高等特點(diǎn),。該方案具有廣泛的應(yīng)用價(jià)值,。

參考文獻(xiàn)

  [1] 劉攀,王紅亮,孟令軍. 基于 FPGA 的數(shù)字圖像采集存儲(chǔ)系統(tǒng)的設(shè)計(jì)[J]. 電視技術(shù), 2010,34(6) :32-34.

  [2] 劉珂含,何培宇,關(guān)勝平,等. 基于TMS320VC5509A的圖像采集與識(shí)別系統(tǒng)[J]. 四川大學(xué)學(xué)報(bào):自然科學(xué)版, 2008,45(1):48-52.

  [3] 嚴(yán)新忠,陳雨. 基于嵌入式ARM的圖像采集與傳輸設(shè)計(jì)[J].研究與開發(fā), 2009,28(11) :57-59.

  [4] 劉紅喜,李長(zhǎng)江,孫俊喜. 基于DSP的圖像采集及處理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 電子技術(shù)應(yīng)用,,2009,35(2) :22-26.

  [5] 劉志華. 基于ARM和Linux的視頻圖像采集系統(tǒng)[J]. 微型機(jī)與應(yīng)用, 2014,33(3):12-14,17.

  [6] 鄒意然,王永威,趙龍. 嵌入式系統(tǒng)中USB攝像頭的圖像采集[J]. 微計(jì)算機(jī)信息, 2010,26(12-2):24-26.

  [7] COX A. Video 4 Linux programming [EB/OL]. [2014-08-04]http://www.redhat.com.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。