当前位置: 首页 > news >正文

python 通过opencv及face_recognition识别人脸

效果:

使用Python的cv2库和face_recognition库来进行人脸检测和比对的
0是代表一样
在这里插入图片描述认为是同一人。
在这里插入图片描述

代码:

pip install opencv-python
pip install face_recognition
# 导入cv2库,用于图像处理
import cv2
# 导入face_recognition库,用于人脸识别
import face_recognition# 使用face_recognition库加载名为'face1.jpeg'的图片,并存储在reference_image变量中
reference_image = face_recognition.load_image_file('face1.jpeg')
# 使用cv2库将BGR彩色图像转化为RGB彩色图像,因为face_recognition库需要RGB格式的图像
reference_image = cv2.cvtColor(reference_image, cv2.COLOR_BGR2RGB)# 同样地,加载另一张名为'face3.jpg'的图片,并存储在test_image变量中
test_image = face_recognition.load_image_file('face3.jpg')
# 也将其从BGR格式转化为RGB格式
test_image = cv2.cvtColor(test_image, cv2.COLOR_BGR2RGB)# 使用face_recognition库定位reference_image图片中的人脸位置,返回的是一个列表,其中每个元素代表一个人脸的位置
# 这里我们假设只有一个人脸,所以直接取第一个元素
reference_face_location = face_recognition.face_locations(reference_image)[0]
# 提取reference_image图片中人脸的面部特征,返回一个列表,每个元素代表一个人脸的特征编码
# 同样地,我们假设只有一个人脸,所以直接取第一个元素
reference_face_encoding = face_recognition.face_encodings(reference_image)[0]# 在reference_image图片上框出人脸位置,使用紫色矩形框表示
cv2.rectangle(reference_image, (reference_face_location[3], reference_face_location[0]),(reference_face_location[1], reference_face_location[2]), (255, 0, 255), 2)# 对另一张图片test_image也做同样的人脸定位和特征提取操作
test_face_location = face_recognition.face_locations(test_image)[0]
test_face_encoding = face_recognition.face_encodings(test_image)[0]
# 在test_image图片上也框出人脸位置
cv2.rectangle(test_image, (test_face_location[3], test_face_location[0]),(test_face_location[1], test_face_location[2]), (255, 0, 255), 2)# 使用face_recognition库比较两个人脸的相似度,返回一个布尔值列表,表示每张测试图片是否与已知人脸匹配
# 这里我们只有一个测试人脸和一个已知人脸,所以直接取列表的第一个元素作为结果
is_same_person = face_recognition.compare_faces([reference_face_encoding], test_face_encoding)[0]
# 计算两个人脸的欧氏距离,返回一个浮点数列表,表示每张测试图片与已知人脸的距离
# 同样地,我们直接取第一个元素作为结果
euclidean_distance = face_recognition.face_distance([reference_face_encoding], test_face_encoding)[0]# 打印相似度结果和欧氏距离
print(is_same_person, euclidean_distance)
# 在test_image图片上显示比对结果,包括相似度(True或False)和欧氏距离(保留两位小数)
cv2.putText(test_image, f'{is_same_person}{round(euclidean_distance, 2)}', (50, 50), cv2.FONT_HERSHEY_COMPLEX, 1,(0, 0, 255), 2)# 使用cv2库的imshow函数显示两张图片,分别命名为'Driver'和'Operator'
cv2.imshow('Driver', reference_image)
cv2.imshow('Operator', test_image)# 等待用户按键操作,参数0表示无限等待,直到用户按下一个键
key = cv2.waitKey(0)
# 如果用户按下的是ESC键(ASCII码为27),则关闭所有打开的窗口
if key == 27:cv2.destroyAllWindows()

相关文章:

  • VCG Mesh刚性旋转(变换矩阵)
  • 【Java、Python】获取电脑当前网络IP进行位置获取(附源码)
  • ES实用的深度解构赋值方法
  • axios进行图片上传组件封装
  • 【概率统计】生存分析
  • 安装kafka
  • C++ opencv-3.4.1 提取不规则物体的轮廓
  • 初试Kafka
  • 【网络奇缘】——奈氏准则和香农定理从理论到实践一站式服务|计算机网络
  • springboot 查询
  • css mask 案例
  • 13章总结
  • python哈希算法实现
  • 智慧工地项目端监管端一体化SaaS云平台源码(微服务架构)
  • uni-app 命令行创建
  • (三)从jvm层面了解线程的启动和停止
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • AHK 中 = 和 == 等比较运算符的用法
  • css的样式优先级
  • CSS实用技巧干货
  •  D - 粉碎叛乱F - 其他起义
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Java 最常见的 200+ 面试题:面试必备
  • node-glob通配符
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Python打包系统简单入门
  • spring + angular 实现导出excel
  • 笨办法学C 练习34:动态数组
  • 分布式熔断降级平台aegis
  • 关于List、List?、ListObject的区别
  • 将回调地狱按在地上摩擦的Promise
  • 利用jquery编写加法运算验证码
  • 每天10道Java面试题,跟我走,offer有!
  • 十年未变!安全,谁之责?(下)
  • 使用 QuickBI 搭建酷炫可视化分析
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • MPAndroidChart 教程:Y轴 YAxis
  • ​​​​​​​​​​​​​​Γ函数
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (转)ABI是什么
  • (转)jQuery 基础
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .bat批处理(六):替换字符串中匹配的子串
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET NPOI导出Excel详解
  • .net 验证控件和javaScript的冲突问题
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .NET轻量级ORM组件Dapper葵花宝典
  • .NET应用架构设计:原则、模式与实践 目录预览
  • ??在JSP中,java和JavaScript如何交互?
  • @angular/cli项目构建--http(2)
  • @Service注解让spring找到你的Service bean