符多鐸,譚秋林,王紅亮,王道勝
(中北大學儀器科學與動態(tài)測試教育部重點實驗室電子測試技術國家重點實驗室,山西 太原 030051)
隨著科學技術的發(fā)展,圖像采集與處理技術的應用越來越廣泛。設計能夠?qū)崿F(xiàn)圖像采集與圖像處理一體化、結(jié)構(gòu)緊湊并能有效降低成本的專用圖像處理系統(tǒng),將具有很大的市場應用前景。如果采用計算機作為主處理器,用PCI或其他總線接口來實現(xiàn)圖像采集,雖然圖像數(shù)據(jù)采集的實時性能得到保證,但系統(tǒng)的體積大,整體結(jié)構(gòu)復雜,不便于應用到便攜式環(huán)境中[1]。但如果采用單片機或FPGA這類微處理器來代替計算機,這時圖像數(shù)據(jù)采集的實時性又難以實現(xiàn),從而導致系統(tǒng)的整體性能降低。近年來,隨著嵌入式技術的發(fā)展,ARM處理器運算的能力不斷地增強以及處理圖像的技術不斷地提高,基于ARM的圖像采集廣泛地被用于各個領域[2-5]。本系統(tǒng)采用S3C6410作為處理器,實現(xiàn)了基于ARM11實時對攝像頭圖像進行采集,并增強了圖像采集的性能。
本系統(tǒng)硬件平臺主要是ARM11開發(fā)板加上一些輔助性的外圍設備,用到的外圍設備主要有網(wǎng)絡端口、CMOS攝像頭等。開發(fā)板采用的是韓國三星公司的S3C6410處理器,該處理器功能強大,采用ARM1176JZF-S的核,包含16 kbyte的指令數(shù)據(jù)Cache和16 kbyte的指令數(shù)據(jù)TCM。使用的攝像頭是OV9650攝像頭,這款攝像頭采用 CMOS 圖像傳感器,支持 YUV,RGB565,RGB555,GRB,RAW RGB等多種輸出格式,全部可以通過寄存器來設置。本方案主要用到RGB輸出模式,OV9650主要通過PCLK時鐘與HREF來控制8 bit并行數(shù)據(jù)的傳輸。
平臺的軟件系統(tǒng)采用嵌入式Linux系統(tǒng),它是源碼開放的嵌入式操作系統(tǒng),支持多任務,具有完備的TCP/IP協(xié)議棧并支持多種文件系統(tǒng)[6]。另外Linux系統(tǒng)能夠方便地進行移植和內(nèi)核定制,也使得本系統(tǒng)實現(xiàn)起來較為方便和簡單,如Video4Linux2內(nèi)核應用編程接口函數(shù),能實現(xiàn)對OV9650攝像頭單幀圖像的采集,并保存成文件供進一步處理。
系統(tǒng)組成如圖1所示。
圖1 系統(tǒng)組成框圖
往開發(fā)板中燒寫嵌入式Linux操作系統(tǒng)的具體的操作流程如下:
1)打開軟件SD-Flasher.exe燒寫軟件,將FAT32格式的SD卡連入計算機,將要燒寫的u-boot燒寫到SD卡中。利用串口調(diào)試軟件dnw來訪問開發(fā)板,并將u-boot文件拷貝到開發(fā)板的nandflash中。點擊serial port/transmit,如圖2 所示。
圖2 dnw軟件菜單選項(截圖)
2) 選擇文件“u-boot_nand_ram256.bin”,打開后將Linux內(nèi)核燒寫到NandFlash里面。
3)接下來將UBIF文件系統(tǒng)拷貝到開發(fā)板中,選擇文件 rootfs_qtopia_qt4-mlc2.ubi,打開,這樣就完成了將文件系統(tǒng)燒寫到NandFlash中,如圖3所示。
圖3 dnw軟件選擇文件系統(tǒng)相關文件(截圖)
4)重新啟動開發(fā)板,這樣就可以進入Linux系統(tǒng)了。
下位機服務器端程序流程如圖4所示。
圖4 下位機服務器端程序流程圖
首先,打開OV9650攝像頭設備,在/dev下會有設備/dev/video0,打開設備/dev/video0,通過ioctl函數(shù)即可以對攝像頭設備進行操作,將采集到的圖像傳遞給socket網(wǎng)絡服務器端口,socket套接字將數(shù)據(jù)發(fā)送到網(wǎng)絡端口上,本設計網(wǎng)絡端口號設為8888。
本設計中圖像采集主要是靠Linux中視頻設備內(nèi)核驅(qū)動Video4Linux2來實現(xiàn)的。在Linux中,訪問視頻設備可以像訪問普通文件一樣進行讀寫,攝像頭在/dev/video0下。
Video4Linux2在本設計中用到的結(jié)構(gòu)體及其說明如下:
本設計用到命令標識符及其功能說明如下:
Video4Linux2下視頻編程的流程如下:
1)打開視頻設備;
2)通過ioctl函數(shù)查詢驅(qū)動功能;
3)通過ioctl函數(shù)獲取設備的輸入;
4)通過ioctl函數(shù)查看當前設備是否有輸入輸出數(shù)據(jù);
5)通過ioctl函數(shù)獲取并設置幀參數(shù);
6)通過ioctl函數(shù)開始采集數(shù)據(jù)。
關于socket服務器端TCP協(xié)議編程如下:
下面幾個函數(shù)是本程序中用到的socket API,這些函數(shù)都在 sys/socket.h 中。
1)int socket(int family,int type,int protocol);//打開網(wǎng)絡通訊端口
2)int bind(int sockfd,const struct sockaddr*myaddr,socklen_t addrlen);//將參數(shù)sockfd和myaddr綁定在一起,使sockfd這個用于網(wǎng)絡通訊的文件描述符監(jiān)聽myaddr所描述的地址和端口號
3)int listen(int sockfd,int backlog);//listen()聲明sockfd處于監(jiān)聽狀態(tài)
4)int accept(int sockfd,struct sockaddr*cliaddr,socklen_t*addrlen);//三次握手完成后,服務器調(diào)用accept()接受連接
服務器程序結(jié)構(gòu)為:
整個服務器程序是一個while死循環(huán),每次循環(huán)處理一個客戶端連接,通過connfd進行通信,然后關閉connfd斷開連接,而不關閉listenfd。accept()成功返回一個文件描述符,出錯返回-1。
上位機客戶端程序流程如圖5所示。
圖5 上位機客戶端程序流程圖
打開系統(tǒng)本身自帶的framebuffer,并進行初始化,利用內(nèi)存映射將framebuffer映射到內(nèi)存上以便以后對采集到的圖像進行操作。framebuffer是Linux內(nèi)核當中的一種驅(qū)動程序接口。framebuffer機制模仿顯卡的功能。用戶可以將framebuffer看成是顯示內(nèi)存的一個映像,將其映射到進程地址空間之后,就可以直接進行讀寫操作,而寫操作可以立即反應在屏幕上。這種操作是抽象的,統(tǒng)一的。主要利用open函數(shù)來打開文件,ioctl函數(shù)來找出framebuffer顯示的邊界以及framebuffer顯示像素的位數(shù)等,mmap函數(shù)來進行內(nèi)存映射。
打開CMOS攝像頭設備并且進行初始化,確定采集到數(shù)據(jù)的格式,本設計將采集到的數(shù)據(jù)自動轉(zhuǎn)換為RGB565格式,這樣傳輸時對于數(shù)據(jù)進行處理也會比較簡單。
通過socket網(wǎng)絡編程接收采集到的數(shù)據(jù)給上位機,是RGB565格式的,通過函數(shù)RGB565to32將16 bit格式的數(shù)據(jù)轉(zhuǎn)換成在計算機上可顯示的32 bit格式,之后在計算機上將圖像通過內(nèi)存映射的方法將圖像顯示出來。
硬件實物如圖6所示。
圖6 實物圖示
啟動開發(fā)板,將程序拷貝到開發(fā)板里,通過計算機控制開發(fā)板,執(zhí)行服務器端的程序。然后在PC機上轉(zhuǎn)換到命令行模式,按“s”保存圖片。保存的圖片如圖7所示。
圖7 采集的圖像
在圖像采集領域,利用ARM微處理器來控制圖像傳感器進行圖像采集,有其他微處理芯片所不能達到的優(yōu)勢。加之,可以很方便地在ARM開發(fā)板上搭建代碼全公開的嵌入式Linux操作系統(tǒng),這樣使得基于ARM的圖像采集系統(tǒng)在今后的圖像采集領域會有更大的發(fā)展。
[1]胡志海,王德君,趙巧云,等.基于SOPC的便攜式智能圖像采集系統(tǒng)設計[J].儀器儀表學報,2010,31(2):371-376.
[2]劉攀,王紅亮,孟令軍.基于FPGA的數(shù)字圖像采集存儲系統(tǒng)的設計[J].電視技術,2010,34(6):32-34.
[3]劉珂含,何培宇,關勝平,等.基于TMS320VC5509A的圖像采集與識別系統(tǒng)[J].四川大學學報:自然科學版,2008,45(1):48-52.
[4]嚴新忠,陳雨.基于嵌入式ARM的圖像采集與傳輸設計[J].研究與開發(fā),2009,28(11):57-59.
[5]劉紅喜,李長江,孫俊喜.基于DSP的圖像采集及處理系統(tǒng)的設計與實現(xiàn)[J].電子技術與應用,2009(2):22-26.
[6]王剛,毛劍飛,田青,等.基于ARM11的無線視頻監(jiān)控系統(tǒng)[J].計算機系統(tǒng)應用,2011,20(8):18-22.