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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/578120.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源持续测试平台Linux MeterSphere本地部署与远程访问

文章目录 前言1. 安装MeterSphere2. 本地访问MeterSphere3. 安装 cpolar内网穿透软件4. 配置MeterSphere公网访问地址5. 公网远程访问MeterSphere6. 固定MeterSphere公网地址 前言 MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能&am…

2023年国赛高教杯数学建模E题黄河水沙监测数据分析解题全过程文档及程序

2023年国赛高教杯数学建模 E题 黄河水沙监测数据分析 原题再现 黄河是中华民族的母亲河。研究黄河水沙通量的变化规律对沿黄流域的环境治理、气候变化和人民生活的影响,以及对优化黄河流域水资源分配、协调人地关系、调水调沙、防洪减灾等方面都具有重要的理论指导…

Swagger快速入门

1、Swagger快速入门 1.1 swagger介绍 官网:https://swagger.io/ Swagger 是一个规范和完整的Web API框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。 功能主要包含以下几点: A. 使得前后端分离开发更加方便,有利于团队协作…

Jenkins的邮箱配置和插件下载

启动:java -jar jenkins.war 一定在jenkins.war的目录下 进入cmd命令 浏览器输入网址:http://localhost:8080/login?from%2F 账号:admin 密码:123456 安装插件: 插件更新后重启下 配置邮箱账号: 3…

到底是前端验证还是后端验证

背景 软件应用研发中, 前端验证还是后端验证这是意识与认知问题。鉴于某些入门同学还不清楚,我们再来看下: 一. 从软件行业来自国外 Q: 前端验证和后端验证都是对同一个数据的验证,有什么区别? A: 二者的目的不同&…

有趣的多线程:累计相加-CompletableFuture优化

不优雅的地方 对结果的获取需要额外引入CountDownLatch等待所有线程执行完毕 CompletableFuture Future接口天然可以通过回调获取结果,所以可以利用CompletableFuture实现并行,并调用CompletableFuture.join获取结果 private static void completabl…

WPF中数据绑定转换器Converter

使用场景:ViewModel中的数据如果跟View中的数据类型不匹配。 下面是以int类型调控是否可见为例子 步骤一:创建转换器类 在xaml中查看Converter的定义可以知道Converter是一个接口类型,因此转换器的类定义需要使用这个接口 internal class Vi…

Thinkphp开发的返佣商城分销商城理财商城源码

(本站长在localhost安装测试,发现提示有错,具体问题没有时间查找了,或者php解密插件没有安装,有能力的朋友自行折腾。) 程序基于 THINKPHP6VUE 全新开发,保障安全的同时大大提高代码执行效率。…

sql:最后一个进入电梯的人

表: queue ---------------------- | column name | type | ---------------------- | person_id | int | | person_name | varchar | | weight | int | | turn | int | ----------------------person_id 是这个表的主键。 该表展示了所有等待电…

css mask 案例

文章目录 一、基本用法二、图案遮罩二、文字阴影效果三、日历探照灯效果 CSS的mask属性用于定义一个可重复使用的遮罩,可以将其应用到任何可视元素上。这个功能类似于Photoshop中的图层蒙版。通过mask属性,可以创建独特的效果,比如圆形、渐变…

迪文屏开发保姆级教程6----触摸实现界面切换

这篇文章要讲啥事呢? 本篇文章主要介绍了在DGBUS平台上触摸实现界面切换的方法。 文哥悄悄话: 官方开发指南PDF:(不方便下载的私聊我发给你) https://download.csdn.net/download/qq_21370051/88647174?spm1001.201…

【STM32单片机】俄罗斯方块游戏

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用STM32F103C8T6单片机控制器,IIC OLED液晶、按键等。 主要功能: 系统运行后,OLED显示开机界面,按下K1键进入游戏。K1键控制翻转,K2控…

中继器,路由器,交换机,网关,网桥的作用及功能

中继器(RP repeater)是连接网络线路的一种装置,常用于两个网络节点之间物理信号的双向转发工作 中继器是最简单的网络互联设备,主要完成物理层的功能,负责在两个节点的物理层上按位传递信息,完成信号的复制…

【运维不走弯路】最简单的k8s集群搭建(基于ubuntu22.04 cloud-img)

配置详情 节点k8sdockercontainerdmasterv1.26.024.0.61.6.22node1v1.26.024.0.61.6.22node2v1.26.024.0.61.6.22node3v1.26.024.0.61.6.22 所有节点操作 替换系统源 cat <<EOF > /etc/apt/sources.list # 默认注释了源码镜像以提高 apt update 速度&#xff0c;如…

【Windows编程】期末复习题2

系列文章目录 期末复习题1 文章目录 系列文章目录解释下列名词的含义&#xff1f;设备环境&#xff08;描述表&#xff09;保存了哪些信息&#xff1f;有什么作用&#xff1f;模态对话框与非模态对话框有什么区别&#xff1f;在程序设计中&#xff0c;经常要用到线程&#xff…

关于OpenCV中 CV_Assert() 的使用引起程序中止/崩溃问题

CV_Assert() 的作用是&#xff1a;若括号中的表达式值为 false &#xff0c;则返回一个错误信息&#xff0c;并终止程序执行。 但是 CV_Assert() 与 assert 不同&#xff0c;CV_Assert() 会通过异常抛出&#xff0c;所以如果使用 CV_Assert()&#xff0c;可以通过捕获异常而不是…

神经网络介绍

目录 知识点介绍 知识点介绍 前馈神经网络&#xff1a;&#xff08;前馈网络的数据只向一个方向传播&#xff09; RNN循环神经网络&#xff0c;下图中多个 RNN 层都是“同一个层”&#xff0c;这一点与之前的神经网络是不一样的。

算法训练day49|动态规划part10

121. 买卖股票的最佳时机 参考文章&#xff1a;代码随想录 贪心 因为股票就买卖一次&#xff0c;那么贪心的想法很自然就是取最左最小值&#xff0c;取最右最大值&#xff0c;那么得到的差值就是最大利润。 本次重点学习动态规划方法 1. dp数组&#xff08;dp table&#x…

JavaScript基础知识点总结:从零开始学习JavaScript(二)

如果大家感感兴趣也可以去看&#xff1a; &#x1f389;博客主页&#xff1a;阿猫的故乡 &#x1f389;系列专栏&#xff1a;JavaScript专题栏 &#x1f389;ajax专栏&#xff1a;ajax知识点 &#x1f389;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 学习…

智能优化算法应用:基于驾驶训练算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于驾驶训练算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于驾驶训练算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.驾驶训练算法4.实验参数设定5.算法结果6.…