总结几个简单好用的Python人脸识别算法

article/2025/10/4 18:36:00

今天给大家总结几个简单、好用的人脸识别算法。人脸识别是计算机视觉中比较常见的技术,生活中,我们接触最多的人脸识别场景是人脸考勤.

人脸识别的算法最核心的工作是从一张图片中识别出人脸的位置。识别的算法可以说是多种多样, 下面我就来为大家一一介绍下。

1. HoG人脸检测

该算法采用传统的机器学习算法来识别人脸。传统机器学习算法的特点是人工构造特征,然后将构造好的特征送入模型训练。

该算法用HoG提取图片中人脸特征,用SVM算法进行分类。

HoG(Histogram of Oriented Gradient, 方向梯度直方图)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子,通过计算和统计图像局部区域的梯度方向直方图来构成特征。

dlib库中有该算法的实现,下面我们看看核心代码

import dlib
# 加载预训练的 HoG 人脸检测器
hog_face_detector = dlib.get_frontal_face_detector()# 对图片进行人脸检测
results = hog_face_detector(imgRGB, 0)for bbox in results:x1 = bbox.left()  # 人脸左上角x坐标y1 = bbox.top()  # 人脸左上角y坐标x2 = bbox.right()  # 人脸右下角x坐标y2 = bbox.bottom()  # 人脸右下角y坐标

results 存放一张图中检测出来的多个人脸, 遍历results可以得到每张人脸的矩形框。

检测示例如下:

绿框框出来的就是算法检测出来的人脸。

HoG 人脸检测由于采用传统机器学习算法,所以性能比较高,在CPU上运行也可以比较快。但它无法检测小于 80*80 的人脸,对旋转人脸、非正面人脸,识别效果也不太好。

2. 深度学习人脸检测

虽然传统机器学习算法检测更快,但准确度却有待提升。基于深度学习的人脸检测算法往往会更加准确。

这里介绍的是使用残差网络ResNet-10通过网络(模型)在图像的单通道( Single Shot Detector,SSD)中检测多个人脸。简称SSD算法。

首先,需要将原始图片进行blob预处理,然后直接送入模型,进行检测

cv2库提供了该算法的实现,核心代码如下:

import cv2# 加载预训练的 SSD 模型
opencv_dnn_model = cv2.dnn.readNetFromCaffe(prototxt="models/deploy.prototxt", caffeModel="models/res10_300x300_ssd_iter_140000_fp16.caffemodel")# 原始图片 blob 处理
preprocessed_image = cv2.dnn.blobFromImage(image, scalefactor=1.0, size=(300, 300), mean=(104.0, 117.0, 123.0), swapRB=False, crop=False)# blob 图片送入模型
opencv_dnn_model.setInput(preprocessed_image)# 模型推理,进行人脸检测
results = opencv_dnn_model.forward()  # 遍历人脸
for face in results[0][0]:# 置信度face_confidence = face[2]# 人脸边框的左上角和右下角坐标点x1 = int(bbox[0] * image_width)y1 = int(bbox[1] * image_height)x2 = int(bbox[2] * image_width)y2 = int(bbox[3] * image_height)

results[0][0]存放了检测出来的多张人脸,每张人脸用数组表达,数组的第3位存放置信度,可以通过阈值过滤不置信的人脸。数组的第4~7位存放检测出来的人脸矩形框左上角和右下角的坐标。

相比于 HoG 人脸检测,SSD 算法对遮挡、非正面人脸也能检测出来。

3. 卷积神经网络人脸检测

卷积就不多说了,了解计算机视觉的都知道。

dlib库提供了卷积神经网络人脸检测算法的实现,用法跟之前类似

import dlib# 记载预训练模型
cnn_face_detector = dlib.cnn_face_detection_model_v1("models/mmod_human_face_detector.dat")# 人脸检测
results = cnn_face_detector(imgRGB, 0)# 遍历每张人脸
for face in results:# 人脸边框      bbox = face.rect# 人脸边框的左上角和右下角坐标点x1 = int(bbox.left() * (width/new_width))y1 = int(bbox.top() * (height/new_height))x2 = int(bbox.right() * (width/new_width))y2 = int(bbox.bottom() * (height/new_height))

results的解析跟上面类似,这里就不在赘述了。

采用卷积神经网络的人脸检测算法优势很明显,比前两个更准确和健壮,并且还能够检测遮挡下的人脸。

即便非正面、且光线暗的图片,也能很好检测出来

但该算法相应的缺点也很明显,检测过程所花费的时间非常长,无法在 CPU 上实时运行。

4. BlazeFace

上面的算法要么精度高、速度慢,要么速度快,精度低。那有没有一种检测算法,既有高准确率,又有高性能呢?

答案是肯定的,BlazeFace是一种非常轻量级且高度准确的人脸检测器,号称亚毫秒级的人脸检测器。其灵感来自 Single Shot MultiBox Detector (SSD) 和 MobileNetv2

Mediapipe库提供了该算法的实现,核心代码如下:

效果如下:

可以看到,BlazeFace算法不光能检测人脸,还能识别出人脸6个关键点(眼睛、鼻子、耳朵、嘴)。

上面就是今天分享的4个人脸识别的算法。

识别出人脸,我们再做人脸考勤就非常简单了,把人脸Embedding成向量,计算向量的之间的距离即可。

【python学习】
学Python的伙伴,欢迎加入新的交流【君羊】:1020465983
一起探讨编程知识,成为大神,群里还有软件安装包,实战案例、学习资料 


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

相关文章

追踪AR圣诞老人,免费领200份圣诞礼物

元宇宙 绿心公园 圣诞节 元宇宙(Metaverse),是指 利用科技手段进行链接与创造的, 与现实世界映射与交互的虚拟世界, 具备新型社会体系的数字生活空间。 这一概念在2021年走入了大众视野 勾出了人们对“平行宇宙…

圣诞的礼物

呵呵 ,与你一起分享哦。。。。。。

圣诞来了,学编程的小伙伴有收到圣诞老人的礼物?

圣诞来了,学编程的小伙伴有收到圣诞老人的礼物?——编程学习笔记满满的惊喜。 编程是编定程序的中文简称,就是让计算机代为解决某个问题,对某个计算体系规定一定的运算方式,使计算体系按照该计算方式运行,…

圣诞老人的礼物_圣诞节设计资源:圣诞老人

圣诞节对人们而言可能意味着很多事情,但是对于设计师而言,这可能是一个不同的议程。 设计师通常会挤满最后一刻的设计临时通知,以赶在圣诞节贺卡,电子贺卡设计,新闻通讯或其他类型的广告活动的截止日期之前。 因此&am…

微信小程序|飞翔的圣诞老人

一、前言 2022年圣诞节即将到来啦,很高兴这次我们又能一起度过~ 此篇文章主要使用小程序实现飞翔的圣诞老人,跟随文章步骤带着圣诞老人翻越障碍一起去送礼物吧。 二、实现步骤 2.1、创建小程序 访问微信公众平台,点击账号注册。选择小程序,并在表单填写所需的各项信息进行…

圣诞节礼物

对于python小白的你,学了python没多久是不是就有了想自己动手做一个小程序的冲动呢?在这里我给大家分享一个我以前做的小程序——“圣诞节礼物”——希望能给大家带来灵感和帮助。 话不多说,先看一下截图: 这是一个小动画&#xf…

2022圣诞代码合集(圣诞树+圣诞老人)

文章目录 前言使用方法圣诞树圣诞老人 前言 圣诞节里的喜悦,飘扬万里;圣诞树上的星星,璀璨耀眼;圣诞星空绽放的烟花,迎来吉祥;圣诞钟声奏响的旋律,传递欢乐;圣诞老人送给你的礼物&a…

圣诞老人来了嘛

Jingle bells jingle bells jingle all the way... 随着歌声的临近,一年一度的圣诞节也如期而至的到来了 传说啊,圣诞老人为奥丁神后裔。也传说称圣诞老人由尼古拉而来,所以圣诞老人也称St.Nicholas。据说他原是小亚细亚每拉城的主教&#xf…

算法基础部分6-贪心算法

算法部分 基础6 一、贪心算法简述 贪心算法的每一步行动总是按照某种指标选取最优的操作来进行该指标,只看眼前并不考虑以后可能造成的影响。证明方法通过替换法和数学归纳法实现。 二、贪心算法例子 1. 圣诞老人的礼物 问题描述:圣诞节来临了&#x…

python外包_python怎么找外包

很多程序员兄弟们工资不高,但时间还是比较充足的,剩下的时间想多搞点外快,毕竟要养家糊口。我来讲讲怎么做可以一个月轻松多赚1万多元的外快。 一、接项目 是程序员都想过接私活,但真正去做了的寥寥无几。可能的原因:…

国外最流行的几个外包接活网站 简要介绍

国外主要外包接活站点: No.1 Freelancer.com (旧称GAF – GetAFreelancer): 国外访问人数最多,更新速度最快的外包平台。详细介绍 No.2 Elance : 国外比较成熟的三大业务外包平台之一,外包项目类型以软件和网站为主。当…

PHP学习笔记

学习笔记 PHP学习笔记部署遇到的问题一二 php在win10 64位下执行curl_init()方法报错的bugthinkphp登陆失效的问题不同的win系统上无法使用curl的问题thinkphp下调用python脚本先要有反应提示python不是内部命令以上处理后还提示no file /directory 关于json里为数组时出现的问…

PHP实现支付宝支付

支付宝付款,开发上比起微信支付要简单很多,今天就以支付宝手机网站支付为例,简单讲一下实现方法: 前期准备,当然就不多说了,当你想开发使用支付宝支付,必然需要在支付宝开放品台注册认证并且创建好应用并且具备手机网站支付功能!不明白可以查看支付宝官方文档(https://docs.op…

外包网站建设需要注意什么

外包网站建设需要注意什么 对于如今许多的公司来说,拥有一个属于公司的网站是非常必要的。但是并不是所有的公司都会拥有专业的人员来进行网站的建设,所以网站建设外包则成为了诸多公司的首选。但是外包网站建设都需要哪些问题呢? 外包网站…

苏州外包php,【苏州IT外包经验】Ubuntu 17.10系统下配置PHP+Apache+Mysql

发布于 2017年11月16日 星期四 01:15 点击数:20883 本文为Ubuntu 17.10系统下配置PHP7.1Apache2.4Mysql5.7 一、Apache2 安装apache sudo apt-get apache2 编辑apache主配置文件/etc/apache2/apache2.conf,修改KeepAlive设置 KeepAlive Off Apache默认的…

Linux任务之自动发邮件

Linux任务之自动发邮件 文章目录 Linux任务之自动发邮件1、虚拟机Centos7环境(1)先设置自己的邮箱,我这用qq邮箱:(2)获取到密码后,我们要在Linux上配置邮件文件:(3&#…

Mac 定时自动发送邮件

文章目录 WhyHow1. 在automator中创建application2. 创建calender 自动定时发送email3. 自行测试 Refer Why 工作中,有时需要发送固定格式的email,每次人工做,比较繁琐,本篇博客描述了一种可以自动定时发送email的方式。 下面例…

如何利用 Python 自动发邮件,打工人福音

在工作中,每天或者每周结束的时候我们都会发送相应的日报或者周报给上级领导,来汇报你做了那些工作,可是汇报工作内容的时候我们始终都是打开邮箱、写入内容,发送和抄送给固定的人,那么这么繁琐并且重复的一件事&#…

用Excel和OutLook实现自动批量发邮件

转自:https://zhuanlan.zhihu.com/p/25283201 作者:闲者秋山 闲者秋山 闲者秋山 相信不少人的工作中都有这样的情况,需要群发通知邮件的情况。 (比如财务付完款,要通知供应商,房东之类的) 但如…

JAVA实现自动发送邮件

JAVA实现发送邮件 做项目时用到的小工具 做个备份&#xff08; tips: 需要导入javax.mail 我使用了maven导入X <!-- JavaMail相关依赖 --><dependency><groupId>javax.mail</groupId><artifactId>javax.mail-api</artifactId><ver…