基于嵌入式Linux的圖像采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
出處:alwvfhpgu 發(fā)布于:2007-04-16 19:28:04
關(guān)鍵詞:Video for Linux;USB攝像頭;USB驅(qū)動(dòng)
引言
嵌入式Linux操作系統(tǒng)同目前廣泛應(yīng)用的嵌入式操作系統(tǒng)如pSOS、VxWorks、winCE相比,具有可移植性好、網(wǎng)絡(luò)功能強(qiáng)、有的GNU編譯工具支持等優(yōu)點(diǎn)。更重要的是Linux的開放源代碼和的優(yōu)點(diǎn)使得系統(tǒng)成本顯著降低。一流的程序設(shè)計(jì)和開發(fā)加上測(cè)試的開放性使得Linux系統(tǒng)非??煽亢头€(wěn)定,因而越來(lái)越多的人開始使用Linux開發(fā)應(yīng)用程序。Intel Xscale PXA255處理器是一款采用ARM結(jié)構(gòu),面向高性能、低功耗設(shè)備的嵌入式處理器,非常適用于手持移動(dòng)設(shè)備的開發(fā)。USB攝像頭因具有低廉的價(jià)格,良好的性能,及方便使用的特性,因此很容易集成到嵌入式系統(tǒng)中。本文介紹的基于嵌入式Linux系統(tǒng)的USB攝像頭圖像采集系統(tǒng)使用采用OV511芯片的WEBEYE攝像頭,在基于PXA255處理器的開發(fā)板上實(shí)現(xiàn)了圖像的采集與壓縮,借助Mencoder編碼工具可以將多幅JPEG圖片合成AVI視頻流,并實(shí)現(xiàn)視頻回放。
硬件系統(tǒng)總體框圖
Linux下USB系統(tǒng)軟件結(jié)構(gòu)
獲得圖像過程
圖像采集程序的流程圖
系統(tǒng)硬件平臺(tái)
系統(tǒng)結(jié)構(gòu)
系統(tǒng)硬件平臺(tái)如所示。PXA255處理器主頻可達(dá)400MHz,內(nèi)部集成了多種外設(shè)控制模塊,在實(shí)際使用時(shí)可以根據(jù)需要進(jìn)行裁減。開發(fā)板上提供了64M SDRAM、32M Flash、640×480 TFT LCD觸摸屏,以及外擴(kuò)的USB主口控制器等,它們構(gòu)成了一個(gè)嵌入式多媒體開發(fā)平臺(tái),可以滿足復(fù)雜計(jì)算和圖形顯示的需求。采用OV511芯片的WEBEYE攝像頭支持多種制式,CIF(352×288)格式幀率達(dá)30fps,可實(shí)現(xiàn)真正的實(shí)時(shí)視頻捕獲,VGA(640×480)格式幀率為10~15fps,具有完善的自動(dòng)亮度、白平衡控制,提供色彩飽和度、對(duì)比度、邊緣增強(qiáng)、伽馬表等數(shù)碼影像控制功能。它與TWAIN標(biāo)準(zhǔn)兼容,提供640×480格式的高清晰靜止圖像捕獲模式,具有多種視頻和輸出格式供選擇。USB總線控制器采用Cypress 公司的一款專為嵌入式領(lǐng)域研制的USB控制芯片CY67300,該芯片可作為主口控制,也可作為從口控制芯片,內(nèi)嵌有8051微控制器和RAM,支持全速和高速兩種模式。JTAG口用于Flash的擦寫,UART用于系統(tǒng)調(diào)試。以太網(wǎng)口可使現(xiàn)網(wǎng)絡(luò)傳輸,也可作NFS調(diào)試用。
系統(tǒng)工作過程
系統(tǒng)通過WEBEYE攝像頭采集圖像,對(duì)現(xiàn)場(chǎng)圖像進(jìn)行高速捕捉,然后將捕捉到的圖像通過USB總線傳輸?shù)絇XA255處理器進(jìn)行處理,并將圖像壓縮,保存為JPEG格式的文件。程序調(diào)用Encoder編碼器可以將多幅JPEG格式的圖像合成一段AVI視頻流,實(shí)現(xiàn)視頻回放,這在安全監(jiān)控、事故鑒定、車輛防盜等領(lǐng)域中都有廣泛應(yīng)用。,系統(tǒng)還可以通過以太網(wǎng)口或UART口將保存的圖片和視頻流傳到服務(wù)器上,實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)控。
系統(tǒng)軟件實(shí)現(xiàn)
軟件系統(tǒng)結(jié)構(gòu)
Liunx系統(tǒng)中對(duì)USB設(shè)備的支持是通過如所示的結(jié)構(gòu)實(shí)現(xiàn)的。Linux內(nèi)核中的USB Core為設(shè)備和主控制器提供API接口。USB Core包含所有的USB設(shè)備和主控制器的一些通用操作,為向上和向下操作提供一個(gè)接口。在Linux系統(tǒng)中,設(shè)備驅(qū)動(dòng)可分為字符設(shè)備、塊設(shè)備以及網(wǎng)絡(luò)設(shè)備。其中,字符設(shè)備面向字符I/O操作,沒有緩沖,順序讀??;而塊設(shè)備面向數(shù)據(jù)塊,所有操作都通過內(nèi)核地址空間的I/O緩沖區(qū)完成,支持隨機(jī)存取操作。USB設(shè)備通過快速串行通信的方式工作,應(yīng)作為字符設(shè)備來(lái)處理。系統(tǒng)加載設(shè)備驅(qū)動(dòng)的方式有模塊加載和內(nèi)核初始化加載兩種:前者通過用戶使用insmod命令動(dòng)態(tài)加載到內(nèi)核中,通過rmmod命令卸載驅(qū)動(dòng)模塊;后者是把驅(qū)動(dòng)編進(jìn)內(nèi)核,在內(nèi)核初始化時(shí)自動(dòng)加載。USB主口程序由HCD(主機(jī)控制器驅(qū)動(dòng))、USBD (USB驅(qū)動(dòng)程序)以及客戶程序組成。其中USBD負(fù)責(zé)管理所有HCD、設(shè)備驅(qū)動(dòng)和所有連接到USB總線上的設(shè)備,是USB主機(jī)軟件的。如所示,Linux系統(tǒng)中USB子系統(tǒng)采用分層結(jié)構(gòu),其中USBD和HCD提供了支持設(shè)備驅(qū)動(dòng)程序開發(fā)的API。USB設(shè)備驅(qū)動(dòng)程序不是通過I/O操作訪問設(shè)備,而是通過USB Core提供的標(biāo)準(zhǔn)接口與設(shè)備交互,它采用由管道組成的通道與設(shè)備進(jìn)行通信。設(shè)備驅(qū)動(dòng)程序根據(jù)USBD創(chuàng)建所需的管道,并為其分配傳輸所需的緩沖空間。
USB的傳輸分為控制傳輸、中斷傳輸、批量傳輸以及等時(shí)傳輸四種模式。對(duì)于時(shí)間性極強(qiáng)但是準(zhǔn)確性不高的視頻捕捉應(yīng)用來(lái)說(shuō),攝像頭應(yīng)采用等時(shí)傳輸模式。Linux系統(tǒng)中,任何USB傳輸都需要通過URB(USB請(qǐng)求塊)來(lái)實(shí)現(xiàn)。為了盡可能快地得到圖像數(shù)據(jù),需要加大URB的緩沖,這樣可以降低每個(gè)USB事務(wù)中握手信息所占的比例,提高有效數(shù)據(jù)傳輸比例。由于每次USB傳輸都要包括URB的建立、發(fā)送、回收、數(shù)據(jù)整理,而在這些階段中不產(chǎn)生有效數(shù)據(jù),因此可建立兩個(gè)URB交替工作,一個(gè)URB在等待回收時(shí)初始化另一個(gè)URB。獲得圖像的過程如所示。
攝像頭視頻捕獲程序的編寫
攝像頭屬于視頻類設(shè)備,遵循的標(biāo)準(zhǔn)為Video for Linux (V4L)標(biāo)準(zhǔn)。這個(gè)標(biāo)準(zhǔn)定義了一套API接口,內(nèi)核、驅(qū)動(dòng)、應(yīng)用程序都以這個(gè)接口為標(biāo)準(zhǔn)進(jìn)行交流。目前的V4L涵蓋了音視頻捕捉及處理等內(nèi)容,也包括USB攝像頭。
Linux系統(tǒng)中一般的文件操作是通過read、write等系統(tǒng)調(diào)用完成,但這些系統(tǒng)調(diào)用是通過內(nèi)核態(tài)與用戶態(tài)之間相互進(jìn)行數(shù)據(jù)拷貝實(shí)現(xiàn)的。對(duì)于圖像數(shù)據(jù)來(lái)說(shuō),進(jìn)行拷貝必然會(huì)增加時(shí)間開銷,因此需要使用內(nèi)存映射的辦法來(lái)加以解決。
首先應(yīng)申請(qǐng)足夠大的內(nèi)核態(tài)內(nèi)存作為圖像數(shù)據(jù)緩存,將URB帶來(lái)的數(shù)據(jù)暫存;然后將其用remap_page_range函數(shù)映射到用戶態(tài)空間。這樣,用戶態(tài)空間的圖像處理程序就可以使用mmap()函數(shù),直接讀寫內(nèi)核態(tài)幀緩沖區(qū),減少了額外開銷。要進(jìn)行視頻捕捉必須用到VIDIOCMCAPTURE 和VIDIOCSYNC這兩個(gè)ioctl函數(shù)。VIDIOCGMBUF包含有所用緩沖器的設(shè)置與地址。VIDIOCMCAPTURE用于開始捕捉;VIDIOCSYNC用于等待捕捉完成。為加快數(shù)據(jù)處理速度,一般使用雙緩沖設(shè)置,即buffer0捕捉數(shù)據(jù)時(shí),buffer1傳輸數(shù)據(jù);buffer1捕捉數(shù)據(jù)時(shí),buffer0傳輸數(shù)據(jù)。
整個(gè)圖像采集程序的流程圖如所示。將采集到的圖像保存為JPEG格式,然后調(diào)用Mplayer中的Mencoder編碼器,即可將多幅JPEG文件合成一段視頻流,實(shí)現(xiàn)視頻回放。
結(jié)語(yǔ)
本文在臺(tái)式機(jī)上編程實(shí)現(xiàn)了基于Linux系統(tǒng)的USB攝像頭圖像采集系統(tǒng)。系統(tǒng)可以實(shí)現(xiàn)每秒30幀的圖像采集,可以直接連續(xù)顯示到屏幕上構(gòu)成實(shí)時(shí)監(jiān)控系統(tǒng),也可壓縮為一段視頻流,用播放器播放出來(lái)。通過交叉編譯將程序移植到PXA255開發(fā)板上,實(shí)現(xiàn)了預(yù)期功能。
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫(kù)電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫(kù)電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫(kù)電子市場(chǎng)網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- ARM技術(shù)架構(gòu)與應(yīng)用開發(fā)實(shí)踐指南2026/1/6 10:40:19
- 嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS)選型與移植技術(shù)指南2025/12/31 10:42:31
- 工業(yè)嵌入式系統(tǒng):通信接口技術(shù)選型與抗干擾設(shè)計(jì)實(shí)踐2025/12/15 14:36:53
- 深入解析嵌入式 OPENAMP 框架:開啟異核通信新時(shí)代2025/7/22 16:27:29
- 一文快速了解OPENWRT基礎(chǔ)知識(shí)2025/7/14 16:59:04
- 高溫環(huán)境下電源IC選型建議
- 安防監(jiān)控設(shè)備連接器應(yīng)用分析
- 高速PCB信號(hào)完整性(SI)設(shè)計(jì)核心實(shí)操規(guī)范
- 鎖相環(huán)(PLL)中的環(huán)路濾波器:參數(shù)計(jì)算與穩(wěn)定性分析
- MOSFET反向恢復(fù)特性對(duì)系統(tǒng)的影響
- 電源IC在惡劣環(huán)境中的防護(hù)設(shè)計(jì)
- 連接器耐腐蝕性能測(cè)試方法
- PCB電磁兼容(EMC)設(shè)計(jì)與干擾抑制核心實(shí)操規(guī)范
- 用于相位噪聲測(cè)量的低通濾波器設(shè)計(jì)與本振凈化技術(shù)
- MOSFET在高頻開關(guān)中的EMI問題









