基于嵌入式Linux与S3C2410平台的图像识别与处理

2019-07-12 16:30发布

基于嵌入式Linux与S3C2410平台的图像
识别与处理
张立萍郑威强
(石河子职业技术学院新疆石河子
832000)
【摘要】本文首先简介基于嵌入式Linux系统的S3C2410平台和在该平台上进行开发所需的软硬件环境,接着对在该平台上如何实现对已经采集的图像进行识别和处理的相关理论进行简单介绍,着重介绍如何利用开源代码(OpenCV)快速进行图像处理的技术,最后给出对已采集图像进行处理的实例。
【关键词】嵌入式Linux;Web服务器;图像识别;
图像处理
0.引言
随着嵌入式技术的日渐成熟,嵌入式技术的应用体现在生活中的各个方面,其重要性也得到日益体现。但是由于涉及到Linux、C语言等相关专业技术,无形提高了嵌入式技术的应用门槛。如何快速有效的熟悉并利用嵌入式技术是值得研究的课题。本文通过利用开源源码(OpenCV)迅速建立基于嵌入式系统而进行图像采集和处理,为更深入的熟悉和掌握嵌入式技术提供了一种方法和启示,并详细介绍基于嵌入式Linux与S3C2410平台对图像识别和图像处理的具体方法和步骤。
1.系统平台中的硬件系统
本文使用的系统平台硬件功能框图如图l所示。
试,本机运行的方式。这种方式通常不适于嵌入式系统的软件开发,通常的嵌入式系统软件开发采用交叉编译调试的方式。交叉编译调试环境建立在宿主机(即图l所示通过串口连接的宿主机PC)上,对应的开发板叫做目标板(即嵌入式ARM24l0系统)。通常宿主机和目标板上的处理器不同,宿主机通常为Intel处理器,而目标板如图l所示为SAMSUNGS3C24l0,所以程序需要使用针对处理器特点的编译器,才能生成在相应平台上可运行的代码。GNU编译器正提供了这样的功能,在编译时,可以选择开发所需的宿主机和目标机,从而建立开发环境。在进行嵌入式开发前的第一步工作就是把一台PC机作为宿主机开发机,并在其上安装指定的操作系统。对于嵌入式Linux,宿主机PC上应安装Linux系统,之后在宿主机上建立交叉编译调试的开发环境,开发环境的具体建立这里不细谈。本文采用OpenCV源码,再利用交叉编译调试工具编译链接生成可执行代码,最后向目标平台移植。
3.关键技术
随着图像处理技术的深入发展,人们已开始研究如何用计算机系统解释图像,实现类似人类视觉系统理解外部世界,这被称为图像理解或计算机视觉。本文即是此理论成果的初步实践。
3.1从图像中识别人的面部元素
在对图像处理的过程中,如何区分人和其他动物,甚至汽车,建筑物等其他事物?这里描述一种算法。值得注意的一点是汽车等物体可以从任何角度来观察,但是面部就要严格些,多数情况是正面,并在水平或者垂直方向上转动。基于这一特点,从采集图像中识别人的面部图素要进行的算法描述为以下三个过程:
3.1.1对通过摄像头截获的图像进行扫描:即是在整个图片各个部分进行搜索,并且用固定大小的子窗口(sub-window)来定位可能包含面部的内容。
3.1.2通过扫描,对子窗口进行分类:即是决定这个子窗口是不是一个面孔,如果是,决定它的姿势(面对的方向,±25度旋转,±45度,还是±90度等)。
3.1.3分类后,判断为面部图素后,还要进行合并,即归并:即把所有分类为面部的有互相重合的子窗口合并起来。分类是最重要的一步。
根据算法,编制相应的处理程序对人面部图素进行有效的识别。实际上,识别过程进行的非常快,因为必须对每个图像的根据不同尺寸得到的可能几千个子窗口进行检测,并找出其中的面部。对人面部图素的识别是图像识别关键技术之一。
3.2图像处理涉及的相关技术
图像识别和处理部分是对图像进行识别和处理成败的关键所在,由于本文采用开源源码,源码里包含这些技术(图像变换、图像压缩、图像增强和复原、图像分割等),本文不作介绍,但若进行深入开发需对其进行深入理解,并编制相应程序。
图1基于嵌入式Linux的S3C2410系统平台硬件功能框图
该平台采用三星公司的处理器S3C24l0,在处理器丰富资源的基础上,还进行了相关的配置和扩展,平台配置了l6MBl6位的Flash和64MB32位的SDRAM。通过以太网控制器芯片DM9000E扩展了一个网口,另外引出了一个串行接口和一个HOSTUSB接口。通过在USB接口上外接一个带USB口的摄像头,将采集到的视频图像数据放人输入缓冲区中。
然后,或者保存成文件的形式,或者运行移植到平台上的图像处理程序,对缓冲的图像数据直接进行相关处理,再保存并打成UDP包。最后,通过网络接口将图像发送到Internet上。本文只讨论其中的图片处理过程。
2.系统平台中的软件系统
2.1Linux与嵌入式系统
Linux具有内核小,效率高,源代码开放,内核直接提供网络支持等优点,但嵌入式系统的硬件资源毕竟有限,因此不能直接把Linux作为操作系统,需要针对具体的应用通过配置内核、裁减shell和嵌入式C库对系统定制,使整个系统能够存放到容量较小的Flash中。Linux的动态模块加载,使Linux的裁减极为方便,高度模块化的部件使添加非常容易。正因为Linux的上述优点,在本文实现的平台上,使用的操作系统是对Linux进行了定制的ArmLinux。它启用了MMU(内存管理单元),是针对支持MMU的处理器设计的。
2.2开发环境的建立
绝大多数Linux的软件开发都以native方式进行,即本机开发、调
562
4.具体实现过程、结果与分析
在进行处理之前要进行一系列的软硬件开发环境配置如下:建立开发环境,烧写Linux系统及应用程序、网络配置、配置NFS、配置MINICOM、使用Jtag烧写VIVI。
4.1实现WEB服务器
实现WEB服务器的具体步骤如下:
4.1.1在根目录新建文件夹WEB,并在该文件夹内新建文件
index.html,代码如下:

可选图片
可选图片



width="512"height="512">
width="512"height="512">

4.1.2新建文件夹image,将采集到的图片(这里用lena.jpg(人物像)和baboon.jpg(猩猩像)代替)自动存入。
4.1.3点击主菜单运行系统设置->服务器设置->NFS服务器,点击增加,在目录中填入需要共享的路径“/WEB”,在主机中填入允许进行连接的主机IP地址“192.168.0.*”,并选择允许客户对共享目录的操作为读写(Read/write)。
4.1.4启动minicom,输入以下命令:mount192.168.0.10:/WEB/mnt/nfscp/mnt/nfs/index.html/mnt/yaffs/webcp/mnt/nfs/image/mnt/yaffs/web
此时文件从Linux系统传到了开发板上
4.1.5在minicom里进入mnt/yaffs/web文件夹,运行./httpd,启动WEB服务器。
4.1.6在Linux下打开浏览器,输入开发板的IP地址192.168.0.115,WEB服务器建立成功。
4.2图像识别与处理、分析
具体操作步骤为:
4.2.1从http://sourceforge.net/projects/
opencvlibrary下载OpenCV源码,下载文件为opencv-1.0.0.tar.gz4.2.2解压文件,命令如下:
4.2.6添加路径/usr/local/lib到文件/etc/ld.so.conf,然后运行命令ldconfig
复制/usr/local/lib/pkgconfig中的opencv.pc到/usr/lib/pkgconfig在opencv-1.0.0/samples/c目录下运行
g++`pkg-configopencv--libs--cflagsopencv`-offacedetect.c生成程序f。
4.2.7连接至开发板,运行开发板上的WEB服务器,在浏览器中输入开发板地址,然后将板中的两张图片下载到本地Linux中,和刚才生成的程序f在同一文件夹下。
4.2.8运行./flena.jpeg;./fbaboon.jpeg。效果如图,对于lena.jpeg,程序f识别出了人脸并将其标识出,效果如图2;而对于baboon.jpeg程序f没有识别出人脸,所以没有标记。
图2人脸识别并标记图
5.结论与展望
本文通过基于嵌入式Linux与S3C2410平台利用开源代码较快的实现了图像识别与处理,能够很好的区别人的面部与其他的事物,达到了一定的识别精度,为更进一步的研究、实践做了良好的铺垫和基础,给读者以启迪和激发。