python+dlib的欧式距离算法进行人脸识别

article/2025/9/15 4:39:25

资源下载地址:https://download.csdn.net/download/sheziqiong/85738944
资源下载地址:https://download.csdn.net/download/sheziqiong/85738944

人脸识别的主要算法

其核心算法是 欧式距离算法使用该算法计算两张脸的面部特征差异,一般在0.6 以下都可以被认为是同一张脸

人脸识别的主要步骤

1 获得人脸图片
2 将人脸图片转为128D的矩阵(这个也就是人脸特征的一种数字化表现)
3 保存人脸128D的特征到文件中
4 获取其他人脸转为128D特征通过欧式距离算法与我们保存的特征对比,如果差距在0.6以下就说明两张脸差距比较小

准备工作

wget http://dlib.net/files/shape_predictor_5_face_landmarks.dat.bz2
wget http://dlib.net/files/dlib_face_recognition_resnet_model_v1.dat.bz2
下载完成后 通过 bzip2 -d 命令解压这两个压缩包

以下就按照上面的步骤一步一步去实现人脸识别

1 获取人脸

获取人脸的方式有两种途径
1 通过图片
2 通过摄像头采集

图片方式

通过图片获取人脸 demo(需要检查图片中是否包含了人脸)

import cv2
import dlibpicture = '/home/sunshine/faces/harden1.jpg'
detector = dlib.get_frontal_face_detector()def add_face_from_image(image):imdata = cv2.imread(image)rgb_image = cv2.cvtColor(imdata, cv2.COLOR_BGR2RGB)faces = detector(rgb_image, 1)if len(faces) == 0:print("没有检测到人脸")else:# 到此就获取到了人脸数据pass

视频方式

通过视频方式获取人脸demo 这种方式需要把视频的图片截取下来保存到指定的路径
import cv2
import dlib
from pathlib import Path
video = cv2.VideoCapture(0)
save_path = '/home/fantasy/faces'def read_camera0():"""读取摄像头"""while 1:ok, frame = video.read()if not ok:print("读取摄像头#0失败")returnelse:yield framevideo.release()def putText(image, text, location=(100, 150), font=cv2.FONT_HERSHEY_COMPLEX, size=1.1, color=(0, 255, 255), font_weight=2):"""往视频上加文字param: image 视频/图片param: text  文字内容param: location 文字的位置param: font 字体param: size:  字体大小param: color: 字体颜色param: font_weight 字体粗细"""cv2.putText(image, text, location, font, size, color, font_weight, lineType=cv2.LINE_AA)def add_face_from_camera():frames = cv_tools.read_camera0()count = 0for frame in frames:image_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)title = 'Register'press = cv2.waitKey(2)data = detector(image_rgb)if len(data) == 0:putText(frame, "No face was detected!", color=(0, 0, 255))if press == ord('q'):breakif press == ord('a'):if len(data) == 0:putText(frame, "No face was detected!", color=(0, 0, 255))else:count += 1impath = Path(save_path).joinpath('%s.jpg' % count)print("保存照片 %s" % impath)cv2.imwrite(str(impath), frame)cv_tools.putText(frame, 'a:Add', location=(40, 300))cv_tools.putText(frame, 'q:Quit', location=(40, 350))cv_tools.putText(frame, 'save count:%s' % count, location=(40, 400), size=1.0)cv2.imshow(title, frame)cv2.destroyAllWindows()

视频的方式需要注意几点
1 我使用的是笔记本电脑因此 通过 cv2.VideoCapture(0) 方法默认就是获取到笔记本默认的摄像头,如果你的台式机没有摄像头或者是外接摄像头可能就无法获取
2 视频的方式保存图片 需要将光标点击到视频,然后按 a 键, 退出就按 q 键
3 视频中如果没有检查到人脸就会出现提示 No face was detected! 此时是没法保存图片的

视频方式截图

在这里插入图片描述

到这一步就完成了 获取人脸照片,保存到指定的路径了

2-3 将获取到的人脸数据转为128D 数据,并保存到文件

这一步我们要做的就是,将我们上一步保存的人脸数据,通过使用dlib 提取人脸特征然后保存到文件里面
这样我们就拥有了 某张脸的数据了, 下次直接使用这个数据和新的数据比对就可以确定是否是同一个人

人脸转为128D特征数据demo

在这里插入图片描述

通过上面的步骤我们把之前通过图片或者视频方式获取到的人脸提取到了特征 保存在文件里面了

4 人脸对比

通过前面的方式我们已经拥有了一个可以识别某张脸的数据,现在就需要采集到其他的人脸图片转为128D再和我们保存的数据,使用欧式距离方式进行对比

人脸对比的demo 从摄像头或者图片从获取人脸对比已有的数据

以下是我从图片中输入了一张人脸,并将这张人脸特征保存到1.csv

然后再分别给一张是同一个人,不同人的脸的输出结果

在这里插入图片描述
在这里插入图片描述
资源下载地址:https://download.csdn.net/download/sheziqiong/85738944
资源下载地址:https://download.csdn.net/download/sheziqiong/85738944


http://chatgpt.dhexx.cn/article/Kl3EV0Qy.shtml

相关文章

计算欧式距离和余弦相似度

本文介绍Python计算欧式距离和余弦相似度。为了余弦相似度需要使用欧式距离,我们首先介绍欧式距离。 欧式距离 欧式距离标识两个向量之间的距离,计算公式如下: 欧式距离 Σ ( A i − B i ) 2 \sqrt{Σ(A_i-B_i)^2} Σ(Ai​−Bi​)2 ​ …

欧式距离和马式距离的区别

前言 为什么要讨论这两个距离之间的区别? 因为,距离函数的选择对数据挖掘算法的效果具有很大的影响,使用错误的距离函数对挖掘过程非常有害。有时候,语义非常相似的对象被认为不相似,而语义不相似的对象却被认为是相…

马氏距离(Mahalanobis Distance)与欧式距离

马氏距离(Mahalanobis Distance)是度量学习中一种常用的距离指标,同欧氏距离、曼哈顿距离、汉明距离等一样被用作评定数据之间的相似度指标。但却可以应对高维线性分布的数据中各维度间非独立同分布的问题。 什么是马氏距离 马氏距离(Mahalanobis Distance)是一种距…

欧式距离分割

主要函数: [labels, numClusters] pcsegdist(ptCloud, minDistance) 欧式聚类是一种基于欧式距离的聚类算法 ptCloud pcread(maize.pcd);%两个不同簇之间最小距离 minDistance 0.06%执行欧式距离分割 [labels, numClusters] pcsegdist(ptCloud, minDistance)…

欧式距离转为百分比

1. 说明 项目中生成了每个数据的2048维的向量,计算出不同数据之间的欧式距离值。把这些欧式距离转化为百分比,利于查看。 2. 欧式距离值 0.19806965771678278 0062_04 0.34178271687627493 0062_00 0.35060763229637537 0062_03 0.4269194352275009 00…

马氏距离和欧式距离详解

一般在机器学习模型中会涉及到衡量两个样本间的距离,如聚类、KNN,K-means等,使用的距离为欧式距离。其实,除了欧氏距离之外,还有很多的距离计算标准,本文主要介绍欧氏距离和马氏距离。 欧氏距离 最常见的两…

PCL 的欧式距离聚类

PCL 的欧式距离聚类 (感谢前辈) 转自:https://zhuanlan.zhihu.com/p/75117664 聚类代码如下: from paper_1_v0.my_ransac import my_ransac_v5 import numpy as npimg_id 1 # 这里读入你的kitti 雷达数据即可 path rD:\KITT…

相似度计算(3)——欧式距离和闵克夫斯基距离

欧式距离和闵克夫斯基距离 一、欧式距离 1、定义 欧式距离(欧几里得距离,欧几里得度量),是一个通常采用的距离定义,指在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离…

机器学习:欧氏距离(Euclidean Distance)

相关文章链接:算法文章汇总 欧式距离也称欧几里得距离,是最常见的距离度量,衡量的是多维空间中两个点之间的 绝对距离 。 以古希腊数学家欧几里得命名的距离,也就是我们直观的两点之间直线最短的直线距离。 欧氏距离定义&#…

距离度量 —— 欧式距离(Euclidean Distance)

Python学习系列文章:👉 目录 👈 文章目录 一、概述二、计算公式① 二维平面上的欧式距离② 三维空间上的欧式距离③ n维空间上的欧式距离 一、概述 欧式距离,也称为 欧几里得距离,是我们从小学、初中、高中等等乃至现…

[机器学习-概念] 什么是欧式距离、标准化欧式距离、马氏距离、余弦距离

1.欧式距离(Euclidean Distance) 欧式距离源自N维欧氏空间中两点 x 1 , x 2 x_1,x_2 x1​,x2​间的距离公式: 2.标准化欧式距离(Standardized Euclidean distance) 引入标准化欧式距离的原因是一个数据 x i x_i xi​ 的各个维度之间的尺…

PHPStorm使用PHP7新特性出现红色波浪错误

今天在项目中使用PHP7新特性时PHPStorm出现了如下红色错误,看着让人很不舒服,明明没有错 本地配置LNMP的PHP版本是7.2所以不是安装的PHP版本过低的问题,而是PHPStorm默认支持的PHP版本语法问题,通过在偏好设置中查看发现默认是PHP…

PHP8.X的新特性

PHP8.X的新特性 随着2020年的PHP开发者峰会结束,8.X将在11月26发布 一、JIT JIT的新特性,则是将PHP代码转化为传统的机器码,而并非通过zend虚拟机来运行,这大大增加了运行速度。但是缺点是向下不兼容。 # JIT 可以通过php.ini中…

PHP 7.4 新特性

PHP 7.4 计划在2019年11月21日发布,它主要新增了以下几个特性: 短闭包函数 短闭包函数可以减少冗余代码: array_map(function (User $user) { return $user->id; }, $users) array_map(fn(User $user) > $user->id, $users) 需要…

PHP7.0至PHP8部分特性总结

PHP7.0特性 2015年6月11日,PHP开发团队宣布将立即提供PHP 7.0.0 Alpha1。此版本标志着PHP 7主要系列的开始。我们有许多原因,应该对PHP7.0感到兴奋,接下来让我们来看一下它全新的语言特性! 性能: PHP7.0采用下一代由PHP核心团队开…

php8新特性全览【超详细】

题外话: PHP 8.0 是 PHP 语言的重大更新。 它包含许多新功能和优化,包括命名参数、联合类型、属性、构造函数属性提升、匹配表达式、空安全运算符、JIT,以及类型系统、错误处理和一致性方面的改进。 废话不多说,开车 1.便利的命名…

php 7新特性(一):类型的限定

1、标量类型声明: a.默认:以前的弱类型 b.严格:declare(strict_types1) //strict_types的值(1或者0),1表示严格类型, 0表示弱类型 可以使用的类型参数有:int float bool string inte…

PHP8所有新特性

PHP 8 正式版即将发布,是时候来看看 PHP 8 即将推出的新特性了 首先来安装PHP8 下载地址 https://www.php.net/downloads 本地编译安装 PHP 8 RC2 版本(MAC操作系统) # 0、下载解压源码 wget https://downloads.php.net/~pollita/php-8.0.0RC2.tar.gz tar zxvf p…

PHP8新特性解读

本文主要内容为解读PHP8.0的主要新特性 解读PHP8特性 前言一、给小皮面板下载PHP8二、部分下载PHP8会出现502解决方案三、介绍特性1. 联合类型2. 匹配表达式3. null安全运算符4. 构造函数属性提升5. 注解6. 命名参数 四、总结 前言 PHP8在2020年11月26日正式发布,又…

PHP 7 新特性

转载自: https://zhuanlan.zhihu.com/p/27694633 https://zhuanlan.zhihu.com/p/27847880 https://zhuanlan.zhihu.com/p/29478077 https://goghcrow.gitbooks.io/php7/content/xin-te-xing.html PHP 7 之前的类型提示 PHP 5.0 首次提出函数参数&#xff08…