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