李鵬飛
(貴州大學 計算機科學與信息學院,貴州 貴陽 550025)
嵌入式圖像技術已經(jīng)成為當前電子產品研發(fā)領域的熱點,并已應用于智能交通、網(wǎng)絡通信、計算機視覺等領域[1]。傳統(tǒng)的基于PC的圖像采集設備,成本高而且體積大,因而限制了它在便攜設備、移動通信等領域的應用。開發(fā)小型化、低功耗、速度快的圖像采集系統(tǒng)具有很好的工程應用前景。該系統(tǒng)采用三星公司基于ARM9的S3C2440[2]搭建硬件平臺,采用高速率的 USB攝像頭,在 ARM-Linux的操作系統(tǒng)上實現(xiàn)數(shù)字圖像數(shù)據(jù)的采集與顯示。
硬件系統(tǒng)設計是以一款基于 ARM920T內核的嵌入式微處理器S3C2440為核心,通過外擴存儲器(Flash/SDRAM)、圖像輸入模塊,上位機通信模塊,LCD顯示模塊等來構建硬件平臺,如圖1所示。
圖1 系統(tǒng)硬件結構
1)S3C2440微處理器:S3C2440是韓國三星公司生產的16/32位 RISC嵌入式微處理器。該芯片處理速度快、功耗極低,與其他 ARM 芯片相比,具有豐富的片內外圍接口。其內部集成LCD顯示控制器以及FLASh控制器,硬件搭建較簡易。
2)外部存儲器:S3C2440支持從NAND FLASH啟動,NAND FLASH具有容量大、比NOR FLASH價格低等特點。本設計采用一片K9F1208作為NAND FLASH存儲器系統(tǒng),容量大小為 64MB,用來存放操作系統(tǒng)、應用程序和其他數(shù)據(jù);采用一片HY57V561620CT作為SDRAM,容量大小為 32 MB。
3)圖像輸入模塊:采用 USB接口的宇宙通QC301攝像頭作為圖像采集系統(tǒng)的輸入設備。USB端口可以滿足即插即用的要求,傳輸速度快。
4)上位機通信模塊:上位機采用普通常用 PC機(CPU主頻1.7 GHz,內存512M),通過RS232接口與開發(fā)平臺完成數(shù)據(jù)通信,進行程序的輸入與調試,以便及時對系統(tǒng)進行優(yōu)化和更新。
5)LCD顯示模塊:模塊采用三星4.3英寸液晶屏LTV350QV-F05,它是256色、分辨率為 480×272的TFT液晶屏,帶觸摸屏。具有輕薄、體積小、耗電量低、無輻射及映像穩(wěn)定不閃爍等特點。
硬件環(huán)境確定以后,首先,要為 linux設計一個BootLoader[3],通過BootLoader來初始化硬件,引導linux運行。Bootloader設計可以在ads中實現(xiàn)。然后,針對硬件環(huán)境,和設計的BootLoader修改linux內核。接下來,在Linux操作系統(tǒng)下建立編譯linux的交叉編譯環(huán)境。最后,配置、編譯、連接linux,下載編譯得到的映像文件到Flash,通過BootLoader來啟動linux。
在Linux下,設備驅動程序可以看成Linux內核與外部設備之間的接口。V4L是Linux中關于視頻設備的內核驅動,它為針對視頻設備的應用程序編程提供一系列接口函數(shù)[4]。在系統(tǒng)平臺上對 USB口數(shù)碼攝像頭驅動,首先下載相應的內核補丁,解壓安裝之后,進入內核配置選項,加載驅動,重新編譯內核,使驅動以靜態(tài)編譯的方式被加載到內核中。(1)Multimedia devices --- > <*>Video For Linux(2)USB Support --- > <*>Support for Host-side USB---USB Host Controller Driver Drivers <*>OHCI HCD support (3)USB Multimedia devices <*>USB SPCA5XX Sunplus/Vimicro/Sonix jpeg Cameras
LCD顯示采用framebuffer技術,它是圖形界面顯示的接口[5]。Linux內核根據(jù)硬件描述抽象出framebuffer設備,用戶態(tài)的進程能夠直接寫屏。將Frame buffer映射到進程地址空間之后,就可以直接進行數(shù)據(jù)的讀寫操作,寫操作可以反應在顯示設備上。此系統(tǒng)中framebuffer的設備文件是/dev /fb0。幀緩沖設備驅動程序主要基于兩個文件:①Linux/include/linux/fb.h;②linux/drivers/video/fbmem.c。由于其為字符設備,所以采用“文件層——驅動層”的接口方式。幀緩沖設備驅動層接口直接對LCD硬件操作,而fbmem.c能記錄并管理數(shù)個底層設備驅動。
設計采用的圖像采集系統(tǒng)軟件部分主要包括圖像獲取模塊、圖像處理模塊、圖像顯示模塊[6]。系統(tǒng)軟件結構如圖2。
圖2 嵌入式圖像采集系統(tǒng)結構圖
首先,打開攝像頭設備,獲取操作攝像頭設備的文件描述符,進而獲取其一系列設備參數(shù)信息,將信息從內核空間拷貝到用戶程序空間,在用戶空間修改數(shù)據(jù)信息。由于通常最快的磁盤訪問還是比最慢的內存訪問要慢,所以系統(tǒng)采用內存映射的方式截取圖像,加快I/O訪問速度。用函數(shù)vd->map=mmap(0,vd-> mbuf.size,PROT_READ|PROT_WRITE,MAP_SHARED, vd->fd,0)將攝像頭相應的設備文件映射到內存區(qū),在映射內存區(qū)進行數(shù)據(jù)的讀寫。
其次,本設計攝像頭采集的是JPEG圖片格式,由于LCD只能顯示RGB格式的圖像數(shù)據(jù),所以要將采集到的數(shù)據(jù)進行解碼轉換成RGB格式。libjpeg是一個被廣泛使用的JPEG壓縮/解壓縮函數(shù)庫,它能夠讀寫 JPEG圖像文件,因此顏色空間轉換、降采樣/增采樣、顏色量化之類的工作由 libjpeg庫完成。系統(tǒng)所用的 Framebuffer設備的顏色深度為16位,采用5-6-5的顏色格式——即R(紅色)在16bit中為高5位,G(綠色)在16 bit中為中間6位,B(藍色)在16 bit中取低5位; libjpeg解壓出來的圖像數(shù)據(jù)為24位RGB格式,所以必須進行數(shù)據(jù)轉換。對于24位的RGB,一個字節(jié)表示一種顏色分量,將其轉換為RGB565的方法為:對于R字節(jié),右移3位,對于G字節(jié),右移2位,對于B字節(jié),右移3位,然后將所有右移所得到的值拼接起來,就能夠得到16位的顏色值[7]。
最后,操作LCD設備,獲取顯示設備文件描述符,得到framebuffer固定信息,如圖形硬件上實際的幀緩存空間大小、硬件是否能夠加速等信息。得到FrameBuffer屏幕變化的信息,主要是Framebuffer的長度、寬度以及顏色深度等。然后將 framebuffer映射到內存中,通過數(shù)據(jù)填充函數(shù)將之前通過數(shù)據(jù)處理獲得的RGB565顏色值寫到framebuffer中,這樣就可以在LCD顯示設備上看到采集到的圖像[8]。圖像采集的具體實現(xiàn)流程如圖3。
圖3 圖像采集流程
實驗中設定系統(tǒng)向驅動申請4個幀緩沖進行循環(huán)隊列采集,實驗設置采集到的圖像為30幀。在實驗室條件下,將系統(tǒng)串口線與 PC機連接,配置好超級終端,實現(xiàn)系統(tǒng)與PC機在windows下的通信,在 Linux下進入要存放程序的目錄/tmp,將圖像采集系統(tǒng)程序通過點擊超級終端菜單中的“發(fā)送文件”將圖像采集系統(tǒng)程序傳送至 tmp目錄下,用命令chmod 777 caiji改變文件權限,使文件可執(zhí)行。最后執(zhí)行程序,采集到的圖像如圖4示。
圖4 實驗結果
實驗結果表明:本系統(tǒng)可以實現(xiàn)圖像的采集,視頻采集實現(xiàn)的效果比較流暢,在光線較暗的情況下,攝像頭仍能采集到視頻數(shù)據(jù),并能夠在LCD上顯示。較windows下的視頻采集效果要相對清晰。
設計在基于ARM9處理器s3C2440主要架構硬件平臺基礎上,實現(xiàn)了嵌入式圖像采集系統(tǒng)。該系統(tǒng)體積小、攜帶方便,有著廣闊的應用前景。下一階段的工作可以完善圖像采集系統(tǒng)功能,比如圖像數(shù)據(jù)的處理與壓縮,人工智能等算法。
[1] 屈執(zhí)勤,呂楊.基于 ARM Lniux的圖像采集與藍牙傳輸[J].單片機與嵌入式系統(tǒng)應用,2007(08):28-30.
[2] 陳峰,郭爽,趙欣.基于QT和嵌入式的視頻監(jiān)控系統(tǒng)[J].通信技術,2011,44(10):109-111.
[3] 劉地軍,鐘宏.基于ARM架構的視頻服務器設置[J].信息安全與通信保密,2006(12):97-99.
[4] 張簡,孔翠香.嵌入式無線視頻小車的設計與實現(xiàn)[J].通信技術,2011,44(11):113-115.
[5] 王培珍,徐俊生.基于ARM9的嵌入式 Linux圖像采集系統(tǒng)設計[J].智能控制、檢測技術及應用,2007(10):85-88.
[6] 唐六華,唐建明,向紅權.嵌入式Linux下OLED顯示功能模塊實現(xiàn)[J].信息安全與通信保密,2009(06):55-57.
[7] 王海珍,藤艷平.嵌入式 Linux 實時調度算法及應用[J].計算機工程與設計,2010(21):4592-4597.
[8] 吳繁.基于 ARM嵌入式平臺的目標跟蹤系統(tǒng)的研究[D].武漢:武漢科技大學,2009.