论文部分内容阅读
摘 要:随着社会经济和技术的迅猛发展,人们对图像采集的实时性和远距离传输的要求越来越高,传统的图像采集系统已经不能适应这种社会发展的要求了。本文根据当前实时图像采集的现状和发展趋势,提出了一种新的实时图像采集的设计方案,低成本、低功耗。它以ARM处理器为控制核心,以图像传感器作为实时数据的获取设备,以GPRS无线模块为传输设备的系统结构,实现了复杂环境下的实时图像采集和远距离传输的功能。
关键词:实时图像采集;ARM;GPRS;嵌入式Linux
中图分类号:TP274.2
本文设计的视频监控系统在农业监测、环境监测、智能交通、安全监控、智能家庭以及偏远山区等恶劣环境方面有着广泛的应用。
1 硬件系统结构和软件设计
1.1 硬件系统结构图
以ARM处理器为控制核心,摄像头采集到图像数据以后,经过软件系统的压缩处理后,通过GPRS网络发送。硬件系统结构图如图1所示。
1.2 实时图像采集的设计实现
本文利用V4L就可以实时采集摄像头的视频数据。通过摄像头实时采集图像时。
(1)打开摄像头设备
grab_fd=fopen(“/dev/v4l/video0”,O_RDWR);
(2)读取摄像头有关信息,函数执行成功则会把信息
从内核空间复制到用户的程序空间grab_cap中
ioctl(grab_fd,VIDIOCGCAP,&grab_cap);
(3)读取摄像头缓冲区中的信息
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);获取摄像头缓冲区的帧信息,然后修改video_mmap的设置。
grab_buf.height=240;
grab_buf.width=320;
grab_buf.format=VIDEO_PALETTE_RGB24;
3)改变video_mmap和帧状态的当前值
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;//帧状态(等待采集或等待采集结束)
帧地址是vd->map+vd->mbuf.offsets[vd->frame]
设置grab_buf.frame=0,
使用ioctl(grab_fd,VIDIOCMCAPTURE,&grab_buf),采集第一帧图像。
使用ioctl(grab_fd,VIDIOCSYNC,&frame)判断是否采集结束,成功后可把图像数据保存成文件。
(6)将压缩后的图像数据保存成JPG文件
1.3 实时图像数据的无线传输的设计与实现
利用UART传输数据前,先初始化波特率、传输格式(数据位数、是否校验,停止位、流量控制),选择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模块发送AT指令和采集到的图像数据了,传输层采用UDP协议。 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);
}
数据通过GPRS进行无线传输的过程主要分为:(1)初始化GPRS模块。(2)连接远程服务器。(3)图像数据发送。
利用SIM300-E模块进行无线传输的AT指令:
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数据块用0xFFEn表示,而当接收到oxFFD9时一幅图像传输结束,将这个两个字段及之间的数据写入JPEG文件后就完成了一幅图像数据的传输。
传输完成后关闭GPRS连接和附着
AT#CONNECTIONSTOP
Al+CGATT=0
2 系统的性能测试与分析
我们在进行性能测试时,采用实时采集20张图片并传输时,在数据传输速度上,在网络通信顺畅和图片分辨率为320*240的情况下,所需时间为8s左右,平均传输速度为50kb/s。在网络通信繁忙的情况下,同样的分辨率所需时间9~10s,平均传输速度为40kb/s。通过以上数据的分析,本文所设计的实时图像采集系统基本能够满足要求。
参考文献:
[1]傅仁轩,肖连风.基于物联网技术的新型数据采集与监控系统设计[J].移动通信,2011,09.
[2]高超.基于GPRS无线远程监控系统的关键技术研究[M].南京邮电大学,2012,3.
作者单位:齐鲁师范学院 计算机系,济南 250013;济南大学 信息学院,济南 250022
关键词:实时图像采集;ARM;GPRS;嵌入式Linux
中图分类号:TP274.2
本文设计的视频监控系统在农业监测、环境监测、智能交通、安全监控、智能家庭以及偏远山区等恶劣环境方面有着广泛的应用。
1 硬件系统结构和软件设计
1.1 硬件系统结构图
以ARM处理器为控制核心,摄像头采集到图像数据以后,经过软件系统的压缩处理后,通过GPRS网络发送。硬件系统结构图如图1所示。
1.2 实时图像采集的设计实现
本文利用V4L就可以实时采集摄像头的视频数据。通过摄像头实时采集图像时。
(1)打开摄像头设备
grab_fd=fopen(“/dev/v4l/video0”,O_RDWR);
(2)读取摄像头有关信息,函数执行成功则会把信息
从内核空间复制到用户的程序空间grab_cap中
ioctl(grab_fd,VIDIOCGCAP,&grab_cap);
(3)读取摄像头缓冲区中的信息
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);获取摄像头缓冲区的帧信息,然后修改video_mmap的设置。
grab_buf.height=240;
grab_buf.width=320;
grab_buf.format=VIDEO_PALETTE_RGB24;
3)改变video_mmap和帧状态的当前值
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;//帧状态(等待采集或等待采集结束)
帧地址是vd->map+vd->mbuf.offsets[vd->frame]
设置grab_buf.frame=0,
使用ioctl(grab_fd,VIDIOCMCAPTURE,&grab_buf),采集第一帧图像。
使用ioctl(grab_fd,VIDIOCSYNC,&frame)判断是否采集结束,成功后可把图像数据保存成文件。
(6)将压缩后的图像数据保存成JPG文件
1.3 实时图像数据的无线传输的设计与实现
利用UART传输数据前,先初始化波特率、传输格式(数据位数、是否校验,停止位、流量控制),选择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模块发送AT指令和采集到的图像数据了,传输层采用UDP协议。 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
usleep(80);
}
return tcdrain(fd);
}
数据通过GPRS进行无线传输的过程主要分为:(1)初始化GPRS模块。(2)连接远程服务器。(3)图像数据发送。
利用SIM300-E模块进行无线传输的AT指令:
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数据块用0xFFEn表示,而当接收到oxFFD9时一幅图像传输结束,将这个两个字段及之间的数据写入JPEG文件后就完成了一幅图像数据的传输。
传输完成后关闭GPRS连接和附着
AT#CONNECTIONSTOP
Al+CGATT=0
2 系统的性能测试与分析
我们在进行性能测试时,采用实时采集20张图片并传输时,在数据传输速度上,在网络通信顺畅和图片分辨率为320*240的情况下,所需时间为8s左右,平均传输速度为50kb/s。在网络通信繁忙的情况下,同样的分辨率所需时间9~10s,平均传输速度为40kb/s。通过以上数据的分析,本文所设计的实时图像采集系统基本能够满足要求。
参考文献:
[1]傅仁轩,肖连风.基于物联网技术的新型数据采集与监控系统设计[J].移动通信,2011,09.
[2]高超.基于GPRS无线远程监控系统的关键技术研究[M].南京邮电大学,2012,3.
作者单位:齐鲁师范学院 计算机系,济南 250013;济南大学 信息学院,济南 250022