對圖像監控係統,用戶常常提出這樣的功能需求:希望能夠監控距離較遠的對象 這些對象有可能分布在郊區、深山,荒原或者其他無人值守的場合;另外,希望能夠獲取比較清晰的監控圖像,但對圖像傳(chuan) 輸的實時性要求並不高 很明顯,用傳(chuan) 統的PC機加圖像采集卡的方式很難滿足這樣的需求。
在嵌入式領域,ARM9係列微處理器在高性能和低功耗方麵提供了最佳的性能,因此選用ARM9嵌入式處理器S3C2440設計實現了一個(ge) 遠程圖像光線監控係統通過這個(ge) 係統,可以遠在千裏之外控製一個(ge) 攝像機進行圖像采集並回傳(chuan) 。如果這個(ge) 攝像機有一個(ge) 485接口的雲(yun) 台,還可以通過互聯網遠程控製攝像機的取景角度、鏡頭拉伸、聚焦等功能 除了獲取圖像數據.係統還提供了多路開關(guan) 控製和數據采集功能,可以連接溫度、濕度等各類傳(chuan) 感器和控製紅外夜視燈等其他外部設備的開關(guan) 狀態。最後,通過GPRS或CDMA無線通信模塊及Internel互聯網將數據傳(chuan) 至任何地方
1 係統設計
本係統采用三星公司的S3C2440嵌入式處理器和arm-linux 2.4.26操作係統;S3C2440使用ARM920T內(nei) 核,主頻是400 MHz;除了集成通用的串口控製器、USB控製器、A/D轉換器和GPIO等功能之外,還集成了一個(ge) 攝像頭接門(CAMIF)(這個(ge) 接口是遠程圖像采集的核心部分)。係統在S3C2440處理器的控製下,從(cong) CCD攝像機采集模擬視頻信號,然後經過編碼、DMA傳(chuan) 輸到內(nei) 存緩衝(chong) ,接著由軟件對內(nei) 存中的數字視頻數據進行壓縮和打包.最後通過通信單元將圖像以IP包的方式發送到監控中心的服務器。整個(ge) 係統的硬件結構原理如圖1所示
1.1 圖像采樣接口
S3C2440的攝像頭接口(CAMIF)支持ITU-R BT.601/656 YCbCr 8比特標準的圖像數據輸入,最大可采樣4096×4096像素的圖像。攝像頭接口可以有兩(liang) 種模式與(yu) DMA控製器進行數據傳(chuan) 輸:一種是P端口模式,把從(cong) 攝像頭接口采樣到的圖像數據轉為(wei) RGB數據,並在DMA控製下傳(chuan) 輸到SDRAM(一般這種模式用來提供圖像預覽功能);另一種是C端口模式,把圖像數據按照YCbCr 4:2:0或4:2:2的格式傳(chuan) 輸到SDRAM(這種模式主要為(wei) MPEG-4、H.263等編碼器提供圖像數據的輸入)。上述兩(liang) 種工作模式都允許設置一個(ge) 剪輯窗口,隻有進入這個(ge) 窗口的圖像數據才能夠傳(chuan) 輸到SDRAM。上述過程可用圖2說明。
S3C2440的攝像機接口接收ITU標準的圖像數據,不能直接接收CCD攝像機輸出的模擬視頻信號,因此還需要1片SAA7113視頻解碼芯片。SAA7113可以輸入4路模擬視頻信號,通過內(nei) 部寄存器的不同配置可以對4路輸入進行轉換,輸入可以為(wei) 4路CVBS或2路S視頻(Y/C)信號,輸出8位“VPO”總線,為(wei) 標準的ITU 656、YUV 4:2:2格式。對SAA7113初始化需要通過I2C 總線進行,而S3C2440內(nei) 部集成的I2C控製器正好可以實現這個(ge) 過程。S3C2440 的攝像機接口與(yu) SAA7113的連接原理如圖3所示。
SAA7113 的CE 引腳與(yu) S3C2440 的一個(ge) GPIO 引腳相連,這樣可以控製SAA7113的工作狀態。當無須采集圖像時,將該GPIO 口輸出低電平,使SAA7113芯片處於(yu) 低功耗狀態,節省電能的消耗。
對照圖2和圖3可以看出,SAA7113芯片就是圖2的“外部圖像傳(chuan) 感器”。它向嵌入式係統的攝像機接口提供了采樣到的標準ITU 視頻數據。這些數據經過DMA的P端口或C端口控製傳(chuan) 輸到了內(nei) 存,這樣就可以在內(nei) 存中對圖像數據作進一步的加工處理。
1.2 圖像采樣接口的驅動
按照Linux視頻設備驅動的模型V4L(video for Linux)編寫(xie) 了SAA7113與(yu) S3C2440攝像機接口的驅動。驅動使用C端口模式與(yu) DMA進行通信。采樣1幀圖像之前,首先設置采樣圖像的分辨率和剪輯窗口大小等參數,然後設置DMA控製器訪問的視頻采樣輸出緩衝(chong) 的內(nei) 存地址,接著就可以通過設置S3C2440的CAMIF接口控製寄存器啟動1幀圖像的采集。當采集完1幀圖像時,CAMIF接口會(hui) 自動啟動1次C端口的DMA通信,把采集的圖像數據傳(chuan) 到內(nei) 存。傳(chuan) 輸結束後,會(hui) 產(chan) 生一個(ge) C端口的中斷,通知驅動1幀數據采樣和傳(chuan) 輸結束。具體(ti) 來說,這個(ge) 驅動需要實現以下功能:
- 初始化S3C2440的CAMIF接口的時鍾寄存器。主要是根據SAA7113的外接晶振頻率設置攝像機時鍾分頻寄存器(CAMDIVN)。該寄存器的0~3位是分頻係數,其計算方法是:
CAMCLK_DIV=UPLL/(CAMCLK * 2)-1
(初始化代碼略— — 編者注) - 配置CAMIF接口的采樣參數。主要是輸入源圖像數據的格式、輸出的圖像格式、采樣的窗口大小、DMA的訪問地址等參數。這裏定義了一個結構,用於存儲與CAMIF接口相關的配置信息:
struct s3c2440_camif_cfg_t {
int src_x; //輸入的源圖像寬度
int src_y; //輸入的源圖像高度
int dst_x; //輸出的目標圖像寬度
int dst_y; //輸出的目標圖像高度
int dst_fmt; //輸出的目標圖像數據格式
int pre_x; //預覽通道(P端口模式)輸出的圖像寬
int pre_y; //預覽通道(P端口模式)輸出的圖像高
int pre_fmt; //使用通道(P端口模式)時設為1
__u16 bypass; //為1時表示不啟用按比例的圖像放大/縮小
__u16 ycbcr; //輸入圖像的YcbCr順序
struct s3c2440_camif *dev; //設備的係統信息
};
上述這些配置信息最終是與一係列的寄存器相關聯的。這個結構為讀/寫寄存器提供了一個清晰的、集中的存儲緩衝。 - 打開、關閉和控製攝像機的接口函數。這3個接口函數是按V4L規範編寫的,其原型如下:
① 打開攝像機接口函數:
static int v4l_cam_open(struct video_device *v,int mode);
② 控製攝像機接口函數:
static int v4l_cam_ioctl(struct video_device *v,unsigned int cmd,void *arg);
③ 關閉攝像機接口函數:
static void v4l_cam_close(struct video_device *v); - 中斷處理接口函數。該中斷處理函數在使用C端口模式完成1幀圖像采集後被調用。函數原型定義如下:
static void s3c2440_camif_isr_c(int irq,void *dev_id,struct pt_regs *regs); - 讀取圖像數據的實現函數。該函數通過dev→rdy的值判斷1幀圖像有無采集轉換結束。如果該值置1,則表示采樣結束,這時就可以從圖像數據的緩衝中拷貝數據到用戶的存儲空間;如果為0,則函數進入阻塞或返回EAGAIN標誌。順便提一下,dev→rdy的值是在中斷處理函數中設置的。(實現代碼略—— 編者注)
1.3 圖像數據的壓縮
S3C2440的CAMIF接口處理得到的1幀圖像數據比較大,還要經過進一步的壓縮才能適合進行網絡數據傳(chuan) 輸。S3C2440處理器內(nei) 部沒有提供硬件的圖像壓縮編碼器,但因為(wei) 它的主頻較高,可以使用軟件來進行圖像壓縮。考慮到CPU的處理能力和對單幀采樣圖像的清晰度有較高的要求,采用基於(yu) 離散餘(yu) 弦變換算法(DCT)的JPEG/MJPEG方式對圖像數據進行壓縮編碼。
1.4 圖像數據的傳(chuan) 輸
通信單元承擔了圖像的數據傳(chuan) 輸任務。在本係統中,有兩(liang) 種通信單元可供使用。一種是GPRS/CDMA無線傳(chuan) 輸模塊。它們(men) 通過串口與(yu) S3C2440處理器相連接,在以太網絡傳(chuan) 輸線纜難以鋪設的環境中可以使用這種通信方式。它的缺點是通信帶寬小,傳(chuan) 輸速度慢,但是如果對實時性要求不高,也能夠傳(chuan) 輸高清晰的靜態圖片。另一種通信單元是10 MHz的CS8900a以太網絡傳(chuan) 輸模塊。它可與(yu) 局域網相連接,然後將監控圖像發送到局域網的監控服務器或者通過網關(guan) 發送到互聯網上。這種通信方式速度高,實時性好,但監控現場要安裝有線的以太網絡。
1.5 攝像機雲(yun) 台的控製
攝像機的雲(yun) 台控製接口采用RS485通信方式。因S3C2440內(nei) 部隻有RS232的控製器,為(wei) 此使用MAX485芯片設計了一個(ge) RS232到RS485的轉換接口。該電路原理如圖4所示。
圖4中RS485的數據流方向由GPE13口的電平進行控製。
2 係統軟件的設計
係統軟件包含下位機軟件、服務器軟件和客戶端軟件。下位機軟件部署在遠程圖像監控設備上。這個(ge) 軟件作為(wei) 一個(ge) Linux的守護進程啟動,負責壓縮采樣到的圖像數據,並把壓縮後的圖像打包,然後通過Socket通信方式上傳(chuan) 到監控服務器。如果使用GPRS/CDMA無線傳(chuan) 輸模塊,上位機軟件在係統啟動完成後,就自動進行PPP撥號,建立起一條TCP/IP的通信管道。客戶端軟件部署在一台連接到互聯網的PC機上,它提供給最終用戶瀏覽監控畫麵,設置監控參數等功能。服務器軟件也部署在一台連接到互聯網的計算機上。這台計算機在互聯網上有固定的IP或者域名,服務器軟件作為(wei) 一個(ge) 後台進程啟動,為(wei) 客戶端和遠程圖像監控設備之間的通信起到一個(ge) 橋梁的作用。因為(wei) 遠程監控設備的IP地址是動態的,無法被客戶端直接尋址,因此就需要服務器作為(wei) 雙方通信的中間橋梁。
下位機軟件通過驅動程序提供的接口,在遠程圖像監控設備中完成硬件的初始化、控製等功能,同時又負責圖像的壓縮和傳(chuan) 輸。它是所有設備的控製中樞,因此這裏著重描述下位機軟件的工作流程,如圖5所示。
為(wei) 了省電,一些像SAA7113、攝像機和夜視紅外燈等大功耗的器件和設備隻有在需要時才工作,所以這些設備在初始化時都是斷開電源的。
下位機程序讀取保存在設備上的設備ID號(該ID號是唯一的),以及監控服務器的域名/IP地址和端口,然後下位機程序作為(wei) Socket連接的客戶端主動與(yu) 監控服務器進行連接。連接成功之後,送出設備的ID號。這時如果有監控的客戶端想要查看某個(ge) 遠程監控設備的圖像,隻要向監控服務器發出請求,告訴服務器要連接的設備ID號,服務器就會(hui) 根據這個(ge) ID號對應的Socket句柄,為(wei) 客戶端和遠程監控設備建立一個(ge) Socket連接通道。
3 總結
遠程圖像無線監控係統在高壓輸電線路的覆冰監測中得到了成功的應用。在野外全天候環境下,適時準確地監測高壓輸電線路覆冰厚度,同時發出預警處理信息,從(cong) 而有效地避免了斷纜事故的發生。
遠程圖像監控技術是隨著計算機技術、數字通信技術、網絡技術、自動控製技術以及LSI、VLSI集成電路的發展而發展的,而基於(yu) ARM9嵌入式處理器的本係統正是這些技術學科相互交叉和融合發展的集中體(ti) 現。實踐證明,ARM9處理器的低功耗、高性能和多功能的特性滿足了遠程圖像監控的許多特殊需求,是實現遠程圖像監控的很好選擇。