千家信息网

基于face_recognition如何实现人脸识别

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章将为大家详细讲解有关基于face_recognition如何实现人脸识别,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。准备工作我们的人脸识别基
千家信息网最后更新 2025年01月19日基于face_recognition如何实现人脸识别

这篇文章将为大家详细讲解有关基于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在图上标注标签。

以上是代码的全部。

测试

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

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

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

关于基于face_recognition如何实现人脸识别就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

人脸 向量 图片 数据 元素 照片 面的 名字 数组 标签 工作 代码 位置 内容 区域 文章 更多 王妃 王子 知识 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全嘉宾演讲图片 内测服务器 龙啸苍穹 龙门飞甲 如何利用肠道菌群数据库分析数据 固安服务器 我的世界技术服务器推荐 网络技术是最简单 杭州直销软件开发哪家有名 广州戴尔服务器报价单 软件测试数据库面试题 ip网络技术教科书 微信朋友圈毁谤 网络安全法 网络技术总监怎么样 济南中泰证券软件开发面试 新乡市加一网络技术有限公司 国内做服务器的公司 紫光展锐 信息化软件开发 舟山网络安全教育平台 网络安全产业应该如何防御 服务器为什么都要系统盘 查课表软件开发 竹山智能软件开发服务保障 网络安全法记录网络运行状态 比特币开源数据库 云视网络技术有限公司官网 西安搬家平台软件开发收费 意识形态网络安全是什么 紫光展锐 信息化软件开发 管理服务器安全的是什么职位 分析我国互联网网络安全形势 系统如何与数据库进行连接
0