摘 要:設計一種基于Intel PXA255的ARM+Linux組成的倉庫視頻監控系統,該系統通過以太網實現對倉庫現場情景的監控。首先介紹了基于ARM的倉庫視頻監控的優勢,其次介紹硬件平臺,并給出視頻監控的具體實現方案,最后重點介紹如何實現在PXA255和PC監控機間圖像的采集和傳輸。該系統運行穩定,PC監控機能準確地接收采集到的圖像。這里將ARM與USB攝像頭的視頻監控結合起來并應用于倉庫的安防中,系統價格便宜,工作穩定。
關鍵詞:ARM PXA255;Linux;視頻監控;圖像采集
中圖分類號:TP277文獻標識碼:B
文章編號:1004-373X(2008)24-043-02
Design and Realization of Storehouse Video Monitoring System Based on ARM
HAN Jun
(Zhejiang International Maritime College,Zhoushan,316021,China)
Abstract:A storehouse video monitoring system composed by ARM+Linux based on the Intel PXA255 has been designed.Storehouse scene monitoring is realized through Ethernet.At first,this paper introduces the superiority of storehouse video monitoring based on ARM.Then,it introduces the hardware platform,offers the realization plan of video monitoring in detail.Finally,this paper emphases on how to realize the gathering and transmission of image between PXA255 and PC monitoring machine.This system operates well,and the PC monitor could receive the image gathered accurately.Using ARM and the USB camera video monitoring and applying in the storehouse guards against peacefully,the price of system is cheap and the work is stable.
Keywords:ARM;PXA255;Linux;video monitoring;image acquisition
傳統的監控系統是將其前端設備與中心端設備用電纜簡單的進行連接,或者利用傳統無線通道傳輸。由于其系統龐大,因此軟硬件資源得不到充分利用。隨著多媒體技術、計算機和網絡技術的發展和網絡帶寬的迅速擴大,同時人們對于安全、防盜和提高工作效率等方面意識的增強,出現了將數字視頻監控技術與網絡技術相結合的監控體系。本系統中所使用的攝像頭為市面上常見的USB攝像頭,價格便宜而且性能穩定。同時,這種監控方式傳輸可靠,使用方便,因此可以大范圍使用在倉庫等地點[1,2]。
嵌入式Linux操作系統同目前廣泛應用的嵌入式操作系統WinCE,VxWorks等相比,具有可移植性好、網絡功能強、完全開放源代碼等優點。PXA255是因特爾公司開發的一款采用ARM結構,面向高性能、低功耗設備的嵌入式處理器,它的硬件結構使得其適合做圖像采集與運算處理。
綜合以上考慮,利用Intel PXA255的ARM+Linux組成的嵌入式視頻監控系統具有現實意義和實用價值。
1 系統硬件平臺
整個系統是在以Intel PXA255為核心的開發板上實現的。PXA255是一個32位處理器,它的主頻可達400 MHz,工作電壓為1.3 V,功耗小,節約電能,價格低。它內部集成了多種外設控制模塊,在實際使用時可以根據需要進行裁減。開發板配備了豐富的硬件資源,以太網部分采用的是CS8900以太網控制器。USB部分采用專為嵌入式領域研制的CY67300作為USB主控制器,該芯片可作為主口控制,也可作為從口控制芯片,內嵌有8051微控制器和RAM,支持全速和高速兩種模式。這樣可以方便地使用USB攝像頭來進行圖像的采集。USB攝像頭選用的是使用了OV511芯片的網眼V2000攝像頭,它是Linux內核公開支持的攝像頭芯片。
2 系統總體設計和Linux內核的配置
2.1 系統總體設計
倉庫視頻監控系統主要分為ARM(PXA255)、USB攝像頭、遠程PC監控電腦幾部分,其結構框圖如圖1所示[3]。系統的整個工作流程如下:PXA255是整個系統的“大腦”,它通過Linux操作系統的調度,實現對系統的整體管理。遠程的PC監控電腦若發出了啟動監控的指令,PXA255通過網口解析收到的指令,并打開攝像頭V2000開始進行視頻監控,采集的圖像通過以太網口傳送到遠程的PC監控電腦。PC監控電腦將圖片文件保存起來,這些被保存起來的文件將有2個作用:可以供監控人員通過IE瀏覽器觀察監控現場的圖像;可以作為圖像數據保存起來并在必要的時候在進行重新調用。

2.2 Linux內核的配置
在嵌入式Linux的版本方面,選用Linux2.4.18。由于Linux2.4.18已經能夠很好的支持OV511系列的USB攝像頭,在使用make menuconfig配置內核時,一定要加上內核對USB攝像頭的支持。具體步驟為:在USB Support的USB Multimedia中選擇USB OV511 Camera Support,在Multimedia devices中選擇Video for Linux,內核被配置成支持Video4Linux,它使得可以使用Linux內核為視頻采集設備提供的一系列編程接口[4,5]。
3 視頻監控中的圖像采集軟件流程
系統在基于PXA255的ARM芯片和嵌入式Linux系統平臺上采用Video4Linux編程來獲取圖像[6]。由于在截取到圖像后將使用JPEG軟件壓縮,因此必須移植一個針對Linux環境的jpeg-6b的JPEG庫壓縮包,在進行了交叉編譯以后,會生成JPEG庫文件libjpeg.so.62,程序將會使用這個JPEG庫文件和相應的頭文件來完成JPEG壓縮。Video4Linux是Linux中關于視頻設備的內核驅動,它為針對視頻設備的應用程序編程提供了一系列的接口函數,這些視頻設備包括當今市場上流行的USB攝像頭、TV卡和視頻捕捉卡等。對于USB攝像頭而言,其驅動程序中需要提供一些基本的I/O操作接口函數(如open,write,read,ioctl,close等)來實現與設備文件的“交流”,它們定義在struct file_operations中,這樣當應用程序對設備文件進行諸如:open,write等操作時,Linux內核將通過file_operations結構訪問驅動程序提供的函數。采集程序實現過程:調用函數fd=open()打開視頻設備對應設備文件/dev/video0,接著分別調用VIDIOCGCAP,VIDIOCGPICT來獲得設備相關信息、讀取圖像信息,然后利用VIDIOCSWIN和VIDIOCGMBUF分別設置圖片的高、寬和申請后面需要使用的緩沖區,在完成了設備的初始化和mmap()設置內存映射區后,就可以進行幀采集[7]。在幀采集環節采用的方法是雙幀輪流采集,當處理器對前一幀數據進行處理時,攝像頭可以進行下一幀的采集,這樣能大大提高采集效率。為了使用這種雙幀采集的方法,在程序初始化時,必須設置變量frame來對frame_using[frame]進行前一幀與當前幀的標識,在每幀采集完成后,用buffer[frame]=vd.map + vd.mbuf.offsets[frame]計算幀數據的地址,通過frame=(frame+1)%2來控制雙幀的順序。每幀采集完成后調用JPEG庫libjpeg.so.62,開始對其進行JPEG壓縮,這樣做的目的是減少圖像在以太網的傳輸時間以及節省監控電腦一側保存時所占用的空間大小,設置采集到的圖片格式為240×320,經過壓縮后的大小約為6 kB,采集幀的速度約24 f/s。最后數據被送入以太網,發送到PC監控電腦。攝像頭圖像采集流程如圖2所示。

4 圖像的以太網傳輸流程
圖像的以太網傳輸是采用SOCKET編程來完成的。SOCKET接口是TCP/IP網絡的API,SOCKET接口定義了許多函數或者例程,它可以被用來開發TCP/IP網絡上的應用程序。傳輸程序采用的方式是服務器和客戶協同工作模式,它們之間是面向連接的工作方式[8]。
服務器的工作流程[9,10]:首先使用socket函數創建一個流套接字,該套接字是指定給這個服務進程的一個開放的系統資源。調用bind函數以及之前創建的套接字使得其與本機地址以及一個本地端口號綁定起來,然后使用listen函數在之前創建的套接字上進行監聽,它為進入的連接創建一個連接隊列。服務進程通過調用accept函數接收這些連接。如果accept函數收到一個連接服務請求后,將產生一個新的socket號,原有的socket號并沒有被丟棄,可以做其他連接,而這個新的socket號將只用于和特定客戶的通信。最后在讀入客戶端的數據請求后,將數據依次寫入緩沖區。客戶端的工作流程[9,10]:客戶端的動作比服務器端要直觀。客戶進程通過調用socket創建一個套接字,將服務器進程的已命名套接字作為地址調用connect函數與服務器進程建立連接。一旦建立連接,客戶端和服務器就可以像用普通文件描述字一樣使用套接字進行雙向通信。
參考文獻
[1]沈勇,王貞勇.基于Web的嵌人式系統設計與實現[J].計算機工程與應用,2003(22):119-121.
[2]崔珂,吳鎮煒,劉明哲.基于嵌入式實時Linux的遠程監控系統[J].計算機工程與應用,2005(10):95-97.
[3]劉恒洋,王森.基于ARM的視頻監控系統的設計與實現[J].微計算機信息,2007(20):125-127.
[4]Jonathan Corbet,Alessandro Rubini,Cregkroah Hartman.Linux設備驅動程序[M].3版.魏永明,耿岳,鐘書毅,等譯.北京:中國電力出版社,2006.
[5]劉淼.嵌入式系統接口設計與Linux驅動程序開發[M].北京:北京航空航天大學出版社,2006.
[6]陳賾.ARM9嵌入式技術及Linux高級實踐教程[M].北京:北京航空航天出版社,2005.
[7]王滔,于潔,程小輝.Linux系統下USB攝像頭驅動開發[J].電子技術應用,2004(11):8-10.
[8]Syed Mansoor Sarwa,Robert Koretsky,Syed Aqeel Sarwar.UNIX教程 [M].2版.張玉潔,孟祥武,譯.北京:機械工業出版社,2006.
[9]林宇,郭凌云.Linux網絡編程[M].北京:人民郵電出版社,2001.
[10]趙克佳,沈志宇,趙彗.Unix程序設計教程[M].北京:清華大學出版社,2001.
作者簡介 韓 君 男,1981年出生,助教。主要研究方向為ARM嵌入式系統技術。