基于ARM Linux的图像采集与蓝牙传输
发布时间:2008/5/27 0:00:00 访问次数:555
嵌入式linux系统具有可移植性好、网络功能强、优秀的gnu编译工具、免费的开放源代码等优点。s3c2410处理器是一款采用arm920t结构,内部资源非常丰富的32位嵌入式处理器。usb摄像头具有低廉的价格,良好的性能,加上linux下有v4l支持对其编程,很容易集成到嵌入式系统中。蓝牙技术是目前被认可的短距离无线通信技术,广泛应用于手机、电脑以及汽车免提系统。
本文介绍基于嵌入式linux的usb图像采集系统,并通过构建好的嵌入式linux下的蓝牙环境将采集到的图片传送到蓝牙手机上,实现监控功能。
1 软硬件平台概述
系统硬件平台如图1所示。该平台软件上采用嵌入式linux操作系统;硬件上采用samsung公司的s3c2410处理器,另外配置了64 mb的nand flash存储器和64mb的sdram,通过以太网控制芯片cs8900扩展一个10m以太网接口。引出两个usb主口,一个接usb摄像头,一个接usb蓝牙适配器;将通过usb摄像头采集到的图像数据输出到缓冲区中,保存成文件,并通过蓝牙传输到蓝牙手机上。
2 摄像头驱动
在linu
x下已经支持的摄像头驱动是采用ov511芯片的摄像头。使用这款芯片的摄像头有网眼2000/3000等系列,而现在市面上常见的摄像头芯片大多采用中芯微的zc0301、zc0302和zc0303等。linux内核中并没有相关的驱动支持,但可以从网上下载到相关的spca5xx驱动。
本系统就采用市面上最常用的zc0301p1芯片的摄像头。由于是用于arm开发板上,可以下载专用于嵌入式linux的spca5xx-le驱动,le版的驱动最大限度地减少了内存的使用,符合嵌入式的需要。将下载的驱动加入到内核中,修改makefile和kconfig文件,在内核中选中usb_spca5xx,编译后就将摄像头的驱动加入到内核映像中了。
3 video4linux简介
video4linux(简称“v4l”)是linux下用于获取视频和音频数据的api接口,配合适当的视频采集设备和相应的驱动程序,可以实现影像/图片采集、am/fm广播、频道切换等功能,在远程会议、可视电话、视频监控系统中都有广泛的应用。
在linux下,所有外设都被看成是一种特殊文件,称为“设备文件”,可以像访问普通文件一样对其进行读写。一般来说,采用v4l驱动的摄像头设备文件是/dev/v4l/video0。为了通用,可建立一个到/dev/video0的连接。
v4l支持两种方式来捕获图像:mmap(内存映射方式)和read(直接读取方式)。
v4l在include/linux/videodev.h文件中定义了一些重要的数据结构,在进行图像的采集过程中,就是通过对这些数据的操作来获得最终的图像数据。
4 图像采集
在图像采集过程中,采用v4l的read方式直接读取设备来获取jpeg格式的图像数据,具体流程如图2所示。
4.1 初始化摄像头设备
指定要操作的摄像头设备文件/dev/video0,调用open()打开该设备文件,将自定义的数据结构vdin中的成员初始化,包括设备名称(vd->videodevice)、要采集图像的宽度(vd->hdrwidth)和高度(vd->hdrheight)、像素位数(vd->bppin)、帧大小(vd->framesizein),为帧数据分配存储空间(vd->pframebuffer)。
4.2 设定待采集图像的各种属性
zc0301p1摄像头支持jpeg格式的图像采集,定义video_palette_jpeg为21,将其赋值给图像帧的调色板palette,这是一个必须设置的重要的参数。其他参数(如图像色调、颜色、对比度等)可以先将vidiocgpict传递给ioctl()查看其默认值。
如果发觉以上的参数不符合采集图像的规范,则可以将pict.brightness、pict.colour、pict.contrast、pict.white-ness、pict.depth等重新赋值,再将vidiocspict传递给ioctl()来重新设置这些参数。
4.3 进行图像采集
在图像采集过程中,采用read方法直接读取设备文件来获取一帧数据保存到缓冲区中,通过convertframe()函数将pframebuffer中的数据转成完整的jpeg格式的数据保存到ptframe缓存中去,再调用fwrite()函数将pt-frame缓存中的jpeg格式数据写入到指定的文件中去,即得到一幅jpeg格式的图像。
5 蓝牙传输
蓝牙协议规范遵循开放系统互连参考模型(opensystem interconnection/referenced model,osi/rm),从低到高地定义了蓝牙协议堆栈的各个层次。
在蓝牙协议体系中,obex位于rfcomm之上。obex提供了对象的表示模型,并通过“put”和“get”操作传输对象。设备间的对话遵循客户和服务器间的请求—响应模式。obex会话开始由客户端发出连接请求,连接建立成功后服务器发
嵌入式linux系统具有可移植性好、网络功能强、优秀的gnu编译工具、免费的开放源代码等优点。s3c2410处理器是一款采用arm920t结构,内部资源非常丰富的32位嵌入式处理器。usb摄像头具有低廉的价格,良好的性能,加上linux下有v4l支持对其编程,很容易集成到嵌入式系统中。蓝牙技术是目前被认可的短距离无线通信技术,广泛应用于手机、电脑以及汽车免提系统。
本文介绍基于嵌入式linux的usb图像采集系统,并通过构建好的嵌入式linux下的蓝牙环境将采集到的图片传送到蓝牙手机上,实现监控功能。
1 软硬件平台概述
系统硬件平台如图1所示。该平台软件上采用嵌入式linux操作系统;硬件上采用samsung公司的s3c2410处理器,另外配置了64 mb的nand flash存储器和64mb的sdram,通过以太网控制芯片cs8900扩展一个10m以太网接口。引出两个usb主口,一个接usb摄像头,一个接usb蓝牙适配器;将通过usb摄像头采集到的图像数据输出到缓冲区中,保存成文件,并通过蓝牙传输到蓝牙手机上。
2 摄像头驱动
在linu
x下已经支持的摄像头驱动是采用ov511芯片的摄像头。使用这款芯片的摄像头有网眼2000/3000等系列,而现在市面上常见的摄像头芯片大多采用中芯微的zc0301、zc0302和zc0303等。linux内核中并没有相关的驱动支持,但可以从网上下载到相关的spca5xx驱动。
本系统就采用市面上最常用的zc0301p1芯片的摄像头。由于是用于arm开发板上,可以下载专用于嵌入式linux的spca5xx-le驱动,le版的驱动最大限度地减少了内存的使用,符合嵌入式的需要。将下载的驱动加入到内核中,修改makefile和kconfig文件,在内核中选中usb_spca5xx,编译后就将摄像头的驱动加入到内核映像中了。
3 video4linux简介
video4linux(简称“v4l”)是linux下用于获取视频和音频数据的api接口,配合适当的视频采集设备和相应的驱动程序,可以实现影像/图片采集、am/fm广播、频道切换等功能,在远程会议、可视电话、视频监控系统中都有广泛的应用。
在linux下,所有外设都被看成是一种特殊文件,称为“设备文件”,可以像访问普通文件一样对其进行读写。一般来说,采用v4l驱动的摄像头设备文件是/dev/v4l/video0。为了通用,可建立一个到/dev/video0的连接。
v4l支持两种方式来捕获图像:mmap(内存映射方式)和read(直接读取方式)。
v4l在include/linux/videodev.h文件中定义了一些重要的数据结构,在进行图像的采集过程中,就是通过对这些数据的操作来获得最终的图像数据。
4 图像采集
在图像采集过程中,采用v4l的read方式直接读取设备来获取jpeg格式的图像数据,具体流程如图2所示。
4.1 初始化摄像头设备
指定要操作的摄像头设备文件/dev/video0,调用open()打开该设备文件,将自定义的数据结构vdin中的成员初始化,包括设备名称(vd->videodevice)、要采集图像的宽度(vd->hdrwidth)和高度(vd->hdrheight)、像素位数(vd->bppin)、帧大小(vd->framesizein),为帧数据分配存储空间(vd->pframebuffer)。
4.2 设定待采集图像的各种属性
zc0301p1摄像头支持jpeg格式的图像采集,定义video_palette_jpeg为21,将其赋值给图像帧的调色板palette,这是一个必须设置的重要的参数。其他参数(如图像色调、颜色、对比度等)可以先将vidiocgpict传递给ioctl()查看其默认值。
如果发觉以上的参数不符合采集图像的规范,则可以将pict.brightness、pict.colour、pict.contrast、pict.white-ness、pict.depth等重新赋值,再将vidiocspict传递给ioctl()来重新设置这些参数。
4.3 进行图像采集
在图像采集过程中,采用read方法直接读取设备文件来获取一帧数据保存到缓冲区中,通过convertframe()函数将pframebuffer中的数据转成完整的jpeg格式的数据保存到ptframe缓存中去,再调用fwrite()函数将pt-frame缓存中的jpeg格式数据写入到指定的文件中去,即得到一幅jpeg格式的图像。
5 蓝牙传输
蓝牙协议规范遵循开放系统互连参考模型(opensystem interconnection/referenced model,osi/rm),从低到高地定义了蓝牙协议堆栈的各个层次。
在蓝牙协议体系中,obex位于rfcomm之上。obex提供了对象的表示模型,并通过“put”和“get”操作传输对象。设备间的对话遵循客户和服务器间的请求—响应模式。obex会话开始由客户端发出连接请求,连接建立成功后服务器发