基于face_recognition实现人脸识别

作者: 强哥 2018-01-31 13:09:35

上一篇中我们实现了检测照片中的人脸并标出人脸特征点(鼻子,眼睛,眉毛等),这一篇我们将在上一篇的基础上,进一步实现人脸识别,告诉你照片里的人是谁。

准备工作

我们的人脸识别基于face_recognition库。face_recognition基于dlib实现,用深度学习训练数据,模型准确率高达99.38%。在开始我们的工作前,我们先安装face_recognition

  1. pip install face_recognition 

人脸数字化

人脸识别的***步是检测照片中的人脸区域,然后将人脸的图像数据转换成一个长度为128的向量,这128个数据代表了人脸的128个特征指标,如下所示

对于每一张已知人脸,生成这样的一个128位的向量。对于一张未知人脸,将它的128位向量和所有已知人脸的128位向量一一比对,找到相似度***的那一个,即找出了未知人脸对应的人。

图片数据

我们准备了两张照片,分别是凯特王妃和威廉王子的单人照,分别存成catherine.jpg和william.jpg,这两张照片中的人脸作为我们的已知人脸

我们的目标是在下面的合影中识别出两人的脸并在图中标出各自的名字。下图存成unknown.jpg

代码实现

接下来开始我们的编程工作

  1. import cv2 
  2.  
  3. import face_recognitionnames = [     
  4.  
  5.     "catherine"
  6.  
  7.     "william"
  8.  

首先我们定义了标签集,存在names数组中。

标签名字也是我们图片的文件名。

  1. images = [] 
  2.  
  3. for name in names: 
  4.  
  5.     filename = name + ".jpg" 
  6.  
  7.     image = face_recognition.load_image_file(filename)  
  8.  
  9.     images.append(image) 
  10.  
  11. unknown_image = face_recognition.load_image_file("unknown.jpg"

调用face_recognition.load_image_file从图片中读取数据。

这里读取了包含已知人脸和未知人脸的图片的数据,未知人脸的图片就是上面的合影图片unknown.jpg。

  1. face_encodings = [] 
  2.  
  3. for image in images: 
  4.  
  5.     encoding = face_recognition.face_encodings(image)[0]  
  6.  
  7.     face_encodings.append(encoding) 
  8.  
  9. unknown_face_encodings = face_recognition.face_encodings(unknown_image) 

face_recognition.face_encodings会返回图片中的所有的人脸的128位向量。单人照片只有一张人脸,所以face_recognition.face_encodings(image)[0]只取***个元素。合影图片中包含了2张人脸,所以unknown_face_encodings包含2个128位向量。

  1. face_locations = face_recognition.face_locations(unknown_image) 
  2.  
  3. for i in range(len(unknown_face_encodings)):     
  4.  
  5.     unknown_encoding = unknown_face_encodings[i]      
  6.  
  7.     face_location = face_locations[i]      
  8.  
  9.     topright, bottom, left = face_location      
  10.  
  11.     cv2.rectangle(unknown_image, (lefttop), (right, bottom), (0, 255, 0), 2)      
  12.  
  13.     results = face_recognition.compare_faces(face_encodings, unknown_encoding)      
  14.  
  15.     for j in range(len(results)):          
  16.  
  17.         if results[j]:              
  18.  
  19.             name = names[j]              
  20.  
  21.             cv2.putText(unknown_image, name, (left-10, top-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2) 
  22.  
  23.  
  24.  
  25. unknown_image_rgb = cv2.cvtColor(unknown_image, cv2.COLOR_BGR2RGB) 
  26.  
  27. cv2.imshow("Output", unknown_image_rgb) 
  28.  
  29. cv2.waitKey(0) 

face_locations存了每张脸的位置信息。

在循环中我们调用cv2.rectangle框出了检测到的每张脸。

face_recognition.compare_faces将已知人脸的128位向量和每张未知人脸的128位向量做比较,结果存入results数组中。results数组中的每一个元素都是True或者False,长度和人脸个数相等。results中的每个元素都和已知人脸一一对应,在某一个位置处的元素为True,表示未知人脸被识别成这张已知人脸。

对识别出来的每张人脸,我们调用cv2.putText在图上标注标签。

以上是代码的全部。

测试

令人兴奋的时刻又来到了! 我们来检验一下我们的成果。

运行上面的程序,可以看到下面的结果

威廉王子和凯特王妃的人脸都被准确地识别出来。绿色的框框出了人脸区域,框的上方标注了识别到的人的名字。

至此,我们成功地实现了人脸识别。

后续不定期的更新一些图像处理方面其他有趣的应用,例如抠图、实现手绘效果、二维码识别、验证码识别,等等。

Python face_recognition 人脸识别
上一篇:当人工智能碰上新零售 会爆发怎样的火花? 下一篇:我们对比了GitHub上8800个开源机器学习项目,并选出了其中的Top30
评论
取消
暂无评论,快去成为第一个评论的人吧

更多资讯推荐

30 亿图库,一张照片就能查个人信息!人脸识别再爆隐私争议

这个时代,你的个人信息在手机里的比家里更多。想象一下,那么多生活细节都能放进口袋里,这让隐私问题变得比以往更重要。

Rachel ·  2020-01-21 21:20:00
未来面部识别技术的最大问题是几乎不会出错

近年来,面部识别技术总被推上舆论的风口浪尖,比如针对女性和有色人种的误报率太高、以及对个人自由和隐私的不利影响。在美国众议院监督委员会的第三次专场听证会上,议员希望解决私人企业和政府机构在公共场所使用该技术的一些问题。

佚名 ·  2020-01-16 15:51:32
人脸识别背后:可怕的不是技术

此前,AI换脸软件ZAO的一夜爆红,不仅让其服务器陷入了“满负荷至崩溃运行“的危机之中,也将用户的安全与隐私暴露在种种危险地带。

读芯术 ·  2020-01-13 15:05:24
从事数据科学工作需要掌握哪些技能?

本文通过国外KDnuggets论坛上Simplilearn的统计结果和国内某知名招聘网站的招聘要求信息进行分析,详细介绍在数据科学的工作中,需要掌握哪一些技能以及工具,以及当下数据科学工作中,哪些技能和工具是从业人员的学习首选。

CDA数据分析师 ·  2020-01-09 17:28:39
Python实现识别图片中的所有人脸并显示出来

本文介绍一下使用Python3实现识别图片中的所有人脸并显示出来,让我们一起来看一下。

佚名 ·  2019-12-31 15:20:43
人脸识别技术总结:从传统方法到深度学习

在这篇论文中,我们对流行的人脸识别方法进行了全面且最新的文献总结,其中既包括传统方法(基于几何的方法、整体方法、基于特征的方法和混合方法),也有深度学习方法。

机器之心Pro ·  2019-12-27 16:20:35
这家AI公司用面具破解中国人脸识别系统!微信、支付宝、火车站无一幸免

据外媒报道,一家人工智能公司Kneron用一个特制的3D面具,成功欺骗了包括支付宝和微信在内的诸多人脸识别支付系统,完成了购物支付程序。他们用同样的方式甚至进入了中国的火车站。

佚名 ·  2019-12-27 15:38:36
人脸识别技术运用中的认知误区

无处不在的摄像头,几乎遍布每一个生活场景的人脸识别,其中存在着哪些认知误区?又存在着哪些隐忧?清华大学法学院劳东燕教授带来她的观点分享。

佚名 ·  2019-12-23 15:10:10
Copyright©2005-2020 51CTO.COM 版权所有 未经许可 请勿转载