精华内容
下载资源
问答
  • 人脸识别系统

    2013-08-14 14:47:44
    人脸识别视频监控系统,HALCON软件人脸识别视频监控系统
  • 易达人脸识别访客登记管理系统软件是一款集计算机技术、热敏打印技术、条码技术、数码摄像技术、自动制证技术,记录、保存来访者来访人员的证件信息。访客登记管理系统软件
  • 人脸识别-三联人脸识别驾考服务系统.docx
  • 首先讨论了动态人脸识别系统硬件环境的搭建,然后详细介绍了动态人脸识别系统软件流程、主要的功能模块、人脸库的构建及管理等,最后对系统进行了测试。测试结果表明,所设计的软硬件系统能够满足实际应用需求。
  • 专业开发智慧小区人脸识别对比保安系统、智慧学校人脸识别系统管理、智慧医院人脸识别管理系统、智慧商超会员人脸识别对比管理系统、智慧监狱人脸识别对比管理系统。QQ:769438 ...
  • 原 Python+OpenCv实现AI人脸识别身份认证系统(1)——人脸识别原理 置顶 ...

    Python+OpenCv实现AI人脸识别身份认证系统(1)——人脸识别原理

    人脸识别流程

    第一步:人脸检测,找出所有的面孔

    第二步:脸部的不同姿势

    第三步:给脸部编码

    第四步:从编码中找出人的名字


    最近一直在研究AI人脸识别身份认证,发现目前网上的识别Demo都是小Demo,非常零散,最近在GitHub上见到一位大神开源人脸识别项目,效果显著,遂将其整理优化,介绍项目实现原理和机制。

    本系统项目最终效果如下:

    本项目的实现机制:基于OpenCV使用Haar级联与dlib库进行人脸检测及实时跟踪,应用LBPH算法开发了一个功能相对完整的人脸识别系统。系统采用sqlite3进行序列化数据存储,能够对陌生人脸闯入进行报警,并拥有基于PyQt5设计的GUI实现。

    接下来从原理到项目实践进行剖析。 

    人脸识别流程

    人脸识别是由一系列的几个相关问题组成的:

    1、首先找到一张图片中的所有人脸。

    2、对于每一张脸来说,无论光线明暗或面朝别处,它依旧能够识别出是同一个人的脸。

    3、能够在每一张脸上找出可用于他人区分的独特之处,比如眼睛多大,脸有多长等等。

    4、最后将这张脸的特点与已知所有人脸进行比较,以确定这个人是谁。

    • 第一步:人脸检测,找出所有的面孔

    很显然在我们在人脸识别的流程中得首先找到图片中的人脸。我们得感谢 保罗·比奥拉(Paul Viola)和迈克尔·琼斯(Michael Jones)在2000年发明了一种能够快速在廉价相机上运行的人脸检测方法,人脸检测在相机上的应用才成为主流。然而现在我们有更可靠的解决方案Haar,一种能够检测物体轮廓的算法。首先我们把图片灰度化,因为颜色信息对于人脸检测而言没什么用。

    我们分析每个像素以及其周围的像素,根据明暗度画一个箭头,箭头的指向代表了像素逐渐变暗的方向,如果我们重复操作每一个像素,最终像素会被箭头取代。这些箭头被称为梯度(gradients),它们能显示出图像从明亮到黑暗流动的过程。

     

    分析每个像素对我们来说有点不划算,因为它太过细节化了,我们可能会迷失在像素的海洋里,我们应该从更高的角度观察明暗的流动。为此我们将图像分割成16x16像素的小方块。在每个小方块中,计算出每个主方向有多少个剃度(有多少指向上,指向右上,指向右等)。然后用指向性最强的那个方向箭头来代替原来那个小方块。

    最终结果,我们把原始图像转换成一个非常简单的HOG表达形式,它可以很轻松的捕获面部的基本结构。为了在HOG图像中找到脸部,我们需要做的是,与已知的一些HOG图案中,看起来最相似的部分。这些HOG图案都是重其他面部训练数据中提取出来的。

    • 第二步:脸部的不同姿势

    我们已经找出了图片中的人脸,那么如何鉴别面朝不同方向的人脸呢?

    对于电脑来说朝向不同的人脸是不同的东西,为此我们得适当的调整扭曲图片中的人脸,使得眼睛和嘴总是与被检测者重叠。为了达到目的我们将使用一种面部特征点估计(face landmark estimation)的算法。其实还有很多算法都可以做到,但我们这次使用的是由瓦希德·卡奇米(Vahid Kazemi)和约瑟菲娜·沙利文(Josephine Sullivan)在 2014 年发明的方法。这一算法的基本思路是找到68个人脸上普遍存在的点(称为特征点, landmark)。

    • 下巴轮廓17个点 [0-16]
    • 左眉毛5个点 [17-21]
    • 右眉毛5个点 [22-26]
    • 鼻梁4个点 [27-30]
    • 鼻尖5个点 [31-35]
    • 左眼6个点 [36-41]
    • 右眼6个点 [42-47]
    • 外嘴唇12个点 [48-59]
    • 内嘴唇8个点 [60-67]

    有了这68个点,我们就可以轻松的知道眼睛和嘴巴在哪儿了,后续我们将图片进行旋转,缩放和错切,使得眼睛和嘴巴尽可能的靠近中心。

    现在人脸基本上对齐了,这使得下一步更加准确。

    • 第三步:给脸部编码

    我们还有个核心的问题没有解决, 那就是如何区分不同的人脸。

    最简单的方法就是把我们第二步中发现的未知人脸与我们已知的人脸作对比。当我们发现未知的面孔与一个以前标注过的面孔看起来相似的时候,就可以认定他们是同一个人。

    我们人类能通过眼睛大小,头发颜色等等信息轻松的分辨不同的两张人脸,可是电脑怎么分辨呢?没错,我们得量化它们,测量出他们的不同,那要怎么做呢?

    实际上,对于人脸这些信息很容易分辨,可是对于计算机,这些值没什么价值。实际上最准确的方法是让计算机自己找出他要收集的测量值。深度学习比人类更懂得哪些面部测量值比较重要。

    所以,解决方案是训练一个深度卷积神经网络,训练让它为脸部生成128个测量值。

    每次训练要观察三个不同的脸部图像:

    1. 加载一张已知的人的面部训练图像
    2. 加载同一个人的另一张照片
    3. 加载另外一个人的照片

    然后,算法查看它自己为这三个图片生成的测量值。再然后,稍微调整神经网络,以确保第一张和第二张生成的测量值接近,而第二张和第三张生成的测量值略有不同。我们要不断的调整样本,重复以上步骤百万次,这确实是个巨大的挑战,但是一旦训练完成,它能攻轻松的找出人脸。

    庆幸的是 OpenFace 上面的大神已经做完了这些,并且他们发布了几个训练过可以直接使用的网络,我们可以不用部署复杂的机器学习,开箱即用,感谢开源精神。

    这128个测量值是什么鬼?

    其实我们不用关心,这对我们也不重要。我们关心的是,当看到同一个人的两张不同照片时,我们的网络需要能得到几乎相同的数值。

    • 第四步:从编码中找出人的名字

    后一步实际上是最简单的一步,我们需要做的是找到数据库中与我们的测试图像的测量值最接近的那个人。

    如何做呢,我们利用一些现成的数学公式,计算两个128D数值的欧氏距离。

     这样我们得到一个欧式距离值,系统将给它一个认为是同一个人欧氏距离的阀值,即超过这个阀值我们就认定他们是 同 (失) 一 (散) 个 (兄) 人 (弟)。

    人脸识别就这样达成啦,来来我们再回顾下流程:

    1. 使用Haar找出图片中检测人脸,所有人脸的位置。
    2. 计算出人脸的68个特征点并适当的调整人脸位置,对齐人脸。
    3. 把上一步得到的面部图像放入神经网络,得到128个特征测量值,并保存它们。
    4. 与我们以前保存过的测量值一并计算欧氏距离,得到欧氏距离值,比较数值大小,即可得到是否同一个人。

    Python+OpenCv实现AI人脸识别身份认证系统(2)——人脸数据采集、存储:

    https://blog.csdn.net/m0_38106923/article/details/87348332

    好啦,小伙伴们,本次仅仅简要讲解人脸识别原理,感兴趣的,可以先来了解下我的另一个有趣案例,实时3D换脸:

    https://blog.csdn.net/m0_38106923/article/details/81534919

    展开全文
  • MATLAB人脸识别系统

    2021-08-25 12:02:53
    目录引言 11 人脸识别技术 21.1人脸识别的研究内容 21.1.1人脸检测(Face Detection) 21.1.2人脸表征(Face Representation) 21.2几种典型的人脸识别方法 31.2.1基于几何特征的人脸识别方法 31.2.2基于K-L变换的特征脸...

    目录


    引言 1

    1 人脸识别技术 2

    1.1人脸识别的研究内容 2

    1.1.1人脸检测(Face Detection) 2

    1.1.2人脸表征(Face Representation) 2

    1.2几种典型的人脸识别方法 3

    1.2.1基于几何特征的人脸识别方法 3

    1.2.2基于K-L变换的特征脸方法 4

    1.2.3神经网络方法 5

    1.2.4基于小波包的识别方法 6

    1.2.5支持向量机的识别方法 6

    2 人脸特征提取与识别 6

    2.1利用PCA进行特征提取的经典算法——Eigenface算法 7

    2.2 PCA人脸识别流程 7

    2.3特征向量选取 9

    2.4距离函数的选择 10

    2.5 基于PCA的人脸识别 11

    MATLAB人脸识别程序 12

    3 MATLAB软件程序编写 13

    3.1.创建图片数据库 13

    3.2 主程序 13

    3.3最终程序结果 14

    4 心得与体会 16

    参考文献 16


    引言

    随着社会的发展及技术的进步,社会各方面对快速高效的自动身份验证的需求可以说无处不在,并与日俱增。例如,某人是否是我国的居民,是否有权进入某安全系统,是否有权进行特定的交易等。尤其是自2001年美国“9.1l”恐怖袭击发生以来,如何在车站、机场等公共场所利用高科技手段,迅速而准确地发现并确认可疑分子成了目前世界各国在反恐斗争中普遍关注的问题。为此,各国都投入大量人力、物力研究发展各类识别技术,使得生物特征识别技术得到了极大的发展。生物特征识别技术主要包括:人脸识别、虹膜识别、指纹识别、步态识别、语音识别、笔迹识别、掌纹识别以及多生物特征融合识别等。人类通过视觉识别文字,感知外界信息。在客观世界中,有75%的信息量都来自视觉,因此让计算机或机器人具有视觉,是人工智能的重要环节。由于生物特征是人的内在属性,具有很强的稳定性和个体差异性,因此是身份验证最理想的依据。与虹膜、指纹、基因、掌纹等其他人体生物特征识别系统相比,人脸识别系统更加直接、方便、友好,易于为用户所接受,并且通过人脸的表情、姿态分析,还能获得其它识别系统难以得到的一些信息。

    人脸识别技术在国家重要机关及社会安防领域具有广泛用途。例如:公安系统的罪犯识别、信用卡验证、医学、档案管理、视频会议、人机交互系统等身份识别和各类卡持有人的身份验证。同其他人体生物特征(如:指纹、掌纹、虹膜、语音等)识别技术相比,人脸识别技术的隐性最好,人脸识别系统更直接、友好,是当今国际反恐和安防最重视的科技手段和攻关标志之一。虽然人类能毫不费力地识别出人脸及表情,但对人脸的机器自动识别确实一个难度极大的课题,它涉及到模式识别、图像处理及生理、心理学等诸多方面的知识。人脸识别技术的研究虽然己经取得了一定的可喜成果,但在实际应用中仍存在着许多严峻的问题。人脸的非刚体性、姿态、表情、发型以及化妆的多样性都给正确识别带来了困难,要让计算机像人一样方便地识别出大量的人脸,尚需不同科学研究领域的科学家共同不懈的努力。

    1 人脸识别技术

    人脸因人而异,绝无相同,即使一对双胞胎,其面部也一定存在着某方面的差异。虽然人类在表情、年龄或发型等发生巨大变化的情况下,可以毫不困难地由脸而识别出某一个人,但要建立一个能够完全自动进行人脸识别的系统却是非常困难的,它牵涉到模式识别、图像处理、计算机视觉、生理学、心理学以及认知科学等方面的诸多知识,并与基于其他生物特征的身份鉴别方法以及计算机人机感知交互领域都有密切联系。与指纹、视网膜、虹膜、基因、掌形等其他人体生物特征识别系统相比,人脸识别系统更加直接、友好,使用者无任何心理障碍,并且通过人脸的表情和姿态分析,还能获得其他识别系统难以得到的一些信息。20世纪90年代以来,随着需要的剧增,人脸识别技术成为一个热门的研究话题。

    1.1人脸识别的研究内容

    人脸识别(Face Recognition)是利用计算机对人脸图像进行特征提取和识别的模式识别技术。在二十世纪七十年代初,对人脸识别的研究涉及心理学神经科学。其直接目的是要搞清楚人是如何对人脸进行识别的。七十年代中期以后,开展了用数学、物理和技术的方法对人脸自动识别的研究。

    人脸识别一般可描述为:给定静止图像或动态图像序列,利用已有的人脸图像数据库来确认图像中的一个或多个人。从广义上来说,计算机人脸识别的研究内容大概可以分为以下五个方面。

    1.1.1人脸检测(Face Detection)

    此过程包括人脸检测(Detection)、人脸定位(Location)和人脸跟踪(Tracking)。所谓人脸检测,就是给定任意图像,确定其中是否存在人脸,如果有,给出人脸的位置、大小等状态信息。人脸跟踪指在一纽连续静态图像所构成的动态视频中实时地检测人脸。人脸检测主要受到光照、噪声、姿念以及遮挡等因素的影响,人脸检测的结果直接关系到后面两个过程的准确性。近年来,人脸检测和跟踪开始成为独立的研究课题受到关注。

    1.1.2人脸表征(Face Representation)

    人脸表征就是提取人脸的特征,是将现实空间的图像映射到机器空间的过程。人脸的表示具有多样性和唯一性,这其实就是人脸共性和特性之间的关系问题:只有保持这种多样性和唯一性,才能保证人脸图像的准确描述和识别。

    人脸图像信息数据量巨大,为提高检测和识别的运算速度以及提高图像传输和匹配检索速度,必须对图像进行数据压缩,降低向量维数,即用尽可能少的数据表示尽可能多的信息。人脸的表征在提取人脸特征的同时,也实现了对原始图像数据的降维。

    1.2几种典型的人脸识别方法

    对人脸识别方法的研究主要有两大方向:一是基于人脸图像局部特征的识别方法;二是基于人脸图像整体特征的识别方法。基于人脸图像局部特征的识别通常抽取人脸器官如眼睛、眉毛、鼻子和嘴等器官的位置,尺度以及彼此间的比率作为特征。进一步地可以用几何形状拟合人脸器官,从而以几何参数作为描述人脸的特征。由于此类方法通常要精确地抽取出位置、尺度、比率或几何参数作为描述人脸的特征,因此对人脸图像的表情变化比较敏感。同时,人脸器官分割的精确度也对人脸特征的提取有一定的影响。另外,该类方法并没有充分利用到人脸图像本身具有的获度信息,该方向已经不是人脸识别技术发展的主流方向。基于人脸图像整体特征的人脸识别方法由于不需要精确提取人脸图像中部件的具体信息,而且可以充分利用到人脸图像本身具有的灰度信息,因此可获得更好的识别性能。目前,绝大部分关于人脸识别方法的文章都是基于人脸图像整体特征的,主要有特征脸法、最佳鉴别向量集法,贝叶斯法,基予傅立叶不变特征法,弹性图匹配法,其他相关方法有线性子空间法,可变形模型法和神经网络法。这些方法中有的侧重于表述人脸图像的特征提取,如弹性图匹配法和傅立叶不变特征法;有的则侧重于分类,如最佳鉴别向量集法、贝叶斯法和神经网络法;而有的则侧重于人脸图像重构,如特征脸法和线性子空间法。所有这些基于人脸图像整体特征的人脸识别方法均取得了一定的识别性能。

    1.2.1基于几何特征的人脸识别方法

    基于几何特征的人脸识别方法主要源于人脸识别的初期研究阶段。这种方法是以人脸各个器官和几何关系为基础进行算法设计。对于不同人来说,脸上的各个器官,如眼睛、鼻子、嘴巴以及整个脸部的轮廓具有不同的形状、大小、相对位置和分布情况。

    在基于几何特征的人脸识别方法中,可以用一个矢量来表示提取出来的几何参数。如果要获得一个准确、稳定和可靠的识别结果,就要求这些被选出的几何特征参数包含足够丰富的辨识人脸的信息,且能反映不同人脸之间的差别。也就是说对这些矢量要求具有较高的模式分类能力,同时还要有一定的稳健性,能够消除由于时间变迁、光照变化等其他干扰因素所带来的影响。具体来沈,这些几何参数一般包括人脸上两个指定特征点之间的欧式距离、边缘曲率、角度等等。

    在实际应用过程中,基于几何特征的人脸识别方法存在着两个方面的问题:

    (1)如何快速、准确地检测出入脸的重要标志点依然是一个没有很好解决的问题。脸上的重要标志点,如瞳孔、嘴巴和鼻子,它们在脸上的位置是进行脸部几何参数计算和测量的基准。

    (2)脸部几何特征在人脸辨识中的有效性问题,即脸部几何特征能够提供多少可供识别的信息量。

    虽然各人脸的器官在形状、大小及分布上各不相同,但是这种器官上的差异性更多是体现在某些细微的感觉意义上。例如眼睛显得比较小、鼻子显得比较宽,以及皮肤的纹理、颜色上的差异等等。显然,这些特征中的一部分是难以精确测量出来或者是不能用几何参数准确描述的。所以仅靠增加脸上几何参数的数目来提高人脸识别率是不太现实的。由于进一步改善测量精度是十分困难的,因而通过增加脸部几何参数的数量来改善识别率结果,其影响是极小的。因此,基于少量人脸几何特征进行大规模人脸辨识的可靠性是不容乐观的。

    1.2.2基于K-L变换的特征脸方法

    K-L变换是图像压缩的一种最优正交变换,人们将它应用于特征提取,形成了子空间法模式识别的基础。将K-L变换用于人脸识别,需要假设人脸处于低维的线性空间,不同人脸具有可分性。高维的图像空间经过K-L变换后得到一组新的正交基,保留其中重要的正交基从而形成了低维的人脸空间。

    若将所有子空间的正交基排列成图像阵列,则正交基呈现人脸的形状,因此这些正交基也被称为特征脸。选择那些正交基形成的子空间则有不同的考虑,与较大特征值对应的一些正交基(也称主分量)能够表达人脸的大体形状,而具体细节需要那些小特征值对应的特征向量(也称次分量)来加以补充描述,因此低频成分用主分量表示,高频分量用次分量表示。采用主分量作为新的正交空间的正交基的方法称为主分量(Principal Component Analysis,简称PCA)方法。

    K-L变换在90年代初受到了很大的重视,实际用于人脸识别取得了很好的效果,一般库德大小为100幅左右,识别率在70%-100%之间不等,这主要取决于人脸库图像的质量。

    从压缩能量的角度来看,K-L变换是最优的,变换后的低维空间对于人脸有很好的表达能力,然而这并不等同于对不同人脸具有较好的判别能力。选择训练样本的散布矩阵作为K-L变换的生成矩阵,其最大特征向量反映了该样本集合的最大分布的方向,但这是图像统计方法,而不是人脸统计方法。它查找的是图像之间所有的差异,并根据这些差异来确定不同人脸间的距离,而不管这些差异是由于光线、发型或背景的改变引起的,还是属于人脸本身的内在差异,因此特征脸的方法用于人脸识别存在理论的缺陷。研究表明,特征连的方法随着光线、角度以及人脸的尺寸的引入而识别率急剧下降。主分量的方法使得变换后的表达能力最佳,次分量的方法考虑了高频的人脸区分能力,但是由于外在因素带来图像差异和人脸本身带来的差异对K-L变换而言是不加任何区分的,因此,如何选择正交基并不根本解决问题。改进的一个思路是针对干扰所在,对输入图像作规范化处理,包括输入图像的均值方差归一化,人脸尺寸归一化。另一种改进是考虑到局部人脸图像受到外在干扰相对较小的情况,除了计算特征脸之外,还利用K.L变换计算出特征眼、特征嘴等。将局部特征向量加权进行匹配得到一些好的效果。

    总之,特征脸方法是一种简单、快速、使用的基于变换系数的算法,但由于它在本质上依赖于训练集合测试集图像的灰度相关性,而且要求测试图像与训练集比较接近,所以存在着很大局限。

    1.2.3神经网络方法

    人工神经网络是一种以大量的处理单元(神经元)为节点,处理单元之间实现加权值互连的拓扑结构。人工神经网络中的处理单元是人类大脑神经单元的简化。处理单元之间的互连则是轴突、树突这些信息传递路径的简化。根据不同的应用场合,现已研究出较多的神经元网络模型及其动态过程的算法。

    人工神经元通常采用非线性的作用函数,当大量神经元连接成一个网络并动态运行时,则构成了一个非线性动力学系统。人工神经网络具有自组织性、高维性、模糊性、分布性和冗余性等等特点,较冯.诺依曼体系的计算机更适合模拟人类大脑的思维机理。但总的来说,由于人类对自身思维机理认识的不足,所以对人工神经元作了极度的简化,这种模拟表现为极其肤浅和简单。

    很多脸部识别系统都采用了多层感知机作为人工神经网络的基本结构。多层感知机由几层全互连的非线性神经组成。神经元之间有权值连接,权值包含了训练模式空间的特征。训练过程就是调整权值的过程,最常用的算法就是BP法则。

    多层感知机的输入形式有很多种,最简单的就是将整个人脸图像作为输入层,也可以对人脸图像进行采样,然后用低分辨率图像作为输入层。

    由此可以看出,人工神经网络有着与Eigenface方法非常相似的表达方法。

    一般来说,BP算法的收敛速度非常缓慢,学习过程可能需要对整个训练集进行上千次反复迭代运算,这是神经网络实际应用的一个问题。此外,BP算法以误差梯度下降的方式达到极小值,但在实际应用中,容易陷入到局部极小中,无法得到全局最优解,这也是有待解决的一个问题。

    1.2.4基于小波包的识别方法

    基于小波包的面部识别方法首先对一幅人脸图像进行小波包分解。因为小波包分解得到的不同频带包含有不同的人脸信息,所以从每一个小波包中可以提取出不同的面部特征。对于小波包分解得到的离散逼近稀疏,Garcai进一步将它分解成三个部分,分别是边界区、上半部分和下半部分,然后就可以分别计算这三个区域的均值和方差,加上另外15个离散细节区域的方差,组成一个包含有21个分量的特征向量。小波包分解是一种多分辨率分析方法,能够提供良好的面部纹理描述,所以有利于提取面部特征。

    1.2.5支持向量机的识别方法

    支持向量机(SupportVectorMachine,SVM)起源于统计学习理论,它研究如何构造学习机,实现模式分类问题。其基本思想是通过非线性变换将输入空间变换到一个高维空间,在高维空间求取最优线性分类面,以解决那些线性不可分的分类问题。而这种非线性变换是通过定义适当的内积函数(即核函数)来实现的。SVM技术中核函数及其参数的选取难度较大。由于它基于结构风险最小化原理,而不是传统统计学的经验风险最小化,因而表现出很多优于已有方法的性能。由于SVM的训练需要大量的存储空间,非线性SVM分类器需要较多的支持向量,所以速度很慢。

    2 人脸特征提取与识别

    PCA方法将包含人脸的图像区域看作随机向量,因此可采用K-L变换得到正交K—L基,对应其中较大特征值的基具有与人脸相似的形状,因此又被称为特征脸。利用这些基的线性组合可以描述、表达和逼近人脸图像,所以可进行人脸识别与合成。识别过程就是将人脸图像映射到由特征脸组成的子空间上,并比较其在特征脸空间中的位置。PCA方法认为图像的全局结构信息对于识别最重要,将图像看作一个矩阵,计算矩阵的特征值和对应特征向量进行识别。这种方法利用图像的总体信息,不从图像中提取出眼、嘴、鼻等几何特征,算法较简单且具有较高的识别率。

    主成分分析法(PCA)是模式识别判别分析中最常用的一种线性映射方法,该方法是根据样本点在多维模式空间的位置分布,以样本点在空间中变化最大方向,即方差最大的方向,作为判别矢量来实现数据的特征提取与数据压缩的。从概率统计观点可知,一个随机变量的方差越大,该随机变量所包含的信息就越多,如当一个变量的方差为零时,该变量为一常数,不含任何信息。

    2.1利用PCA进行特征提取的经典算法——Eigenface算法

    在利用PCA进行特征提取的算法中,特征脸方法(Eigenface)是其中的一个经典算法。特征脸方法是从主成分分析导出的一种人脸识别和描述技术。特征脸方法就是将包含人脸的图像区域看作是一种随机向量,因此可以采用K-L变换获得其正交K-L基底。对应其中较大特征值的基底具有与人脸相似的形状,因此又称为特征脸。利用这些基底的线性组合可以描述、表达和逼近人脸图像,因此可以进行人脸识别与合成。识别过程就是将人脸图像映射到由特征脸张成的子空间上,比较其与己知人脸在特征空间中的位置,具体步骤如下:

    (1)初始化,获得人脸图像的训练集并计算特征脸,定义为人脸空间,存储在模板库中,以便系统进行识别;

    (2)输入新的人脸图像,将其映射到特征脸空间,得到一组关于该人脸的特征数据;

    (3)通过检查图像与人脸空间的距离判断它是否是人脸;

    (4)若为人脸,根据权值模式判断它是否为数据库中的某个人,并做出具体的操作。

    2.2 PCA人脸识别流程

    完整的PCA人脸识别应该包括以下四个步骤:人脸图像预处理;读入人脸库,训练成特征子空间;把训练图像和测试图像投影到上一步骤得到的子空间上;选择一定的距离函数进行识别。下面详细描述整个过程:

    (1)读入人脸库

    归一化人脸库后,将库中的每人选择一定数量的图像构成训练集,其余构成测试集。设归一化后的图像是N×N的,按列相连就构成维向量,可看作是维空间中的一个点,可以通过K-L变换用一个低维子空间描述这个图像。

    (2)计算K-L变换的生成矩阵,并求取图像的特征值和特征向量

    假设人脸图像库中有N幅人脸图像,用向量表示为(向量维数设为L),其人脸平均图像如式(2-1)所示:

    由此可得到每幅图像的均差,如式(2-2)所示:

    (2-2)

    这样可计算协方差矩阵,如式(2-3)所示:

    (2-3)

    计算矩阵C的特征值

    和对应特征向量 但是在实际计算中,矩阵C的大小是

    ,即使对尺寸较小的图像计算量还是很大。为了减小运算量,现将每幅图像的均差形成一个矩阵,如式(2-4)所示:

    (2-4)

    则式(2-3)可以写成式(2-5):

    (2-5)

    因此,根据线性代数理论,将计算

    的特征值

    和对应特征向量

    的问题转化为求

    的特征值

    和对应的特征向量

    的问题。

    的大小仅为N×N远远小于

    ,故简化了计算。在求出

    后,

    可以通过式(2-6)得到:

    (2-6)

    (3)把训练图像和测试图像投影到特征空间

    由特征向量所形成的向量空间可表示人脸图像的主要特征信息,将人脸图像库中所有N个图像的均差向此空间投影,得到各自的投影向量

    v2-568c0ba76d7471ba64ea396fa29d1e9a_b.jpg

    ,如式(2-7)和(2-8)所示:

    v2-25dc2f7e4d40b409b442aebf87ec8f68_b.jpg

    (2-7)

    v2-303b41a9cc8d1feb5ab68ff0477cea7a_b.jpg

    (2-8)

    对于待识别人脸图像I,计算其与k差的投影向量,如式(2-9)所示:

    v2-d36c2bf9a01655c10d31c7458b9ed643_b.jpg

    (2-9)

    再与人脸图像库中N个人脸图像对应的投影向量

    v2-568c0ba76d7471ba64ea396fa29d1e9a_b.jpg

    比较,按照一定的距离准则完成识别。

    (4)比较测试图像和训练图像,确定待识别样本类别

    这里可以采用多种不同的分类器进行分类:

    v2-83802a83f03d6642a1840514ab306024_b.jpg

    范式、

    v2-c50f002109e57c1279183ec549cf480b_b.jpg

    范式、最小距离、角度以及Mahalanobis距离等。


    MATLAB特征脸程序实现

    m = mean(T,2); %求样本的平均向量

    Train_Number = size(T,2);

    %%%%计算每个样本与平均向量的差向量

    A = [];

    for i = 1 : Train_Number

    temp = double(T(:,i)) - m; %计算训练集中每幅图像的均差 Ai = Ti - m

    A = [A temp];

    end

    L = A'*A; %计算协方差矩阵

    [V D] = eig(L); % 求特征向量和特征值

    2.3特征向量选取

    上面所创建的用于投影的特征脸子空间使用的是所有r个非零的特征值对应的特征向量。虽然协方差矩阵C最多有对应于非零特征值的N个特征向量,且r≤N,但是通常情况下,r仍然会太大,而根据应用的需求,并非所有的

    v2-b864097cf9c30ac303f4db271fd8afe2_b.jpg

    ,都有保留意义。而特征空间投影的计算速度是直接与创建子空间所用的特征向量的数目相关,若考虑到计算时间等因素,可以适当减去一些信息量少的特征向量,且去掉这些特征向量之后不一定不利于分类结果,有的情况下反而能够提高识别性能。下面将讨论几种不同的特征值选择方法:

    (1)标准的特征空间投影:所有r个对应于非零特征值的特征向量均被用于创建特征脸子空间。但是该方法在r值较大时,计算速度会较慢,且不利于分类。

    (2)为进一步压缩特征向量和减小运算量,将特征值按大小顺序排序,忽略小特征值所对应的特征向量,即由下式得到

    ,则压缩后的特征向量集如式(2-10)所示:

    ,M<r (2-10)

    经过实验证明当M的取值为M=[r*20%]的时候识别率最佳。

    (3)保持前面的z—1个特征向量:将特征值按照降序排列,同时保留最前面的z一1个特征向量,其中z为训练图像的类别数。

    (4)按照计算信息量来确定维数:不同于前面固定的丢弃一些特征向量,该方法采用保证剩余的特征向量所包含的信息与总的信息量相比大于一定的阈值e,e的值通常取为0.9,可依照式(2-11)计算:

    v2-fb4c9176f3b93d566cc6cfeb596b9529_b.jpg

    (2-11)

    MATLAB分类和提取特征值程序实现

    % 按照特征值>1来提取特征向量

    L_eig_vec = [];

    for i = 1 : size(V,2)

    if( D(i,i)>1 )

    L_eig_vec = [L_eig_vec V(:,i)];

    end

    end

    %%%%%%%计算协方差矩阵的特征向量

    % 降维

    Eigenfaces = A * L_eig_vec; % A: centered image vectors

    2.4距离函数的选择

    图像被投影到特征空间中,剩下的任务就是如何判别这些图像的相似性。通常有两种方法来判别:一种是计算在N维空间中图像间的距离,另一种是测量图像间的相似性。当测量距离时,我们希望距离尽可能地小,一般选择与测试图像最近的训练图像作为它的所属的类别。而测量相似性的时候,则希望图像尽可能地相似,也就是说具有最大的相似性的训练图像类别是测试图像所属的类别。在此介绍几种计算方法:

    (1)

    v2-c19868ecac841c8fecacc5d233fbdf80_b.jpg

    范式

    将像素间的绝对值的差值相加,也称和范式。

    v2-c19868ecac841c8fecacc5d233fbdf80_b.jpg

    范式距离公式如式(2-12)所示:

    v2-22aa64d534f1b43665b083256e75c066_b.jpg

    (2-12)

    (2)

    v2-8648639c2becfc84e7c1a138c756b084_b.jpg

    范式

    将像素间的平方差异相加。也称为欧几里德距离。

    v2-8648639c2becfc84e7c1a138c756b084_b.jpg

    范式距离公式如式(2-13)所示:

    v2-a600c695364b7ed8b57b186b65542f8c_b.jpg

    (2-13)

    (3)最小距离

    首先计算各类训练样本的平均值,接下来的距离比较和上面的

    v2-8648639c2becfc84e7c1a138c756b084_b.jpg

    范式完全相同。这样分类时每类只需要比较一次,减少了计算量。样本x与第i类的距离定义如式(2-14)所示:

    v2-c7a67638aa4bd53eb4b2d2abe5239190_b.jpg

    (2-14)

    其中

    v2-972ab701d628aa63fc9c632cf15c8314_b.jpg

    为第i类所有样本的平均值。

    2.5 基于PCA的人脸识别

    基于PCA算法的人脸识别过程由训练阶段和识别阶段两个阶段组成。在训练阶段,每个已知人脸X映射到特征脸组成的子空间上,得到N维向量

    v2-1468c30db4f79b3dd6fa3f06f19d7224_b.jpg

    距离阈值

    v2-160415db259e7d54e5a7b4e255f7920f_b.jpg

    定义如式(2-15)所示:

    v2-a1bcd21748b154626540121256e2875f_b.jpg

    (j,k=1,2,…,N) (2-15)

    在识别的时候,首先把待识别的图像映射到特征脸空间,得出向量P及其与每个人脸集的距离

    v2-415fe3721ee6909129faf83f06a5206c_b.jpg

    (i=1,2,3,…,N),采用欧式距离法进行人脸识别,分类规则为:

    (1)若

    v2-415fe3721ee6909129faf83f06a5206c_b.jpg

    >

    v2-5a86493b4ed26d096a1683d8b71f3af2_b.jpg

    ,则输入图像不是人脸图像;

    (2)若

    v2-415fe3721ee6909129faf83f06a5206c_b.jpg

    <

    v2-5a86493b4ed26d096a1683d8b71f3af2_b.jpg

    v2-22ae8557f9a79533cd2affded6c6f1e9_b.jpg

    v2-415fe3721ee6909129faf83f06a5206c_b.jpg

    >

    v2-5a86493b4ed26d096a1683d8b71f3af2_b.jpg

    ,则输入图像包含未知人脸;

    (3)若

    v2-415fe3721ee6909129faf83f06a5206c_b.jpg

    <

    v2-5a86493b4ed26d096a1683d8b71f3af2_b.jpg

    v2-415fe3721ee6909129faf83f06a5206c_b.jpg

    =min{

    v2-5a86493b4ed26d096a1683d8b71f3af2_b.jpg

    },则输入图像为库中第k个人的人脸。

    MATLAB人脸识别程序

    ProjectedImages = [];

    Train_Number = size(Eigenfaces,2);

    for i = 1 : Train_Number

    temp = Eigenfaces'*A(:,i); % 将每个样本投影到特征空间

    ProjectedImages = [ProjectedImages temp];

    end

    %%%%%%%%%%%从测试图片中提取PCA特点

    InputImage = imread(TestImage);

    temp = InputImage(:,:,1);

    [irow icol] = size(temp);

    InImage = reshape(temp',irow*icol,1);

    Difference = double(InImage)-m;

    ProjectedTestImage = Eigenfaces'*Difference; % 将待测样本投影到特征空间

    %%%%%%%按照欧式距离取最小的原则得出匹配的人脸

    Euc_dist = [];

    for i = 1 : Train_Number

    q = ProjectedImages(:,i);

    temp = ( norm( ProjectedTestImage - q ) )^2;

    Euc_dist = [Euc_dist temp];

    end

    [Euc_dist_min , Recognized_index] = min(Euc_dist);

    OutputName = strcat(int2str(Recognized_index),'.jpg');

    3 MATLAB软件程序编写

    3.1.创建图片数据库

    function T = CreateDatabase(TrainDatabasePath)

    %%%%%%读取训练库路径,并统计样本个数

    TrainFiles = dir(TrainDatabasePath);

    Train_Number = 0;

    for i = 1:size(TrainFiles,1)

    if not(strcmp(TrainFiles(i).name,'.')|strcmp(TrainFiles(i).name,'..')|strcmp(TrainFiles(i).name,'Thumbs.db'))

    Train_Number = Train_Number + 1; % Number of all images in the training database

    end

    end

    %%%%%%%%将2维图像转化为一维向量

    img = imread(str);

    img = rgb2gray(img);

    [irow icol] = size(img);

    temp = reshape(img',irow*icol,1); % Reshaping 2D images into 1D image vectors

    T = [T temp]; % 'T' grows after each turn

    end

    3.2 主程序

    clear all

    clc

    close all

    % You can customize and fix initial directory paths

    TrainDatabasePath = uigetdir(strcat(matlabroot,'\work'), 'Select training database path' );%设置训练集路径

    TestDatabasePath = uigetdir(strcat(matlabroot,'\work'), 'Select test database path');

    prompt = {'Enter test image name (a number between 1 to 10):'};

    dlg_title = 'Input of PCA-Based Face Recognition System';

    num_lines= 1;

    def = {'1'};

    TestImage = inputdlg(prompt,dlg_title,num_lines,def);

    TestImage = strcat(TestDatabasePath,'\',char(TestImage),'.jpg');

    im = imread(TestImage);

    T = CreateDatabase(TrainDatabasePath);

    [m, A, Eigenfaces] = EigenfaceCore(T);

    OutputName = Recognition(TestImage, m, A, Eigenfaces);

    SelectedImage = strcat(TrainDatabasePath,'\',OutputName);

    SelectedImage = imread(SelectedImage);

    figure;

    subplot(1,2,1);imshow(im);

    title('Test Image');

    subplot(1,2,2);imshow(SelectedImage);

    title('Equivalent Image');

    str = strcat('Matched image is : ',OutputName);

    disp(str)

    3.3最终程序结果

    TrainDatabase里存放了20张图片,TestDatabase里存放了10张图片,所有图片格式和分辨率都相同。运行主程序时,先设置好TrainDatabase的路径,再设置好TestDatabase的路径,之后还会弹出你想要匹配的图片号(1-10),最终会显示出Test Image和在TrainDatabase里匹配出来Equivalent Image。如果所要匹配的图片和TrainDatabase里的图片相同,则匹配出来的图片则相同(如图4-5-1);如果所要匹配的图片在TrainDatabase里没有,则搜索出最为相近的图片(如图4-5-2)。




    参考文献

    1 黄文梅,熊佳林,杨勇编著.信号分析与处理——MATALB语言及应用.国防科技大学出版社,2000

    2 钱同惠编著.数字信号处理.北京:机械工业出版社,2004

    3 姚天任,江太辉编著.数字信号处理.第2版.武汉:武汉理工大学出版社,2000

    4 谢平,林洪彬,王娜.信号处理原理及应用.机械工业出版社,2004

    5 刘敏,魏玲.Matlab.通信仿真与应用.国防工业出版社,2005

    6 楼顺天.基于Matlab7.x 的系统分析与设计.西安电子科技大学,2002

    7孙洪.数字信号处理.电子工业出版社,2001

    展开全文
  • 疫情严重影响了全社会的发展,停工,停学,对经济也有的重大影响。政府部门为了保民生,对民生领域做了更大的倾斜,在老旧小区方面,配套像一个的资金,...广东天波社区人脸识别门禁终端TPS985,采用安卓系统,提...

    疫情严重影响了全社会的发展,停工,停学,对经济也有的重大影响。政府部门为了保民生,对民生领域做了更大的倾斜,在老旧小区方面,配套像一个的资金,试试老旧小区的改造。在小区,社区方面智能人脸识别门禁终端有了巨大的需求。

    随着老旧社局的智能化升级,市场上各种人脸识别门禁终端产品,如何选择呢?

    广东天波小区人脸识别门禁终端TPS985,是你不错的选择。

    广东天波社区人脸识别门禁终端TPS985,采用安卓系统,提供安卓系统二次开发包,13.3寸大屏幕做显示屏幕,可以播放广告,通知等各种增值服务,满足小区单元门应用场景,和开放接口给客户进行二次开发,助力智慧小区发展。

    622f4ee8-ff0d-eb11-8da9-e4434bdf6706.png

    智慧小区人脸识别门禁系统室外人脸识别门禁终端厂家

    广东天波人脸识别门禁终端可支持只提供硬件部分,提供底层SDK做二次开发,适配客户的不同的人脸识别算法,为人脸识别算法提供硬件支持,超一流的硬件能力可以有力的保证人脸识别算法的高效运行计算。

    那他有哪些优势呢?

    Ø支持强光,可在户外强光环境使用

    Ø采用RK3399方案

    Ø采用24G微波模块,动态感应,感应距离1.8-2.2M

    Ø支持语音/视频呼叫:访问者可以通过对讲系统的呼叫访问

    Ø支持双目摄像头:减少面部表情的影响和照片欺诈的风险可用于白天和夜间

    Ø支持二次开发:开放性接口,供人脸识别算法厂家和软件商做应用增值

    Ø支持485信号/开关量信号/韦根接口信号输出

    Ø支持活体检测

    Ø支持个性化定制

    Ø支持云端和本机端识别

    Ø支持存储大于30000张人脸

    Ø支持刷身份证(可选)

    Ø4G全网通上网功能(可选)

    632f4ee8-ff0d-eb11-8da9-e4434bdf6706.png

    智慧小区人脸识别门禁系统室外人脸识别门禁终端厂家

    天波人脸识别门禁终端TPS985,拥有13.3寸的大屏幕,可以投放广告,提高小区设备的使用度,一机多用,即可以减少社区的成本压力,又可以有另外的方面获得长期的收入来源。为社区智能化推广,提供了更好的产品,你还有什么理由不选择呢。

    TAG:天波人脸识别门禁系统,人脸识别门禁终端,人脸识别闸机头,室外人脸识别门禁,人脸识别厂家,工地人脸识别,人脸识别门禁一体机,闸机伴侣,人脸识别门禁考勤系统,人脸识别一体机,人脸识别门禁解决方案,小区人脸识别门禁系统,工地人脸识别实名制系统,人脸识别系统,人脸识别门禁机,人脸识别门禁系统,人脸识别系统供应商,人脸识别厂家,人脸识别闸机,人脸识别测温门禁系统

    展开全文
  • 人脸识别系统源代码

    2018-04-26 16:43:20
    人脸识别系统源代码,包含有.exe可执行文件,可以运行 .
  • 这个压缩包里包含了一个人脸识别软件系统,可以批量处理拍摄照片,训练模型,并更改参数,可以识别人脸,并包含一个GUI界面
  • 系统中树莓派调用百度智能云人脸识别API,实现人脸识别门禁,主要分为三个模块来实现:一、人脸识别API的注册于人脸库管理1.1创建应用在百度智能云人脸识别项目中创建应用,1.2下载SDK创建完毕后,下载SDK文档,...

    前面发布了人脸识别门禁系统的系列视频教程,现在补上图文版,方便查看指令和代码,这篇文章也是对之前的文章的更新与完善。

    本系统中树莓派调用百度智能云人脸识别API,实现人脸识别门禁,主要分为三个模块来实现:117e5b125360e1e2a092e32abc9cf504.png

    一、人脸识别API的注册于人脸库管理

    1.1创建应用

    在百度智能云人脸识别项目中创建应用,a2cf1144bc3ae74cb4bacc76e31b3152.png

    1.2下载SDK

    创建完毕后,下载SDK文档,因为是在树莓派中运行,所以选中python HTTP SDK下载到本地。13207df7ba07f37d5a193a1560d149d4.png

    1.3 记录AppID

    查看应用详情,记录下AppID、API Key和Secret Key,在后面的代码中会用到。1e61cd075e06aad8d458b2c5c859c554.png

    1.4 在人脸库管理中添加人脸数据

    在人脸库管理中新建用户组,再从用户组中新建人脸id和照片;d33571de7f8c6c39f98ea78dc20c662a.pngec0b229aee5d5790aa82b5cb070f68cb.png

    二、树莓派本地环境搭建

    2.1 sdk传输至树莓派上

    把下载好的SDK压缩包解压,可以通过ftp或者smb的方式, 如何使用smb,请见我的另一篇文章树莓派安装Samba服务把文件传输到到树莓派你想放的目录下,然后cd进入该目录;

    2.2 安装pip以及setuptools

    如果你的树莓派以及安装好了这两款软件,直接跳至2.3,如果还没,可以按一下步骤安装这两款重要的软件;

    2.2.1 安装setuptools

    到官网(https://pypi.org/project/setuptools/) a)下载 setuptools 安装包

    wget https://files.pythonhosted.org/packages/37/1b/b25507861991beeade31473868463dad0e58b1978c209de27384ae541b0b/setuptools-40.6.3.zip

    b)解压缩

    unzip setuptools-40.6.3.zip

    c)安装

    cd setuptools-40.6.3

    sudo python setup.py build

    sudo python setup.py install

    2.2.2 安装pip

    a)下载 到官网(https://pypi.org/project/pip/)下载pip安装包

    wget https://files.pythonhosted.org/packages/45/ae/8a0ad77defb7cc903f09e551d88b443304a9bd6e6f124e75c0fbbf6de8f7/pip-18.1.tar.gz

    2)解压

    tar zxvf pip-18.0.tar.gz

    3)安装

    cd ../pip-18.0/

    sudo python3 setup.py install

    2.3 安装人脸识别SDK

    当你的树莓派装好pip以及setuptools之后,进入到树莓派的SDK目录下,执行一下命令:

    sudo pip install baidu-aip //安装百度AI模块

    显示如下界面百度AI模块就成功了:71d45430407a35d9f07a8479be2d2add.png再继续安装当前的API,

    sudo python3 setup.py install

    2.4 测试人脸识别是否成功

    以上我们就把树莓派的人脸识别基础环境配置好了,现在我们测试一下系统是否能够正常运行 可以直接在sdk文件夹aip-python-sdk-2.2.15里创建一个测试文件test.py,

    from aip import AipFace

    from picamera import PiCamera

    import urllib.request

    import RPi.GPIO as GPIO

    import base64

    import time

    #百度人脸识别API账号信息

    APP_ID = '18333248'

    API_KEY = 'HrfpWmTASGVQTGQ2UQO29IGY'

    SECRET_KEY ='7x8m9vuKWH5XeVV8GeLkly8OkqUpzfPz'

    client = AipFace(APP_ID, API_KEY, SECRET_KEY)#创建一个客户端用以访问百度云

    #图像编码方式

    IMAGE_TYPE='BASE64'

    camera = PiCamera()#定义一个摄像头对象

    #用户组

    GROUP = 'yusheng01'

    #照相函数

    def getimage():

    camera.resolution = (1024,768)#摄像界面为1024*768

    camera.start_preview()#开始摄像

    time.sleep(2)

    camera.capture('faceimage.jpg')#拍照并保存

    time.sleep(2)

    #对图片的格式进行转换

    def transimage():

    f = open('faceimage.jpg','rb')

    img = base64.b64encode(f.read())

    return img

    #上传到百度api进行人脸检测

    def go_api(image):

    result = client.search(str(image, 'utf-8'), IMAGE_TYPE, GROUP);#在百度云人脸库中寻找有没有匹配的人脸

    if result['error_msg'] == 'SUCCESS':#如果成功了

    name = result['result']['user_list'][0]['user_id']#获取名字

    score = result['result']['user_list'][0]['score']#获取相似度

    if score > 80:#如果相似度大于80

    if name == 'yusheng_02':

    print("欢迎%s !" % name)

    time.sleep(3)

    if name == 'xiaoming':

    print("欢迎%s !" % name)

    time.sleep(3)

    if name == "xiaoyu":

    print("欢迎%s !" % name)

    else:

    print("对不起,我不认识你!")

    name = 'Unknow'

    return 0

    curren_time = time.asctime(time.localtime(time.time()))#获取当前时间

    #将人员出入的记录保存到Log.txt中

    f = open('Log.txt','a')

    f.write("Person: " + name + " " + "Time:" + str(curren_time)+'\n')

    f.close()

    return 1

    if result['error_msg'] == 'pic not has face':

    print('检测不到人脸')

    time.sleep(2)

    return 0

    else:

    print(result['error_code']+' ' + result['error_code'])

    return 0

    #主函数

    if __name__ == '__main__':

    while True:

    print('准备')

    if True:

    getimage()#拍照

    img = transimage()#转换照片格式

    res = go_api(img)#将转换了格式的图片上传到百度云

    if(res == 1):#是人脸库中的人

    print("开门")

    else:

    print("关门")

    print('稍等三秒进入下一个')

    time.sleep(3)

    当你把py文件保存到树莓派中,5f68a61a46d8f73207ba00a70f8983ef.png可直接通过Tonny打开它,而且可以直接运行该程序,131a0bad3676ab9b8c3d9fdadea50d51.png通过控制台打印输出,我们模拟了真实情况,已经可以知道现在树莓派的人脸识别已经能正常工作了。

    三、Arduino蓝牙舵机控制程序

    3.1 硬件准备
    • 树莓派3b

    • Arduino UNO R3

    • HC-05

    • 舵机SG90

    • 杜邦线若干

    2a3e12f08b6d9fac66af52751d9155b9.png

    3.2 连接图

    bd7ac8bba166b8d8f1046885acd26c0f.png

    3.3 树莓派端配置

    树莓派自带蓝牙功能,我们可以调用系统指令发送蓝牙信号,

    3.3.1 安装树莓派蓝牙模块pybluez

    安装完成后再继续下一步操作;若想让树莓派使用bluetooth,必须给树莓派安装pybluez模块

    sudo apt-get install libbluetooth-dev //安装蓝牙开发库

    python3 -m pip install pybluez //安装pybluez

    3.3.2 将树莓派手动连接至HC-05

    打开树莓派桌面端,点击蓝牙图标后点击add device,鼠标在选择模块的时候,后面会有该模块的蓝牙地址,我们需要把它记下来,后面的蓝牙控制代码中需要用到。b8095c61a4667c3de171d8390dc04b9e.png选择HC-05模块,配对密码是1234;55ccd84cceb358e64e041d5a8b31c071.png

    配对成功后,后面程序就可以直接运行了

    3.4 定义树莓派蓝牙控制功能

    创建一个bluetooth_test.py文件,分别定义初始化指令、开门指令、关门指令,分别发送字符串’1‘,’2’,‘3’;

    import bluetooth

    def servo_init():#初始化指令

    bd_addr = "20:16:08:08:39:75" #arduino连接的蓝牙模块的地址

    port = 1

    sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )

    sock.connect((bd_addr, port)) #创建连接

    sock.send("1") #发送数据

    sock.close() #关闭连接

    def bt_open():#开门指令

    bd_addr = "20:16:08:08:39:75"

    port = 1

    sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )

    sock.connect((bd_addr, port))

    sock.send("2")

    sock.close()

    def bt_close():#关门指令

    bd_addr = "20:16:08:08:39:75"

    port = 1

    sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )

    sock.connect((bd_addr, port))

    sock.send("3")

    sock.close()

    3.5 Arduino连接方式
    3.5.1 Arduino与HC-05蓝牙模块的连接

     由于我们用的是Arduino UNO R3没有蓝牙模块,要接收蓝牙数据,可以通过外接HC-05蓝牙模块解决。


    HC-05===Arduino

    • RXD<==>TX

    • TXD<==>RX

    • VCC<==>5v

    • GND<==>GND

    注意:HC-05的vcc一定要接5v,如果接3.3v,虽然可以亮灯工作,但是接收一次数据后会自动断开连接,刚开始我找半天没找到原因,原来是电压给低了,这是一个小细节要注意一下。

    3.5.2 Arduino与舵机模块的连接

    SG90 舵机导线三种颜色,含义分别是:

    棕色:GND

     红色:VCC

    黄色:DATA

    舵机与Arduino的连接方式:

    舵机SG90===Arduino

    • DATA<==>D9

    • VCC<==>5v

    • GND<==>GND

    3.6 Arduino控制代码

    创建工程烧录到Arduino开发板中即可

    #include

    Servo myservo;

    void setup() {

    Serial.begin(9600); //监听软串口

    myservo.attach(9); //舵机控制

    myservo.write(0);

    // delay(10000);

    }

    void loop() {

    while(Serial.available())

    {

    char c;

    c = Serial.read(); //读取串口数据

    Serial.println(c);

    switch(c)

    {

    case '1':servo_init();

    break;

    case '2':open_the_door();

    break;

    case '3':close_the_door();

    }

    }

    }

    void open_the_door() //舵机开门

    {

    myservo.write(170);

    }

    void close_the_door() //舵机关门

    {

    myservo.write(0);

    }

    void servo_init() //舵机初始化

    {

    myservo.write(10);

    }

    3.7 树莓派控制代码

    我们的树莓派已经准备妥当了,在test.py的基础上,我们再修改一下:

    # 2020-3-16修正版本

    from aip import AipFace

    from picamera import PiCamera

    import urllib.request

    import RPi.GPIO as GPIO

    import base64

    import time

    import bluetooth

    from bluetooth_test import bt_open,servo_init,bt_close

    #百度人脸识别API账号信息

    APP_ID = '18332624'

    API_KEY = '2QoqxCzAsZGT9k5CMeaIlPBs'

    SECRET_KEY ='9wOlqd4sPvLc7ZKtLxMlBVkcikXHZ4rz'

    client = AipFace(APP_ID, API_KEY, SECRET_KEY)#创建一个客户端用以访问百度云

    #图像编码方式

    IMAGE_TYPE='BASE64'

    camera = PiCamera()#定义一个摄像头对象

    #用户组

    GROUP = 'yusheng01'

    #照相函数

    def getimage():

    camera.resolution = (1024,768)#摄像界面为1024*768

    camera.start_preview()#开始摄像

    time.sleep(2)

    camera.capture('faceimage.jpg')#拍照并保存

    time.sleep(2)

    #对图片的格式进行转换

    def transimage():

    f = open('faceimage.jpg','rb')

    img = base64.b64encode(f.read())

    return img

    #上传到百度api进行人脸检测

    def go_api(image):

    result = client.search(str(image, 'utf-8'), IMAGE_TYPE, GROUP);#在百度云人脸库中寻找有没有匹配的人脸

    if result['error_msg'] == 'SUCCESS':#如果成功了

    name = result['result']['user_list'][0]['user_id']#获取名字

    score = result['result']['user_list'][0]['score']#获取相似度

    if score > 80:#如果相似度大于80

    if name == 'yin_danli':

    print("欢迎%s !" % name)

    time.sleep(1)

    if name == 'danli':

    print("欢迎%s !" % name)

    time.sleep(3)

    if name == "yusheng_02":

    print("欢迎%s !" % name)

    time.sleep(3)

    else:

    print("对不起,我不认识你!")

    name = 'Unknow'

    return 0

    curren_time = time.asctime(time.localtime(time.time()))#获取当前时间

    #将人员出入的记录保存到Log.txt中

    f = open('Log.txt','a')

    f.write("Person: " + name + " " + "Time:" + str(curren_time)+'\n')

    f.close()

    return 1

    if result['error_msg'] == 'pic not has face':

    print('检测不到人脸')

    time.sleep(3)

    return -1

    else:

    print(result['error_code']+' ' + result['error_code'])

    return 0

    #主函数

    if __name__ == '__main__':

    servo_init() #舵机复位,初始化一次就够了

    while True:

    print('准备开始,请面向摄像头 ^_^')

    if True:

    getimage()#拍照

    img = transimage() #转换照片格式

    res = go_api(img) #将转换了格式的图片上传到百度云

    if(res == 1): #是人脸库中的人

    bt_open()

    print("欢迎回家,门已打开")

    elif(res == -1):

    print("我没有看见你,我要关门了")

    time.sleep(3)

    bt_close()

    else:

    print("关门")

    bt_close()

    time.sleep(3)

    print('好了')

    time.sleep(5)


    注意:

    运行程序后,如果报错


    bluetooth.btcommon.BluetoothError: [Errno 112] Host is down

    你则需要回到桌面端,将树莓派与HC-05重新配对一下,再运行一下就好了。至此,当我们运行该代码,把脸凑到摄像头前,舵机自动开门,把脸移开则舵机自动关门。至此 ,智能门禁系统就做好啦!


    配套视频教程:

    5613c05ee12b9762d15fba34b4076da3.png

    d7616b9344c5d0b34b3b35fab0abfe84.png

    0b3357bde05e0bbf28fd0909e4d73098.png

    7808df2e74c2b63254afb82d95278c23.gif

    展开全文
  • 深入浅出人脸识别

    万次阅读 多人点赞 2018-08-02 14:56:34
    人脸识别系统的研究始于20世纪60年代,80年代后随着计算机技术和光学成像技术的发展得到提高,而真正进入初级的应用阶段则在90年后期,并且以美国、德国和日本的技术实现为主。 人脸识别系统集成了人工智能、机器...
  • 2011文章编号:1672-058X(2011)04-0390-04基于人脸识别的门禁系统设计与实现朱超平(重庆工商大学计算机科学与信息工程学院,重庆400067)收稿日期:2010-12-19;修回日期:2011-02-23.作者简介:朱超平...
  • 人脸识别gpu服务器配置 内容精选换一换删除人脸库以及其中所有的人脸。人脸库数据为用户隐私数据,该数据无备份,删除时请谨慎操作。前提条件:请确保您已开通人脸识别服务,具体操作方法请参见申请服务。您可以在...
  • 高性能人脸识别系统 SDK

    热门讨论 2010-03-13 00:57:14
    1.人脸识别演示(DEMO)。...人脸识别考勤及其它人脸识别软件应用。 6.人脸识别海关边防检查站。 7.人像卡通制作,发型设计,辅助配眼镜。 8.及在安防领域的其它应用,如人脸识别网站登录,人脸识别下载等。
  • 基于人脸识别技术的门禁系统软件设计.pdf
  • 之后,对人脸识别系统软件模块进行设计。最后,对设计的基于云计算环境人脸识别系统进行测试。通过测试结果表示,所设计的人脸识别系统识别精准率比传统识别率要高,并且人脸识别效果要优于传统系统。
  • 人脸识别门禁系统

    2021-07-06 15:21:21
    利用树莓派开发板以及现有的摄像头,通过调用百度智能云的API接口进行人脸识别对比完成了整个过程实现简易的人脸识别门禁系统,并通过server酱平台,向相应的URL发送一个POST或者GET请求完成了对开门者信息推送到...
  • 人脸识别梯控管理系统解决方案 人脸识别梯控管理系统 解决方案 2020年3月 目 录 TOC \o "1-4" \h \u 23229 一 应用背景 1 13062 二 系统概述 1 7217 三 系统架构 2 13578 四 应用流程 3 11814 4.1应用流程概述 3 ...
  • 人脸识别系统的设计与开发
  • 人脸识别系统概述

    千次阅读 2014-09-03 17:21:58
    一 人脸识别系统结构 图1显示了人脸识别系统所包含的各个模块,其中,图像采集模块用于采集包含人脸的图像;人脸检测跟踪模块用于确定视频中人脸的位置和大小,并确定同一个人在帧间的对应关系;而特征点定位...
  • 国内外的动态人脸识别监控系统都非常注重系统运行的速度,稳定性,识别准确度等,但却没有一个管理平台来对整个监控系统进行状态监督和数据管理.作者以此为出发点,设计并研发了一套功能完善的动态人脸识别监控管理平台....
  • 在人工智能应用发展趋势下,人脸识别技术在各个行业领域的应用不断提升完善,而且在多个领域应用落地人脸识别系统...学校大门是学校安全的安全防护的围墙,可通过开发校园人脸识别系统严格控制人员的进出,自动预警...
  • 人脸识别,人脸识别门禁系统的原理

    千次阅读 2018-07-20 08:44:45
    人脸识别,人脸识别门禁系统的原理   我们都知道,我们的脸在我们的日常生活和社会活动中扮演着非常重要和特殊的角色。这张脸有时传达着人类的身份,因为它在世界上是独一无二的。用我们的脸作为开门的钥匙比使用...
  • 人脸识别系统的matlab仿真

    千次阅读 2021-03-16 19:26:58
    人脸识别软件系统开发,则是联系理论和实践的最重要的环节。本文着重介绍了人脸识别软件系统开发的背景,原理以及最后的设计结果。通过本文的实验可以知道,根据人脸皮肤颜色只占颜色区域的一个小区域的特性,在...
  • 联想人脸识别系统

    2011-12-08 22:38:26
    作为联想创新科技的一项成果,运用人工智能领域内先进的生物识别技术,带给您前所未有的使用体验 3.6版可在佩戴眼镜的情况下识别,如果发现识别起来比较困难,可以适当将识别灵敏度调低一点。另外,VeriFace 3.6还...
  • 摘要:该文提出了一种在门禁系统中利用人脸识别技术与指纹识别技术相结合进行身份验证的设计方案。实验表明,结合两种技术将会提高身份识别的安全性和有效性,能有效地解决传统门禁系统的不足之处。  1 综合门禁...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,699
精华内容 11,479
关键字:

下载人脸识别系统软件