本文作者:admin

人脸识别冷知识?

促天科技 2024-11-20 07:27 0 0条评论

一、人脸识别冷知识?

以下是一些人脸识别的冷知识:

1. 人脸识别技术是通过计算机视觉技术实现的,通常使用深度学习算法,基于图像、视频和其他人脸数据来识别和识别人脸。

2. 人脸识别技术可以识别数百万个不同的脸部特征,包括像瞳孔、鼻子、嘴等。这些数据可用于验证个人身份并识别可疑的或危险的个人。

3. 人脸识别技术可以使用各种方式进行身份验证,包括比对两张照片、视频中的移动人脸、通过特殊的面罩或妆容等。

4. 顶级的人脸识别算法的准确率已经超过了99%,这意味着他们可以在不到1秒的时间内识别任何人。

5. 人脸识别技术可以在各种不同的应用程序中使用,包括政府、金融、安防、零售等。

6. 人脸识别技术并不是万无一失的,他们可能会识别错误或可以被欺骗,比如使用3D打印的面具或通过其他欺骗手段等。

7. 随着人脸识别技术的发展,出现了一些对隐私的担忧,包括跟踪、监控、数据泄露等问题。因此,隐私保护和法律法规的制定是使用人脸识别技术必须考虑的因素。

二、人脸识别 生物学分析图

人脸识别技术作为生物学分析图领域的一个重要应用,正日益成为各行各业中的关键工具。人脸识别技术利用人脸的生物特征来进行身份确认,这种技术已经在安全监控、金融、零售以及社交网络等领域得到了广泛应用。

人脸识别技术的原理

人脸识别技术通过采集人脸图像,提取图像中的生物学特征,如面部轮廓、眼睛位置等,然后将这些特征与事先存储在数据库中的信息进行比对,从而确认一个人的身份。这一过程涉及到图像处理、模式识别、机器学习等多个领域,技术的背后蕴含着复杂的算法。

人脸识别技术的应用

人脸识别技术在安全监控领域有着重要的应用,可以用于监控场所的进出情况,识别不法分子。在金融领域,人脸识别技术可以用于用户身份认证,保障交易的安全性。在零售行业,人脸识别技术可以帮助商家识别顾客,提供个性化的推荐服务。此外,在社交网络领域,人脸识别技术可以帮助用户识别朋友,加强社交关系。

人脸识别技术的优势

与传统的身份验证方式相比,人脸识别技术具有独特的优势。首先,人脸作为生物特征具有唯一性和稳定性,不易被仿造或篡改,能有效防止身份欺诈。其次,人脸识别技术无需用户配合,只需拍摄人脸图像即可完成验证,操作简便。另外,人脸识别技术可以实现实时识别,提高了效率,适用于各种应用场景。

人脸识别技术的挑战

尽管人脸识别技术有诸多优势,但也面临着一些挑战。首先,人脸识别技术的准确率和速度仍有待提升,特别是在复杂环境或光线较暗的情况下容易出现误识别。其次,隐私和安全问题也是人脸识别技术面临的难题,如何保障用户数据的安全性是一个亟待解决的问题。

人脸识别技术的未来发展

随着人工智能技术的不断发展和人脸识别技术的不断成熟,人脸识别技术将在未来得到广泛应用。未来,人脸识别技术可能会与其他技术结合,如虹膜识别、声纹识别等,形成更加全面的生物识别系统。此外,随着大数据和云计算技术的发展,人脸识别技术将更加智能化,应用范围将进一步扩大。

三、关于人脸识别?

根握面部实时或如频文件识到的情威数据,检信Allemotion平台根特有的情绪建模及被经网络获得被测试者每一时刻或在说活片段中的害怕,排斥、冲突、期待、压力、兴奋、逻辑、比率、概率、分心、犹豫、认知、紧张、坏感、想象、思考、潜意识、潜在情绪等数据。

现 状

人脸表情识别是机器视觉和模式识别领域具有较为广泛的应用意义。人脸表情识别技术是一个非常活跃的研究领域,它覆盖了数字图像处理、模式识别、计算机视觉、神经网络、心理学等诸多学科的内容。如今,虽然在这方面的应用已取得了一些的成果,但是FRT在实用应用中仍面临着复杂的问题因为人脸五官的分布是非常相似的,而目人脸本身又是一个柔性物体,表情、姿态的千变万化都给正确识别带来了相当大的麻烦,如何能正确识别大量的人并满足实时性要求是迫切需要解决的问题。

系统功能

  • 图像获取:该模块主要是从摄像头拍照后进行获取图片,也可以从图片库中获取,获取后的图片可以在软件的界 面中显示出来以便进行识别。
  • 图像预处理:该模块主要包括图像光线补偿、图像变成灰色、高斯平滑、均衡直方图、实现图像对比度增强、二值化变换等。
  • 人脸定位:该模块主要是将处理后的人脸图片进行定位,将眼睛、鼻子、嘴巴标记出来,以便进行特征提取。
  • 特征提取:该模块是在定位后的人脸图片中将眼睛、鼻子、嘴巴的特征值提取和人脸识别认证。
  • 情感识别:该模块是从图片中提取的特征值和检信Allemotion自主标记的3万+情感教据库中的值进行比较来完成平静、高兴、吃惊、悲伤、愤怒、厌恶和恐惧7种情感识别功能。

根据面部实时或视频文件识别的情感数据,检信Allemotion平台根据特有的情绪建模及神经网络获得被测试者每一时刻或在说活片段中的害怕、排斥中突、期待、压力、兴奋、逻辑、比率、概率、分心、犹豫、认知、紧张、坏感、想象、思考、潜意识、潜在情绪等教据。

四、人脸识别成为热点,那么人脸识别真的很安全吗?

下上是最新的报道,都是网友投稿的。

AI科技讯:人脸识别安全遭质疑,泄露的数据及其黑产业链何时制止?

先进的人脸识别系统已经可以在人群中将你认出来。虽然这项技术在日常生活中的某些方面保障了人的安全,但也窃取了人的隐私,甚至比我们自己更了解自己,并操纵我们。国外有媒体报道,人脸识别技术对我们隐私的侵犯或许让人无法想象。

近期,有朋友无奈的抱怨,2019上海世界人工智能大会即将召开,因业务需求他需要邀请一位欧洲科学家参会,但是当听说大会现场需要进行人脸识别才能参会时,他极度不适的发出了怒吼。

最后,虽然已经告知外国科学家参会方式还有二维码扫描,但是他还是拒绝了此次会议。截止目前,这位朋友表示还是想不明白,一个人脸识别至于让他发这么大的火么?

也许我们听到这个也觉得很不可思议,但是当我们看到国内近期几则报道就不会如此惊讶了?

3D打印人脸骗过支付宝刷脸购买火车票

现在几乎每个人手机上都会有支付宝,随着支付宝上线刷脸支付,很多人对于这项高科技也喜闻乐见。

然而8月初,一个3D打印的公众号发布了一个测试视频,在视频中,工作人员使用3D打印制作的蜡像人头,骗过支付宝的人脸识别系统,成功买到了一张火车票,这一小视频曾一度在网上疯传,吓坏了很多网友,并表示已经关闭了人脸识别功能。

其实这个3D打印头像中国人并不是原创,去年有日本公司已经研发出了这款产品,而且非常逼真,也曾引起了国内很多媒体关注,当时就有很多人表示刷脸解锁遭遇了新挑战。

攻破iPhone刷脸解锁转走熟睡用户钱

Face ID,苹果iPhone最先进的刷脸解锁方式,也一直以3D识别更安全而著称。

相比广大安卓阵线的2D刷脸识别,iPhone用了更贵的传感器,能够实现更周密强大的活体识别,保证用户在闭眼情况下不会被解锁手机。

但是,就在前不久的白帽黑客大会上,向来以安全著称的iPhone刷脸,还是腾讯的一位安全研究员研发的一副简单眼镜攻破了。

由于刷脸解锁需要用户看一眼才能解锁。因此该研究员在眼镜镜片上贴有黑色胶带,黑胶内又嵌有白色胶带,成功仿造了人眼识别信息(虹膜识别),最终成功解锁熟睡用户的iPhone,并进一步转走他支付账户中的钱。

也许大家认为这只是极端个例,但是看了下面的例子就知道人脸识别到底有多荒唐。

将政府要员识别成罪犯,人脸识别错误率高达35%

说起人脸识别技术,美国在该领域一直处于前沿位置。尽管如此,目前的人脸识别技术还是错误百出。

去年,一篇发表在外媒网站的文章中指出,如今非常热门的AI应用人脸识别,针对不同种族的准确率差异巨大。其中,针对黑人女性的错误率高达21%-35%,针对白人男性的错误率则低于1%,这在美国可以说是非常不正常的。

另外,还有一个乌龙事件需要强调,亚马逊在2016年推出的图像识别AI系统Rekognition,曾将28名美国国会议员识别成了罪犯,当时引得美国社会一片哗然,也令大众对人脸识别技术充满了质疑。

不仅仅是国外,国内这种嘀笑皆非的场景也时有发生。比如因为“闯红灯”而被公示在电子曝光屏的董明珠,事实是所谓的“董明珠”只是公交车上的一个印刷广告;又比如一名坐在公交车内靠窗位置的普通民众,莫名其妙的被人脸识别抓拍系统定义为闯红灯……

对于人脸识别存在的技术误差,中国科学院自动化研究所张晓波博士曾表示,照明、姿势、装饰等都会对人脸识别系统产生影响,而对于那些非合作情况下的人脸图像采集,遮挡问题仍很严重。

特别是在实际监控环境中,被监控对象常会佩戴着眼镜或帽子等配件,使得捕获的人脸图像不完整,影响后续的特征提取和识别,甚至导致人脸检测算法无效,且在大规模应用环境中,如何维持或提高人脸识别算法的识别率,目前也是一个非常重要的问题。

除了以上提出的技术准确性外,人脸识别的安全性也在中国开始面临着严峻考验。其中一个就是,由于人脸识别的信息存储仍基于计算机可识别的语言,也就是我们常说的数字或特定代码,随着这些数据价值的提高,使其遭到黑客攻击的风险也会随之增高。

一旦这些个人数据被窃取,你的脸可能就不只属于自己了。

谁来保存数据库,谁来保证数据安全?

人脸识别是一种1:1或1:N的技术手段,在具体应用场景中,它可以根据已有人脸数据识别并判定某一特殊对象是否与数据库中的是同一人,也可以依据某一个人脸数据,从成千上万人中找出对应的人。这之中,数据库中保存的数据将成为关键一环,也是引发人们担忧并发出质疑的地方——这些数据究竟属于谁?谁能用我的数据?

近年来,因为研发需要以及人脸识别应用的逐渐普及,包括政府机构、银行、小区物业、人脸识别研发公司都需要用到数据库。

以银行为例,当人们办理某些业务时,人脸识别已经成为了一种常态,柜台工作人员会在过程中要求人们将头抬起,并将面部朝向摄像头以进行识别,而在银行APP 中,要求卡主进行人脸识别认证也已经成为一种日常操作。既然要识别,那就意味着有对比数据,这些数据被谁拿走了?是银行?是公安?是提供人脸识别技术的公司?还是其他居心叵测的组织?

百万数据泄露,人脸识别遭遇黑产业链

今年年初,深网视界公司(人脸识别公司商汤科技和上市公司东方网力合资公司)被曝发生数据泄露,致使250万人的私人信息能够不受限制被访问,引发业内广泛关注。

据了解,深网视界主营业务为人脸识别、AI和安防,一家定位为“AI+安防”的公司发生如此大规模的信息泄露事件不免令人唏嘘。

如果说此次事件引发了人们关于人脸识别技术信息安全方面的担忧和关于隐私等方面的道德讨论那还算是好事,然而后面这件事让人震怒。

据爆料此事发生之后,目前国内竟然催生了一批人脸识别数据倒卖的生意,一张人脸照片竟然能卖到几元钱,那么几千几万张甚至几百万张照片就能获利无数。

在这种利益的诱惑下,越来越多的黑客也加入其中,就连一些小厂商或物业公司也通过人脸识别闸机、门禁等各种手段获取数据进行着地下肮脏交易,在法律的边缘试探。

据了解,这些交易的数据大部分也将被运用于AI的养料,用来训练更加聪敏的AI。比如网上一度疯传的杨幂换脸小视频、被用于色情场所的美国知名主持人等。

隐私问题爆发,人脸识别国内受严重质疑

人脸识别正在不可避免地走向另外一个极端。

从朋友圈里的AI面相识别小程序,到走进大街小巷的AI测肤,在到娱乐方面的AI换脸、以及再到随处可见的刷脸支付,无一不是热火朝天。

面对数据泄露问题,虽然法律和监管方面并没有明确规定,但是相关部门已经开始发声。

今年7月份,央行科技司司长李伟在第四届全球金融科技(北京)峰会上表示,人脸是非常敏感的个人信息。一旦泄露或者被盗取,会带来非常大影响。

他强调,有技术也不能滥用,有技术也不能任性。“特别是一些企业设计模式场景不考虑这些问题:一方面刷脸,另外一方面还让人在大的屏幕上输入自己的手机号码,这是多么危险的事情。这对于这种创新,我觉得应该要及时指出来纠正。

一位行业资深专家表示,当今社会存在这种普遍滥用人脸识别技术的现象,不管是互联网巨头还是人工智能独角兽都热衷于跑马圈地,将关注点放在业务发展上,对数据安全管理的投入又很少,整个社会隐私安全意识也很淡薄,是时候需要一些监管部门出来管理细则了。

否则,如果继续这么下去,以后大家都不能随便出门了!

你想想,买东西刷脸、吃饭刷脸、过闸机刷脸、就连酒店开个房也刷脸,哪有隐私可言?

更有甚者,万一整容了和男朋友在机场过不了安检这可咋整?

文章来自于公众号:AI世界(AI_retail),关注公众号回复关键词“5G”获取《5G最完整的PPT》,回复“资料”获取160份人工智能产业报告。

五、人脸识别为什么无法识别照片?

结论:分情况,2D人脸识别多数不具备照片防伪,3D人脸识别具备照片防伪。

人脸识别技术发展到目前,已经到达了相对成熟的阶段,只是出于成本以及应用场景要求的因素,呈现出多种形态和性能的人脸识别技术和终端。

1、从识别原理上,分2D和3D人脸识别。

2D和3D人脸识别,简单的从字面意思就可以理解,前者是采集和校验的以人脸的2D特征和属性为算法识别依据,而后者是多出了纵向深度的三维的脸部特征识别和计算方式。

2D的人脸识别通常应用在成本要求高,安全性要求较低的场景,比如传统的楼宇对讲系统和门禁系统等都是2D识别的,从严格意义的安全上来讲,这些终端是无法对于照片,视频等2D属性的人脸图像进行区分的,也就是说不具备2D防伪。

但是,也不是说2D的识别就绝对的不能实现照片防伪的。比如国产很多智能手机也支持人脸识别解锁,但是其就是利用了前置摄像头部件进行的,与苹果手机的3D结构光(刘海屏及灵动岛硬件结构)相比,就是属于安全级别降级的2D人脸识别。但是,这些手机也通过算法调整,具备了一定程度的照片防伪识别能力。

而3D人脸识别就属于近几年才大规模开始应用的技术,分为3D结构光,TOF,双目识别三种类型,安全性和识别体验相比2D大大提升,当然成本也高出了不少。典型的应用场景,比如iPhoneX以上的智能手机,高端的人脸识别智能门锁,机场安检人脸识别终端,以及刷脸支付等等。

2、3D人脸识别技术分类和简述。

3D人脸识别技术根据技术原理和形态的不同,分为3D结构光,TOF技术,以及双目识别技术:

专题参考:

博乐:白话智能锁—人脸识别技术

六、人脸识别应用有哪些?

人脸识别的应用范围其实很广,除了大家通常所说的安防、考勤、门禁、刑侦、ATM等等,现在最火的短视频、直播都是要用到人脸识别的,比如动态贴纸,贴纸随着人脸的移动而相应的移动,就需要用到人脸识别技术。之前很火的脸龄测试、明星脸对比,也都需要用到该技术。

只能说,人脸识别技术的应用是广泛的,展现形式是多样的!

七、什么因素会导致人脸识别系统无法识别出真实的人脸?

遮挡,扭曲,光线不佳,模糊,变形,隐身(?)……当然也不排除系统太拉……

总之只要系统不能通过图像输入提取出有效的特征信息,就有可能影响

八、生物学知识?

1、生物是动物、植物、真菌、细菌、病毒等的统称。

2、生物分类一般是界门纲目科属种,详细的话可以为域、界、门、亚门、总纲、纲、亚纲、总目、目、亚目、总科、科、亚科、总属、属、亚属、总种、种、亚种。

3、细胞分类,按细胞核有无核膜包被可将细胞分为两类,原核细胞与真核细胞。

4、动物界之下,有43个门,如原生动物门、菱形虫门、直泳虫门等。

九、人脸识别的发展前景如何?有木有免费的人脸识别云平台?

人脸识别的发展前景一片大好的,从美颜、图片处理、考勤机的火爆就知道了。至于免费人脸云平台,旷视科技家的Face++.com就是一家免费的人脸识别平台。对啦,旷视科技9月19日上线了Face++全新升级过的新人工智能云平台Megvii Cloud,而且现在只要开发者注册就能有价值500元的免费使用额度的。

十、如何通过 Matlab 实现人脸识别?

研究背景

自70年代以来.随着人工智能技术的兴起.以及人类视觉研究的进展.人们逐渐对人脸图像的机器识别投入很大的热情,并形成了一个人脸图像识别研究领域,.这一领域除了它的重大理论价值外,也极具实用价值。

在进行人工智能的研究中,人们一直想做的事情就是让机器具有像人类一样的思考能力,以及识别事物、处理事物的能力,因此从解剖学、心理学、行为感知学等各个角度来探求人类的思维机制、以及感知事物、处理事物的机制,并努力将这些机制用于实践,如各种智能机器人的研制。人脸图像的机器识别研究就是在这种背景下兴起的,因为人们发现许多对于人类而言可以轻易做到的事情,而让机器来实现却很难,如人脸图像的识别,语音识别,自然语言理解等。如果能够开发出具有像人类一样的机器识别机制,就能够逐步地了解人类是如何存储信息,并进行处理的,从而最终了解人类的思维机制。

同时,进行人脸图像识别研究也具有很大的使用价依。如同人的指纹一样,人脸也具有唯一性,也可用来鉴别一个人的身份。现在己有实用的计算机自动指纹识别系统面世,并在安检等部门得到应用,但还没有通用成熟的人脸自动识别系统出现。人脸图像的自动识别系统较之指纹识别系统、DNA鉴定等更具方便性,因为它取样方便,可以不接触目标就进行识别,从而开发研究的实际意义更大。

  1. 实现功能介绍

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

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

(1)人脸图像的获取

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

(2)人脸的检测

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

(3)特征提取

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

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

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

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

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

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

三、算法流程实现

3.1、人脸检测定位

人脸检测定位程序:

i=imread('face1.jpg');
I=rgb2gray(i);
BW=im2bw(I);
figure,imshow(BW)
[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
 
L = bwlabel(BW,8);
BB  = regionprops(L, 'BoundingBox');
BB1=struct2cell(BB);
BB2=cell2mat(BB1);
 
[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' )

3.2 人脸图像的预处理

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

3.3、边缘检测

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

四、 人脸识别的matlab实现

实现结果如图4.1和4.2

图4.1 用户界面
图4.2 实现结果

附录 人脸识别matlab程序

function varargout = FR_Processed_histogram(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @FR_Processed_histogram_OpeningFcn, ...
                   'gui_OutputFcn',  @FR_Processed_histogram_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end
 
if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
 
%--------------------------------------------------------------------------
% --- Executes just before FR_Processed_histogram is made visible.
function FR_Processed_histogram_OpeningFcn(hObject, eventdata, handles, varargin)
 
handles.output = hObject;
 
% Update handles structure
guidata(hObject, handles);
 
% UIWAIT makes FR_Processed_histogram wait for user response (see UIRESUME)
% uiwait(handles.figure1);
global total_sub train_img sub_img max_hist_level bin_num form_bin_num;
 
total_sub = 40;
train_img = 200;
sub_img = 10;
max_hist_level = 256;
bin_num = 9;
form_bin_num = 29;
%--------------------------------------------------------------------------
% --- Outputs from this function are returned to the command line.
function varargout = FR_Processed_histogram_OutputFcn(hObject, eventdata, handles) 
varargout{1} = handles.output;
 
%--------------------------------------------------------------------------
% --- Executes on button press in train_button.  
function train_button_Callback(hObject, eventdata, handles)
global train_processed_bin;
global total_sub train_img sub_img max_hist_level bin_num form_bin_num;
 
train_processed_bin(form_bin_num,train_img) = 0;
K = 1;
train_hist_img = zeros(max_hist_level, train_img);
 
for Z=1:1:total_sub 
  for X=1:2:sub_img    %%%train on odd number of images of each subject
 
    I = imread( strcat('ORL\S',int2str(Z),'\',int2str(X),'.bmp') );        
    [rows cols] = size(I);
 
    for i=1:1:rows
       for j=1:1:cols
           if( I(i,j) == 0 )
               train_hist_img(max_hist_level, K) =  train_hist_img(max_hist_level, K) + 1;                            
           else
               train_hist_img(I(i,j), K) = train_hist_img(I(i,j), K) + 1;                         
           end
       end   
    end   
     K = K + 1;        
  end  
 end  
 
[r c] = size(train_hist_img);
sum = 0;
for i=1:1:c
    K = 1;
   for j=1:1:r        
        if( (mod(j,bin_num)) == 0 )
            sum = sum + train_hist_img(j,i);            
            train_processed_bin(K,i) = sum/bin_num;
            K = K + 1;
            sum = 0;
        else
            sum = sum + train_hist_img(j,i);            
        end
    end
    train_processed_bin(K,i) = sum/bin_num;
end
 
display ('Training Done')
save 'train'  train_processed_bin;
 
%--------------------------------------------------------------------------
% --- Executes on button press in Testing_button.    
function Testing_button_Callback(hObject, eventdata, handles)
global train_img max_hist_level bin_num form_bin_num;
global train_processed_bin;
global filename pathname I
 
load 'train'
test_hist_img(max_hist_level) = 0;
test_processed_bin(form_bin_num) = 0;
 
 
 [rows cols] = size(I);
 
    for i=1:1:rows
       for j=1:1:cols
           if( I(i,j) == 0 )
               test_hist_img(max_hist_level) =  test_hist_img(max_hist_level) + 1;                            
           else
               test_hist_img(I(i,j)) = test_hist_img(I(i,j)) + 1;                         
           end
       end   
    end   
 
  [r c] = size(test_hist_img);
  sum = 0;
 
    K = 1;
    for j=1:1:c        
        if( (mod(j,bin_num)) == 0 )
            sum = sum + test_hist_img(j);            
            test_processed_bin(K) = sum/bin_num;
            K = K + 1;
            sum = 0;
        else
            sum = sum + test_hist_img(j);            
        end
    end
 
 test_processed_bin(K) = sum/bin_num;
 
sum = 0;
K = 1;
 
    for y=1:1:train_img
        for z=1:1:form_bin_num        
          sum = sum + abs( test_processed_bin(z) - train_processed_bin(z,y) );  
        end         
        img_bin_hist_sum(K,1) = sum;
        sum = 0;
        K = K + 1;
    end
 
    [temp M] = min(img_bin_hist_sum);
    M = ceil(M/5);
    getString_start=strfind(pathname,'S');
    getString_start=getString_start(end)+1;
    getString_end=strfind(pathname,'\');
    getString_end=getString_end(end)-1;
    subjectindex=str2num(pathname(getString_start:getString_end));
 
    if (subjectindex == M)
      axes (handles.axes3)
      %image no: 5 is shown for visualization purpose
      imshow(imread(STRCAT('ORL\S',num2str(M),'\5.bmp')))    
      msgbox ( 'Correctly Recognized');
    else
     display ([ 'Error==>  Testing Image of Subject >>' num2str(subjectindex) '  matches with the image of subject >> '  num2str(M)])
     axes (handles.axes3)
     %image no: 5 is shown for visualization purpose
     imshow(imread(STRCAT('ORL\S',num2str(M),'\5.bmp')))    
     msgbox ( 'Incorrectly Recognized');
    end
 
display('Testing Done')
%--------------------------------------------------------------------------
function box_Callback(hObject, eventdata, handles)
function box_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
%--------------------------------------------------------------------------
% --- Executes on button press in Input_Image_button.
function Input_Image_button_Callback(hObject, eventdata, handles)
% hObject    handle to Input_Image_button (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global filename pathname I
[filename, pathname] = uigetfile('*.bmp', 'Test Image');
axes(handles.axes1)
imgpath=STRCAT(pathname,filename);
 
I = imread(imgpath);
imshow(I)
 
%--------------------------------------------------------------------------
% --- Executes during object creation, after setting all properties.
function axes3_CreateFcn(hObject, eventdata, handles)