精华内容
下载资源
问答
  • 学校教师人脸识别考勤管理系统建设方案
  • 基于深度学习的人脸识别考勤系统设计

    千次阅读 多人点赞 2020-06-03 22:34:43
    基于深度学习的人脸识别考勤系统

    写在前面:本文是本科阶段参加的第三次科创比赛项目,当时只有一个人做,能力精力有限,很多预期的功能都没有实现。最后的可展示程度不高,没有走得很远。本文是申报书部分,可以为除此参加科创的同学提供思路,可以继续做下去,也可以参考某部分功能完善自己的作品。个人水平有限,仅供参考,如果有好的建议也希望能在本文评论区或者私信提出,谢谢。


    相关代码已经在去年的一篇文章中发布了,具体请访问:点击此处

    在这里插入图片描述

    在这里插入图片描述



    立项依据

    一.研究意义

    课堂是学生学习的主要场所,课堂学习是学生获取知识、培养能力、提高素质的主要渠道。系统科学的课堂考勤是保证各项教学计划有效落实和顺利执行的重要条件。有效的课堂考勤是创造良好学习氛围,形成良好班风、学风及增强学生的组织性和纪律性的必要条件,同时也是保证学校教学秩序的稳定、提高教学质量的重要措施。

    研究基于人脸识别的课堂考勤系统,借助信息技术,以人脸识别为手段,彻底摒弃传统课堂考勤中人工统计管理的落后方式,克服不规范的考勤行为,解决学校以往考勤管理工作中出现的问题,为学校的考勤制度实施提供科学的依据。

    大学课堂出勤率低,一直是各大高校面临的问题。相比各行各业陆续出现的各类考勤系统,高校课堂目前比较多的仍然是传统的点名方式,而近年来,也曾有一些新兴方式在某些高校出现:如手机APP签到、指纹识别、校园一卡通刷卡等。虽然这些新的方式较传统点名来说,是一种进步且日趋成熟,但是仍然有不少人为漏洞。比如手机或者校园卡有遗失与忘带的情况,学生也可以携带同学的手机与校园卡帮忙考勤;另外有少部分人群指纹较浅极难识别,甚至还有指纹膜作假的情况出现。针对这些现象,首先建立人脸数据库,其次通过深度学习技术训练一个自动提取人脸特征关键点并生成面纹编码的模型。之后,利用摄像工具获取当前人员的面部图像,接着进行几何校正与图像预处理,通过多种算法排除掉光线、背景、色调、表情、眼镜及神态等的干扰,再通过模型进行特征提取以及数据库人脸图像比对,并进行活体检测防止作弊,最终精确辨认出个体。这种人脸识别考勤系统更加能够适应高校课堂,易于被大众接受,且快速响应提高了时间效率。

    二.现状分析

    1.人脸识别发展历程

    早在 20 世纪 50 年代,认知科学家就已着手对人脸识别展开研究。20 世纪 60 年代,人脸识别工程化应用研究正式开启。当时的方法主要利用了人脸的几何结构,通过分析人脸器官特征点及其之间的拓扑关系进行辨识。这种方法简单直观,但是一旦人脸姿态、表情发生变化,精度则严重下降。

    20世纪90年代
    1991 年,著名的“特征脸”(Eigenface)方法第一次将主成分分析和统计特征技术引入人脸识别,在实用效果上取得了长足的进步。这一思路也在后续研究中得到进一步发扬光大,例如,Belhumer 成功将Fisher判别准则应用于人脸分类,提出了基于线性判别分析的Fisherface方法。

    2000-2012年
    21 世纪的前十年,随着机器学习理论的发展,学者们相继探索出了基于遗传算法、支持向量机(Support Vector Machine,SVM)、boosting、流形学习以及核方法等进行人脸识别。2009 年至 2012 年,稀疏表达(Sparse Representation)因为其优美的理论和对遮挡因素的鲁棒性成为当时的研究热点。与此同时,业界也基本达成共识:基于人工精心设计的局部描述子进行特征提取和子空间方法进行特征选择能够取得最好的识别效果。

    2013年
    2013年,微软亚洲研究院的研究者首度尝试了10万规模的大训练数据,并基于高维LBP特征和Joint Bayesian方法在LFW上获得了95.17%的精度。这一结果表明:大训练数据集对于有效提升非受限环境下的人脸识别很重要。然而,以上所有这些经典方法,都难以处理大规模数据集的训练场景。

    2014年
    2014 年前后,随着大数据和深度学习的发展,神经网络重受瞩目,并在图像分类、手写体识别、语音识别等应用中获得了远超经典方法的结果。香港中文大学的Sun Yi等人提出将卷积神经网络应用到人脸识别上,用20万训练数据,在LFW上第一次得到超过人类水平的识别精度,这是人脸识别发展历史上的一座里程碑。自此之后,研究者们不断改进网络结构,同时扩大训练样本规模,将LFW上的识别精度推到99.5%以上。人脸识别发展过程中一些经典的方法及其在LFW上的精度,都有一个基本的趋势:训练数据规模越来越大,识别精度越来越高。

    2.人脸识别行业发展特点分析

    随着人脸识别技术的不断改进,其应用领域从最开始的门禁/考勤领域,到目前应用于金融、安防反恐、教育、社交娱乐、设备、门禁/考勤、交通、智能商业等领域,应用范围逐渐扩大。起初,人脸识别技术仅限于2D识别,但由于2D人脸识别容易受到姿态、光照、表情等因素影响,识别率不够理想,因此3D人脸识别应运而生。相比较而言,3D人脸识别技术不仅识别率高,且在使用方便性上也远远高于2D人脸识别。

    3.人脸识别行业市场规模分析

    根据中国报告网发布《2018年中国生物识别市场分析报告-行业深度分析与发展前景预测》中内容,2017年生物识别技术全球市场规模上升到了172亿美元,到2020年,预计全世界的生物识别市场规模有可能达到 240亿美元。自2015年到2020年,人脸识别市场规模增长了166.6%, 在众多生物识别技术中增幅居于首位,预计到2020年人脸识别技术市场规模将上升至24亿美元。

    4.人脸识别行业主要应用分析

    目前,国内的人脸识别技术已经相对发展成熟,主要应用于三大范围;1)实名制验证,证明人与系统证件信息是否统一;2)进行身份判断,即判断某个人是否为特定群体中的一员,用于人员出入管理和城市安防等,有利于治安维护;3)是用户意愿确认,确保是真人在操作业务,进而做账户许可授权,涉及资产类行业运用较多。

    5.人脸识别行业前景预测

    从技术发展趋势来看,越来越多研究机构开始对人脸识别技术进行更深入的研究,以寻求更好、更新的人脸识别技术。其中,远距离人脸识别技术与3D人脸识别技术是研究的主要方向之一,虽然现在这些技术在实际运用过程中还存在一定的难度,但是,随着研究的深入,远距离人脸识别技术与3D人脸识别技术的应用将是未来一段时间的发展方向。
    从市场趋势来看,随着高科技信息技术的快速发展,未来人脸识别技术将逐渐向市场化、产品化的方向发展。此外,人脸识别技术的产品类型也将越来越多,例如基于肤色的人脸识别技术、基于点位的人脸识别技术、基于几何特征的人脸识别技术等。可以预见,随着人脸识别技术应用范围的扩大,具有针对性的人脸识别产品将越来越多。

    6.课堂考勤常用手段分析

    常见的考勤方式主要采用以下几种手段来完成:

    • 1)人工签到方式考勤
      这是最早的考勤方法,在信息技术及计算机还没有被广泛运用时,考勤管理工作主要依靠工人点名或签到的方式来完成。人工签到方式考勤最大的缺点是必须采用人工完成,效率低,特别是学生课堂考勤,如果学生人数多,会占据很大一部分的教学时间,影响了正常的教学计划。
    • 2)键盘输入密码方式考勤
      通过键盘输入每个人对应的密码,达到考勤的目的。但常常因忘记密码而发生人已到却无法完成考勤的情形。
    • 3)卡式考勤
      卡式考勤系统按卡介质类型不同可分为磁码卡、铁码卡、IC 卡等。卡式考勤管理系统最大的优势是,考勤工作不再需要过多的人为干预,一般只需工作开始时(或工作结束时)刷卡完成考勤操作,卡式考勤结合了计算机相关技术,把形成的刷卡数据保存到数据库中,然后由计算机进行统计分析,解决了采用人工方式中效率比较低的弊端。卡式考勤系统具有使用非常方便、快捷、不易损坏的特点,使其成为应用最广泛的考勤方式。但卡式考勤系统采用“物”代替“人”进行考勤,不能解决非本“人”进行考勤的本质问题。这也是卡式考勤系统存在的最大弊端,此外由于磁卡一般很容易被复制,寿命不长,磁卡丢失的情况时有发生,这些也都限制了卡式考勤的推广。
    • 4)人脸识别考勤
      随着科技的发展,出现了一种新的考勤方式,即生物识别考勤。它是通过计算机,利用人的生理特性进行考勤,包括人脸识别考勤、虹膜考勤、指纹考勤等。通过利用人身体的部位特征来实现信息的登记。在众多的生物识别考勤系统当中,最能体现考勤本身实际意义的应该是基于人脸识别考勤方式。与传统人工考勤方式和卡式考勤系统相比,人脸识别考勤系统基于人的生理特征,验证具有唯一性,并且实用性更好。

    7.人脸识别考勤的技术手段分析

    人脸考勤主要有三种应用形式:

    • 1)移动考勤:将考勤服务内置于手机或pad的APP中,无需单独购买摄像头、抓拍机,以较低的成本实现刷脸考勤。员工随时、随地打卡,无需排队等待。同时有活体检测功能。有效抵御视频、彩照、3D模型等活体作弊手段。
    • 2)摄像头无感知考勤:将网络摄像头或人脸抓拍摄像头,安装在学生、员工进出的必经之路,即可轻松实现无感知考勤。由于无需用户主动签到,因此减少了排队的过程;且摄像头可以同时抓拍多张人脸,实现多人同时考勤,显著提高考勤效率。
    • 3)一体机考勤:将摄像头、人脸比对SDK集成至考勤一体机中,学生、员工只需到前台进行刷脸,即可快速完成考勤,且可有效防止替考勤等作弊行为。

    三.主要参考文献及出处

    [1] 前瞻研究院.2018-2023年中国生物识别技术行业投资预测分析报告.2017
    [2] 清华大学.人脸识别研究报告.2018
    [3] 潘芬兰.基于人脸识别技术的职能考勤系统研究.浙江大学,2014
    [4] 杨高波,李实英.计算机视觉特征提取与图像处理[M]. 北京: 电子工业出版社,2014
    [5] 孙雅琪.基于人脸识别的课堂考勤系统设计与实现[硕士学位论文].桂林:桂林理工大学,2013
    [6] 林逸峰.基于计算机视觉的人体检测和人脸识别[博士学位论文].吉林:吉林大学,2012
    [7] 齐礼成.基于人脸识别考勤系统的设计与实现[硕士学位论文].西安:西安电子科技大学,2012
    [8] 苏秀梅.基于人脸识别的考勤系统设计实现[硕士学位论文].厦门:厦门大学,2015
    [9] 赵伟彬.基于人脸识别的考勤系统设计实现[硕士学位论文].广东:广东工业大学,2016
    [10] 黄伟前.基于人脸识别的考勤软件系统研究与设计[硕士学位论文].南京:南京理工大学,2015
    [11] 焦李成,赵进,杨淑媛,刘芳. 深度学习、优化与识别. 北京:清华大学出版社,2017


    项目实施方案及实施计划

    一. 实施方案

    1.系统的物理结构

    系统的前台硬件包括1080P摄像头、电脑,后台硬件包括应用服务器和数据库服务器,前后台之间通过无线wifi或者以太网连接,系统内的数据通过以太网传输。通过1080P摄像头进行人脸图像的采集,通过网络传送至应用服务器上,应用服务器通过图像处理后和数据库服务器交互进行比对,比对的结果会通过网络显示到客户端上提供查询和统计。系统物理结构如图3-1所示。
    在这里插入图片描述

    2.系统的功能模块

    本作品划分为四个主要模块:基本信息管理模块、考勤管理模块、班级管理模块、系统管理模块。为了保证系统的可用性和稳定性,还设置了综合查询、报表生成和设备管理等功能。本文主要针对系统的四个主要功能模块进行分析和介绍。系统功能模块划分如图3-2所示。
    在这里插入图片描述

    3.数据库设计

    本作品的数据表包括学生信息表、教师信息表、样本图像信息表、班级信息表、课程信息表、考勤记录表。根据以上对数据库的分析,基于人脸识别的课堂考勤系统数据库中表的设计结果如下:

    • 1)学生信息表
      此表通过系统管理员添加或导入学生基本信息,记录学生的基本信息如学号、姓名、年龄、班级等情况。
    • 2)图像信息表
      此表通过人脸图像收集,记录收集图象样本、大小和在存储中保存路径等。
    • 3)教师信息表
      此表通过教师自行添加教师基本信息,记录教师的基本信息如工号、姓名、年龄、部门等情况。
    • 4)班级信息表
      对班级信息的记录,不同专业、不同年级的班级对应不同的班级编号,由管理员设置。
    • 5)课程信息表
      此表记录班级课程基本情况,学生考勤安排与它相关联。
    • 6)考勤记录表
      此表是对考勤情况的详细记录,包含学生个人基本信息、考勤时间、考勤课程。

    4.系统功能设计

    课堂考勤系统主要功能为两个部分。第一部分是通过移动终端采集学生人脸图像样本,第二部分是通过后台管理考勤记录。具体应用时,对学生人脸进行注册,采集样本人脸信息保存于数据库,使用深度学习算法,对数据库中注册学生的人脸数据集进行训练,其次在考勤管理过程中使用训练好的模型识别个人的人脸信息,确认身份,将识别结果生成考勤结果储存到数据库中。

    进行考勤记录的过程是:教师在电脑客户端,选择当前课程,进入考勤界面,点击开始考勤进行人脸识别,不管失败和成功都会有语音提醒;如果未录入信息,则提醒同学进行信息的录入;如果考勤成功则会写入数据库;如果考勤失败则可以向老师申请,手动添加。考勤管理模块主要是针对学生考勤进行等级,统计班级学生出勤情况。其中包括,考勤设置,考勤记录统计和出勤状况调整。

    (1)学生信息采集
    该功能是指,按照相关要求采集学生个人的人脸图像,进行注册,在不同环境、不同角度下采集15张图片样本,作为个人信息库,系统会对这些图像首先进行人脸对齐,光照归一等预处理,之后使用深度学习算法进行训练,得到的模型用于提取特征。

    (2)考勤管理
    该功能主要是针对考勤记录进行审核,针对考勤规定,通过考勤记录生成统计报表。具体流程是由教师设置考勤模式,默认为固定考勤模式,比如上课前10分钟完成考勤;另一种是随机考勤,比如课后60分钟,临下课前10分钟考勤。考勤结束后,教师可以通过电脑端应用查看考勤结果,其中没有考勤的同学会显示出来,教师可以根据实际情况调整(其中考勤异常、请假、旷课)的学生,最后教师可以通过考勤结果生成报表,查看班级学生考勤情况。

    (3)人脸识别技术流程
    人脸识别技术原理简单来讲主要是三大步骤:一是建立一个包含大批量人脸图像的数据库;二是通过各种方式来获得当前要进行识别的目标人脸图像;三是将目标人脸图像与数据库中既有的人脸图像进行比对和筛选。 根据人脸识别技术原理具体实施起来的技术流程则主要包含以下四个部分,即人脸图像的采集与预处理、人脸检测、人脸特征提取、人脸识别和活体鉴别。人脸识别技术流程如图3-3所示。
    在这里插入图片描述
    (4) 考勤结果申报
    在检测和识别了人脸特征信息获取了考勤记录后,系统对考勤结果进行记录。系统内的考勤结果由正常、请假、缺勤、异常。其中请假需要核实情况后,由教师手动添加。如果有学生来到教室,却考勤异常,需要由教师手动调整,以保证考勤结果的公平性。

    二. 实施办法

    1.系统界面

    (1)基本信息管理
    系统管理员可以实现班级管理,人员管理和课程管理,数据查询统计和数据库备份等功能,系统管理具有最高的权限。
    在选择人员管理中有添加人员、删除人员和人员权限设置三个功能。如果发现添加的人员信息有误,可以直接进行修改学生信息。

    (2)课程管理
    在选择需要考勤的班级后,进入课程添加页面,在该页面可以添加课程名称和上课时间,并可以再次页面上设定固定的考勤时间段。

    (3)学生考勤管理
    教师到教室后打开电脑端应用,学生进行人脸识别签到,可以单人次可以多人次同时进行考勤。初次使用时,可以先查询个人信息是否录入错误,如果错误可以联系老师修改。考勤时段限制在课前,上课之后,自动退出考勤系统,并生成考勤结果,输出签到、迟到、未到的同学名单。待老师确认情况后(如果有同学请假或者特殊情况,说明原因后,由老师修改考勤记录),生成考勤结果,提交到数据库服务器保存。

    (4)教师考勤管理
    教师通过工号及密码登陆系统,系统会根据录入的信息,显示当前时段的上课情况。开始考勤之后,系统会根据老师之前设置的考勤方式进行考勤。教师可以实时查看考勤结果,如果有漏考勤或人脸识别不通过的同学,教师可以手动调整考勤结果,并可以通过学号或名字添加请假同学。

    管理员或教师可以使用自己的账号登陆系统,在固定周期的每个考勤统计日期,系统会自动将上月的考勤记录进统计和分析,按照班级和课程等将考勤记录统计出来,统计内容包括班级、考勤记录、考勤结果、请假、缺勤信息等。管理员或教师也可以查询某一位同学的出勤记录。

    2.系统调试

    (1)测试管理员和教师的各项功能是否完善,例如:添加删除功能,以及系统是否正常运转。
    (2)监测系统录入的信息是否与学生信息匹配,是否可进行人脸识别,查看自己的考勤记录。
    (3)测试人脸识别模型在实际应用过程中是否准确,比如识别人数达到一千人。
    (4)测试在windows10系统下的应用是否运行稳定,运行流畅,比如是否存在卡死的情况。
    (5)系统的各项功能是否完善,是否可以实现后台的管理,数据库的读写是否存在问题。

    3.人脸识别算法的部署和实施:

    1.人脸图像的采集与预处理

    (1)人脸图像的采集
    采集人脸图像通常情况下有两种途径,分别是既有人脸图像的批量导入和人脸图像的实时采集。我们首先使用1080P摄像头集中采集每个人20张在不同角度、不同光照条件下的照片,构建人脸数据库。之后在进行人脸识别过程中,保存每次识别的照片。并过滤掉不符合人脸识别质量要求或者是清晰度质量较低的人脸图像,尽可能的做到清晰精准的采集。

    (2)人脸图像的预处理
    人脸图像的预处理的目的是在系统对人脸图像的检测基础之上,对人脸图像做出进一步的处理以利于人脸图像的特征提取。 人脸图像的预处理具体而言是指对系统采集到的人脸图像进行光线、旋转、切割、过滤、 降噪、放大缩小等一系列的复杂处理过程来使得该人脸图像无论是从光线、角度、距离、大小等任何方面来看,均能够符合人脸图像的特征提取的标准要求。 在现实环境下采集图像,由于图像受到光线明暗不同、脸部表情变化、阴影遮挡等众多外在因素的干扰,导致采集图像质量不理想,那就需要先对采集到的图像预处理,如果图像预处理不好,将会严重影响后续的人脸检测与识别。本作品使用了三种图像预处理手段,即灰度调整、图像滤波、图像尺寸归一化。

    2.人脸检测

    一张包含人脸图像的图片通常情况下可能还会包含其他内容,这时候就需要进行必要的人脸检测。也就是在一张人脸图像之中,系统会精准的定位出人脸的位置和大小,在挑选出有用的图像信息的同时,自动剔除掉其他多余的图像信息来进一步的保证人脸图像的精准采集。人脸检测是人脸识别中的重要组成部分。本作品使用基于Harr特征的级联分类器在进行人脸的检测,它把弱分类器串联成强分类器,这样就能做到速度和精度的双提高。

    3.人脸特征提取

    目前主流的人脸识别系统可支持使用的特征通常可分为人脸视觉特征、人脸图像像素统计特征等,而人脸图像的特征提取就是针对人脸上的一些具体特征来提取的。特征简单,匹配算法则简单,适用于大规模的建库;反之,则适用于小规模库。特征提取的方法一般包括基于知识的提取方法或者基于代数特征的提取方法。 以基于知识的人脸识别提取方法中的一种为例,因为人脸主要是由眼睛、额头、鼻子、 耳朵、下巴、嘴巴等部位组成,对这些部位以及它们之间的结构关系都是可以用几何形状特征来进行描述的,也就是说每一个人的人脸图像都可以有一个对应的几何形状特征,它可以帮助我们作为识别人脸的重要差异特征。

    4.人脸识别

    我们可以在人脸识别系统中设定一个人脸的相似程度的数值,再将对应的人脸图像与系统数据库中的所有人脸图像进行比对,若超过了预设的相似数值,那么系统将会把超过的人脸图像逐个输出,此时我们就需要根据人脸图像的相似程度高低和人脸本身的身份信息来进行精确筛选,这一精确筛选的过程又可以分为两类:其一是一对一的筛选,即对人脸身份进行确认过程;其二是一对多的筛选,即根据人脸相似程度进行匹配比对的过程。本作品是一对多的识别过程,基于ResNet-34网络架构进行训练,但层数较少,滤波器减少一半;它包含一个triplet训练步骤。triplet包含三种不同的脸,其中两张是一个人。该神经网络为人脸图像生成128维向量。如果是同一个人的脸,就调整神经网络权重,让矢量距离更接近。网络量化人脸,为每张人脸构建了128维嵌入(量化)。之后调整神经网络的权重,以使两个相同人脸的128维的度量更接近,并远离不同的人脸。

    5.活体鉴别

    生物特征识别的共同问题之一就是要区别该信号是否来自于真正的生物体,比如,指纹识别系统需要区别带识别的指纹是来自于人的手指还是指纹手套,人脸识别系统所采集到的人脸图像,是来自于真实的人脸还是含有人脸的照片。因此,实际的人脸识别系统一般需要增加活体鉴别环节,例如,要求人左右转头,眨眼睛,开开口说句话等。本作品将综合使用这三种方法进行活体鉴别。

    三.具体实施计划及可行性分析

    1.具体实施计划

    2018年11月—2018年12月,完成小批量人脸图像的采集,同时编写人脸识别程序;
    2018年12月—2019年1月,研究对比多种人脸识别算法,在业内公认的数据集上进行训练,从中选取最优算法进行部署测试,同时开始前端应用的设计开发,其中包括数据库编程、图像预处理相关程序的编写;
    2019年1月—2019年2月,采集本班人脸图像,使用选出的最优算法进行训练,进行测试;开始研究实现活体检测技术;并开始完善前端应用的功能;
    2019年2月—2019年3月,完成人脸识别考勤前端应用的基本功能和其它功能的设计;
    2019年3月—2019年4月,进行系统最后的集成,并逐步优化运行速度和模型识别效率,测试整体框架的功能完整性和稳定性,并进行修复和改进。如果再有时间,则扩展其他功能。

    2.可行性分析

    人脸识别的优势在于:

    • 1)非侵扰性
      人脸识别无需干扰人们的正常行为就能较好地达到识别效果,无需担心被识别者是否愿意将手放在指纹采集设备上,他们的眼睛是否能够对准虹膜扫描装置等等。只要在摄像机前自然地停留片刻,用户的身份就会被正确识别。
    • 2)便捷性
      采集设备简单,使用快捷。一般来说,常见的摄像头就可以用来进行人脸图像的采集,不需特别复杂的专用设备。图像采集在数秒内即可完成。
    • 3)友好性
      通过人脸识别身份的方法与人类的习惯一致,人和机器都可以使用人脸图片进行识别。 而指纹,虹膜等方法没有这个特点,一个没有经过特殊训练的人,无法利用指纹和虹膜图像对其他人进行身份识别。
    • 4)非接触性
      人脸图像信息的采集不同于指纹信息的采集,利用指纹采集信息需要用手指接触到采集设备,既不卫生,也容易引起使用者的反感,而人脸图像采集,用户不需要与设备直接接触。
    • 5)可扩展性
      在人脸识别后,下一步数据的处理和应用,决定着人脸识别设备的实际应用,如应用在出入门禁控制、人脸图片搜索、上下班刷卡、恐怖分子识别等各个领域,可扩展性强。正是因为人脸识别拥有这些良好的特性,使其具有非常广泛的应用前景,也正引起学术界和商业界越来越多的关注。人脸识别已经广泛应用于身份识别、活体检测、唇语识别、创意相机、人脸美化、社交平台等场景中。

    经过以上的优势可以看出,人脸识别应用在课堂考勤中,是当前最佳的考勤方式。


    预期成果

    本作品最终的成果展示形式是包含摄像头和电脑端的应用程序。它具有以下四个指标:

    • 1)模型可识别人脸数量达到1000位以上;
    • 2)2秒内完成单人身份的确认和签到,支持多人同时签到;
    • 3)具有活体检测功能,防止照片、视频作弊;
    • 4)数据库可以成功读取写入,整个系统的功能运行流畅。

    本项目的特点与创新之处

    本作品的特点是使用2D成像摄像头,辅以数据库编程、电脑端程序开发、深度学习人脸识别、活体检测等技术手段,设计了功能完善的电脑应用程序,来完成身份信息的录入和身份的验证,当完成人脸识别后,会将考勤信息自动统计出来,并将考勤结果写入数据库,方便管理员和老师的查询。本作品的创新之处是:

    • 1)使用人脸识别代替传统点名方式,提高点名效率,高效快速便捷;
    • 2)使用深度学习人脸识别技术,识别准确率和可识别数量大大提升;
    • 3)设计编写了功能完善的电脑端的应用程序,具有自动统计出勤率,自动输出考勤信息,考勤结果一目了然;
    • 4)将个人信息、考勤记录等数据储存到MySQL数据库中,方便管理者管理。

    研究基础

    • 1)指导教师在新能源科学与工程专业任教,负责《自动控制理论》、《动力工程计算机控制》等课程的教学,研究方向为无人驾驶车辆相关技术,在软硬件开发方面有较丰富的实际经验,多次指导学生参加各类科技创新竞赛并取得了良好成绩。
    • 2)负责人从2017年8月开始学习机器学习相关知识,作品一参加国家级创新创业训练计划;作品二获得学校第四届科技创新大赛三等奖;作品三参加SRT和科技立项并顺利结题,并获得学校节能减排大赛二等奖;作品四还在开发中;经过一年多的学习和研究,对深度学习中的目标检测算法具有浓厚兴趣,有比较深的理解。获得校三好学生、校优秀团员,二等奖学金。
    • 3)目前实验室已经具备可供本作品使用的深度学习算法训练的主机GTX1080主机两台,GTX1060主机一台。已购置OpenCV、机器学习、深度学习、Python编程的相关书籍数本,为项目研究打下坚实的基础。

    展开全文
  • 基于OpenCV的人脸识别考勤系统

    千次阅读 多人点赞 2020-03-01 16:03:36
    考勤系统设计 人脸数据库的建立 图像采集 图像预处理及模型训练 人脸检测 人脸特征识别 数据库与OpenCV通信 显示签到结果

    考勤系统设计

    学生上课考勤系统最初的方式是采用的人工纸质点名,目前仍旧有一部分学校依旧采用此种方法点名,这种方法也一直是被认为最有效的签到点名方式。但由于课程繁多加上学生人数众多, 代替点名现象普遍存在, 而且传统的现场点名签到方式费时费力, 直接影响到授课质量。人脸签到系统解决了这一问题,可以实时监测所到的成员数量和质量。
    其整体结构图为

    在这里插入图片描述

    1. 人脸数据库的建立
      系统采集成员的人脸图像,将这些人脸分类标号保存,并建立人脸库。

    2. 图像采集
      摄像头采集人脸图像,前期用于训练模型,后期用于对人脸的预测。

    3. 图像预处理
      由于摄像头设备存在采集图像方法、提取人脸角度、图像背景以及光照变化等干扰信号,使得识别正确率出现不同程度的降低。所以,需将采集到的图像以及检测出来的人脸通过图像处理算法处理。其中处理方法有尺度归一化、图像灰度化、灰度变换、图像增强、以及图像降噪等。

    4. 人脸特征提取及模型训练
      图像特征提取和特征描述是图像目标识别的关键技术,特征提取结果的好坏,直接影响模型训练结果,进而影响了目标识别的效果,在图像检索系统中,特征描述的好坏也会直接影响目标匹配和图像检索的精度。图像处理中特征点的检测与匹配是机器视觉最重要的部分。
      特征提取指的是使用计算机提取视频中的图像信息,决定每个图像的点是否属于一个图像特征。特征提取的结果是把图像上的点分为不同的子集,这些子集往往属于孤立的点、连续的曲线或者连续的区域。特征的好坏对泛化性能有至关重要的影响。
      图像的模型训练即是通过对所提取的人脸特征,不断调整模型参数使人脸图像针对于模型之间的误差值达到最小。用于之后对人脸的预测。

    5. 人脸识别
      提取的人脸图像的特征数据与数据库中存储的特征模板进行搜索匹配,通过设定一个阈值,当相似度超过这一阈值,则把匹配得到的结果输出。人脸识别就是将待识别的人脸特征与已得到的人脸特征模板进行比较,根据相似程度对人脸的身份信息进行判断。这一过程又分为两类:一类是确认,是一对一进行图像比较的过程,另一类是辨认,是一对多进行图像匹配对比的过程。在图像匹配过程中有一个重要特征是:每个识别匹配都具有转置信(confidence)评分,因此可在实际应用中通过对其设置阈值来进行筛选。
      人脸识别是利用提取好的特征,进行身份确认或在人脸库中比对搜索最巧似者。因此,需要选择合适的算法进行识别匹配。在OpenCV中有三种人脸识别的方法,它们分别基于三种不同的算法:Eigenfaces、FisherFaces和Local Binary Pattern Histogram(LBPH)。
      (1)Eigenfaces算法是通过PCA来处理。PCA的本质是识别某个训练集上的主成分,并计算出训练集(图像或帧中的检测到的人脸)相对于数据库的发散程度,并输出一个值。该值越小,表明人脸数据库和检测到的人脸之间的差别就越小;0值表示完全匹配。
      (2)Fisherfaces算法是从PCA中衍生发展出来的,采用更复杂的逻辑;尽管计算更加密集,但比Eigenfaces更容易得到准确效果。
      (3)LBPH算法将检测到的人脸分为小单元,并将其与模型中的对应单元比较,对每个区域匹配值产生一个直方图。
      predict()函数返回含有两个元素的数组:第一个元素是所识别个体的标签,第二个是信度评分。所有的算法都有一个置信度评分阈值,置信度评分用来衡量所识别人脸与原模型的差距,0表示完全匹配。

      可能有时不想保留所有的识别结果,则需进一步处理,因此可用自己的算法来估算识别的置信度评分;例如,如果正在试图识别视频中的人,则可能要分析后续帧的置信度评分来估计识别是否成功。在这种情况下,可通过算法来检查得到的置信度评分,然后得出自己的结论。

    6. 显示签到结果
      分析人脸的特征通过所训练的模型与数据库中进行对比,得到具体人的具体信息,进行签到记入数据库

    功能实现

    UI界面设计

    人脸识别考勤系统共有三个界面:人脸识别考勤系统主界面、人脸数据采集及训练界面和进入考勤系统三部分。具体见下图:人脸识别考勤系统界面整体设计。
    在这里插入图片描述

    (1)人脸识别考勤系统主界面

    人脸识别考勤系统主界面(具体见下图)包含三个按钮,分别是“人脸数据采集及训练”、“进入考勤系统”和“退出考勤”。点击“人脸数据采集及训练”即可进入“人脸数据采集及训练”界面。

    在这里插入图片描述

    (2)人脸数据采集及训练界面

    人脸数据采集及训练界面(具体见下图)包含三个按钮分别是“开始采集”、“人脸采集训练”和“信息采集”(信息采集指text文本框中学生基本信息的输入)。在这一界面首先要输入信息采集框内的具体信息,然后点击“开始采集”按钮即可打开摄像头采集人脸信息并保存至人脸信息数据集;点击“人脸采集训练”按钮即进行人脸数据集信息模型训练;

    在这里插入图片描述

    (3) 进入人脸识别考勤界面

    进入人脸识别考勤界面(具体见下图)包含三个按钮分别是“显示审核信息”(显示审核信息指text文本框中学生基本信息的输出)、“考勤”和“考勤表”。在课前考勤是需先打开本系统,点击“考勤”即可加载摄像头进行人脸识别,人脸识别成功后“显示审核信息”栏内会输出学生基本信息,即代表签到成功。“考勤表”是为方便老师上课时清点签到人数而设置,点击“考勤表”。即显示已签到人人数和具体人员基本信息。

    在这里插入图片描述

    数据库设计

    数据库设计主要分为学生信息和考勤信息两部分。

    (1)学生信息

    学生信息总表(具体见下表)录入信息时将学号sid和姓名name录入并设置考勤总次数times为0。当进行考勤时,考勤一次将对应人的总次数times增加1。

    在这里插入图片描述

    (2)考勤表

    考勤表(具体见表2)记录考勤人员名单,当进行考勤时,后台将视频识别到的考勤人员信息插入此表,老师可根据查询考勤名单查看考勤人员。
    在这里插入图片描述

    系统具体功能

    1. 人脸信息采集及存储

    首先,需要录入班级所有同学基本信息:姓名、学号并进行对应的人脸信息采集,并保存人脸图像信息,以便后期进行模型训练与人脸识别,具体人脸信息采集及存储流程图见图8.

    人脸信息采集首先需要输入被采集学生的基本信息,打开摄像头进行图像采集,如果此学生已存在则会提示已经存在,如若没有则会对此学生进行过人脸采集。人脸采集是在摄像头采集的图片的基础上进行的,由于采集的图片信息周围环境嘈杂,需要进行专门的人脸检测采集人脸信息,在本系统中采用Cascade级联分类器进行人脸检测,主要步骤为先加载OpenCV自带人脸检测器,使用cvtColor函数对图片灰度化处理,在人脸检测中,有效图像的预处理不仅可以提高人脸检测正确率,还可以极大地缩减检测时间,再使用detectMultiScale函数进行人脸识别检测人脸,如若检测到人脸信息,则裁剪灰度帧的区域,大小为200*200像素。整个采集过程中,人脸信息会自动编号保存,采集200张。然后将采集到的人脸信息保存到以此人名称命名的文件夹下,文件名后缀为.pgm,具体如下图所示。
    在这里插入图片描述
    在这里插入图片描述

    1. 人脸数据集模型训练处理

    由于基础的人脸图像无法完成人脸识别匹配,因此需要对采集到的人脸信息图像进行特征分析与统计建立分类模型并进行模型训练。具体人脸数据集模型训练处理流程图见图10。

    首先需要从上一步保存的人脸信息数据集中进行图像检索,如若没有图像文件信息则会提示文件不存在并跳出训练过程,若检测到文件存在则会创建特征检测器;使用IMREAD_GRAYSCALE将原始图像转化为灰度化图像打开;然后resize调整大小;返回图像和标签列表;并对其进行人脸特征提取,特征提取结果的好坏,直接影响模型训练结果,进而影响了目标识别的效果;此时我们对获取得人脸信息进行模型训练,并将训练结果保存,具体结果见图11。

    在这里插入图片描述
    在这里插入图片描述

    1. 人脸识别

    人脸识别是整个系统的关键,本系统中采用LBPH进行人脸识别,需要在课前打开摄像头进行人脸考勤,具体人脸识别流程图见图12。

    在打开人脸考勤系统时,后台会首先调取数据库中学生基本信息;初始化LBPH人脸识别模型;导入上一步训练好的人脸信息模型训练集;然后调用摄像头,对考勤学生进行人脸信息采集时相同步骤的人脸检测,对摄像头中检测到的人脸进行对比分析和算法比对;预测读取到的人脸信息,返回label和置信度评分。人脸识别中通过置信度评分来丢弃结果,LBPH算法中好的识别参考值要低于50,任何高于80的参考值都会被认为是低的置信度评分。根据置信度评分低于50和label返回数据库中学生信息,人脸识别结束。

    在这里插入图片描述

    1. 人脸识别信息与数据库连接,签到表反馈

    在上一步的人脸识别出考勤学生后,会将考勤学生的基本学生信息通过数据库插入考勤表中,通过点击考勤表按钮,直观的给教师反馈出实时到的考勤人员信息,具体考勤表、点击考勤表后控制台反馈信息见下图。

    在这里插入图片描述
    在这里插入图片描述

    主要代码

    主函数

    import sys
    from PyQt5 import QtCore, QtGui, QtWidgets
    from MainWindow0 import MyWindow
    
    if __name__ == "__main__":
        app = QtWidgets.QApplication(sys.argv)
        w = MyWindow()
        w.setWindowFlags(QtCore.Qt.WindowMinimizeButtonHint | QtCore.Qt.WindowCloseButtonHint)
        w.setFixedSize(w.width(), w.height())
        w.show()
        sys.exit(app.exec_())
    
    
    

    功能函数

    import sys
    import cv2
    import os
    import numpy as np
    from PyQt5.QtCore import QCoreApplication
    from PyQt5 import QtWidgets,QtMultimediaWidgets
    from MainWindow import Ui_MainWindow
    from kaoqin_list import Ui_kaoqin_list
    from face_data_collect import Ui_face_data_collect
    from face_recognition_sys import Ui_face_recognition_sys
    import face_data_collect
    import kaoqin_list
    import face_recognition_sys
    import pymysql
    import re
    
    #from collect import *
    #from training import *
    #from recognition import *
    #这是考勤导出窗体
    class Mykaoqin(QtWidgets.QWidget, Ui_kaoqin_list):
        def __init__(self, parent=None):
            super(Mykaoqin, self).__init__(parent)
            self.setupUi(self)
        def ButtonEvenbinding(self):
            self.Button.clicked.connect(self.pushButtonclick)
        def pushButton1click(self):
            print('kaoqin')
            #这里面写功能
    
    class mysqloper():
    
    
        def __init__(self, parent=None):
    
            # super(mysqloper, self).__init__(parent)
            self.db = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="199808", db="sa")
            # 得到一个可以执行SQL语句的光标对象
            self.cursor = self.db.cursor()  # 使用 execute() 方法执行 SQL 查询
            self.cursor.execute('SELECT VERSION()')
            self.data = self.cursor.fetchone()
            print("Database version : %s " % self.data)
            # 关闭光标对象
            self.cursor.close()
    
        # 链接数据库
        def mysqlconnect(host="127.0.0.1", port=3306, user="root", passwd="199808", db="sa"):
            db = pymysql.connect(host=host, port=port, user=user, passwd=passwd, db=db)
            return db
    
        # 执行语句
        def executeCreate(self,con, sql):
            cursor = con.cursor()  # 使用 execute() 方法执行 SQL 查询
            ret = cursor.execute(sql)
            cursor.close()
            return ret
    
        # 执行插入和更新
        def executeInsertAndUpdate(self,con, sql, listParams):
            try:
                cursor = con.cursor()  # 使用 execute() 方法执行 SQL 查询
                print("前")
                ret = cursor.execute(sql, listParams)
                print("hou")
                # 提交事务
                self.db.commit()
                cursor.close()
                return ret
            except:
                print("跳出")
                return 0
    
    
    
    
        # 执行查询
        def executeQuery(self,con, sql, listParams):
            cursor = con.cursor()  # 使用 execute() 方法执行 SQL 查询
            cursor.execute(sql, listParams)
            results = cursor.fetchall()
            cursor.close()
            return results
    
        def table_exists(self,con, table_name):  # 这个函数用来判断表是否存在
            sql = "show tables;"
            cursor = con.cursor()
            cursor.execute(sql)
            tables = [cursor.fetchall()]
            table_list = re.findall('(\'.*?\')', str(tables))
            table_list = [re.sub("'", '', each) for each in table_list]
            cursor.close()
            if table_name in table_list:
                return 1  # 存在返回1
            else:
                return 0  # 不存在返回0
    
        # 插入函数
        def Insert(self,table, sid, name):
            times = 0
            # 判断是否存在表user1
            existflag = self.table_exists(self.db, table)
            if existflag == 0:  # 不存在
                # 创建表 # 定义要执行的SQL语句
                sql = """CREATE TABLE {0}(
                sid INT(15) PRIMARY KEY ,
                name CHAR(10) NOT NULL UNIQUE,
                times TINYINT 
                );
                """
                # 执行SQL语句
                ret = self.executeCreate(self.db, sql.format(table))
                if ret:
                    print('执行成功')
                else:
                    print('执行失败')
    
            # 插入 更新、删除
            sql = "INSERT INTO {0}(name,sid,times) VALUES (%s,%s, %s);"
            # 执行SQL语句
            # print(sql.format(table))
            ret = self.executeInsertAndUpdate(self.db, sql.format(table), [name, sid, times])
            if ret:
                print('执行成功')
            else:
                print('执行失败')
    
            # 关闭数据库连接
            self.db.close()
    
        def InsertOnly(self,table,sid,name):
            existflag = self.table_exists(self.db, table)
            # print(existflag)
            if existflag == 0:  # 不存在
                # 创建表 # 定义要执行的SQL语句
                sql = """CREATE TABLE {0}(
                        sid INT PRIMARY KEY,
                        name CHAR(10) NOT NULL UNIQUE
                        );
                        """
                # 执行SQL语句
                ret = self.executeCreate(self.db, sql.format(table))
                if ret:
                    print('考勤表创建成功')
                else:
                    print('考勤表shibai')
            # 插入 更新、删除
    
            sql = "INSERT INTO {0}(sid,name) VALUES (%s,%s);"
            # 执行SQL语句
            print(sql.format(table))
            ret = self.executeInsertAndUpdate(self.db, sql.format(table), [sid,name])
            print("AAA")
            if ret:
                print('考勤成功')
            else:
                print('已考勤')
    
    
            # 关闭数据库连接
            self.db.close()
    
        #
        def QueryID(self,table, name):
            # 查询
            sql = "select sid from %s where name={0}"
            results = self.executeQuery(self.db, sql.format(name), table)
            print(results)
            # 关闭数据库连接
            self.db.close()
            return results
    
        # 查询表中的名字
        def Query(self,table):
            # 查询
            sql = "select * from {0}"
            results = self.executeQuery(self.db, sql.format(table), [])
            names = []
            sids=[]
            # 遍历结果
            for row in results:
                sids.append(row[0])
                names.append(row[1])
            # 关闭数据库连接
            self.db.close()
            return names,sids
    
        def Increase(self,table,face_ID):
            sql = "update {0} set times=times+1 where sid={1}"
            ret = self.executeInsertAndUpdate(self.db, sql.format(table,face_ID), [])
            if ret:
                print('总表插入成功')
            else:
                print('总表插入失败')
    
            # 关闭数据库连接
            self.db.close()
    
    
    #这是识别窗体
    class myrecognition(QtWidgets.QWidget, Ui_face_recognition_sys):
    
        def __init__(self, parent=None):
            super(myrecognition, self).__init__(parent)
            self.setupUi(self)
        def ButtonEvenbinding(self):
            self.Button1.clicked.connect(self.pushButton1click)
            self.Button2.clicked.connect(self.pushButton2click)
    
        def NameList(self):
            # 查询数据库中的名字
            self.mysql=mysqloper()
            names,sid=self.mysql.Query('student')
            return names,sid
    
        def cognize(self):
            names,sid = self.NameList()
            recognizer = cv2.face.LBPHFaceRecognizer_create()
            # 读模型
            recognizer.read('./trainer/trainer.yml')
            cascadePath = "./haarcascade_frontalface_default.xml"
            faceCascade = cv2.CascadeClassifier(cascadePath)
            font = cv2.FONT_HERSHEY_SIMPLEX
    
            # 窗口
            self.cap = cv2.VideoCapture(0)
            minW = 0.1 * self.cap.get(3)
            minH = 0.1 * self.cap.get(4)
            count=0
            while True:
                count=count+1
                ret, img = self.cap.read()
                gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
                faces = faceCascade.detectMultiScale(
                    gray,
                    scaleFactor=1.2,
                    minNeighbors=5,
                    minSize=(int(minW), int(minH))
                )
    
                for (x, y, w, h) in faces:
                    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
    
                    label, confidence = recognizer.predict(gray[y:y + h, x:x + w])
                    confidence = "{0}%".format(round(confidence))
                    print(names[label],confidence)
                    cv2.putText(img, str(names[label]), (x + 5, y - 5), font, 1, (0, 0, 255), 1)
                    cv2.putText(img, str(confidence), (x + 5, y + h - 5), font, 1, (0, 0, 0), 1)
    
                    cv2.imshow('camera', img)
                k = cv2.waitKey(10)
                if k == 27:
                    break
                if k == ord('q'):
                    break
                # if count > 20:
                #     break
            self.cap.release()
            cv2.destroyAllWindows()
            return names[label],sid[label]
    
        def pushButton1click(self):
            face_name,face_ID=self.cognize()
            print("------")
            print(face_name)
            print(face_ID)
            print("------")
            self.lineEdit6.setText(str(face_name))
            self.lineEdit7.setText(str(face_ID))
            print("-------")
            face_ID=int(face_ID)
            mysqloper().InsertOnly('student1', face_ID, face_name)
            print("--")
            mysqloper().Increase('student',face_ID)
            print("考勤成功")
    
    
            #这里面写功能
        def pushButton2click(self):
            name,sid=mysqloper().Query('student1')
    
            print("考勤列表")
            print(name)
    #这是人脸数据采集及训练窗体
    class Myface_collect(QtWidgets.QWidget, Ui_face_data_collect):
        #button1开始采集,button2人脸数据采集训练
        def __init__(self, parent=None):
            super(Myface_collect, self).__init__(parent)
            self.setupUi(self)
        def ButtonEvenbinding(self):
            self.Button1.clicked.connect(self.pushButton1click)
            self.Button2.clicked.connect(self.pushButton2click)
        #点击采集后实现的功能函数
        def video_demo_collect(self):
            self.cap = cv2.VideoCapture(0)
            face_detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
            face_name = self.lineEdit1.text()
            # print(face_name)
            face_ID = self.lineEdit2.text()
            # print(face_ID)
            #face_name = input('请输入你要采集的人的姓名(拼音):')
            if not os.path.exists('./Facedata/%s/' % str(face_ID)):
                os.mkdir('./Facedata/%s' % str(face_ID))
                mysqloper().Insert('student', face_ID,face_name)
            else:
                print("已经存在此文件,正在重新读入数据")
            count = 0
            while (True):
                ref, frame = self.cap.read()
                gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
                faces = face_detector.detectMultiScale(gray, 1.3, 5)
                if count > 200:
                    break
                for (x, y, w, h) in faces:
                    img = cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)
                    # font = cv2.FONT_HERSHEY_TRIPLEX
                    f = cv2.resize(gray[y:y + h, x:x + w], (200, 200))
                    # 保存到路径下
                    # 保存图像
                    cv2.imwrite('./Facedata/%s/%s.pgm' % (str(face_ID), str(count)), f)
                    print(count)
                    count += 1
                cv2.imshow('image', frame)
                # 保持画面的持续。
                k = cv2.waitKey(10) & 0xff
                if k == 27:
                    break
            print("退出")
            self.cap.release()
            cv2.destroyAllWindows()
    
        def read_images(self,path, sz=None):
            c = 0
            X, y = [], []
            for dirname, dirnames, filenames in os.walk(path):
                for subdirname in dirnames:
                    print(subdirname)
                    # subdirname指文件名即人名
                    subject_path = os.path.join(dirname, subdirname)
                    for filename in os.listdir(subject_path):
                        try:
                            if (filename == ".directory"):
                                continue
                            filepath = os.path.join(subject_path, filename)
                            im = cv2.imread(os.path.join(subject_path, filename), cv2.IMREAD_GRAYSCALE)
                            if (im is None):
                                print("image " + filepath + " is none")
                            # resize to given size (if given)
                            if (sz is not None):
                                im = cv2.resize(im, sz)
                            X.append(np.asarray(im, dtype=np.uint8))
                            y.append(c)
                            # data[subdirname] = data.get(subdirname, []) + X
                        except IOError as e:
                            print("I/O error({0}): {1}".format(e.errno, e.strerror))
                        except:
                            print("Unexpected error:", sys.exc_info()[0])
                            raise
                    c = c + 1
            return [X, y]
    
        def video_demo_train(self):
            path = './Facedata/'
            [X, y] = self.read_images(path)
            y = np.asarray(y, dtype=np.int32)
            # 创建模型
            model = cv2.face.LBPHFaceRecognizer_create()
            # 训练模型
            model.train(np.asarray(X), np.asarray(y))
            # 模型预测
            [p_label, p_confidence] = model.predict(np.asarray(X[0]))
            # 保存模型
            model.write('./trainer/trainer.yml')
            print("训练完成")
    
        def pushButton1click(self):
            self.video_demo_collect()
            #这里面写功能
    
        def pushButton2click(self):
            self.video_demo_train()
    
    #这是主窗体
    class MyWindow(QtWidgets.QWidget, Ui_MainWindow):
        def __init__(self, parent=None):
            super(MyWindow, self).__init__(parent)
            self.setupUi(self)
            self.ButtonEvenbinding()
            self._isWinodowCreated = True
            self._shouldDrawDebugRects = True
        @property
        def isWindowCreated(self):
            return self._isWindowCreated
        # 每加一个界面就要增加一句self.模块名字.clicked.connect(lambda:self.自己定义的名字())
        # 然后在下面加
        # def 自定义名字1(self):
        # self.form1=QtWidgets.QWidget() 实例化
        # self.s = 界面Py文件名字.界面文件名字的类()
        # self.s.setupUi(self.form1)
        # self.form1.show()
        def ButtonEvenbinding(self):
            self.Button1.clicked.connect(self.pushButton1click)
            self.Button2.clicked.connect(self.pushButton2click)
            self.Button3.clicked.connect(QCoreApplication.instance().quit)
    #这个地方其实就是相当于pushButton1click的main函数
        def pushButton1click(self):
            self.form1=QtWidgets.QWidget()
            self.s = Myface_collect()
            self.s.setupUi(self.form1)
            self.s.ButtonEvenbinding()
            self.form1.show()
    #这个地方就相当于pushButton2click的main函数
        def pushButton2click(self):
            self.form2 = QtWidgets.QWidget()
            self.s = myrecognition()
            self.s.setupUi(self.form2)
            self.s.ButtonEvenbinding()
            self.form2.show()
    
    
    
    展开全文
  • 基于MATLAB的人脸考勤识别系统摘 要 人脸识别是模式识别和图像处理等学科的一个研究热点,它广泛应用在身份验证、刑侦破案、视频监视、机器人智能化和医学等领域,具有广阔的应用价值和商用价值。人脸特征作为一种...

    基于MATLAB的人脸考勤识别系统

    摘 要

    人脸识别是模式识别和图像处理等学科的一个研究热点,它广泛应用在身份验证、刑侦破案、视频监视、机器人智能化和医学等领域,具有广阔的应用价值和商用价值。人脸特征作为一种生物特征,与其他生物特征相比,具有有好、直接、方便等特点,因

    此使用人脸特征进行身份识别更易于被用户所接受。

    人脸识别技术在过去的几十年得到了很大的发展,但由于人脸的非刚性、表情多变等因素,使得人脸识别技术在实际应用中面临着巨大的困难。本文针对近年来国内外相关学术论文及研究报告进行学习和分析的基础上,利用图像处理的matlab实现人脸识别方法,这种实现简单且识别准确率高,但其缺点是计算量大,当要识别较多人员时,该方法难以胜任。

    利用MATLAB实现了一个集多种预处理方法于一体的通用的人脸图像预处理仿真系

    统,将该系统作为图像预处理模块可嵌入在人脸识别系统中,并利用灰度图像的直方图比对来实现人脸图像的识别判定。

    第1章 绪 论

    本章提出了本文的研究背景及应用前景。首先阐述了人脸图像识别意义;然后介绍了人脸图像识别研究中存在的问题;接着介绍了自动人脸识别系统的一般框架构成;最后简要地介绍了本文的主要工作和章节结构。

    1.1 研究背景

    人脸识别是人类视觉最杰出的能力之一。它的研究涉及模式识别、图像处理、生物学、心理学、认知科学,与基于其它生物特征的身份鉴别方法以及计算机人机感知交互领域都有密切联系。人脸识别早在六七十年代就引起了研究者的强烈兴趣。20世纪60年代,Bledsoe提出了人脸识别的半自动系统模式与特征提取方法。70年代,美、英等发达国家开始重视人脸识别的研究工作并取得进展。1972年,Harmon用交互人脸识别方法在理论上与实践上进行了详细的论述。同年,Sakai设计了人脸图像自动识别系统。80年代初T. Minami研究出了优于Sakai的人脸图像自动识别系统。但早期的人脸识别一般都需要人的某些先验知识,无法摆脱人的干预。进入九十年代,由于各方面对人脸识别系统的迫切需求,人脸识别的研究变的非常热门。

    人脸识别的方法有了重大突破,进入了真正的机器自动识别阶段,如Karhunen-Loève变换等或新的神经网络技术。人脸识别研究得到了前所未人脸识别方法的分析与研究 有的重视,国际上发表有关人脸识别等方面的论文数量大幅度增加,仅从1990年到2000年之间,SCI及EI可检索到的相关文献多达数千篇,这期间关于人脸识别的综述也屡屡可见。国外有许多学校在研究人脸识别技术,研究涉及的领域很广。这些研究受到军方、警方及大公司的高度重视和资助,国内的一些知名院校也开始从事人脸识别的研究。

    人脸识别是当前模式识别领域的一个前沿课题,但目前人脸识别尚处于研究课题阶段,尚不是实用化领域的活跃课题。虽然人类可以毫不困难地由人脸辨别一个人,但利用计算机进行完全自动的人脸识别存在许多困难,其表现在:人脸是非刚体,存在表情变化;人脸随年龄增长而变化;发型、眼镜等装饰对人脸造成遮挡;人脸所成图像受光照、成像角度、成像距离等影响。人脸识别的困难还在于图像包括大量的数据,输入的像素可能成百上千,每个像素都含有各自不同的灰度级,由此带来的计算的复杂度将会增加。现有的识别方法中,通过从人脸图像中提取出特征信息,来对数据库进行检索的方法速度快,而利用拓扑属性图匹配来确定匹配度的方法则相对较快。

    1.2 人脸图像识别的应用前景

    人脸识别系统现在在大多数领域中起到举足轻重的作用,尤其是用在机关单位的安全和考勤、网络安全、银行、海关边检、物业管理、军队安全、智能身份证、智能门禁、司机驾照验证、计算机登录系统。我国在这方面也取得了较好的成就,国家863项目“面像检测与识别核心技术”通过成果鉴定并初步应用,就标志着我国在人脸识别这一当今热点科研领域掌握了一定的核心技术。

    就从目前和将来来看,可以预测到人脸图像识别将具有广阔的应用前景,如表1-1中所列举就是其中已经实现或逐步完善的应用。

    表1-1 人脸识别的应用

    应用优点存在问题
    信信用卡、汽车驾照、护照以及个人身份验证等图像摄取可控图像分割可控图像质量好需要建立庞大的数据库
    嫌疑犯照片匹配图像质量不统一多幅图像可用潜在的巨大图像库
    互联网应用视频信息价值高多人参与存在虚假
    银行/储蓄安全监控效果好图像分割不可控图像质量较差
    人群监测图像质量高可利用摄像图像图像分割自由图像质量低、实时性

    1.3 本文研究的问题

    本文介绍了人脸图像识别中所应用MATLAB对图像进行预处理,应用该工具箱对图像进行经典图像处理,通过实例来应用matlab图像处理功能,对某一特定的人脸图像处理,进而应用到人脸识别系统。本文在总结分析人脸识别系统中几种常用的图像预处理方法基础上,利用MATLAB实现了一个集多种预处理方法一体的通用的人脸图像预处理仿真系统,将该系统作为图像预处理模块可嵌入在人脸识别系统中,并利用灰度图像的直方图比对来实现人脸图像的识别判定。

    其中涉及到图像的选取,脸部定位,特征提取,图像处理和识别几个过程。

    1.4 识别系统构成

    人类似乎具有“与生俱来”的人脸识别能力,赋予计算机同样的能力是人类的梦想之一,这就是所谓的“人脸识别”系统。假设我们把照相机、摄像头、扫描仪等看作计算机的“眼睛”,数字图像可以看作计算机观察到的“影像”,那么AFR赋予计算机根据其所“看到”的人脸图片来判断人物身份的能力。

    广义的讲,自动人脸识别系统具有如图1.1所示的一般框架并完成相应功能的任务。


    人脸图像获取

    人脸检测

    特征提取

    人脸识别

    图1.1 人脸识别系统一般框架

    (1)人脸图像的获取

    一般来说,图像的获取都是通过摄像头摄取,但摄取的图像可以是真人,也可以是人脸的图片或者为了相对简单,可以不考虑通过摄像头来摄取头像,而是直接给定要识别的图像。

    (2)人脸的检测

    人脸检测的任务是判断静态图像中是否存在人脸。若存在人脸,给出其在图像中的坐标位置、人脸区域大小等信息。而人脸跟踪则需要进一步输出所检测到的人脸位置、大小等状态随时间的连续变化情况。

    (3)特征提取

    通过人脸特征点的检测与标定可以确定人脸图像中显著特征点的位置(如眼睛、眉毛、鼻子、嘴巴等器官),同时还可以得到这些器官及其面部轮廓的形状信息的描述。

    根据人脸特征点检测与标定的结果,通过某些运算得到人脸特征的描述(这些特征包括:全局特征和局部特征,显式特征和统计特征等)。

    (4)基于人脸图像比对的身份识别

    即人脸识别(Face Identification)问题。通过将输入人脸图像与人脸数据库中的所有已知原型人脸图像计算相似度并对其排序来给出输入人脸的身份信息。这包括两类识别问题:一类是闭集(Close Set)人脸识别问题,即假定输入的人脸一定是人脸库中的某个个体;另一类是开集(Open Set)识别,即首先要对输入人脸是否在已知人脸库中做出判断,如果是,则给出其身份。

    (5)基于人脸图像比对的身份验证

    即人脸确认(Face Verification)问题。系统在输入人脸图像的同时输入一个用户宣称的该人脸的身份信息,系统要对该输入人脸图像的身份与宣称的身份是否相符作出判断。

    1.5 论文的内容及组织

    第二章主要介绍人脸识别系统中所用到的仿真软件Matlab,介绍了在人脸图像识别过程中所需要的图像处理技术,包括:一些基本操作、格式转换、图像增强等。并做了一个Matlab图像处理功能的实例

    第三章主要始涉三个方面:首先是对人脸识别系统的构成做详细论述;其次就是对人脸识别过程中的关键环节人脸检测、特征提取和图像预处理做详细介绍;最后就是Matlab在人脸识别系统中的具体应用,即人脸图像识别的具体技术,并用Matlab进行仿真试验并得到结果。

    第四章是对人脸图像识别体系构架的设计,并给出了人脸识别用到的理论知识即直方图差异对比,并编写matlab代码实现人脸图像识别。

    第2章 图像处理的Matlab

    2.1 Matlab简介

    MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。 

      MATLAB和MathematicaMaple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理信号检测、金融建模设计与分析等领域。MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对CFORTRANC++JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。编辑本段基本应用

    MATLAB 的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱(单独提供的专用MATLAB 函数集)扩展了MATLAB 环境,以解决这些应用领域内特定类型的问题。20世纪70年代,美国新墨西哥大学计算机科学系主任Cleve Moler为了减轻学生编程的负担,用FORTRAN编写了最早的MATLAB。1984年由Little、Moler、Steve Bangert合作成立了的MathWorks公司正式把MATLAB推向市场。到20世纪90年代,MATLAB已成为国际控制界的标准计算软件。

    2.2 数字图像处理及过程

    数字图像处理(Digital Image Processing)是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。数字图像处理的产生和迅速发展主要受三个因素的影响:一是计算机的发展;二是数学的发展(特别是离散数学理论的创立和完善);三是广泛的农牧业、林业、环境、军事、工业和医学等方面的应用需求的增长。

    2.2.1图像处理的基本操作

    读取和显示图像可以通过imread()和imshow()来实现;图像的输出用imwrite()函数就可以很方便的把图像输出到硬盘上;另外还可以用imcrop()、imrisize()、imrotate()等来实现图像的裁剪、缩放和旋转等功能。

    2.2.2图像类型的转换

    Matlab支持多种图像类型,但在某些图像操作中,对图像的类型有要求,所以要涉及到对图像类型进行转换。Matlab7.0图像处理工具箱为我们提供了不同图像类型相互转换的大量函数,如mat2gray()函数可以将矩阵转换为灰度图像,rgb2gray()转换RGB图像或颜色映像表为灰度图像。在类型转换的时候,我们还经常遇到数据类型不匹配的情况,针对这种情况,Matlab7.0工具箱中,也给我们提供了各种数据类型之间的转换函数,如double()就是把数据转换为双精度类型的函数。

    2.2.3图像增强

    图像增强的目的是为了改善图像的视觉效果,提高图像的清晰度和工艺的适应性,以及便于人与计算机的分析和处理,以满足图像复制或再现的要求。图像增强的方法分为空域法和频域法两大类,空域法主要是对图像中的各个像素点进行操作;而频域法是在图像的某个变换域内对整个图像进行操作,并修改变换后的系数,如傅立叶变换、DCT变换等的系数,然后再进行反变换,便可得到处理后的图像。下面以空域增强法的几种方法加以说明。

    (1).灰度变换增强

    有多种方法可以实现图像的灰度变换,其中最常用的就是直方图变换的方法,即直方图的均衡化。这种方法是一种使输出图像直方图近似服从均匀分布的变换算法。Matlab7.0图像处理工具箱中提供了图像直方图均衡化的具体函数histeq(),同时我们可以用函数imhist()函数来计算和显示图像的直方图。

    (2).空域滤波增强

    空域滤波按照空域滤波器的功能又可分为平滑滤波器和锐化滤波器。平滑滤波器可以用低通滤波实现,目的在于模糊图像或消除噪声;锐化滤波器是用高通滤波来实现,目的在于强调图像被模糊的细节。在Matlab中,各种滤波方法都是在空间域中通过不同的滤波算子实现,可用fspecial()函数来创建预定义的滤波算子,然后可以使用imfilter()或filter2()函数调用创建好的滤波器对图像进行滤波。

    2.2.4边缘检测

    数字图像的边缘检测是图像分割、目标区域识别、区域形状提取等图像分析领域十分重要的基础,也是图像识别中提取图像特征的一个重要属性。边缘检测算子可以检查每个像素的邻域并对灰度变化率进行量化,也包括对方向的确定,其中大多数是基于方向导数掩模求卷积的方法。常用的有Sobel算子,Prewitt算子,Roberts算子,Log算子等。Matlab7.0工具箱中提供的edge()函数可以进行边缘检测,在其参数里面,可以根据需要选择合适的算子及其参数。

    2.3 本章小结

    以上实例只是对Matlab图像处理工具箱函数的一小部分运用,从这些功能的运用可以看出,Matlab语言简洁,可读性强。作为人脸识别系统中图像预处理工具,有非常好的处理功能。

    在这段学习Matlab图像处理软件的过程中,也遇到了很多的问题,感谢在老师和同学的帮助下让我更熟练的掌握这款软件,这将会在我以后工作和运用当中受用一生。其中最大的阻碍是软件里是全英文的,因此我得更加要学好英语、重视英语。也同时学会了要善于利用各种资源。


    第3章 人脸区域定位

    3.1人脸区域粗定位

    3.1.1肤色区域标记编码

    经在进行区域分析和计算之前,先对其进行统计编码,已确定筛选的对象。

    区域标记的具体算法流程如下:

    (1)扫描整幅图像.把所有肤色,类肤色区域的边界点标记出来:

    (2)从每个区域的一个边界点出发并标记,利用四邻域的原则搜索所有为标记的边界点,并标记出来。根据连通性的原理,在编码处理过程中,属于同样码号的像素就属于同一个区域。同时编码后可得到肤色像素点的数量,也即该区域的面积。

    (3)根据每个连通区域边界点的不同标记把所有的连通区域分割开来,这样就得到了所有可能的人脸区域。边界由肤色像素点和非肤色像素点所组成。

    3.1.2基于区域面积和长宽比的粗定位

    在进行人脸区域筛选之前,首先考虑到这样一个问题:人的面部近似为椭圆形,在长宽比上存在一定的比例。但是一些肤色区域也可能在长宽比上存在一定比例,如人的手攥成拳头时,这就需要考虑另一个因素——区域的面积。人脸区域在图像中(除去背景)相对占有较大的比例。基于这些想法,结合文献,本文采用如下的方法:

    首先对人脸图像进行处理,将其分为网格状,由于部分人脸可能存在一些旋转倾斜,因此直接利用区域的上、下、左、右4个顶点的坐标值进行判断存在一定的困难。利用提取区域边界进行操作,而区域边界是根据对图像各区域进行编码时获得的。然后对其各网格进行二值分析,通过像素比例来做处理,满足面积比例的再对其长宽比进行筛选,最后得到选出的人脸区域。

    详细操作如下:

    1. 统计并提取构成该区域边界的所有点的坐标值,记录下X轴上具有最小、最大分量的坐标值,以此作为人脸的长宽参数,同理求出Y轴上具有最小、最大分量的坐标值。
    2. 令B等于其中较大者,S等于其中较小者,B与S的比值B/S(=r)即为所求的区域长宽比。
    3. 对于垂直正面的人脸,则该比值近似于1。但由于图像中人脸或有偏差或侧脸,且肤色相似度分割可能造成人脸头颈部作为同一个区域分割,并为防止把正确的分割区域作为错误的判断,故将r的上限适当放大。本文选取r的取值范围为[0.4,2.4],不属于这个范围的候选区域则直接删除。
    4. 区域长宽求出后,区域的面积即为该区域中白色像素点的个数,用公式可表达为

    (3-1)

    利用该方法,对图像进行处理,结果如下图所示:


    v2-02b5f3545ce5302c59c42ec7d3042f17_b.jpg


    图3.1粗定位后的图像

    3.2特征点定位

    经过上述步骤之后,可得到粗略定位的人脸区域。可将该图作为姿态估计的输入图像,但是利用没有进行人脸对齐的图像进行人脸姿态估计.效果往往不是很好。这里进一步采取了特征点定位算法来提取出人脸上的特征点,根据特征点的相对位置来进行输入图像的规范化,进一步提高姿态估计的精确度。

    3.2.1特征点选取

    人体面部结构组成的有眼睛、鼻子、嘴巴、下巴、颧骨,还有部分毛发特征比如胡须,眉毛等。这些特征是人与人区别的主要标志,因此对这些器宫的形状和结构关系的几何描述,可以作为人脸特征描述的重要特征。几何特征提取即是用适当的方法对眼睛、鼻子、嘴巴、下巴等器官的形状、大小和结构关系进行几何描述。

    本文选取了眼靖和嘴融作为特征点来进行特征点定位。眼睛用作人脸检测验证方法的依据是:两眼之间的间距和嘴角距离不受光照或表情变化影响,特征突出易于定位。

    3.2.2嘴唇定位

    在色彩空间中,嘴唇的颜色与面部的其他部位的区别是很明显的: 一是亮度比其他肤色暗一些,二是红色在三基色中占比例较大。具有这些特征的区域可假设为嘴唇。

    由嘴唇和肤色色度分析可知,在YCbCr 色彩空间中,嘴唇比肤色具有较高的Cr 分量。因此,构建嘴唇的提取模型:

    为的取值范围。 (3-2)

    在CVL图像库中,选取肤色和嘴唇像素,进行统计,得到:。

    3.2.3眼睛定位

    目前实现眼睛定位的算法很多,主要有区域分割法、灰度投影法、边缘提取法、统计学习法,模板法等。

    区域分割法首先对人脸的二值图像进行区域分割,然后设定一系列经验值和支持函数定位眼睛;

    灰度投影法对人脸图像进行水平和垂直方向的投影,根据波峰、波谷的分布信息来定位眼睛;

    边缘提取法主要是针对灰度单人脸图像,根据图像的灰度投影曲线来确定人脸的左右上下边缘,利用预测法确定人眼在眉眼区域的大概位置,通过检测眉眼部分的边缘及边缘分组,确定双眼的坐标位置。

    霍夫变换法主要针对眼球进行研究。在用霍夫变换检测眼球前,先用Canny算法提取边缘。设图像空间为(i,j),i和j分别表示行和列,三维变换空间为(ie,je,R),其中ie、je分别代表眼球圆心的行和列,R为半径。下半圆表达式为:

    (3-3)

    对于变化空间的每一个坐标点(ie,je,R),在图像空间都对应一个半圆,在这个半圆上存在的边缘点数就是变换空间上坐标点(ie,je,R)对应的值。实验表明,霍夫变换具有抗干扰能力强的优点。

    统计学习法将人眼区域看作一类模式,使用大量不同条件下的人眼与非人眼样本,借助统计分析理论和机器学习方法提取人眼共有的一些特征,实现人眼检测。

    根据眼睛的特性,本文采用一种检测近眼物的算法:

    1. 基于肤色特性筛选出眼睛区域

    眼睛有一项特殊的特性,即明显的黑白区域相邻。由黑白颜色的特点可以得到,虹膜的RGB值很小,眼白的RGB值很大,并且两者的RGB两两差值很小。因此利用RGB三色的两两差值的绝对值F作为眼睛像素进行识别。

    (3-4)

    1. 基于模板法进行人眼选取

    经过上一步分割出可能含有眼睛的区域之后,利用圆形模板来对其进行进一步筛选检测。圆形模板的优点在于不受人脸角度的限制。这里将待测区域再次分割标记为黑区和白区,分别赋值为1和2,其他区域则赋值为0。

    具体算法如下:

    构造圆形二值模板,R=3,4,5,…,15。从最小的模板开始进行匹配,当找到匹配区域后,重复匹配直到匹配度不再增加,保留匹配程度好的区域。计算扩大模板后,被覆盖区域里白色像素比例是否有很大程度的增加。是,则判断为眼睛。

    1. 基于眼嘴几何形状的人眼定位

    由于眼睛与嘴巴构成等腰三角形,利用这一特征进行最终的人脸区域确定。

    假设嘴巴中心和任意两个近眼物可构成一系列三角形,设瞳距为1,则其与嘴巴中心的距离d因近似为1,考虑到角度等其他影响,取值1.0<d<1.3。

    处理结果如图3.2所示。

    3.3实验结果和分析

    部分实验结果图像上图所示,用符号“+”代表定位的眼睛位置。


    v2-50b7ae5eefaa5db5d9802483074b5ae1_b.jpg


    图3.2 特征点定位的图像

    由图可以看出对于不同表情、不同光照、不同姿态和佩戴眼镜的情况都有较好的定位结果。

    但是当配戴黑色边框眼镜且眼镜上边缘距离眼球较近、或者光照太强时容易产生错误定位的情况。另外当由于光照角度太侧而造成脸部阴影严重时也会产生错误的定位。

    3.4本章小结

    本章主要描述了人脸区域定位的过程,考虑到人脸图像的复杂性,将人脸区域定位分为两方面:人脸区域粗定位,基于特征点的精确定位。

    首先根据人脸面积比和长宽比,对于类似人脸的区域进行筛选,去除大部分背景干扰。但仍有部分其他干扰如裸露的皮肤等,这里采用对眼睛和嘴唇的精确定位,排除其他类人脸区域。

    通过以上人脸图像的定位,其定位结果表明文中提出的定位算法有较强的适应性它可以有效地运用于不同尺寸,不同姿态,深色或浅色背景等的情况,是一种有效的人脸定位方法,但是此方法也存在一定的局限性例如只能对简单背景的正面单人图像成功定位,在复杂的背景下可能出现定位错误的情况。

    人脸识别是一项热门的计算机技术研究领域,它属于生物特征识别技术,是对生物体(一般特指人)本身的生物特征来区分生物体个体。广义的人脸识别实际包括构建人脸识别系统的一系列相关技术,包括人脸图像采集、人脸定位、人脸识别预处理、身份确认以及身份查找等;而狭义的人脸识别特指通过人脸进行身份确认或者身份查找的技术或系统。其他识别无法人脸识别的优势在于其自然性和不被被测个体察觉的特点。虽然人脸识别有很多比拟的优点,但是它本身也存在许多困难。人脸识别被认为是生物特征识别领域甚至人工智能领域最困难的研究课题之一。人脸识别的困难主要是人脸作为生物特征的特点所带来的。所有的人脸的结构都相似,而人可以通过脸部的变化产生很多表情。所以还需进一步的改进人脸定位的算法,使定位的效果更加准确,快速。



    第4章 人脸图像识别系统实现

    4.1 引言

    计算机人脸识别是一个非常活跃的研究领域,因其在公安刑侦破案、银行密码系统、计算机安全系统以及动态监视系统等方面都有广泛应用,已成为当前模式识别、计算机视觉领域的研究热点。人脸识别系统一般包括人脸检测与定位、人脸图像预处理、特征提取和匹配识别四个组成部分。其中,人脸图像预处理,作为特征提取和识别的前提步骤,是计算机人脸识别系统中的必要环节。其目的是在去除噪声,加强有用信息,对输入设备或其他因素造成的退化现像进行复原,为后续的特征提取和识别作准备。

    不同的人脸识别系统根据其采用的图像来源和识别算法需要不同,采用的预处理方法也不同。常用的人脸图像预处理方法有:滤波去噪、灰度变换、图像二值化、边缘检测、尺寸归一化、灰度归一化等。用在同一系统中的可能只有其中一种或几种预处理方法,但一旦库中采集到的原始图像质量发生较大变化(如人脸大小、光照强度、拍摄条件、成像系统等方面变化),原有的预处理模块便不能满足特征提取的需要,还要更新,这是极不方便的。

    鉴于此,作者在总结分析了灰度变换、滤波去噪、边缘检测三种广泛应用于不同人脸识别系统中的预处理方法基础上,设计了一个通用的人脸图像预处理仿真系统。该系统可对不同条件下的原始图像进行相应的预处理。如,用户可根据需要选择使用不同的滤波方法去除噪声、不同的边缘检测算子检测人脸边缘、选择不同的灰度变换算法实现图像的灰度校正和灰度归一化,仿真系统同时还实现了尺寸归一化、二值化等其他常用的图像预处理算法。

    4.2系统基本机构

    人脸识别是一个复杂的过程,一个计算机人脸识别的流程如图3-1所示。它包括几个步骤:对采集到的图像,首先进行人脸检测(在输入图像中寻找人脸),给出人脸有无的结果;然后进行人脸定位,确定人脸的位置并提取出来。对人脸的定位在输入是图像序列时一般也称之为人脸跟踪。通常检测和定位结合进行。对提取出来的人脸借助人脸描述就可以进行(狭义的)人脸识别,即通过提取特征来确定其身份。


    v2-53bbb066576fa440f5d557ad04fdf1c9_b.jpg


    图4.1 基本框架图

    4.3 人脸检测定位算法

    人脸检测定位算法大致可分为两大类:基于显式特征的方法和基于隐式特征的方法。

    所谓显式特征是指对人类肉眼来说直观可见的特征,如肤色、脸部轮廓、脸部结构等。基于显式特征的方法是指由人通过肉眼观察,总结出人脸区别于“非人脸”区域的特征,然后根据被检测区域是否满足这些“人脸特征”,来判定该区域是否包含人脸。根据所选择的“人脸特征”,基于显式特征的方法分以下三类:基于肤色模型的方法、模板匹配的方法、基于先验知识的方法。

    在彩色图像中,颜色是人脸表面最为显著的特征之一,利用颜色检测人脸是很自然的想法。Yang等在考察了不同种族、不同个体的肤色后,认为人类的肤色能在颜色空间中聚成单独的一类,而影响肤色值变化的最主要因素是亮度变化。因此他们采用广泛使用的RGB颜色空间,在滤去亮度值的图像中通过比较像素点的r、g值与肤色范围来推断该像素点及其邻域是否属于人脸区域。除了RGB颜色空间,还有诸如HIS,LUV,GLHS等其它颜色空间被使用。寻找到肤色区域后,必须进行验证,排除类肤色区域。Yoo等利用肤色像素的连通性分割出区域,使用椭圆拟合各个区域,根据椭圆长短轴的比率判断是否为人脸。

    模板匹配的方法一般是人为地先定义一个标准人脸模板,计算输入图像与模板的似然度;然后,确定一个似然度阈值,用以判断该输入图像中是否包含人脸。标准人脸模板可以是固定的样板,也可以是带参变量的曲线函数。

    基于先验知识的方法则采用符合人脸生理结构特征的人脸镶嵌图(mosaic image)模型,并在分析了足够多的人脸图像样本的基础上,针对人脸的灰度、边缘、纹理等信息,建立一种关于人脸的知识库。在检测中,首先抽取这些灰度、边缘等信息,然后检验它是否符合知识库中关于人脸的先验知识。

    以上三种方法的优缺点比较见表3-1。

    表4-1 基于显示特征方法的特点

    基于隐式特征的方法将人脸区域看成一类模式,使用大量“人脸”、“非人脸”样本训练、构造分类器,通过判别图像中所有可能区域是否属于“人脸模式”的方法来实现人脸检测。这类方法有:特征脸法、人工神经网络法、支持向量机法;积分图像法。

    特征脸法(eigenface)把单个图像看成一维向量,众多的一维向量形成了人脸图像特征空间,再将其变换到一个新的相对简单的特征空间,通过计算矩阵的特征值和特征向量,利用图像的代数特征信息,寻找“人脸”、“非人脸”两种模式在该特征空间中的分布规律。

    人工神经网络(Artificial Neural Network,ANN)的方法是通过训练一个网络结构,把模式的统计特性隐含在神经网络的结构和参数之中。基于人工神经网络的方法对于复杂的、难以显式描述的模式,具有独特的优势。

    支撑向量机(Support Vector Machine,SVM)法是在统计学习理论基础上发展出的一种新的模式识别方法,它基于结构风险最小化的原理,较之于基于经验风险最小化的人工神经网络,一些难以逾越的问题,如:模型选择和过学习问题、非线性和维数灾难问题、局部极小点问题等都得到了很大程度上的解决。但是直接使用SVM方法进行人脸识别有两方面的困难:第一,训练时需要求解二次规划问题计算复杂度高,内存需求量巨大;第二,在非人脸样本不受限制时,需要极大规模的训练集合,得到的支持向量会很多,使得分类器的计算量过高。

    基于积分图像(Integral Image)特征的人脸检测方法是Viola等新近提出的一种算法,它综合使用了积分图像描述方法、Adaboost学习算法及训练方法、级联弱分类器。

    以上四种方法的优缺点比较见表3-2

    表4-2 基于隐式特征方法的特征

    检测方法优点缺点与需要改进的地方
    本征脸法标准人脸模板能抽象人脸全部信息,运算不涉及迭代耗费时间短但模板检测效率低,多模板提高了效率也增加了检测时间
    神经网络法检测效率高,错误报警数目不多,训练成熟的网络监测速度快多样本训练耗费时间多,但网络监测错误报警数目多
    支撑向量机机法比神经网络方法具有更好的泛化能力,能对为观测到的例子进行有效分类“非人脸”样本复杂多样,造成支持向量数目多,运算复杂度大
    基于积分图像分析法检测速度快,基本满足实时检测要求,检测效率可以与神经网络法比较错误报警数目少时,检测率不高

    运用matlab仿真进行人脸检测定位实例:


    v2-c45b05c3cdb69985d93b0619ae6b3e4e_b.jpg

    v2-1787bf40cfb056c821d5c75b3083fadf_b.jpg


    原始图片 灰度图片


    v2-649980b2548c2c92d314ba85d43a3210_b.jpg

    v2-f82237fa0a7bde36a5cc490664de189e_b.jpg


    均衡化灰度图片 人脸定位

    4.4 人脸图像的预处理

    不同的人脸识别系统根据其采用的图像来源和识别算法需要不同,采用的预处理方法也不同。常用的人脸图像预处理方法有:滤波去噪、灰度变换、图像二值化、边缘检测、尺寸归一化、灰度归一化等。用在同一系统中的可能只有其中一种或几种预处理方法,但一旦库中采集到的原始图像质量发生较大变化(如人脸大小、光照强度、拍摄条件、成像系统等方面变化),原有的预处理模块便不能满足特征提取的需要,还要更新,这是极不方便的。鉴于此,作者在总结分析了滤波去噪、边缘检测、灰度变换三种广泛应用于不同人脸识别系统中的预处理方法基础上,设计了一个通用的人脸图像预处理仿真系统。该系统可对不同条件下的原始图像进行相应的预处理。如,用户可根据需要选择使用不同的滤波方法去除噪声、不同的边缘检测算子检测人脸边缘、选择不同的灰度变换算法实现图像的灰度校正和灰度归一化,仿真系统同时还实现了尺寸归一化、二值化等其他常用的图像预处理算法。

    4.4.1 仿真系统中实现的人脸图像预处理方法

    根据所查阅文献资料,常应用于人脸图像的预处理方法有:图像类型转换、滤波去噪、灰度变换、边缘检测及二值化、尺寸归一化、灰度归一化等。作为通用人脸图像预处理模块,要能够充分适应不同人脸库中图像在人脸大小、光照强度、成像系统等方面的任意性和差异性,不能单独采用某种单一的滤波、灰度变换和边缘检测方法。所以,在本仿真系统中,对上述的每种预处理方法全部加以实现的同时,还对三种最常用预处理方法:滤波去噪、灰度变换、边缘检测,提供了多种不同的具体算法供用户比较、选择之用。

    1)滤波去噪

    由于噪声给图像带来的失真和降质,在特征提取之前采用滤波的方式来去除噪声是实际人脸识别系统中所必须的步骤。滤波的方法有很多,如各种平滑滤波、各种锐化滤波等,关于各种滤波方法的原理和分类可参考文献[2]。下面对本文实现的滤波方法及其选择依据加以说明。在人脸图像预处理中使用较多的滤波是平滑滤波,方法可分为以下三类:线性滤波、中值滤波、自适应滤波。

    (1)线性滤波最典型的线性滤波方法如,采用邻域平均法的均值滤波器、采用邻域加权平均的高斯滤波和维纳滤波。对图像进行线性滤波可以去除图像中某些特定类型的噪声,如图像中的颗粒噪声,高斯噪声、椒盐噪声等。对扫描得到的人脸图像根据其噪声类型一般采用此种滤波方法。考虑滤波模板大小对滤波效果影响较大,仿真系统选择算法时对同种滤波算法提供了不同模板大小的情况。

    (2)中值滤波法中值滤波法是一种非线性滤波方法,它把像素及其邻域中的像素按灰度级进行排序,然后选择该组的中间值作为输出像素值。中值滤波方法的最大优点是抑制噪声效果明显且能保护边界。对于使用基于整体的人脸识别算法的系统中,由于失掉小区域的细节对特征提取影响较小,所以这种滤波方法最受欢迎。

    (3)自适应滤波自适应滤波能够根据图像的局部方差来调整滤波器的输出,其滤波效果要优于线性滤波,同时可以更好地保存图像的边缘和高频细节信息。

    2)灰度变换

    灰度变换是图像增强技术中的一种。通过灰度变换,可对原始图像中的光照不均进行补偿,使得待识别人脸图像遵循同一或相似的灰度分布。只有这样,不同图像在特征提取和识别时才具有可比性。这一过程,也被称作灰度归一化。常用在人脸识别系统中的灰度变换方法主要有:基于图像统计特征的直方图均衡化、直方图规定化和灰度均值方差标准化三种方法。直方图均衡化和直方图规定化的灰度变换原理和实现方法可由matlab仿真来实现。

    三种灰度变换方法,均能在一定程度上消除由于光照条件不同而对人脸识别带来的影响。故在仿真系统中提供了三种灰度变换效果比较及选择界面,用户可根据需要选用。

    3)边缘检测

    对输入人脸图像进行边缘检测是很多人脸识别系统在人脸粗定位及人脸主要器官(眼睛、鼻子、嘴巴)定位时采用的预处理方法。边缘检测的方法有很多,主要有:微分算子法、Sobel算子法、拉普拉斯算子法、canny算子法等。每种算子对不同方向边缘的检测能力和抑制噪声的能力都不同。所以,和灰度变换及滤波去噪部分的设计思路相同,在仿真系统中,笔者给出了canny、sobel、log、prewitt四种算子在不同灰度阈值下、不同方向的边缘检测算法,使用者可从检测结果中加以比较、选择合适的算法。图像类型转换、图像二值化、尺寸归一化也是一些人脸识别系统中经常使用的预处理方法。为了在不修改其他算法的基础上,扩大系统处理图像的类型和范围,将输入图像首先转换为统一的类型,是多数人脸图像预处理中的第一步。在本仿真系统中通过调用MATLAB中提供的各种图像类型转换函数来实现TIF、JPG转换为BMP格式及彩色到灰度图像的转换;对图像二值化,采用了graythresh()函数来自动选择阈值的二值化方法[1];尺寸归一化采用的算法是对人脸图像进行剪裁和尺寸缩放,实现去除大部分头发、服饰和背景的干扰并将人脸图像大小统一。

    4.5识别理论

    用灰度直方图增强图像对比度是基于图像灰度值统计的一种重要方法,它以概率论为基础的,常用的实现算法主要是直方图均衡化和直方图规定化。

    直方图均衡化主要用于增强动态范围较小的图像的反差,基本思想是把原始图的直方图变换为均匀分布的形式,这样就增强了像素灰度值的动态范围,从而达到增强图像整体对比度的效果。直方图均衡化的优点是能自动地增强整个图像的对比度,但它的具体的增强效果不好控制,处理的结果总是得到全局均衡化的直方图。实际中有时需要变换直方图使之成为某个需要的形状,从而有选择地增强某个灰度值范围内的对比度或使图像灰度值的分布满足特定的要求,这时可以采用比较灵活的直方图规定化方法。

    4.6人脸识别的matlab实现结果

    实现结果如图4.1和4.2


    v2-a2afece421ea301d9dff799e4212d3d4_b.jpg

    v2-25236ecedc904b11b044e2c5d0d78313_b.jpg


    图4.3 用户界面 图4.4 实现结果

    v2-731c9f2b252c55c75d99f07109fbcdf6_b.jpg






    结 论

    基于matlab数字图像处理与识别系统其实是一个范围很大的应用系统,作者在此只是有针对性、有选择地进行了一些开发和实现。

    该系统的主要功能模块共有二个:(1)数字图像处理的基本方法;(2)人脸识别。

    在“数字图像处理的基本方法”这一部分,用到的一些基本方法和一些最常用的处理方法来实现图像预处理,如格式转换,灰度变化和滤波锐化。仅就这一部分而言,就有很多可以继续完成的工作,可将其它一些数字图像处理方法进一步加以实现,如图像的平滑,图像矩阵的变换(K-L变换、Fourier变换、小波变换等),图像的膨胀腐蚀、图像的几何变换(平移、旋转、缩放等),以及各种编码图像的读写与显示。仅这一部分即可形成一个专用的图像处理平台。

    关于“人脸识别”,在了解了人脸识别的各种方法后,选择了图像直方图差值比较进行了实现。该方法能较好地实现人脸的分类,但对人脸图像的要求较高,目前仅是采用Orl的标准人脸库中的图像来进行测试,因此能获得较高的识别率。而在现实生活中采集到的人脸图像则会受到很多因素的影响,识别率就未必能达到要求了。若要进一步提高识别率和适用范围,则还需要结合其它算法,如PCA、神经网络等。















    参 考 文 献

    [1] 祝磊,朱善安.人脸识别的一种新的特征提取方法[J].计算机学报,2007,34(6): 122-1251

    [2] 何东风,凌捷.人脸识别技术综述[J].计算机学报,2003,13(12)75-78

    [3] Younus Fazl-e-Basit Javed和Usman Qayyum”,采用直方图的人脸识别和处理”第三阶段仅相关新兴技术研报告。

    [4] CVL Face Database[EB/OL].(2007-04-13).lrv.f- ri.uni- Lj.si/facedb.html.

    [5] Shi J.,Tomasi C..Good features to track.In:Proceedings of the IEEE International Conference on Computer Vision and Pattern Recognition,Seattle,W A,1994,593-600.

    [6] Yao P.,Eveans G.,Calaway A..Using affine correspondence to estinata 3D facial pose.In:Proceedings of the IEEE International Conference on Image Proceeding.Thessalonik 2001,Vol3,919-922.

    [7] 何国辉,甘俊英.PCA-LDA算法在性别鉴别中的应用[J].中国图像图形学报,2006,32(19):208-211.

    [8] 王聃,贾云伟,林福严.人脸识别系统中的特征提取[J].自动化学报,2005,21(7-3).

    [9] 张俭鸽,王世卿,盛光磊.基于小波和DFB-PCA的人脸识别算法研究[J].自动化学报,2007,23(2-1).

    [10] 曹林,王东峰,刘小军,邹谋炎.基于二维Gabor小波的人脸识别算法[J].电子学报,2006,28(3)490-494

    [11] 焦峰,山世光,崔国勤,高文,李锦涛.基于局部特征分析的人脸识别方法[J].自动化学报,2003,15(1):53-58

    [12] 徐倩,邓伟.一种融合两种主成分分析的人脸识别方法[J].计算机学报,2007,43(25):195-197


    附录A 人脸识别matlab程序

    %%%%% Reading of a RGB image

    i=imread('face1.jpg');

    I=rgb2gray(i);

    BW=im2bw(I);

    figure,imshow(BW)

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    %%%%% minimisation of background portion

    [n1 n2]=size(BW);

    r=floor(n1/10);

    c=floor(n2/10);

    x1=1;x2=r;

    s=r*c;

    for i=1:10

    y1=1;y2=c;

    for j=1:10

    if (y2<=c | y2>=9*c) | (x1==1 | x2==r*10)

    loc=find(BW(x1:x2, y1:y2)==0);

    [o p]=size(loc);

    pr=o*100/s;

    if pr<=100

    BW(x1:x2, y1:y2)=0;

    r1=x1;r2=x2;s1=y1;s2=y2;

    pr1=0;

    end

    imshow(BW);

    end

    y1=y1+c;

    y2=y2+c;

    end

    x1=x1+r;

    x2=x2+r;

    end

    figure,imshow(BW)

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    %%%%% detection of face object

    [s1 s2]=size(BB2);

    mx=0;

    for k=3:4:s2-1

    p=BB2(1,k)*BB2(1,k+1);

    if p>mx & (BB2(1,k)/BB2(1,k+1))<1.8

    mx=p;

    j=k;

    end

    end

    figure,imshow(I);

    hold on;

    rectangle('Position',[BB2(1,j-2),BB2(1,j-1),BB2(1,j),BB2(1,j+1)],'EdgeColor','r' )

    展开全文
  • 智慧方案
  • 摘要:校园安全问题日益严峻,而传统的出入登记+视频监控+智能IC卡安全系统...本文对人脸识别技术基本流程进行了梳理,完成了基于Matlab的人脸识别技术系统整体设计架构以及技术系统流程图设计,为人脸识别校园考勤...

    摘要:校园安全问题日益严峻,而传统的出入登记+视频监控+智能IC卡安全系统在可靠性、安全性等方面无法满足社会需要。人脸识别技术能够实现学生和外来人员的自动识别,具有图像采集方式灵活、非接触式等优点,特别是实时监控和提前预警方面,将成为校园安全中重要一环。本文对人脸识别技术基本流程进行了梳理,完成了基于Matlab的人脸识别技术系统整体设计架构以及技术系统流程图设计,为人脸识别校园考勤及安全系统的建立提供帮助。

    关键词:人脸识别、matlab、校园服务

    前言:

    校园是青少年和儿童学习、生活以及娱乐最为安全的场所,由于人员结构单一、作息规律等原因发生突发性安全事故的几率较低[1、2]。但是,近年来在学校周边发生的恶性事件几乎时刻见诸于媒体报端,人们对校园的安全问题产生了极大的忧虑,从另一个角度反映了目前学校传统的出入登记+视频监控+智能IC卡安全系统存在很大的安全漏洞[3],特别是实时监控和提前预警方面。人脸识别技术采用快速人脸检测技术可以从监控视频图象中实时查找人脸,并与人脸数据库进行实时比对,从而实现快速身份识别[4、5]。人脸识别技术可以实现一种远距离、用户非配合状态下的快速身份识别技术,以求远距离快速确认人员身份,实现智能预警以及学生考勤[6、7]。人脸识别校园考勤及安全系统主要任务包括:1)对学生入校情况进行考勤并自动与学生家长进行信息沟通;2)对入校外来人员进行识别;3)在考试过程中进行人员身份核实,避免替考行为;4)学生宿舍出入人员的管理。

    1人脸识别技术发展

    人脸识别系统简单的理解是从监控视频图象中实时查找人脸,将人脸信息特征提取后与已有人脸数据库进行实时比对,从而实现快速身份识别。相比于其他的生物识别技术如指纹和虹膜等,人脸识别的优点在于图像采集方式灵活,无需专用设备,常用的手机、相机、摄像头等都可完成采集。其次,人脸识别可以实现同时大群体的快速身份识别,而且数据采集过程非接触式的。

    但是在实际的操作中该技术的准确率有待提高,其中重要的原因是尽管人脸有采集方便、不变性和不会被盗取的优点,但面部表情、化妆、光线、拍照角度以及装饰等因素都会影响人脸信息特征的采集,从而降低识别的准确率。目前,人脸识别系统主要由四部分组成,即原始图像的采集和检测、人脸的预处理、特征的提取、匹配分类。

    (1)原始图像的采集和检测。主要过程是从图片中确定是否有人脸,并将其人脸图像从图像中提取出来。由于人脸的可变性非常高,所以光线、人的表情、头部和头部的遮挡物、头的姿态、年龄、设备噪音等对其有很大的影响,所以人脸检测与定位是个一个非常复杂的技术。

    (2)人脸的预处理。主要是对人脸图像在识别前进行各方面的处理来增强人脸特征。主要的预处理方法有灰度变换、直方图修正、图像的锐化与平滑以及图像的几何校正等。

    (3)特征的提取。主要是提取可以表示人脸信息的关键特征。关键特征要能够表示出一张唯一的人脸,人脸表示方法有人脸的几何特征、人工神经网络、人脸的特征脸、人脸模板匹配等表示方法。

    (4)匹配分类。人脸识别校园考勤及安全系统应用的前提是事先采集所有学生的面部信息并建立档案。主要是比较待识别的人脸与预存数据库中的人脸在特征脸空间的距离,找出距离最小的人脸图像,然后输出达到身份验证的作用。

    2基于Matlab的人脸识别技术

    matlab不仅仅可用于科学计算,数据处理可视化的功能,它作为三大数学软件之一,还有图像模式识别强大功能。各国科研人员对基于matlab的人脸识别系统设计进行研究,基于Matlab的人脸识别技术系统整体设计架构如图1所示,其基本基本流程是:1)对人脸识别系统的构成做详细论述;2)对人脸识别过程中的关键环节人脸检测、特征提取和图像预处理做详细介绍;3)matlab软件在人脸识别系统中的具体应用,即人脸图像识别的具体技术,并用matlab进行试验并得到结果;4)实验结果大多都是用训练集进行测试,最终对matlab识别率可以进行统计实验,经过多次验证,得出判定阈值。本系统共分为3个模块,分别为:获取人脸ID信息模块,人脸匹配(即特征提取与图像处理模块),校园安全与校园考勤模块。

    基于Matlab的人脸识别技术系统流程如图2所示,为获取每个学生的人脸ID信息,需要学生自己拍照后上传给电脑,若图片无效则系统提示“tryagain”,录入成功则系统缓存图片。直接获取的图片是“.jpg”格式需要先转换为“.bmp”格式图片。再运用PCA算法与数据区中人脸进行匹配。等到人流高峰期过后再发送短信给家长;获取迟到同学信息,让考勤同学记录迟到同学名字与班级。

    3人脸识别校园考勤及安全系统发展主要问题

    (1)人脸识别需要大量的学生数据收集工作,而且学校每年新生入学面临大量的数据收集工作;对于外来人员,如果未进行过数据采集则无法比对。

    (2)出现无法识别以及识别错误情况下的补救措施。

    (3)多人像识别技术。校园在上学和放学期间为人员流动高峰期,单人人脸识别会导致拥堵等情况发生,因此多人像快速人脸识别系统有待发展。

    展开全文
  • 该课题为基于MATLAB平台的PCA的人脸识别图像考勤系统。传统的人脸识别都是直接人头和人头的对比,现实意义不大,这块都做烂了,不易通过毕设答辩,而且论文不好写。该课题识别原理为:从一副生活照中寻找到人脸,...
  • 毕业设计---基于人脸识别的Web端考勤系统

    千次阅读 多人点赞 2020-06-05 10:32:24
    是一个基于web端的人脸识别项目,希望有相关需要的同学可以从中得到收获。 由于只在大二时粗略学过python语言,且错过秋招备战春招等原因,于5月份开始一个月内完成。 框架等都是从头开始学习,大部分内容重复,...
  • 学校人脸识别门禁系统的意义

    千次阅读 2020-04-16 16:37:53
    人脸门禁助力社区防控疫情 伴随着各行各业复工复产,全国上下人员开始频繁流动,尤其是北上广深一线城市,如何有效的登记居民身份,如何快速的检测体温,如何甄别居家观察人员等等给社区防控疫情带来一定困难。 ...
  • 人脸识别数据库应用程序(适用于大学,学校等学生),允许用户自动出勤,而无需人工干预。 它支持HTML表单来输入数据和更新数据库。还便于新来者及其照片的注册,以允许自动面部出勤。 它可以可视化地显示学生的分数...
  • 专业开发智慧小区人脸识别对比保安系统、智慧学校人脸识别系统管理、智慧医院人脸识别管理系统、智慧商超会员人脸识别对比管理系统、智慧监狱人脸识别对比管理系统。QQ:769438 ...
  • 基于人脸识别的教室管理系统设计与实现

    千次阅读 热门讨论 2021-05-25 17:10:23
    摘 要 随着教育事业的不断发展和社会的信息数字化,学生数量也随着这些社会因素的增长而飞速增长。...本文将通过对人脸识别技术与教室管理系统的结合,实现对学生的高效快速管理。通过调用百度智能云的人脸识
  • 高校人脸识别考勤是采用人脸识别技术对上课学生身份进行核实,有效去除冒名代替考勤的现象发生,实时即可学生考勤数据,方便老师进行考勤结果统计。刷脸考勤有效提升学校的考勤工作的效率,减轻老师上课的负担。那么...
  • 智慧校园人脸识别考勤方案

    千次阅读 2019-04-22 17:57:42
    传统考勤制度占据了辅导员工作时间,影响了辅导员的其他业务;统计结果不及时,数据太容易失真;对学生进行教育和自我教育很难及时到位,...这是教育部新的《普通高等学校学生管理规定》所不允许的,我司为克服以上...
  • 在人工智能应用发展趋势下,人脸识别技术在各个行业领域的应用不断提升完善,而且在多个领域应用落地人脸识别系统...学校大门是学校安全的安全防护的围墙,可通过开发校园人脸识别系统严格控制人员的进出,自动预警...
  • 人脸识别技术应用领域,目前学校也是人脸识别重要的应用场景。当使用校园一卡通作为师生身份...那么,当人脸识别系统走进学校,有哪些场景的使用校园人脸识别系统解决方案?带来哪些好处? 考勤管理 在教职工考...
  • 在这个项目中,我们将使用人脸识别制作考勤系统。 有很多算法可以让我们使用人脸识别来制作考勤系统。 在这个项目中,我们使用 Viola-Jones 算法和局部二进制模式直方图 (LBPH) 算法。 Viola-Jones 算法用于人脸...
  • IT项目管理-分析校园人脸识别门禁系统的可行性 文章目录IT项目管理-分析校园人脸识别门禁系统的可行性系统描述分析业务组织技术总结 系统描述 ​ 校园人脸识别门禁系统主要将人脸识别技术应用于校园门禁中。不同于...
  • 通关系统以现有项目为依托逐步推进成都铁路局江北机场等行业客户逐步推进学校景区小区银行等商业市场逐步推进智能安防联合推进 2.身份认证项目以黔东南州社保为依托试点推进逐步覆盖至贵州全省 3.五个城市的市场同时...
  • 使用人脸识别的考勤管理系统 :laptop: 该项目涉及构建一个考勤系统,该系统利用面部识别来标记员工的在场,进场和超时。 它涵盖了面部检测,对齐和识别等领域,还开发了一个Web应用程序以迎合系统的各种用例,例如新...
  • 基于Android系统人脸识别签到软件

    万次阅读 2018-06-14 21:12:06
    项目名称: 基于Android系统人脸识别签到软件 目 录 1 项目介绍..... 1 1.1 项目背景.... 1 1.2 产品特点.... 2 1.3 可行性分析.... 2 1.3.1 技术可行性分析.... 2 1.3.2 经济可行性分析.... 3 1.3.3 操作...
  • 《百度AI人脸识别与检测》专栏为项目专栏,从零到一,从无到有开发一个学生人脸识别签到系统;主要用到的技术有百度开放平台中的人脸检测、人脸识别、Python图形界面开发PyQt5、线程的管理、以及通过python调用百度...
  • 校园人脸识别系统解决方案在校园场景内应用落地,可以运用到安全管理、考勤管理、教学管理等多个方面。那么在安全管理方面,校园人脸识别安全系统有哪些功能? 通行管理,在校园进出场景中可以应用到人脸识别通道...
  • 而现在随着各地智慧校园的建设,有些学校逐步引入人脸识别技术,通过校园人脸识别系统开发应用落地。那么,校园人脸识别系统开发需求有哪些? 人员通行管理 校园门口是人员通行管理的重点区域。传统校卡进出的方式会...
  • 学校使用智能门禁卡系统管控人员出入,会有“认卡不认人”的缺陷,智慧校园利用人脸识别技术识别外来人员,守护校园安全,校方管理人员可实时掌握出入人员的身份信息。那么智慧校园中的校园人脸识别系统有应用到哪些...
  • 该课题为基于MATLAB平台的PCA的人脸识别系统。传统的人脸识别都是直接人头的比对,现实意义不大,这块都做烂了。该课题识别原理为:从一副生活照中寻找到人脸,并且分割人脸图象,利用PCA算法进行降维,和库里图片...
  • 目前很多工厂、企业、机关单位、公司、酒店、餐厅、学校、医院、超市等行业都已经安装使用了指纹考勤机、指纹打卡机、以及人脸识别考勤机。指纹考勤机和人脸识别考勤机的使用,规范了公司考勤管理制度,提升了公司...
  • 在当今社会中有很多场景应用到人脸识别系统,如银行、学校、企业等对个场景,提供出入管理和安全管理等多方面应用。我们来了解一下校园人脸识别系统功能分析。 人脸识别功能,识别人脸设备检测到的人脸信息,与系统...
  • 那么,应用校园人脸识别系统解决方案,可以解决哪些问题? 学校人员多,在宿舍、图书馆等出入场景中常常是封闭式管理,学生和教职工进出需要通过校园一卡刷卡进出,但是会出现校园卡丢失、忘记带卡等尴尬...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 412
精华内容 164
关键字:

学校人脸识别考勤系统