【Face Recognition人脸识别】4. 多张图片人脸识别
【 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. 多张图片人脸识别相关推荐
- Github | 标星3W+ ! Face Recognition世界上最简洁的人脸识别库!
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia 计算机视觉联盟 报道 | 公众号 CVLianMeng 转载于 :Github [人工智能资 ...
- 人脸识别(8)----人脸识别主要算法原理
人脸识别主要算法原理 [嵌牛导读]:人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术.用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行 ...
- 一文搞懂人脸识别那点事---人脸识别方案summary
The Summary Of Face Recognition [全文共计7162字,预计阅读15分钟,消耗脑容量20MB] 人脸识别包含人脸检测.人脸对齐.人脸识别三个步骤. 首先利用人脸检测(Fa ...
- Python+Tensorflow+Opencv人脸识别(任意数量人脸)
Python+Tensorflow+Opencv的人脸识别 简单的人脸识别 准备工作 开始--先获取必要的人脸图像 训练--分类吧 识别大脸 简单的人脸识别 一直想做机器学习的东东,最近由于工作的调整 ...
- 人脸识别论文整理——深度人脸识别的大边缘余弦损失
论文简介 论文中文翻译:<深度人脸识别的大边缘余弦损失> 论文名称:<CosFace: Large Margin Cosine Loss for Deep Face Recognit ...
- 开源真香 离线识别率高 Python 人脸识别系统
以往的人脸识别主要是包括人脸图像采集.人脸识别预处理.身份确认.身份查找等技术和系统.现在人脸识别已经慢慢延伸到了ADAS中的驾驶员检测.行人跟踪.甚至到了动态物体的跟踪. 由此可以看出,人脸识别系统 ...
- 深度学习之视频人脸识别系列二:人脸检测与对齐
作者 | 东田应子 [磐创AI导读]本文是深度学习之视频人脸识别系列的第二篇文章,介绍人脸检测与对齐的相关算法.欢迎大家关注我们的公众号:磐创AI. 一.人脸检测与关键点检测 问题描述: 人脸检测解决 ...
- MDFR:基于人脸图像复原和人脸转正联合模型的人脸识别方法
AI 科技评论报道 编辑 | 陈大鑫 在现实生活中,许多因素可能会影响人脸识别系统的识别性能,例如大姿势,不良光照,低分辨率,模糊和噪声等.为了应对这些挑战,之前的人脸识别方法通常先把低质量的人脸图像 ...
- python实现人脸识别复杂么_人脸识别没有那么复杂,Python一行代码就可以办到
今天给大家分享一个,用一行python代码实习人脸识别. 环境要求: Ubuntu17.10 Python 2.7.14 环境搭建: 1. 安装 Ubuntu17.10 > 安装步骤在这里 2. ...
最新文章
- 一口气用 Python 写了13个小游戏,摸鱼达人!
- mxnet DepthwiseConv2D
- 黑马Java学习笔记之-----单例模式
- code.php验证码,php 验证码 实例
- LoadRunner 常用C语言函数使用
- CF908G. New Year and Original Order
- 如何使用 MySQL 安装后自带的帮助文档
- seo代码优化工具_企业seo该怎么优化
- SwiftUI 打开高德地图
- oracle 传递table,将对象类型表从java传递到oracle 8i(Pass table of object type from java to oracle 8i)...
- htons、inet_addr、
- Noise,Error,wighted pocket Algorithm
- 系统内存太少,VirtualBox无法启动虚拟机
- vue4 库模式打包_Steam“小模式”游戏库回归 界面轻快简洁可随时切换
- Qt制作贪吃蛇小游戏
- echarts引入china报错(The GeoJSON of the map must be provided)
- 基于Java+SSM+MySQL的高校后勤综合管理系统
- matlab2016a打开为响应,MATLAB2016a启动慢
- android支付宝运动修改器,支付宝运动修改器
- 武汉大学信息学部到计算机学院,武汉大学信息科学学部