基于QT和OpenCV的人脸识别系统

  • A+
所属分类:Linux编程
摘要

基于QT和OpenCV的人脸识别系统 The Face Recognition System Based on QT and OpenCV 关键词:ARM,QT,OpenCV,人脸识别,PCA

基于QT和OpenCV的人脸识别系统

The Face Recognition System Based on QT and OpenCV


关键词:ARM,QT,OpenCV,人脸识别,PCA

 

1 系统方案设计

 

1.1 引言

 

人脸是一个常见而复杂的视觉模式,人脸所反映的视觉信息在人与人的交流和交往中有着重 要的作用和意义,对人脸进行处理和分析在视频监控、出入口控制、视频会议以及人机交互等领 域都有着广泛的应用前景,因此是模式识别和计算机视觉领域持续的研究热点。

本系统在 FriendlyARM Tiny6410 开发板基础上,利用 OpenCV 计算机视觉库和 QT 图形库,通 过普通的 USB 摄像头实现了自动人脸识别,准确率较高,方便易用。 

1.2 系统总体架构

人脸识别”大致可分为两个阶段:

 基于QT和OpenCV的人脸识别系统

1. 人脸检测 搜索一幅图像,寻找一切人脸区域(此处以绿色矩形显示),然后进行图像处理,清理脸部图像以便于更好地识别。

2. 人脸识别 把上一阶段检测处理得到的人脸图像与数据库中的已知 人脸进行比对,判定人脸对应的人是谁(此处以白色文本显示)。

1.3 工作流程

 

系统运行时,自动从 USB 摄像头获取 YUV 格式的图片,转换成 QImage 格式并实时显示在 LCD屏上,再将其转换成 IplImage 格式,利用 OpenCV 的 Haar Cascade Face Detector(也称为 Viola-Jones 方法)进行人脸检测,得到一个矩形区域,截取该矩形区域图像进行直方图均衡化处理,进行训练或识别。

 系统训练流程:

点击触摸屏上的按钮获取一帧图片,由训练者判断是否加入训练集。当训练集图片足够后, 点击训练按钮,即使用 PCA 方法处理训练集中的人脸图片,生成 XML 文件。

 系统识别流程:

点击触摸屏上的按钮,进入识别状态。得到上述的人脸区域图像后,读取 XML 文件,使用PCA 方法将图像与数据库比对,若可信度超过阈值,则在屏幕上显示出人名。 

摄像头可获取多幅图像以提高准确度和可靠性,我们采集多幅图像求可信度平均值与阈值比 较,若可信度平均值大于阈值,则登录系统成功,通过串口发送信号并弹出对话框提示信息;若 在规定时间内未登录成功,则记录访问者的人脸并提示登录失败。

2 系统原理与算法实现

 

2.1 基于 Haar 特征级联强分类器的人脸检测

多分类器级联结构是很多强分类器的组合,其结构如下图所示:

它是一种由粗到细的结构,其中每一层是 AdaBoost 算法训练得到的一个强分类器,都经过阈 值调整,使得每一层能让全部正例样本通过,而拒绝很大一部分非人脸样本。

本作品使用 OpenCV 中的检测器,使用其自带的一个 XML 文件执行检测。

2.2 基于 PCA 方法的人脸识别 

PCA 方法由 Turk 和 Pentlad 首先提出,它的基础就是 Karhunen-Loeve 变换(简称 KL 变换)。 一幅人脸图像(假设为 50x50 像素)是一个 2500 维空间的数据点,我们利用 PCA 方法将所有人脸 图像数据点投影到 PCA 子空间中进行降维和特征提取。 

相对于欧式距离,利用马氏距离作为人脸图像间的距离识别效果较好,但由于本作品主要用 于判断待测人脸是否为数据库中人脸,可信度的计算方法极为关键,而目前最好的可信度的计算 方程是基于欧式距离的: 

float confidence = 1.0f – sqrt( it→distance /

(float) (trainFacesNum *  eigenVectorsNum) ) / 255.0f; 

故本作品仍采用欧式距离。 

OpenCV 的人脸检测器获取到人脸图像后,使用直方图均衡化进行图像的预处理,然后调用OpenCV 的库函数进行识别,用上述公式计算出待测人脸可信度。 

3 系统测试

 

第 1~4 次测试中,人脸数据库中只有 ORL 数据库的四个人和 A 的人脸数据,此时 B、C 均为“陌生人”,只有 A 能登录系统。 

第 5~9 次测试中,人脸数据库中增加了 B 的数据,此时只有 C 为“陌生人”,A、B 均可登 录系统。 

测试结果如下图:

测试序号

人员编号

登录耗时(s)

识别帧数

平均可信度

误识别次数

1

A

16

2

0.856

0

2

A

-

10

0.846

0

3

B

10

0.675

0

4

C

10

0.778

0

5

A

-

10

0.878

0

6

B

-

10

0.906

0

7

C

10

0.824

0

8

A

14

2

0.883

0

9

B

11

2

0.913

0

注:

1. 登录耗时指某人从坐到摄像头前,摆正角度到登录成功所用时间。

2. 识别帧数表示用于计算平均可信度的图像帧数,均由摄像头连续获取。

3. 系统的可信度阈值设为 0.85。 

4 结语

 

本作品以友善之臂的 Tiny6410 开发板为平台,使用普通的 USB 摄像头,设计了一个自动人脸识别系统。系统实现了训练、识别人脸的功能,并在实验室环境下完成了测试。 

经测试,使用者在未训练时无法登录系统,其可信度与人脸数据库中已有人员的可信度有一 定差值,可以区分数据库内外人脸。使用者经过训练后即可登录系统。 

除非注明,否则均为@蒲公英博客原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.aipgy.com/56934.html

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: