0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

zhKF_jqr_AI 来源:未知 作者:李倩 2018-09-29 09:01 次阅读

编者按:如今,人脸识别已经在我们的生活中处处可见——无论是政府布置在大街小巷的“天眼”,还是手机软件中用于验证用户个人身份的确认手段,刷脸解锁、刷脸支付……每个人与生俱来的这张“独一无二”的脸正在取代数字密码,成为虚拟世界中的身份证明。小编没有iPhone XS,所以就在这里推荐一篇人脸识别入门佳作吧~

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

本文就是如何构建人脸识别器的一则指南,在文章中,首先我们会介绍这项技术的基本原理,然后用一个简单案例演示如何用Python来实现。

人脸识别的工作原理

在理解人脸识别的工作原理之前,我们先来看看什么是特征向量。

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

脸部的长度/宽度

有时长度/宽度的具体数值可能是不可靠的,因为它们会随着图像缩放不断变化,但即使在重新缩放之后,某些数据还是会始终保持不变——脸部的长宽比率

肤色

五官的形状,如嘴、鼻子等

显然,它们有一个共识——不同人脸的脸部长宽比、五官、肤色等是不同的。如果两张人脸很相似,那它们在这些方面的差异就比较小。这就引出了最具挑战性的一个步骤:把特定人的面部转换成数字表示——机器学习算法只能理解数字。

这种“人脸”(或训练集中特征)的数字表示就是我们所说的特征向量,它包含按特定顺序排列的一系列数字。

为了方便理解,下面举一个简单的例子,我们可以将“人脸”映射到一个特征向量,该特征向量可以包含各种特征,例如:面长(cm)、面宽(cm)、平均肤色(RGB)、嘴唇宽度(cm)、鼻子长度(cm)。

基本上,给定一个图像,我们可以绘制出各种特征并将其转换为特征向量,如:

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

一旦我们将每个图像编码成特征向量,问题就变得非常简单了,因为我们可以通过计算向量之间的“距离”判断两张“人脸”的相似程度。而机器学习在这里发挥的作用主要有两个:

派生特征向量:数据集中的数据量往往非常多,手动列出每个特征显然不现实。机器学习算法可以智能地标记出所需特征,也可以做一些简单计算,如鼻子长度与前额宽度的比率。

匹配算法:一旦获得了特征向量,机器学习算法就可以把新图像与数据集中存在的特征向量集相匹配。

现在我们已经基本了解了人脸识别的工作原理,紧接着,让我们使用一些着名的Python库,尝试构建自己的人脸识别算法。

案例分析

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

对人类来说,区分上述6人非常简单,即便有读者不认识著名男性沙鲁克汗(末图),我们也能从外形上看出他和奥巴马的明显区别。但这对计算机而言并不简单。

我们选择的“新名人”:

得益于社区成员的贡献,现在我们有一个非常简单的Python库,它封装了上面提到的所有内容——从面部创建特征向量并知道如何检测人脸。这个Python库叫face_recognition,如果再深入研究一下,你会发现它来自dlib——没错,那个跨平台的C++公共库,它包含很多机器学习常用算法,有助于编写复杂的基于C ++的应用程序。

Python中的face_recognition库可以执行大量任务:

检测给定图像中的所有人脸

检测和标记图像中的人脸特征

识别图像中的人脸

实时人脸识别

这里我们只介绍如何用face_recognition识别图像中的人脸,即上述第三个任务。

facerecognition源码:github.com/ageitgey/facerecognition

如何安装facerecognition库:github.com/ageitgey/facerecognition#installation-options

在安装face_recognition之前,你还需要安装dlib:gist.github.com/ageitgey/629d75c1baac34dfa5ca2a1928a7aeaf

在Python中实现

本节包含使用face_recognition库构建简单人脸识别系统的代码,这是实现部分,代码具体表示什么我们会下下节介绍。

# 导入库

import os

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.face_encodings(

image_to_be_matched)[0]

# 遍历每张图像

for image in images:

# 加载图像

current_image = face_recognition.load_image_file("images/" + image)

# 将加载图像编码为特征向量

current_image_encoded = face_recognition.face_encodings(current_image)[0]

# 将你的图像和图像对比,看是否为同一人

result = face_recognition.compare_faces(

[image_to_be_matched_encoded], current_image_encoded)

# 检查是否一致

if result[0] == True:

print"Matched: " + image

else:

print"Not matched: " + image

文件夹结构如下:

facialrecognition:

fr.py

my_image.jpg

images/

barack_obama.jpg

bill_gates.jpg

jeff_bezos.jpg

mark_zuckerberg.jpg

ray_dalio.jpg

shahrukhkhan.jpg

warren_buffett.jpg

它们分别表示:

fr.py:人脸识别的代码

my_image.jpg:要识别的图像(“新名人”)

images/:“语料库”

当你创建上面的文件夹结构并运行上面的代码时,这是你得到的输出:

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

显然,“新名人”是沙鲁克汗,我们的人脸识别系统能够检测到他!

理解Python代码

现在,我们来分解上述代码,进一步了解它是如何工作的:

# 导入库

import os

import face_recognition

这就是常规“导入”操作,我们会用face_recognition编写算法

# 制作所有可用图像的列表

images = os.listdir('images')

这行简单代码可以帮助我们识别语料库中所有图像的路径。执行此行后,我们会得到:

images = ['shah_rukh_khan.jpg', 'warren_buffett.jpg', 'barack_obama.jpg', 'ray_dalio.jpg', 'bill_gates.jpg', 'jeff_bezos.jpg', 'mark_zuckerberg.jpg']

现在,下面加载新名人图像:

# 加载图像

image_to_be_matched = face_recognition.load_image_file('my_image.jpg')

为了确保算法能够解释图像,我们将图像转换为特征向量:

# 将加载图像编码为特征向量

image_to_be_matched_encoded = face_recognition.face_encodings(

image_to_be_matched)[0]

剩下的代码不难理解:

# 遍历每张图像

for image in images:

# 加载图像

current_image = face_recognition.load_image_file("images/" + image)

# 将加载图像编码为特征向量

current_image_encoded = face_recognition.face_encodings(current_image)[0]

# 将你的图像和图像对比,看是否为同一人

result = face_recognition.compare_faces(

[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,如支付宝,也在用户要求进行个人社保信息操作时要求进行人脸认证

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

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 人脸识别
    +关注

    关注

    76

    文章

    3955

    浏览量

    80556
  • 机器学习
    +关注

    关注

    66

    文章

    8122

    浏览量

    130557

原文标题:面部识别简介(使用Python代码)

文章出处:【微信号:jqr_AI,微信公众号:论智】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于贝叶斯分类和径向基函数(RBF)网络融合的人脸识别方法的设计方案

    了计算量。但是,子块不宜过多,否则增加RBF神经网络计算负担,识别率也会有所下降。结论  本文提出了基于图像分块奇异值压缩,融合RBF神经网络和贝叶斯分类人脸识别方法,模拟人类
    发表于 10-23 10:03

    机器视觉技术应用之人脸识别

    系统性能超过三维图像人脸识别。这项技术在近两三年发展迅速,使人脸识别技术逐渐走向实用化。目前业内已开发了人脸
    发表于 01-14 11:05

    【Z-turn Board试用体验】+ Z-Turn的人脸识别门禁系统项目开发(

    在系统设计时遇到以下几个技术难点:1图像采集方面。由于系统对实时性要求较高,要求尽快地采集图像,同时图像的数据量般较大,在图像采集的同时又要进行人脸识别,庞大的计算量对处理要求就比
    发表于 06-26 13:19

    人脸识别

    的方法,那就是用百度人脸识别工具来配合树莓派,这样的话,你会很容易做出个智能人脸识别系统,用在你自己的各种产品上。 废话不多说,来正文。
    发表于 02-22 12:09

    人脸识别技术原理解析

    `  人脸识别到底是什么?  人脸识别,是视觉模式识别个细分问题,也大概是最难解决的
    发表于 12-23 23:17

    人脸识别的研究范围和优势

    `如今,备受人们的关注还是自身安全和个人隐私。钱包、密码、磁卡、钥匙等传统的安全措施已经不能满足人们的要求。科技圈把这要求利用了生物识别技术研究出了人脸识别
    发表于 06-29 11:52

    你周围有人脸识别吗?

    什么地方?该怎么用呢?今天就给大家普及一下人脸识别的知识。人脸识别应用在家居和小区发面,想到安全,大家肯定第时间都会想到所住地方的安全。首
    发表于 06-30 13:54

    人脸识别技术的60年发展史

    ,通过设定个阈值,当相似度超过这阈值,把匹配得到的结果输出。将待识别的人脸特征与已得到的人脸特征模板进行比较,根据相似程度对
    发表于 06-20 13:29

    人脸识别在安防系统的应用研究

    可为这类实战应用效率,结合其他的案件线索,提升公安的实战能力。  在智慧城市的建设中,注重对信息的结构化存储、分析挖掘,人脸的结构化云识别储存是构建整个智慧城市基础数据之,是智慧城市
    发表于 11-07 10:38

    国家市场监管总局发布智能门锁提示:应停用人脸识别功能

      近日,国家市场监管总局发布了一则关于智能门锁的消费提示,称相关部门及机构对智能门锁进行风险监测后发现智能门锁所搭载的人脸识别功能及远程开锁功能存在极高的安全隐患,为了保证财务和人身安全,国家
    发表于 11-18 09:27

    LabVIEW人脸识别设计

    学完《龙哥手把手教你学LabVIEW人脸识别》课程活动,并在截止时间内完成挑战任务,即可全额退回学费。【挑战任务】第步:4月28-29日24:00前购买《龙哥教你学会LabVIEW人脸
    发表于 04-28 10:00

    人脸识别会改变什么

    导语:人脸识别已经在我们生活中随处可见,但人脸识别将会给我们生活带来便利的同时,也会重新改写我们社交的本质,以及引发隐私、公平等方面的道德讨论。2017年9月的《经济学人》杂志就
    发表于 07-16 06:26

    什么是人脸识别技术

    什么是人脸识别技术人脸识别技术特点人脸识别技术流程人脸
    发表于 03-03 06:17

    RV1126基于虹软人脸识别算法实现指南

    1、RV1126基于虹软人脸识别算法实现的示例使用教程示例(rkmedia_vi_arc_rtsp_test.cc) 使用 CORE-1126-JD4 配套的 os04a10 摄像头进行人脸
    发表于 06-08 15:51

    使用Jetson Nano构建人脸识别系统

    电子发烧友网站提供《使用Jetson Nano构建人脸识别系统.zip》资料免费下载
    发表于 07-06 11:37 0次下载
    使用Jetson Nano<b class='flag-5'>构建</b><b class='flag-5'>人脸</b><b class='flag-5'>识别</b>系统