基于qt和opencv的人脸识别系统

sununs11 sununs11     2022-12-06     509

关键词:

基于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 系统总体架构

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

 


 

 

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 摄像头,设计了一个自动人脸识别系统。系统实现了训练、识别人脸的功能,并在实验室环境下完成了测试。

 

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

 

利用摄像头可以连续获取图像的特性,本作品多次计算可信度取平均值的方法一定程度上提高了识别的可靠性。

 

当然,本作品仍有很多不足的地方,比如由于驱动程序不完善,单靠软件实现的图像采集速度较慢,导致实时性不高;以及未实现活体检测,存在使用主人照片登录系统的可能。

 

参考文献

 

[1]黄福珍,苏剑波,人脸检测[M],上海交通大学出版社

[2]Shervini Emami,Introduction to Face Detection and Face Recognition[EB/OL],http://www.shervinemami.info/faceRecognition.html

[3]Robin Hewitt,Seeing With OpenCV - A Five-Part Series,[EB/OL]http://www.cognotics.com/opencv/servo_2007_series/index.html

[4]田捷,杨鑫,生物特征识别理论与应用[M],清华大学出版社

[5]vaibhav420,Face Recognition in C/C++ With Thesis,http://sourceforge.net/projects/facerec 



 ----------------------------------------------------------github wiki-----------------------------------------------------------

中文版:

模仿intel杯格式写的论文:基于QT和OpenCV的人脸识别系统 

相关文件下载: http://min.us/m1m2L9JOr 或 http://dl.dbank.com/c0l7qteyfd 这个压缩包里的文件均适用与FriendlyARM的Tiny6410开发板,里面含有我编译出来的OpenCV2.3和QT4.7.3。 请将opencv-lib中的文件放到/lib下,qt4.7.3.tgz解压到/opt下。 里面还有我缩放成70x80大小的ORL人脸数据库和几个xml文件,faceRec是专用于命令行训练的独立程序(其实也可以用于命令行识别)。

这个工程使用了FriendlyARM公司的Tiny6410开发板。事实上PC上的程序更为简单,速度也更快。 此程序可以训练、识别人脸,使用到了QT4.7.3和Op

python+opencv人脸识别身份认证系统设计:专栏总述

...识别身份认证系统(4)—人脸识别本项目的实现机制:基于OpenCV使用Haar级联与dlib库进行人脸检测及实时跟踪,应用LBPH算法开发了一个功能相对完整的人脸识别系统。系统采用sqlite3进行序列化数据存储,能够对陌生人... 查看详情

基于opencv的人脸识别,翻车了居然识别错误。(代码片段)

前言我们身边的人脸识别有车站检票,监控人脸,无人超市,支付宝人脸支付,上班打卡,人脸解锁手机。人脸检测是人脸识别系统组成的关键部分之一,其目的是检测出任意给定图片中的包含的一个或多... 查看详情

图像处理——基于机器视觉技术的人脸在线识别系统设计(代码片段)

  基于机器视觉技术的人脸在线识别系统设计  本设计研究人脸检测与识别技术,在基于机器视觉技术上,构建了一套人脸在线检测识别系统,系统将由以下几个部分构成:计算机图像预处理、数据收集和预处理、人脸... 查看详情

基于opencv读取摄像头进行人脸检测和人脸识别

前段时间使用OpenCV的库函数实现了人脸检测和人脸识别,笔者的实验环境为VS2010+OpenCV2.4.4,opencv的环境配置网上有很多,不再赘述。检测的代码网上很多,记不清楚从哪儿copy的了,识别的代码是从OpenCV官网上找到的:http://docs.op... 查看详情

基于opencv的人脸采集训练及识别应用

摘要  本文主要基于Python展现人脸识别的应用过程和方法,从人脸采集,人脸模型训练以及人脸识别应用讨论这三个过程简单是如何共同构成我们日常中人脸识别技术应用的,提高我们队人脸识别技术及应用的认识。通过采集... 查看详情

python基于opencv的人脸表情识别系统[源码&部署教程](代码片段)

...别技术的发展方向。2.识别效果展示3.识别视频演示Python基于OpenCV的人脸表情识别系统[源码&部署教程]_哔哩哔哩_bilibili4.实现方法分析人脸表情识别中需要运用人脸检测技术,识别人脸之后,再对表情图像做预处理&#x... 查看详情

基于qt设计的人脸识别门禁系统(录入识别对比删除)(代码片段)

一、前言随着现代科技的不断发展,现在的中国已经迈入5G时代,人工智能技术也正逐步广泛运用到了各行各业中,尤其人脸识别技术,已在各大行业中广泛使用。人脸识别门禁系统,可以防止陌生人尾随进入... 查看详情

基于树莓派的人脸识别门禁系统(代码片段)

一、树莓派Opencv以及扩展模块的安装1、概述:本次在树莓派上安装Opencv及其扩展模块,考虑到树莓派的SD卡容量和内存的限制,不采用直接pip安装方法,而采用编译Opencv源码的方式进行安装。2、遇到的问题及解决... 查看详情

基于opencv3.0下的人脸识别和识别部分的高斯模糊处理(代码片段)

如题这里将任务分解为三大部分:1.录播放视频2.人脸识别3.部分高斯模糊其中重点放在人脸识别和部分高斯模糊上 1.录播放视频(以opencv中的VideoCapture类进行实现)首先罗列下操作环境:win10+vs2013+opencv3.0+单摄像头opencv中提... 查看详情

基于opencv的人脸识别

基于OpenCV的人脸识别 一点背景知识OpenCV是一个开源的计算机视觉和机器学习库。它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包。根据这个项目的关于页面,OpenCV已被广泛运用在各种项目上,从... 查看详情

基于opencv的人脸识别

基于OpenCV的人脸识别 一点背景知识OpenCV是一个开源的计算机视觉和机器学习库。它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包。根据这个项目的关于页面,OpenCV已被广泛运用在各种项目上,从... 查看详情

附源码基于opencv的python人脸识别

大家好,我是cv君,近期朋友的作品,由我来分享给大家,人脸识别的,顺便还附带了比较完整的一些功能,还有UI界面,可拓展性高,欢迎收藏~(遍历目录下所有照片依次识别视频随时标注)一、功能概览可以实现在摄像头下... 查看详情

附源码基于opencv的python人脸识别

大家好,我是cv君,近期朋友的作品,由我来分享给大家,人脸识别的,顺便还附带了比较完整的一些功能,还有UI界面,可拓展性高,欢迎收藏~(遍历目录下所有照片依次识别视频随时标注)一、功能概览可以实现在摄像头下... 查看详情

基于c++qt设计的人脸考勤打卡签到系统(代码片段)

...较慢等问题,利用华为云的人脸识别技术实现了一种基于QT框架设计的在线考勤系统。该系统可大大提高考勤效率,满足各类场环境景下的考勤需求,具有识别度高、检测速度快、操作简单的特点,能够为用户提... 查看详情

opencv4.5.4dnn人脸识别模块使用介绍--如何快速搭建一个人脸识别系统(代码片段)

...;供大家参考。背景介绍前几天刚刚更新的OpenCV4.5.4版本将基于DNN的人脸检测和人脸识别添加到modules/objdetect中,具体更新介绍如下:OpenC 查看详情

树莓派---基于opencv实现人脸识别

目录你可以去调百度人脸识别的API,我这里是基于OpenCV进行人脸识别OpenCV(OpensourceComputerVisionLibrary)是一个开源的计算机视觉库,支持与计算机视觉和机器学习相关的众多算法,用C++编写1.安装OpenCV  查看详情

基于python_opencv人脸录入识别系统(应用dlib机器学习库)(代码片段)

基于python_opencv人脸录入、识别系统(应用dlib机器学习库)近几年应用opencv机器学习方法识别人脸的技术成为了热潮,本人根据当今的识别技术与方法,历时四个多月开发出一套基于dlib机器学习库的识别项目。希... 查看详情

基于opencv的图片和视频人脸识别(代码片段)

...🍖训练数据🍗【示例】训练数据🍗【示例】基于LBPH的人脸识别🍗运行效果:🥩总结🥩前言我们身边的人脸识别有车站检票,监控人脸,无人超市,支付宝人脸支付,上班打卡,... 查看详情