摘 要:隨著社會經濟和技術的迅猛發(fā)展,人們對圖像采集的實時性和遠距離傳輸?shù)囊笤絹碓礁?,傳統(tǒng)的圖像采集系統(tǒng)已經不能適應這種社會發(fā)展的要求了。本文根據當前實時圖像采集的現(xiàn)狀和發(fā)展趨勢,提出了一種新的實時圖像采集的設計方案,低成本、低功耗。它以ARM處理器為控制核心,以圖像傳感器作為實時數(shù)據的獲取設備,以GPRS無線模塊為傳輸設備的系統(tǒng)結構,實現(xiàn)了復雜環(huán)境下的實時圖像采集和遠距離傳輸?shù)墓δ堋?/p>
關鍵詞:實時圖像采集;ARM;GPRS;嵌入式Linux
中圖分類號:TP274.2
本文設計的視頻監(jiān)控系統(tǒng)在農業(yè)監(jiān)測、環(huán)境監(jiān)測、智能交通、安全監(jiān)控、智能家庭以及偏遠山區(qū)等惡劣環(huán)境方面有著廣泛的應用。
1 硬件系統(tǒng)結構和軟件設計
1.1 硬件系統(tǒng)結構圖
以ARM處理器為控制核心,攝像頭采集到圖像數(shù)據以后,經過軟件系統(tǒng)的壓縮處理后,通過GPRS網絡發(fā)送。硬件系統(tǒng)結構圖如圖1所示。
1.2 實時圖像采集的設計實現(xiàn)
本文利用V4L就可以實時采集攝像頭的視頻數(shù)據。通過攝像頭實時采集圖像時。
(1)打開攝像頭設備
grab_fd=fopen(“/dev/v4l/video0”,O_RDWR);
(2)讀取攝像頭有關信息,函數(shù)執(zhí)行成功則會把信息
從內核空間復制到用戶的程序空間grab_cap中
ioctl(grab_fd,VIDIOCGCAP,grab_cap);
(3)讀取攝像頭緩沖區(qū)中的信息
ioctl(grab_fd,VIDIOCGPICT,grab_pic);
(4)初始化攝像頭設備
if(ioctl(grab_fd,VIDIOCSPICT,grab_pic)<0)
{
perror(“VIDIOCSPICT”);
return -1;
}
(5)利用mmap()方式采集視頻
1)初始化picture屬性
2)初始化video_mbuf,獲取buffer信息
ioctl(grab_fd,VIDIOCGMBUF,grab_vm);獲取攝像頭緩沖區(qū)的幀信息,然后修改video_mmap的設置。
grab_buf.height=240;
grab_buf.width=320;
grab_buf.format=VIDEO_PALETTE_RGB24;
3)改變video_mmap和幀狀態(tài)的當前值
4)把攝像頭設備文件映射到內存
grab_data=(unsigned char *)
mmap(0,grab_vm.size,PROT_READ|PROT_WRITE,MAP_SHARED,grad_fd,0);
5)使用VIDIOCMCAPTURE開始截取一幀
ioctl(vd->fd,VIDIOCMCAPTURE,(vd->mmap));
通過VIDIOCSYNC判斷是否截取完畢。
6)if(ioctl(vd->fd,VIDIOCSYNC,frame)<0)
{ perror(“error:vidiocsync”);
return -1;
}
返回值非-1,則表明已經截取一幀,可以截取下一幀,frame是當前獲取的幀序號。
video_bmuf bmuf.frames=2;//一幀被處理時可同時采集下一幀。
int frame;//當前幀序號
int framestat;//幀狀態(tài)(等待采集或等待采集結束)
幀地址是vd->map+vd->mbuf.offsets[vd->frame]
設置grab_buf.frame=0,
使用ioctl(grab_fd,VIDIOCMCAPTURE,grab_buf),采集第一幀圖像。
使用ioctl(grab_fd,VIDIOCSYNC,frame)判斷是否采集結束,成功后可把圖像數(shù)據保存成文件。
(6)將壓縮后的圖像數(shù)據保存成JPG文件
1.3 實時圖像數(shù)據的無線傳輸?shù)脑O計與實現(xiàn)
利用UART傳輸數(shù)據前,先初始化波特率、傳輸格式(數(shù)據位數(shù)、是否校驗,停止位、流量控制),選擇UART的中斷模式。代碼如下:
#define PCLK 55000000 //設置時鐘源55MHz
#define UART_CLK PCLK
#define UART_BAUD_RATE 115200
#define UART_BRD ((RART_CLK/(UART_BAUD_RATE*16))-1
int Uart_Init()
{
GPHCON|=0xa0;
GPHUP=0x0c;
ULCON0=0x03;
UCON0=0x05; //查詢模式
UFCON0=0x00; //不使用FIFO
UMCON0=0x00; //不使用流量控制
UBRDIV0=UART_BRD; //設置波特率
}
完成UART的初始化工作,就可以通過UART向GPRS模塊發(fā)送AT指令和采集到的圖像數(shù)據了,傳輸層采用UDP協(xié)議。
int send_AtCmd(char *cmd,int n)
{
int i=0;
for(i=0;i { write(UART_dev,cmd[i],1); usleep(80); } write(UART_dev,”\r”,1); usleep(220000); return tcdrain(UART_dev); } int out_data(char *outpic,int size) { int i=0; for(i=0;i { write(UART_dev,outpic[n],1); usleep(80); } return tcdrain(fd); } 數(shù)據通過GPRS進行無線傳輸?shù)倪^程主要分為:(1)初始化GPRS模塊。(2)連接遠程服務器。(3)圖像數(shù)據發(fā)送。 利用SIM300-E模塊進行無線傳輸?shù)腁T指令: AT十CGMI AT+CCID Af+CGCLASS=“B” AT+WOPEN=1 AT#APNSERV=“CMNET” AT十CGATT=1 AT#CONNECTIONSTART Af#UDPSERV=l,“122.45.90.232” AT#TCPPORT=l,6000 當接收服務器收到以0XFFD8標志時,則分辨出一幅JPEG圖像的開始,JPEG數(shù)據塊用0xFFEn表示,而當接收到oxFFD9時一幅圖像傳輸結束,將這個兩個字段及之間的數(shù)據寫入JPEG文件后就完成了一幅圖像數(shù)據的傳輸。 傳輸完成后關閉GPRS連接和附著 AT#CONNECTIONSTOP Al+CGATT=0 2 系統(tǒng)的性能測試與分析 我們在進行性能測試時,采用實時采集20張圖片并傳輸時,在數(shù)據傳輸速度上,在網絡通信順暢和圖片分辨率為320*240的情況下,所需時間為8s左右,平均傳輸速度為50kb/s。在網絡通信繁忙的情況下,同樣的分辨率所需時間9~10s,平均傳輸速度為40kb/s。通過以上數(shù)據的分析,本文所設計的實時圖像采集系統(tǒng)基本能夠滿足要求。 參考文獻: [1]傅仁軒,肖連風.基于物聯(lián)網技術的新型數(shù)據采集與監(jiān)控系統(tǒng)設計[J].移動通信,2011,09. [2]高超.基于GPRS無線遠程監(jiān)控系統(tǒng)的關鍵技術研究[M].南京郵電大學,2012,3. 作者單位:齊魯師范學院 計算機系,濟南 250013;濟南大學 信息學院,濟南 250022