Opencv学习项目3——人脸识别
之前我们获取了一张图像的人脸信息,现在我们来使用特征点分析来匹配两张lyf照片的相似度
获取两张图片的人脸信息
import cv2
import face_recognition# 加载图像文件
img1 = face_recognition.load_image_file('lyf1.png')
img2 = face_recognition.load_image_file('lyf2.png')
# 将图像从 BGR 格式转换为 RGB 格式
img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)
img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2RGB)
# 第一个人的人脸位置信息
faceloc1 = face_recognition.face_locations(img1)[0]
faceloc2 = face_recognition.face_locations(img2)[0]
#框出人脸
cv2.rectangle(img1, (faceloc1[3], faceloc1[0]), (faceloc1[1], faceloc1[2]), (0, 255, 0), 3)
cv2.rectangle(img2, (faceloc2[3], faceloc2[0]), (faceloc2[1], faceloc2[2]), (0, 255, 0), 3)#打印人脸位置信息
print(faceloc1)
print(faceloc2)cv2.imshow('lyf1', img1)
cv2.imshow('lyf2', img2)
cv2.waitKey(0)
效果如下
然后接下来我们使用face_encodings来进行提取人脸特征编码,首先我们先对这个函数进行一下介绍
face_encodings函数
face_recognition.face_encodings()
是 face_recognition 库中的一个函数,用于从图像中提取人脸的特征编码。这些编码是对人脸图像的数值化描述,可以用来比较不同人脸之间的相似度,从而进行人脸识别或验证。face_encodings(face_image, known_face_locations=None, num_jitters=1)
face_image: 必须是一个RGB图像(numpy数组),即使是从OpenCV加载的图像也需要先转换为RGB格式。
known_face_locations: 可选参数,指定人脸位置的列表。每个位置是一个包含四个整数的元组
(top, right, bottom, left)
,代表人脸框的坐标。如果不提供此参数,函数将自动检测图像中的所有人脸。num_jitters: 可选参数,默认为1。用于增加对每个人脸提取特征时的采样次数,以获得更稳定的编码。较大的值可能会提高准确性,但会增加计算成本。
返回值:
该函数返回一个包含每个检测到的人脸编码的列表。每个编码是一个128维的numpy数组,描述了人脸在128维空间中的位置关系和特征。
face_recognition.face_encodings()
可以结合face_recognition.face_locations()
使用,以便首先检测人脸位置,然后提取这些位置上的人脸编码。人脸编码是一个具有良好特性的向量,可以用于比较两张人脸图像的相似度。通常,人脸编码越相似,它们之间的距离(如欧氏距离)越小。
该函数在进行人脸识别、人脸验证和人脸聚类等任务时非常有用。
这样我们使用faceloc1 = face_recognition.face_locations(img1)[0]
face_encoding1 = face_recognition.face_encodings(img1, [faceloc1])[0]
这里就表示获取第一个人脸的特征编码
img1 = face_recognition.load_image_file('lyf1.png')
img2 = face_recognition.load_image_file('lyf2.png')
# 将图像从 BGR 格式转换为 RGB 格式
img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)
img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2RGB)
# 第一个人的人脸位置信息
faceloc1 = face_recognition.face_locations(img1)[0]
faceloc2 = face_recognition.face_locations(img2)[0]
# 提取人脸编码
face_encoding1 = face_recognition.face_encodings(img1, [faceloc1])[0]
face_encoding2 = face_recognition.face_encodings(img2, [faceloc2])[0]
下面我们使用compare_faces来对比两个图片人脸的相似度,介绍一下这个函数
compare_faces函数
face_recognition.compare_faces([face_encoding1], face_encoding2)
是一个用于人脸比对的函数,通常用于人脸识别任务中。这个函数接受两个参数:
face_encoding1
: 表示第一个人脸的编码,通常是一个128维的向量,用于表示人脸的特征。face_encoding2
: 表示第二个人脸的编码,同样是一个128维的向量。函数的作用是比较这两个人脸编码,判断它们是否来自同一个人脸。具体来说,它会计算这两个人脸编码之间的欧氏距离(Euclidean distance),如果距离小于一个阈值(一般来说是0.6),就认为这两个人脸是同一个人,返回True;否则返回False。
import cv2
import face_recognition# 加载图像文件
img1 = face_recognition.load_image_file('lyf1.png')
img2 = face_recognition.load_image_file('lyf2.png')
# 将图像从 BGR 格式转换为 RGB 格式
img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)
img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2RGB)
# 第一个人的人脸位置信息
faceloc1 = face_recognition.face_locations(img1)[0]
faceloc2 = face_recognition.face_locations(img2)[0]
# 提取人脸编码
face_encoding1 = face_recognition.face_encodings(img1, [faceloc1])[0]
face_encoding2 = face_recognition.face_encodings(img2, [faceloc2])[0]
#框出人脸
cv2.rectangle(img1, (faceloc1[3], faceloc1[0]), (faceloc1[1], faceloc1[2]), (0, 255, 0), 3)
cv2.rectangle(img2, (faceloc2[3], faceloc2[0]), (faceloc2[1], faceloc2[2]), (0, 255, 0), 3)
#比对人脸特征
res = face_recognition.compare_faces([face_encoding1],face_encoding2)
print(res)
#打印人脸位置信息
# print(faceloc1)
# print(faceloc2)cv2.imshow('lyf1', img1)
cv2.imshow('lyf2', img2)
cv2.waitKey(0)
效果如下
这里可以看见,打印了True,说明为同一个人
到这里就完成了对两个人脸的比对,感兴趣的可以关注一下,谢谢
相关文章:
![](https://i-blog.csdnimg.cn/direct/970a1ccd00764766a42225fb1b69ad48.png)
Opencv学习项目3——人脸识别
之前我们获取了一张图像的人脸信息,现在我们来使用特征点分析来匹配两张lyf照片的相似度 获取两张图片的人脸信息 import cv2 import face_recognition# 加载图像文件 img1 face_recognition.load_image_file(lyf1.png) img2 face_recognition.load_image_file(l…...
![](https://www.ngui.cc/images/no-images.jpg)
【js自学打卡11】生成器函数(generator函数)的使用总结+代码举例
力扣的js入门免费题刷完了,开始自己找题练练,顺便捡捡知识点 力扣2649 1.思路 一眼递归,但事实证明也可以直接flat手撕。 arr.flat(Infinity) //直接扁平化到最底层涉及到了一些关于生成器和异步编程相关的知识点,学一下。 2.…...
![](https://i-blog.csdnimg.cn/direct/ee1f02cc150d49c898fa761130f33d4c.png)
深入了解jdbc-02-CRUD
文章目录 操作和访问数据库Statement操作数据表的弊端sql注入问题PreparedStatement类ResultSet类与ResultSetMetaData类资源的释放批量插入 操作和访问数据库 数据库的调用的不同方式: Statement:用于执行静态 SQL 语句并返回它所生成结果的对象。PreparedStatem…...
![](https://img-blog.csdnimg.cn/img_convert/c7108b41f8ee3a2d606c1c5522425254.gif)
《基于 Kafka + Quartz 实现时限质控方案》
📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…...
![](https://www.ngui.cc/images/no-images.jpg)
浏览器的卡顿与react的解决思路
以下内容是阅读过程中结合自己的思考而诞生的产物,不一定准确,但相反的,可能个人对实际情况有很大的误解。 仅做参考,欢迎指正。 前面提到浏览器显示的其实是渲染流程最后渲染出来的一张图片,而一个行为引起的副作用需…...
![](https://i-blog.csdnimg.cn/direct/afd38d6d7b584ca990dd14facda5b024.png)
XXE:XML外部实体引入
XXE漏洞 如果服务器没有对客户端的xml数据进行限制,且版本较低的情况下,就可能会产生xxe漏洞 漏洞利用流程 1.客户端发送xml文件,其中dtd存在恶意的外部实体引用 2.服务器进行解析 3.服务器返回实体引用内容 危害:任意文件读…...
![](https://i-blog.csdnimg.cn/direct/657ff55d27834f3da7ece58696146565.jpeg)
3D培训大师创新培训体验,加速空调关键组件的高效精准安装
如今,空调系统的复杂性和精密性与日俱增,对专业技术人员的要求也日益提高。尤其是决定空调是否能平稳运行的空调关键组件的装配培训,不再局限于传统的理论讲解和实体模型演示,而是更注重数字化、沉浸式学习。 案例背景 某空调公…...
![](https://i-blog.csdnimg.cn/direct/c923c81636c64863ba9a5121e33c7bf2.png)
PyTorch 深度学习实践-循环神经网络(高级篇)
视频指路 参考博客笔记 参考笔记二 文章目录 上课笔记总代码练习 上课笔记 个人能力有限,重看几遍吧,第一遍基本看不懂 名字的每个字母都是一个特征x1,x2,x3…,一个名字是一个序列 rnn用GRU 用ASCII表作为词典,长度为128&#x…...
![](https://i-blog.csdnimg.cn/direct/d3ca33e91d0842fda39ff2eda971da72.png#pic_center)
这才是老板喜欢的电子信息类简历
点击可直接使用...
![](https://www.ngui.cc/images/no-images.jpg)
MySQL学习之事务,锁机制
事务 什么是事务? 事务就是逻辑上的一组操作,要么全做,要么全不做 事务经典例子:转账,转账需要两个操作,从一个人账户上减钱,在另一个账户上加钱,比如说小红给小明转账100元&…...
![](https://i-blog.csdnimg.cn/direct/526f7f7a740743198005a3567072bfab.png)
开源知识付费小程序源码 内容付费系统php源码 含完整图文部署教程
在当今数字化时代,知识付费作为一种新型的经济模式,正逐渐受到越来越多内容创作者、专家及商家的青睐。开源知识付费小程序源码和内容付费系统PHP源码作为实现这一模式的重要工具,为构建高效、安全、可扩展的知识付费平台提供了强大的技术支持…...
![](https://img-blog.csdnimg.cn/img_convert/69b0b0f2b4a25379527f390b6da455a5.gif)
时序数据库如何选型?详细指标总结!
工业物联网场景,如何判断什么才是好的时序数据库? 工业物联网将机器设备、控制系统与信息系统、业务过程连接起来,利用海量数据进行分析决策,是智能制造的基础设施,并影响整个工业价值链。工业物联网机器设备感知形成了…...
![](https://www.ngui.cc/images/no-images.jpg)
【前端】JavaScript入门及实战51-55
文章目录 51 函数52 函数的参数53 返回值54 练习55 return 51 函数 <!DOCTYPE html> <html> <head> <title></title> <meta charset "utf-8"> <script type"text/javascript">/* 函数:1. 函数也是…...
![](https://img-blog.csdnimg.cn/img_convert/2eed67c94685ced67b5f4743009a09ee.jpeg)
【引领未来智造新纪元:量化机器人的革命性应用】
在日新月异的科技浪潮中,量化机器人正以其超凡的智慧与精准的操作,悄然改变着各行各业的生产面貌,成为推动产业升级、提升竞争力的关键力量。今天,让我们一同探索量化机器人在不同领域的广泛应用价值,见证它如何以科技…...
![](https://www.ngui.cc/images/no-images.jpg)
山东航空小程序查询
山东航空小程序 1) 请求地址 https://scxcx.sda.cn/mohe/proxy?url/trp/ticket/search 2) 调用方式:HTTP post 3) 接口描述: 接口描述详情 4) 请求参数: {"dep": "TAO","arr": "HRB","flightDate&qu…...
![](https://i-blog.csdnimg.cn/direct/cd45c786a1394a409762be03ee762c63.png)
MySQL添加索引时会锁表吗?
目录 简介Online DDL概念Online DDL用法总结 简介 在MySQL5.5以及之前的版本,通常更改数据表结构操作(DDL)会阻塞对表数据的增删改操作(DML)。 MySQL5.6提供Online DDL之后可支持DDL与DML操作同时执行,降低…...
![](https://img-blog.csdnimg.cn/img_convert/06412f26e95f6cf6bcba7be6d87a969d.png)
算法日记day 16(二叉树的广度优先遍历|反转、对称二叉树)
一、二叉树的层序遍历 题目: 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[[3]…...
![](https://i-blog.csdnimg.cn/direct/648e148cd65e4cefa4d28341b6f09d7d.png)
PolarisMesh源码系列--Polaris-Go注册发现流程
导语 北极星是腾讯开源的一款服务治理平台,用来解决分布式和微服务架构中的服务管理、流量管理、配置管理、故障容错和可观测性问题。在分布式和微服务架构的治理领域,目前国内比较流行的还包括 Spring Cloud,Apache Dubbo 等。在 Kubernete…...
![](https://i-blog.csdnimg.cn/direct/4b339f1eb6824e99907a4f56da3517e2.png)
vue3 vxe-grid修改currentPage,查询数据的时候,从第一页开始查询
1、当我们设置好VxeGrid.Options进行数据查询的时候,下面是可能的设置: const gridOptions reactive<BasicTableProps>({id: UserTable,showHeaderOverflow: false,showOverflow: true,keepSource: true,columns: userColumns,size: small,pagerConfig: {cur…...
![](https://img-blog.csdnimg.cn/img_convert/876540e9dd5deb15c70ca500fb99d678.png)
电商数据集成之电商商品信息采集系统架构设计||电商API接口
一、引言 本架构设计文档旨在阐述基于 Selenium 的电商商品信息采集系统的整体架构,包括系统视图、逻辑视图、物理视图、开发视图和进程视图,并提供一个简单的采集电商商品信息的 demo。该系统通过模拟浏览器行为,实现对电商商品信息的自…...
![](https://www.ngui.cc/images/no-images.jpg)
Spring Cloud Stream 实现统一消息通信平台
1. 概述 Spring Cloud Stream:是Spring提供的消息通信框架,旨在构建跨不同消息中间件的统一通信平台。目的:通过消息通信机制降低分布式系统中服务间的耦合度,实现异步服务交互。 2. 消息通信与RPC RPC:远程过程调用…...
![](https://i-blog.csdnimg.cn/direct/ddf5a7fbed7446f38187994f44d907de.png)
uniapp安卓plus原生选择系统文件
uniapp安卓plus原生选择系统文件 效果: 组件代码: <template xlang"wxml" minapp"mpvue"><view></view> </template> <script>export default {name: file-manager,props: {},data() {return {is…...
![](https://i-blog.csdnimg.cn/direct/548d595710f04b54b4bc6fd9b3363440.png)
Go语言 Import导入
本文主要介绍Go语言import导入使用时注意事项和功能实现示例。 目录 Import 创建功能文件夹 加法 减法 主函数 优化导入的包名 .引入方法 总结 Import 创建功能文件夹 做一个计算器来演示,首先创建test文件夹。 加法 在test文件夹中创建add文件夹ÿ…...
![](https://img-blog.csdnimg.cn/d7384960084049a897e65b9134364db0.png)
一款异次元小清新风格的响应式wordpress个人博客主题
一款异次元小清新风格的响应式个人博客主题。这是一款专注于用户阅读体验的响应式 WordPress 主题,整体布局简洁大方,针对资源加载进行了优化。 Kratos主题基于Bootstrap和Font Awesome的WordPress一个干净,简单且响应迅速的博客主题&#x…...
![](https://i-blog.csdnimg.cn/direct/5629f179566d4106956db482b2c2eeb1.png)
【cocos creator】ts中export的模块管理
在 TypeScript(TS)中,export 和 import 的概念与 Java 中的 public 类、接口以及 import 语句有一些相似之处。可以用以下方式来类比理解: Export 在 TypeScript 中,export 用于将模块中的变量、函数、类等暴露给外部…...
![](https://www.ngui.cc/images/no-images.jpg)
QT JSON使用实例
下面是一个使用Qt框架的示例代码,展示如何获取仪器的状态,将其打包成JSON格式,保存到当前目录下的JSON文件中,然后通过FTP发送该文件。 1. 准备工作 确保你已经安装了Qt,并创建一个新的Qt Console项目或Qt Widgets项目…...
![](https://i-blog.csdnimg.cn/direct/d53f80ff0c4c46a38c386788c741ac5e.png)
浅聊 Three.js 屏幕空间反射SSR-SSRShader
浅聊 Three.js 屏幕空间反射SSR(2)-SSRShader 前置基础 渲染管线中的相机和屏幕示意图 -Z (相机朝向的方向)||| -------------- <- 屏幕/投影平面| | || | || | (f) | <- 焦距| | ||…...
![](https://www.ngui.cc/images/no-images.jpg)
Windows图形界面(GUI)-DLG-C/C++ - 月历控件(MonthCalendar)
公开视频 -> 链接点击跳转公开课程博客首页 -> e链接点击跳转博客主页 目录 月历控件(MonthCalendar) 使用场景 控件操作 月历控件(MonthCalendar) 使用场景 日程安排:用户可以通过月历控件选择特定的日期来安排会议或活动。事件管理&#x…...
![](https://i-blog.csdnimg.cn/direct/4d0e0430339b4d62919a71679b40c083.png)
【Langchain大语言模型开发教程】基于文档问答
🔗 LangChain for LLM Application Development - DeepLearning.AI Embedding: https://huggingface.co/BAAI/bge-large-en-v1.5/tree/main 学习目标 1、Embedding and Vector Store 2、RetrievalQA 引包、加载环境变量 import osfrom dotenv import…...
![](https://i-blog.csdnimg.cn/direct/62df634ef31b433288a4f9ca982130f0.png)
大厂面试-基本功
大厂面试第4季 服务可用性多少个9是什么意思遍历集合add或remove操作bughashcode冲突案例BigdecimalList去重复IDEA Debugger测试框架ThreaLocal父子线程数据同步 InheritableThreadLocal完美解决线程数据同步方案 TransmittableThreadLocal 服务可用性多少个9是什么意思 遍历集…...
![](https://img-blog.csdnimg.cn/20210609135311352.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Nja2V2aW5jeWg=,size_16,color_FFFFFF,t_70)
常州建站软件/seo推广技术培训
文章目录Java锁synchronized关键字学习系列之偏向锁升级无锁偏向锁原理批量重偏向和批量撤销偏向锁升级偏向锁升级轻量级锁偏向锁升级重量级锁参考源代码Java锁synchronized关键字学习系列之偏向锁升级 前面几篇博文已经简单介绍了偏向锁了。《Java锁synchronized关键字学习系…...
![](/images/no-images.jpg)
在哪个国家做垂直网站好/营业推广的方式
按键精灵将表格录入网页.doc按键精灵将表格录入网页篇一:基于按键精灵的自动输入程序的实现2012.3.1基于按键精灵的自动输入程序的实现高琪琪(无锡职业技术学院 江苏 无锡 214121)摘要:本文讨论如何通过按键精灵读取excel表格中的内容,之后通…...
想要将网站信息插到文本链接怎么做/如何建站
如果启动前不对Linux内核做任何更改,那么Redis启动会报出警告,共三个:如下图所示第一个警告:The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.意思是…...
![](https://img2018.cnblogs.com/blog/1179709/201811/1179709-20181118021622649-407867906.png)
网站的百度推广怎么做/公关服务
参考:https://blog.csdn.net/zl544434558/article/details/47857343 在一个eclipse启动多个tomcat,修改tomcat的端口是不可以的,需要修改tomcat的shutdown端口、tomcat访问端口、jvm启动端口 修改步骤: 1 双击tomcat server 在每个…...
![](/images/no-images.jpg)
wordpress表格显示不了/seo常见的优化技术
JavaScript,列队动画 将上一节的,移动透明动画,修改成可以支持列队,也就是可以给这个动画方法多个动画任务,让它完成一个动画任务后,在执行第二个动画任务 原理: 就是在原有的动画方法里加一个回…...
![](https://img-blog.csdnimg.cn/img_convert/82a270643703b451a72aabe4c4d77570.png)
四川网站备案/网络工程师是干什么的
对于编程初学者来说会接触到一些难以理解的名称,比如堆(heap)、栈(stack)、堆栈(stack)等。初学开发过程中往往让人混淆不清。今天我们来谈谈堆和栈的具体区别,来帮助初学者理清思路。堆和栈的区别一直都是永恒的话题,为此笔者也查了很多的资…...