基于face_recognition实现人脸识别

简介:

准备工作

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

pip install face_recognition

人脸数字化

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

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

图片数据

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

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

代码实现

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

import cv2
import face_recognitionnames = [    
   "catherine",
   "william", ]

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

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

images = []
for name in names:
   filename = name + ".jpg"
   image = face_recognition.load_image_file(filename)
   images.append(image)
unknown_image = face_recognition.load_image_file("unknown.jpg")


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

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

face_encodings = []
for image in images:
   encoding = face_recognition.face_encodings(image)[0]
   face_encodings.append(encoding)
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位向量。

face_locations = face_recognition.face_locations(unknown_image)
for i in range(len(unknown_face_encodings)):    
   unknown_encoding = unknown_face_encodings[i]    
   face_location = face_locations[i]    
   top, right, bottom, left = face_location    
   cv2.rectangle(unknown_image, (left, top), (right, bottom), (0, 255, 0), 2)    
   results = face_recognition.compare_faces(face_encodings, unknown_encoding)    
   for j in range(len(results)):        
       if results[j]:            
           name = names[j]            
           cv2.putText(unknown_image, name, (left-10, top-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)

unknown_image_rgb = cv2.cvtColor(unknown_image, cv2.COLOR_BGR2RGB)
cv2.imshow("Output", unknown_image_rgb)
cv2.waitKey(0)

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

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

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

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

以上是代码的全部。

测试

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

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

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

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


转自:https://mp.weixin.qq.com/s?__biz=MzI5NDY1MjQzNA==&mid=2247485480&idx=1&sn=3d9ac92df5d58970e52c8c6a67c4abfd&chksm=ec5ed755db295e43285955e1868a2a6ec7e4a08baf0504a0f8815419055868f87e2247c59756&mpshare=1&scene=23&srcid=0208pvpFGCkaUI4Uztx6aDze#rd

目录
相关文章
|
Java 关系型数据库 MySQL
基于Javaweb实现的人脸识别考勤系统
本系统基于Javaweb技术实现项目开发,使用Jsp进行系统界面开发,Servlet进行请求和响应的处理,Jdbc作为数据库开发技术,根据业务流程对系统进行模块功能点的划分,遵循软件工程思想,实现用户登录、机构管理、用户管理、节假日管理、考勤管理等功能。
365 0
基于Javaweb实现的人脸识别考勤系统
|
机器人 计算机视觉 Python
智能机器人项目,安装人脸识别face_recognition报错解决
智能机器人项目,安装人脸识别face_recognition报错解决
165 0
|
设计模式 Java 关系型数据库
基于Javaweb实现的人脸识别+GPS定位考勤系统
基于Javaweb实现的人脸识别+GPS定位考勤系统
597 0
基于Javaweb实现的人脸识别+GPS定位考勤系统
|
缓存 前端开发 NoSQL
人脸识别技术实现快递代取管理系统
人脸识别技术实现快递代取管理系统
156 0
人脸识别技术实现快递代取管理系统
|
人工智能 监控 算法
手把手带你体验Python实现人脸识别
前几天唠了一些Python的基础知识,确实无聊,但是无聊归无聊确实有用.今天来搞点有趣的事情--利用计算机视觉实现人脸检测和识别. 计算机视觉是人工智能的一个重要分支.计算机视觉中的人脸识别现在是我们生活最常出现的功能,比如刷脸打卡,这是每个打工人上班必备.人脸识别门禁,身份验证等等.看过钢铁侠的童鞋是否还记得,钢铁侠初次飞行时.他的人工智能系统头盔中显示了道路上的车辆信息.包括车辆的品牌和车中的人物,当时我们把它当成科幻来看,其实在现实中我们利用计算机视觉技术完全可以做到,而且我们目前已在运用,比如停车场系统车辆自动识别闸机.人流量检测,还有我们的无人驾驶汽车,都在使用计算机视觉技术中的人
828 1
|
JSON Java API
C#winforms实现windows窗体人脸识别
C#winforms实现windows窗体人脸识别
337 0
|
机器学习/深度学习 Unix TensorFlow
opencv安装实录附十几行C++实现的一个人脸识别demo
opencv安装实录附十几行C++实现的一个人脸识别demo
350 0
opencv安装实录附十几行C++实现的一个人脸识别demo
|
JavaScript 前端开发 Java
纯前端JS实现人脸识别眨眨眼张张嘴案例
纯前端JS实现人脸识别眨眨眼张张嘴案例
787 0
纯前端JS实现人脸识别眨眨眼张张嘴案例
|
存储 数据库 计算机视觉
人脸识别的案例实现 | 学习笔记
快速学习人脸识别的案例实现
人脸识别的案例实现 | 学习笔记
|
JavaScript 计算机视觉
纯js实现人脸识别眨眨眼张张嘴案例——index.html
纯js实现人脸识别眨眨眼张张嘴案例——index.html
239 0

热门文章

最新文章