嵌入式图像采集系统的设计与实现﹡

2013-09-17 12:30李鹏飞
通信技术 2013年1期
关键词:内核嵌入式摄像头

李鹏飞

(贵州大学 计算机科学与信息学院,贵州 贵阳 550025)

0 引言

嵌入式图像技术已经成为当前电子产品研发领域的热点,并已应用于智能交通、网络通信、计算机视觉等领域[1]。传统的基于PC的图像采集设备,成本高而且体积大,因而限制了它在便携设备、移动通信等领域的应用。开发小型化、低功耗、速度快的图像采集系统具有很好的工程应用前景。该系统采用三星公司基于ARM9的S3C2440[2]搭建硬件平台,采用高速率的 USB摄像头,在 ARM-Linux的操作系统上实现数字图像数据的采集与显示。

1 系统硬件结构设计

硬件系统设计是以一款基于 ARM920T内核的嵌入式微处理器S3C2440为核心,通过外扩存储器(Flash/SDRAM)、图像输入模块,上位机通信模块,LCD显示模块等来构建硬件平台,如图1所示。

图1 系统硬件结构

1)S3C2440微处理器:S3C2440是韩国三星公司生产的16/32位 RISC嵌入式微处理器。该芯片处理速度快、功耗极低,与其他 ARM 芯片相比,具有丰富的片内外围接口。其内部集成LCD显示控制器以及FLASh控制器,硬件搭建较简易。

2)外部存储器:S3C2440支持从NAND FLASH启动,NAND FLASH具有容量大、比NOR FLASH价格低等特点。本设计采用一片K9F1208作为NAND FLASH存储器系统,容量大小为 64MB,用来存放操作系统、应用程序和其他数据;采用一片HY57V561620CT作为SDRAM,容量大小为 32 MB。

3)图像输入模块:采用 USB接口的宇宙通QC301摄像头作为图像采集系统的输入设备。USB端口可以满足即插即用的要求,传输速度快。

4)上位机通信模块:上位机采用普通常用 PC机(CPU主频1.7 GHz,内存512M),通过RS232接口与开发平台完成数据通信,进行程序的输入与调试,以便及时对系统进行优化和更新。

5)LCD显示模块:模块采用三星4.3英寸液晶屏LTV350QV-F05,它是256色、分辨率为 480×272的TFT液晶屏,带触摸屏。具有轻薄、体积小、耗电量低、无辐射及映像稳定不闪烁等特点。

2 系统软件模块设计

2.1 操作系统的移植

硬件环境确定以后,首先,要为 linux设计一个BootLoader[3],通过BootLoader来初始化硬件,引导linux运行。Bootloader设计可以在ads中实现。然后,针对硬件环境,和设计的BootLoader修改linux内核。接下来,在Linux操作系统下建立编译linux的交叉编译环境。最后,配置、编译、连接linux,下载编译得到的映像文件到Flash,通过BootLoader来启动linux。

2.2 USB数码摄像头的驱动

在Linux下,设备驱动程序可以看成Linux内核与外部设备之间的接口。V4L是Linux中关于视频设备的内核驱动,它为针对视频设备的应用程序编程提供一系列接口函数[4]。在系统平台上对 USB口数码摄像头驱动,首先下载相应的内核补丁,解压安装之后,进入内核配置选项,加载驱动,重新编译内核,使驱动以静态编译的方式被加载到内核中。(1)Multimedia devices --- > <*>Video For Linux(2)USB Support --- > <*>Support for Host-side USB---USB Host Controller Driver Drivers <*>OHCI HCD support (3)USB Multimedia devices <*>USB SPCA5XX Sunplus/Vimicro/Sonix jpeg Cameras

2.3 LCD设备驱动模块

LCD显示采用framebuffer技术,它是图形界面显示的接口[5]。Linux内核根据硬件描述抽象出framebuffer设备,用户态的进程能够直接写屏。将Frame buffer映射到进程地址空间之后,就可以直接进行数据的读写操作,写操作可以反应在显示设备上。此系统中framebuffer的设备文件是/dev /fb0。帧缓冲设备驱动程序主要基于两个文件:①Linux/include/linux/fb.h;②linux/drivers/video/fbmem.c。由于其为字符设备,所以采用“文件层——驱动层”的接口方式。帧缓冲设备驱动层接口直接对LCD硬件操作,而fbmem.c能记录并管理数个底层设备驱动。

2.4 应用程序的设计

设计采用的图像采集系统软件部分主要包括图像获取模块、图像处理模块、图像显示模块[6]。系统软件结构如图2。

图2 嵌入式图像采集系统结构图

首先,打开摄像头设备,获取操作摄像头设备的文件描述符,进而获取其一系列设备参数信息,将信息从内核空间拷贝到用户程序空间,在用户空间修改数据信息。由于通常最快的磁盘访问还是比最慢的内存访问要慢,所以系统采用内存映射的方式截取图像,加快I/O访问速度。用函数vd->map=mmap(0,vd-> mbuf.size,PROT_READ|PROT_WRITE,MAP_SHARED, vd->fd,0)将摄像头相应的设备文件映射到内存区,在映射内存区进行数据的读写。

其次,本设计摄像头采集的是JPEG图片格式,由于LCD只能显示RGB格式的图像数据,所以要将采集到的数据进行解码转换成RGB格式。libjpeg是一个被广泛使用的JPEG压缩/解压缩函数库,它能够读写 JPEG图像文件,因此颜色空间转换、降采样/增采样、颜色量化之类的工作由 libjpeg库完成。系统所用的 Framebuffer设备的颜色深度为16位,采用5-6-5的颜色格式——即R(红色)在16bit中为高5位,G(绿色)在16 bit中为中间6位,B(蓝色)在16 bit中取低5位; libjpeg解压出来的图像数据为24位RGB格式,所以必须进行数据转换。对于24位的RGB,一个字节表示一种颜色分量,将其转换为RGB565的方法为:对于R字节,右移3位,对于G字节,右移2位,对于B字节,右移3位,然后将所有右移所得到的值拼接起来,就能够得到16位的颜色值[7]。

最后,操作LCD设备,获取显示设备文件描述符,得到framebuffer固定信息,如图形硬件上实际的帧缓存空间大小、硬件是否能够加速等信息。得到FrameBuffer屏幕变化的信息,主要是Framebuffer的长度、宽度以及颜色深度等。然后将 framebuffer映射到内存中,通过数据填充函数将之前通过数据处理获得的RGB565颜色值写到framebuffer中,这样就可以在LCD显示设备上看到采集到的图像[8]。图像采集的具体实现流程如图3。

图3 图像采集流程

3 系统运行测试

实验中设定系统向驱动申请4个帧缓冲进行循环队列采集,实验设置采集到的图像为30帧。在实验室条件下,将系统串口线与 PC机连接,配置好超级终端,实现系统与PC机在windows下的通信,在 Linux下进入要存放程序的目录/tmp,将图像采集系统程序通过点击超级终端菜单中的“发送文件”将图像采集系统程序传送至 tmp目录下,用命令chmod 777 caiji改变文件权限,使文件可执行。最后执行程序,采集到的图像如图4示。

图4 实验结果

实验结果表明:本系统可以实现图像的采集,视频采集实现的效果比较流畅,在光线较暗的情况下,摄像头仍能采集到视频数据,并能够在LCD上显示。较windows下的视频采集效果要相对清晰。

4 结语

设计在基于ARM9处理器s3C2440主要架构硬件平台基础上,实现了嵌入式图像采集系统。该系统体积小、携带方便,有着广阔的应用前景。下一阶段的工作可以完善图像采集系统功能,比如图像数据的处理与压缩,人工智能等算法。

[1] 屈执勤,吕杨.基于 ARM Lniux的图像采集与蓝牙传输[J].单片机与嵌入式系统应用,2007(08):28-30.

[2] 陈峰,郭爽,赵欣.基于QT和嵌入式的视频监控系统[J].通信技术,2011,44(10):109-111.

[3] 刘地军,钟宏.基于ARM架构的视频服务器设置[J].信息安全与通信保密,2006(12):97-99.

[4] 张简,孔翠香.嵌入式无线视频小车的设计与实现[J].通信技术,2011,44(11):113-115.

[5] 王培珍,徐俊生.基于ARM9的嵌入式 Linux图像采集系统设计[J].智能控制、检测技术及应用,2007(10):85-88.

[6] 唐六华,唐建明,向红权.嵌入式Linux下OLED显示功能模块实现[J].信息安全与通信保密,2009(06):55-57.

[7] 王海珍,藤艳平.嵌入式 Linux 实时调度算法及应用[J].计算机工程与设计,2010(21):4592-4597.

[8] 吴繁.基于 ARM嵌入式平台的目标跟踪系统的研究[D].武汉:武汉科技大学,2009.

猜你喜欢
内核嵌入式摄像头
浙江首试公路非现场执法新型摄像头
多内核操作系统综述①
摄像头连接器可提供360°视角图像
Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机
强化『高新』内核 打造农业『硅谷』
活化非遗文化 承启设计内核
微软发布新Edge浏览器预览版下载换装Chrome内核
TS系列红外传感器在嵌入式控制系统中的应用
搭建基于Qt的嵌入式开发平台
奔驰360°摄像头系统介绍