【 1. 导入已知图片 】

使用load_image_file导入这些图片:

# 加载已知图片
known_image_cc = face_recognition.load_image_file("know/reba.jpg")
known_image_xy = face_recognition.load_image_file("know/jiangxin.jpg")
known_image_smy = face_recognition.load_image_file("know/xiayu.jpg")
known_image_zch= face_recognition.load_image_file("know/zhangyishan.jpg")

【 2. 编码已知图片 】

然后,使用face_encodings对图片进行编码,获取128维特征向量。
同时,之后我们需要遍历已经照片来识别,所以先将已知人脸存为数组。

  • 代码如下:
# 对图片进行编码,获取128维特征向量
rb_encoding = face_recognition.face_encodings(known_image_rb)[0]
jx_encoding = face_recognition.face_encodings(known_image_jx)[0]
xy_encoding = face_recognition.face_encodings(known_image_xy)[0]
zys_encoding = face_recognition.face_encodings(known_image_zys)[0]
# 存为数组以便之后识别
known_faces = [rb_encoding,jx_encoding,xy_encoding,zys_encoding
]

【 3. 导入未知图片 】

四张照片分布对应于不同的已知照片中的任务。

  • 代码如下:
# 加载待识别图片
unknown_image_1 = face_recognition.load_image_file("unknow/reba1.jpg")
unknown_image_2 = face_recognition.load_image_file("unknow/reba2.jpg")
unknown_image_3 = face_recognition.load_image_file("unknow/xy.jpg")
unknown_image_4 = face_recognition.load_image_file("unknow/zys.jpg")
unknown_faces = [unknown_image_1, unknown_image_2, unknown_image_3,unknown_image_4
]

【 4. 遍历识别 】

遍历未知图片,对每一种未知图片,获取其人脸位置和特征向量。将得到的位置图片特征向量与所有已知的特征向量进行比较,判断是否为同一个人。
需要注意的是这里我们设置 tolerance 为0.5,实际应用时,可以根据自己对准确度的要求,进行调整。

# 初始化一些变量
face_locations = []
face_encodings = []
face_names = []
frame_number = 0
for frame in unknown_faces:face_names = []# 获取人脸区域位置face_locations = face_recognition.face_locations(frame)# 对图片进行编码,获取128维特征向量face_encodings = face_recognition.face_encodings(frame, face_locations)for face_encoding in face_encodings:# 识别图片中人脸是否匹配已知图片match = face_recognition.compare_faces(known_faces, face_encoding, tolerance=0.5)

得到是否是同一个人的结果之后,我们可以对应其姓名,添加到face_names数组中。

  • 代码如下:
name = None
if match[0]:name = "Dilireba"
elif match[1]:name = "Jang Xin"
elif match[2]:name = "Xia Yu"
elif match[3]:name = 'Zhang Yishan'
else:name = 'Unknown'
face_names.append(name)

【 5. 绘制姓名和人脸 】

得到对应的人脸识别结果之后,我们将遍历每一张未知图片中的人脸,通过 OpenCV的rectangle绘制脸部区域框和putText对应的人名。

  • 代码如下:
# 结果打上标签
for (top, right, bottom, left), name in zip(face_locations, face_names):# 绘制脸部区域框cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)# 在脸部区域下面绘制人名cv2.rectangle(frame, (left, bottom - 25),(right, bottom), (0, 0, 255), cv2.FILLED)font = cv2.FONT_HERSHEY_DUPLEXcv2.putText(frame, name, (left + 6, bottom - 6),font, 0.5, (255, 255, 255), 1)

最后,再将绘制完成的代码展示或者保存。

【 6. 范例 】

  • 整合以上五个步骤,完整的代码示例如下:
# 加载模块
import face_recognition
import cv2# 加载已知图片
known_image_rb = face_recognition.load_image_file("know/reba.jpg")
known_image_jx = face_recognition.load_image_file("know/jiangxin.jpg")
known_image_xy = face_recognition.load_image_file("know/xiayu.jpg")
known_image_zys = face_recognition.load_image_file("know/zhangyishan.jpg")# 对图片进行编码,获取128维特征向量
rb_encoding = face_recognition.face_encodings(known_image_rb)[0]
jx_encoding = face_recognition.face_encodings(known_image_jx)[0]
xy_encoding = face_recognition.face_encodings(known_image_xy)[0]
zys_encoding = face_recognition.face_encodings(known_image_zys)[0]# 把已识别图片的编码存为列表
known_faces = [rb_encoding,jx_encoding,xy_encoding,zys_encoding
]# 加载待识别图片
unknown_image_1 = face_recognition.load_image_file("unknow/reba1.jpg")
unknown_image_2 = face_recognition.load_image_file("unknow/reba2.jpg")
unknown_image_3 = face_recognition.load_image_file("unknow/xy.jpg")
unknown_image_4 = face_recognition.load_image_file("unknow/zys.jpg")# 把待识别图片存为列表
unknown_faces = [unknown_image_1,unknown_image_2,unknown_image_3,unknown_image_4
]# 初始化一些变量
face_locations = []
face_encodings = []
face_names = []
frame_number = 0# 将待识别图片列表遍历
for frame in unknown_faces:face_names = []# 获取待识别图片人脸区域位置face_locations = face_recognition.face_locations(frame)# 对待识别图片人脸区域位置进行编码,获取128维特征向量face_encodings = face_recognition.face_encodings(frame, face_locations)# 对待识别图片的编码列表遍历for face_encoding in face_encodings:# 识别图片中人脸是否匹配已知图片match = face_recognition.compare_faces(known_faces, face_encoding, tolerance=0.5)name = Noneif match[0]:name = "Dilireba"elif match[1]:name = "Jang Xin"elif match[2]:name = "Xia Yu"elif match[3]:name = 'Zhang Yishan'else:name = 'Unknown'face_names.append(name)# 结果打上标签for (top, right, bottom, left), name in zip(face_locations, face_names):if not name:continue# 绘制脸部区域框cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)# 在脸部区域下面绘制人名cv2.rectangle(frame, (left, bottom - 25),(right, bottom), (0, 0, 255), cv2.FILLED)font = cv2.FONT_HERSHEY_DUPLEXcv2.putText(frame, name, (left + 6, bottom - 6),font, 0.5, (255, 255, 255), 1)# 显示图片image_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)cv2.imshow("Lao Wang.jpg", image_rgb)cv2.waitKey(0)

已知图片:

未知图片:

运行结果:

【Face Recognition人脸识别】4. 多张图片人脸识别相关推荐

  1. Github | 标星3W+ ! Face Recognition世界上最简洁的人脸识别库!

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia 计算机视觉联盟  报道  | 公众号 CVLianMeng 转载于 :Github [人工智能资 ...

  2. 人脸识别(8)----人脸识别主要算法原理

    人脸识别主要算法原理   [嵌牛导读]:人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术.用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行 ...

  3. 一文搞懂人脸识别那点事---人脸识别方案summary

    The Summary Of Face Recognition [全文共计7162字,预计阅读15分钟,消耗脑容量20MB] 人脸识别包含人脸检测.人脸对齐.人脸识别三个步骤. 首先利用人脸检测(Fa ...

  4. Python+Tensorflow+Opencv人脸识别(任意数量人脸)

    Python+Tensorflow+Opencv的人脸识别 简单的人脸识别 准备工作 开始--先获取必要的人脸图像 训练--分类吧 识别大脸 简单的人脸识别 一直想做机器学习的东东,最近由于工作的调整 ...

  5. 人脸识别论文整理——深度人脸识别的大边缘余弦损失

    论文简介 论文中文翻译:<深度人脸识别的大边缘余弦损失> 论文名称:<CosFace: Large Margin Cosine Loss for Deep Face Recognit ...

  6. 开源真香 离线识别率高 Python 人脸识别系统

    以往的人脸识别主要是包括人脸图像采集.人脸识别预处理.身份确认.身份查找等技术和系统.现在人脸识别已经慢慢延伸到了ADAS中的驾驶员检测.行人跟踪.甚至到了动态物体的跟踪. 由此可以看出,人脸识别系统 ...

  7. 深度学习之视频人脸识别系列二:人脸检测与对齐

    作者 | 东田应子 [磐创AI导读]本文是深度学习之视频人脸识别系列的第二篇文章,介绍人脸检测与对齐的相关算法.欢迎大家关注我们的公众号:磐创AI. 一.人脸检测与关键点检测 问题描述: 人脸检测解决 ...

  8. MDFR:基于人脸图像复原和人脸转正联合模型的人脸识别方法

    AI 科技评论报道 编辑 | 陈大鑫 在现实生活中,许多因素可能会影响人脸识别系统的识别性能,例如大姿势,不良光照,低分辨率,模糊和噪声等.为了应对这些挑战,之前的人脸识别方法通常先把低质量的人脸图像 ...

  9. python实现人脸识别复杂么_人脸识别没有那么复杂,Python一行代码就可以办到

    今天给大家分享一个,用一行python代码实习人脸识别. 环境要求: Ubuntu17.10 Python 2.7.14 环境搭建: 1. 安装 Ubuntu17.10 > 安装步骤在这里 2. ...

最新文章

  1. 一口气用 Python 写了13个小游戏,摸鱼达人!
  2. mxnet DepthwiseConv2D
  3. 黑马Java学习笔记之-----单例模式
  4. code.php验证码,php 验证码 实例
  5. LoadRunner 常用C语言函数使用
  6. CF908G. New Year and Original Order
  7. 如何使用 MySQL 安装后自带的帮助文档
  8. seo代码优化工具_企业seo该怎么优化
  9. SwiftUI 打开高德地图
  10. oracle 传递table,将对象类型表从java传递到oracle 8i(Pass table of object type from java to oracle 8i)...
  11. htons、inet_addr、
  12. Noise,Error,wighted pocket Algorithm
  13. 系统内存太少,VirtualBox无法启动虚拟机
  14. vue4 库模式打包_Steam“小模式”游戏库回归 界面轻快简洁可随时切换
  15. Qt制作贪吃蛇小游戏
  16. echarts引入china报错(The GeoJSON of the map must be provided)
  17. 基于Java+SSM+MySQL的高校后勤综合管理系统
  18. matlab2016a打开为响应,MATLAB2016a启动慢
  19. android支付宝运动修改器,支付宝运动修改器
  20. 武汉大学信息学部到计算机学院,武汉大学信息科学学部

热门文章

  1. 【敬伟ps教程】PS基础知识了解
  2. oracle 的乘法,Oracle group by 相乘
  3. Java程序员的春天!java第三方线程池
  4. 关闭公司电脑的强制屏幕保护
  5. 信用评分模型中的滚动率分析
  6. java中length和length()方法的区别
  7. python中xlrd模块_Python中的xlrd模块使用原理解析
  8. python100天-如何系统地学习 Python,100天从新手到大师
  9. 嵌入式课后总结(3)
  10. 三款免费杀毒软件+clamAV