APP下载

基于嵌入式平台和OPENCV的人脸识别系统设计

2016-04-11张俊李鑫赵莎莎邓硕辰

电脑知识与技术 2016年4期
关键词:人脸识别

张俊+李鑫+赵莎莎+邓硕辰

摘要:该文设计了一种基于嵌入式平台的人脸识别系统,该系统采用S3C2440A作为微处理器,以嵌入式Linux为操作系统,QT为界面编辑语言,对摄像头采集的图像进行分析处理。通过移植OpenCV视觉函数库,调用PCA算法的相关库函数完成人脸图像的检测与识别。具有较强的实用价值。

关键词:S3C2440A;QT;人脸识别

中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2016)04-0195-03

Face Recognition System Design Based On Embedded Platform And OPENCV

ZHANG Jun, LI Xin, ZHAO Sha-sha, DENG Shuo-chen

(College of Information Engineering, Taiyuan University of Technology, Taiyuan 030024)

Abstract: In this paper, we design a face recognition system based on embedded platform, the system adopts the S3C2440A as microprocessor, based on embedded Linux operating system, QT is the interface editor language, analysis image which getting from camera. It complete face image detection and recognition by transplanting OpenCV vision function library and calling library function related PCA algorithm. It has strong practical value.

Key words: S3C2440A;QT;face recognition

如今, 生物特征识别技术正作为IT行业热门的技术革新手段,应用需求广泛。在各种生物特征识别技术中,人脸识别技术以其非强制性、非接触性、并发性和普遍性的特点,得到了广泛应用。以嵌入式系统为平台的各种智能设备使用量剧增,但在嵌入式系统上增加人脸识别功能,开发周期长,难度大。OpenCV是一个良好的跨平台计算机视觉库,资源丰富,将两者结合起来实现人脸识别能够有效提高开发效率。

1 方案设计

1.1硬件组成

系统采用的微控制器是三星公司推出的S3C2440A,运用ARM920T内核,具有性能高、功耗低、成本低的特点。LCD显示屏,采用支持4K色STN、分辨率为480*272的显示屏。USB摄像头,通过V4L2接口与主控制器进行数据传输,实现图像采集。V4L2是一种由Linux内核提供的可供用户编写驱动程序后使用的编程接口,通过控制API即可灵活地完成摄像头对整个图像采集的过程。

1.2软件设计

软件设计包括人脸库的录入和人脸库的匹配两部分组成,人脸录入便于尽快采集样本数据,方便检测系统识别的精度。同时提取特征值形成特征脸空间并进行存储。人脸匹配通过将摄像头采集的数据投影到特征脸空间,并与存储器中每一幅图像进行匹配,得到检测结果。软件流程图如图2所示:

1.3 基本原理

在人脸识别算法上,我们使用了当前最广泛使用的PCA算法,即主成分分析法(Principal Component Analysis),是通过协方差矩阵来对样本数据进行抽取主要特征维度的一种方法 ,可以把富含高维度的信息,投射到低的维度空间,进而可以通过对低维度的描述,来表示事物的主要方面。

1.3.1 PCA主成分分析

人脸识别的过程,是把人脸样本表征为向量,通过构造出的特征脸子空间,求出平均向量即平均脸,计算训练集对于平均脸的偏差、协方差矩阵特征值与特征向量,并选取N个最大特征值表征人脸维数。

1.3.2人脸检测与识别

采用最短欧式距离作为判定准则,在录入图像的向量空间中寻找与特征空间最为相近的样本,若此距离小于设定阈值,则系统判定人脸身份,否则拒绝陌生用户的登录申请。

采集图像矩阵与每个训练图像特征脸矩阵的欧氏距离为:

[εi2=τ-τ0T2]

通过[εi]与指定阈值[κ]的大小比较,来确定该图像是否被识别。

2 系统开发

2.1 嵌入式操作系统构建

Linux内核的嵌入式系统的构建,主要分为Bootloader的移植,Linux内核的配置与移植,文件系统的构建与移植,应用程序的移植。主要流程图如图3所示。基于嵌入式的人脸识别系统的Bootloader采用Uboot对操作系统的启动进行引导。Bootloader与文件系统均采用开发板原机所带,故重点对内核的配置,应用软件的编写与移植进行重点介绍。

2.2 内核配置

2.2.1内核简介

内核是操作系统功能实现的基础。Linux操作系统的内核负责管理系统的进程、内存、设备驱动程序、文件和网络系统等。嵌入式系统的内核也具有以上功能。Linux是开源系统,在裁剪其系统内核时更为方便,使系统的体积更小。通过配置内核,支持所需要的外围硬件设备。通过Redhat图形界面使内核支持NAND和yaffs2,挂载文件系统;也使内核支持基本的外围设备,便于数据显示和采集。

2.2.2配置过程

下载操作系统内核linux-2.6.31.tar.gz源码,解压并进入源码目录,打开图形界面进行配置:

1支持NAND和yaffs2,挂载文件系统

修改arch/arm/plat-s3c24xx/common-

smdk.c文件使支持NAND并且配置内核支持yaffs2,如下:

File systems --->

DOS/FAT/NT Filesystems --->

<*> MSDOS fs support

<*> VFAT (Windows95) fs support

Miscellaneous filesystems --->

<*> YAFFS2 file system support

[*] Autoselect yaffs2 format

2基本外围设备的配置

配置内核,支持 LCD:

Device Drivers:

Graphics Support --->

<*>support for frame buffer devices --->

[*] Enable frameware EDID

[*] Enable Vidoe Mode Handling Helpers

<*> S3C24X0 LCD framebuffer support

Console display driver support --->

<*> Framebuffer Console Support

[*] Bootup Logo --->

<*> Standard 224-color Linux logo

启动时输出:

Console: switching to colour frame buffer device 40x30

fb0: s3c2410fb frame buffer device

3配置内核,支持 USB 摄像头:

Device Drivers --->

<*> Multimedia support --->

<*> Video For Linux

[*] Enable Video For Linux API 1 (DEPRECATED)

[*] Video capture adapters --->

[*] V4L USB devices --->

<*> USB Video Class (UVC)

[*] UVC input events device support

[*] GSPCA based webcams --->

2.3 OpenCV的编译与应用

2.3.1 OpenCV的编译

OpenCV是一个开源的计算机视觉库,支持跨平台运行,利用特定的平台编译器编译使得OpenCV可以运行在不同的平台。基于嵌入式的人脸识别系统运行在嵌入式Linux系统。利用ARM-Linux-Gcc编译OpenCV需要做以下工作。

① 准备环境变量

#export OPENCV_BUILD_DIR=/home/openCV/install

② 解压OpenCV

#tar xjf OpenCV-2.0.0.tar.bz2

③ 软件包进行配置

#cd OpenCV-2.0.0

#./configure --host=arm-linux --without-gtk --without-carbon --without-quicktime --without-1394libs --without-ffmpeg --without-python --without-swig --disable-static --enable-shared --disable-apps CXX=arm-linux-g++ --prefix=$OPENCV_BUILD_DIR/install --libdir=$OPENCV_BUILD_DIR/install/lib -includedir=$OPENCV_BUILD_DIR/install/include

④ OpenCV进行编译

#make

⑤ OpenCv进行安装

#make install

2.3.2 OpenCV的移植与应用

将编译好的OpenCV库移植到开发板的根文件系统的/usr/lib目录中。图像采集和图像处理利用OpenCV函数进行编写,运行时依赖移植后的库运行。在QT程序中嵌入依赖OpenCV库的人脸识别程序,在编译Qt程序时需要在Makefile文件中进行以下设置。

1 添加OpenCV头文件路径

-I/home/openCV/install/install/include/opencv

2 添加openCV库文件路径

-L/home/openCV/install/install/lib -lm -lcv -lcvaux -lcxcore -lhighgui -lml -lpthread -ljpeg -lrt -lcxcore -lz

2.4 QT编写人脸识别程序

Qt是跨平台的C++图形用户界面应用程序开发框架,既可以用来开发GUI程序,也可用于开发非GUI程序。QT具有优良的跨平台特性,支持多种操作系统,多用于嵌入式系统的显示界面。

由于基于嵌入式的人脸识别系统需要在上位机Linux平台和ARM平台利用QT显示,所以需要分别利用特定的编译器编译QT和Qt Embedded,前者编译后可以在上位机平台使用,后者可以在上位机平台用交叉编译器编译,将编译后的库移植到ARM平台的根文件系统中,就可以在ARM平台成功运行QT程序。显示界面通过Qt Creator 中集成的Qt Designer工具进行与开发板显示屏大小匹配的界面设计,界面包含三个Label标签,将采集到的图像放入其中一个Label标签进行显示,并对界面进行刷新。进行人脸识别后的结果显示在另外两个标签上,其中一个标签放入动态采集的人脸图片,另外一个标签显示从样本库中选取的识别结果,如图6所示。

3 结束语

开源库可以很好的移植到嵌入式操作系统上,利用OpenCV开源库使人脸识别技术在嵌入式系统上得以实现,并借助QT显示界面使图像采集和识别结果得以显示。经实验检验,界面简洁,使用方便,易于移植,软硬件搭配合理,根据需要裁剪系统,充分体现了嵌入式系统的各方面优点。而且可以应用在各门禁系统,考勤,图片归档,身份验证,公共安全等多种场合。

参考文献:

[1] 韦东山. 嵌入式Linux应用开发完全手册[M]. 北京: 人民邮电出版社, 2008.

[2] 布拉德斯基, 克勒.学习OpenCV[M]. 于仕琪, 刘瑞祯,译. 北京: 清华大学出版社, 2009.

[3] 布兰切特, 萨默菲尔德, C++ GUI Qt4编程[M]. 闫锋欣, 曾泉人, 张志强,译. 2版.北京:电子工业出版社, 2013.

[4] 王映辉. 人脸识别——原理、方法与技术[M]. 北京: 科学出版社, 2010.

[5] 宋成, 孙广富. 触摸屏在 S3C2410 上的应用实例[J]. 单片机与嵌入式系统应用, 2005 (1): 35-37.

[6] 张懿. 构造廉价的ARM9开发平台[J]. 单片机与嵌入式系统应用, 2007 (5): 71-74.

猜你喜欢

人脸识别
人脸识别 等
揭开人脸识别的神秘面纱
人脸识别技术的基本原理与应用
人脸识别技术在高速公路打逃中的应用探讨
基于(2D)2PCA-LBP 的人脸识别方法的研究
浅谈人脸识别技术
人脸识别在高校安全防范中的应用
巡演完美收官 英飞拓引领人脸识别新潮流
人脸识别在Android平台下的研究与实现
基于Metaface字典学习与核稀疏表示的人脸识别方法