首页>>科技 >>内容

人脸识别思路,如何构建人脸识别器的一则指南

发布时间:2023-09-20 10:36:34编辑:温柔的背包来源:

人脸识别思路,如何构建人脸识别器的一则指南

很多朋友对人脸识别思路,如何构建人脸识别器的一则指南不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。

编者按:如今,人脸识别在我们的生活中随处可见。——无论是政府安排在街头巷尾的“天眼”,还是手机软件中用来验证用户个人身份的确认手段,每个人与生俱来的“独一无二”的面孔正在取代数字密码,成为虚拟世界中的身份凭证。边肖没有iPhone XS,这里推荐一个人脸识别入门大作~

人脸识别是计算机视觉的一个子领域,应用范围非常广泛。现在它已经成为全世界企业竞相争取的新技术之一。考虑到市场的盈利现状,未来这项技术会有更大的需求空间,所以对于一个机器学习的学习者来说,从零开始构建人脸识别工具是非常有价值的。

这篇文章是如何建立一个人脸识别器的指南。在文章中,我们将首先介绍这项技术的基本原理,然后用一个简单的案例来演示如何用Python来实现。人脸识别的工作原理在了解人脸识别的工作原理之前,我们先来看看什么是特征向量。

机器学习算法的本质是将数据集中的所有样本作为输入,从数据中学习“知识”。简而言之,算法将遍历数据并识别数据中的模式。以人脸识别为例,如果我们要给一张图像,算法能识别出图像中的人是谁,那么它识别的模式其实有很多:人脸的长/宽。

有时长度/宽度的具体值可能不可靠,因为它们会随着图像缩放而不断变化,但即使在重新缩放后,一些数据也会保持不变。——面部的长宽比,肤色的形状和五官,如嘴和鼻子等。

很明显,他们有一个共同的认识,就是不同脸的长宽比、五官、肤色都不一样。如果两张脸非常相似,那么他们在这些方面的差异就比较小。这导致了最具挑战性的步骤:将特定人的面部转换成数字表示。这个“脸”(或者训练集中的特征)的数字表示就是我们所说的特征向量,它包含了一系列按照特定顺序排列的数字。

为了方便理解,我们举个简单的例子。我们可以把“脸”映射到一个特征向量,这个向量可以包含各种特征,比如脸长(cm)、脸宽(cm)、平均肤色(RGB)、唇宽(cm)、鼻长(cm)。基本上,给定一幅图像,我们可以绘制各种特征并将其转换为特征向量,例如:

所以这张脸可以用向量(23.1,15.8,255,224,189,5.2,4.4)来表示。当然,除了以上特征,我们还可以通过观察和测量获得更多的人脸信息,比如发色、面部毛发、戴眼镜等。但为了介绍方便,本文只考虑以上五个简单的特性。

一旦我们将每张图像编码成一个特征向量,问题就变得非常简单,因为我们可以通过计算向量之间的“距离”来判断两张“脸”的相似度。机器学习在这里发挥的作用主要有两个:导出特征向量:数据集的数据量往往非常大,手动列出每个特征显然是不现实的。机器学习算法可以智能标注需要的特征,也可以做一些简单的计算,比如鼻子长与额头宽的比例。

匹配算法:一旦获得特征向量,机器学习算法就可以将新图像与数据集中已有的特征向量集进行匹配。现在我们已经基本了解了人脸识别的工作原理,下面我们就用一些著名的Python库来尝试构建自己的人脸识别算法。个案分析

这是我们数据集中的一些图片,即奥巴马、比尔盖茨、杰夫贝索斯、马克扎克伯格、雷达利奥和沙鲁克汗。我们把这些人称为“语料库”,然后准备另一个名人(“新名人”)的形象。模型的任务是确定“新名人”是否出现在“语料库”中。

对于人类来说,区分以上六种人是非常简单的。即使有些读者不认识大名鼎鼎的男查鲁克汗(最后一张图),我们也能从外表看出他和奥巴马的明显区别。但这对计算机来说并不简单。我们选择的“新名人”:

感谢社区成员的贡献,我们现在有了一个非常简单的Python库,它封装了上面提到的所有内容。这个Python库叫做face_recognition。如果进一步研究,会发现它来自于跨平台的C公共库dlib——,里面包含了很多机器学习的常用算法,对编写复杂的基于C的应用有帮助。Python中的face_recognition库可以执行许多任务:

检测给定图像中的所有人脸并识别标记图像中的人脸特征图像中的实时人脸识别这里我们只介绍如何用face_recognition识别图像中的人脸,这是上面提到的第三个任务。Facerecognition源代码:如何在github.com/ageitgey/facerecognition: github.com/ageitgey/facerecognition#安装中安装facerecognition库——选项在安装face_recognition之前,还需要安装gist.github.com/ageitgey/629d75c1baac34dfa5ca2a1928a7aeaf. DLIB

Python中的实现这一节包含使用face_recognition库构建简单人脸识别系统的代码,这是实现部分。我们将在下一节介绍代码的具体含义。#导入库importos Import face _ recognition #列出所有可用图像images=os.listdir('images')#加载图像image _ to _ be _ matched=face _ recognition。load _ image _ file(' my _ image . jpg ')#将加载的图像编码成特征向量image _ to _ be _ matched _ encoded=face _ recognition。面部编码(图像匹配

# 遍历每张图像对于图像中的图像:#加载图像当前图像=人脸识别。load _ image _ file(' images/' image)#将加载图像编码为特征向量当前图像编码=人脸识别。face _ encodings(current _ image)[0]#将你的图像和图像对比,看是否为同一人结果=人脸_识别。compare _ faces([image _ to _ be _ matched _ encoded],current_image_encoded)#检查是否一致如果结果[0]==真:打印"匹配:"图像否则:打印"不匹配:"图像

The folder structure is as follows: facial recognition: fr.pymy _ image.jpgmies/Barack _ Obama. JPG Bill _ Gates. JPG Jeff _ Bezos. JPG Mark _ Zuckerberg. JPG Ray _ Dalio. JPG Shahrukhhan. JPG Warren _ Buffett. JPG They respectively mean: fry. my_image.jpg: image to be recognized ("new celebrity") image/:"corpus"When you create the above folder structure and run the above code, this is the output you get: matching: shah _ rukh _ khan.jpgNot not matching: warren_buffett.jpg

不匹配:巴拉克_ Obama.jpg不匹配:雷_ dalio.jpg不匹配:比尔_ Gates.jpg不匹配:杰夫_ Bezos.jpg不匹配:马克_ Zuckerberg.jpg很明显,“新名人”是查鲁克汗,我们的人脸识别系统可以检测到他!了解Python代码现在,我们来分解一下上面的代码,进一步了解它的工作原理:# Import Library Import OS Import face_recognition这是正常的“导入”操作,我们将使用face _ recognition编写一个算法#来列出所有可用的图片。

Images=os.listdir('images ')可以帮助我们识别语料库中所有图像的路径。执行完这一行,我们会得到:images=['shah _ rukh _ khan.jpg '' Warren _ buffet.jpg '' Barack _ Obama.jpg '' ray _ dalio.jpg '' bill _ gates.jpg '' Jeff _ be zos . jpg ' Mark _ Zuckerberg . jpg ']现在,加载新的名人图片:# Load image image _ to _ be _ matched=face _ recognition。Load _ image _ file ('my _ image。jpg’)为了确保算法能够解释图像,我们将图像转换成一个特征向量:

# 将加载图像编码为特征向量image _ to _ be _ match _ encoded=face _ recognition。face _ encodings(image _ to _ be _ matched)[0]剩下的代码不难理解:# 遍历每张图像对于图像中的图像:#加载图像当前图像=人脸识别。load _ image _ file(' images/' image)#将加载图像编码为特征向量当前图像编码=人脸识别。face _ encodings(current _ image)[0]#将你的图像和图像对比,看是否为同一人结果=人脸_识别。比较面孔(

[image _ to _ be _ matched _ encoded],current _ image _ encoded) #检查是否一致if result[0]==true:print ' matched:' image else:print ' not matched:' image总的来说,我们是用这些代码做到的:循环编码图像作为每幅图像上的特征向量,将加载的图像与待识别的图像进行比较,如果人一致,则输出结果。如果字符不一致,我们也将输出结果。

上面的输出清楚地表明这个简单人脸识别算法的效果非常好,让我们尝试用另一个图像替换my_image :

再次运行算法时,输出变成了这样:

Not matched: shah_rukh_khan.jpg

Not matched: warren_buffett.jpg

Not matched: barack_obama.jpg

Not matched: ray_dalio.jpg

Not matched: bill_gates.jpg

Not matched: jeff_bezos.jpg

Not matched: mark_zuckerberg.jpg

显然,马云不在我们的“语料库”中。

人脸识别应用

人脸识别是一个有趣的问题,关于它的研究比较成熟,这项技术也被广泛应用于工业界和学术界。“歌神”张学友之所以能成为“逃犯克星”,演唱会现场布置的先进人脸识别摄像头功不可没,这也是人脸识别用于减轻犯罪的一个典例。此外,这项技术还有许多应用:

身份验证:苹果已经为iPhone中的人脸身份验证引入高级面部识别码,一些常用的APP,如支付宝,也在用户要求进行个人社保信息操作时要求进行人脸认证。

客户服务:马来西亚的一些银行已经安装了使用人脸识别系统来检测高价值客户的系统,以便客服人员提供个性化服务。通过这种方式,银行可以通过留住这些客户创造更多收入。

保险承保:许多保险公司正在使用人脸识别系统,将客户真人面部与照片身份证上的人脸相匹配。这样,客户的承保过程会变得更快。

总而言之,人脸识别已经开始从各个方面服务社会,虽然某些商业化应用会存在道德风险,但这些都不应成为阻碍技术发展的绊脚石。

以上知识分享希望能够帮助到大家!