专业汉语词典知识平台,分享汉字词语知识、历史文学知识解答!

励北网
励北网

人脸识别算法有哪些,Python人脸识别算法介绍

来源:小易整编  作者:小易  发布时间:2023-03-24 02:21
摘要:人脸识别算法有哪些,Python人脸识别算法介绍今天给大家总结几个简单、好用的人脸识别算法。人脸识别是计算机视觉中比较常见的技术。人脸识别的算法最核心的工作是从一张图片中识别出人脸的位置。识别的算法可以说是多种多样,下面我就来为大家一一介绍...

人脸识别算法有哪些,Python人脸识别算法介绍

人脸识别算法有哪些,Python人脸识别算法介绍

今天给大家总结几个简单、好用的人脸识别算法。人脸识别是计算机视觉中比较常见的技术。

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

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 处理

pprocessed_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(pprocessed_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库提供了该算法的实现,核心代码如下:

import mediapipe as mp

# 画图工具

mp_drawing = mp.solutions.drawing_utils

# 初始化人脸检测模型

mp_face_detection = mp.solutions.face_detection

mp_face_detector = mp_face_detection.FaceDetection(min_detection_confidence=0.4)

results = mp_face_detector.process(imgRGB)

if results.detections:

  # 变脸检测出的人脸

  for face_no, face in enumerate(results.detections):

      # 画人脸关键点

      mp_drawing.draw_detection(image=output_image, detection=face, keypoint_drawing_spec=mp_drawing.DrawingSpec(color=(0,255,0),thickness=-1, circle_radius=image_width//115), bbox_drawing_spec=mp_drawing.DrawingSpec(color=(0,255,0),thickness=image_width//180))

      # 画人脸框

      face_bbox = face.location_data.relative_bounding_box

      x1 = int(face_bbox.xmin*image_width)

      y1 = int(face_bbox.ymin*image_height)

      cv2.rectangle(output_image, pt1=(x1, y1-image_width//20), pt2=(x1+image_width//16, y1), color=(0, 255, 0), thickness=-1)

效果如下:

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

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

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

如果大家觉得本文对你有用就点个 在看 鼓励一下吧,后续我会持续分享优秀的 Python+AI 项目。


本文地址:百科问答频道 https://www.neebe.cn/wenda/938680.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


百科问答
小编:小易整编
相关文章相关阅读
  • 线性搜索算法是什么意思?

    线性搜索算法是什么意思?

    线性搜索算法是一种常见的搜索算法,也叫线性搜索或顺序搜索,它的基本思想是从序列的头(或尾)端开始,一次沿着序列的方向进行搜索,直到搜索到被搜索元素为止。线性搜索算法可以用来在一组元素中搜索某个特定的元素,它是一种最简单且最常用的搜索算法。...

  • Python前端是什么意思?

    Python前端是什么意思?

    Python前端是指利用Python进行网页开发的过程,是采用Python语言构建网页的技术。Python具有优秀的数据分析和可视化性能,具有更多分析和可视化专业应用,因此它也被开发者们当作WEB开发领域的第一选择语言来使用。Python...

  • 智能优化算法是什么意思?

    智能优化算法是什么意思?

    智能优化算法是一种利用复杂搜索和优化算法,从复杂环境中求解优化问题的一种计算方法。它能够有效地解决问题,其本质就是通过改进最优化问题的目标函数来改善求解的问题。智能优化是基于数学和统计的概念,它同时考虑到了复杂场景下函数的优化,以提高问题...

  • 人脸识别可以用照片吗

    人脸识别可以用照片吗

    人脸识别不可以用照片。人脸识别的重点在于生命特征识别,图片没有生物特征,自然就不可以用图片来进行人脸识别,也就是说图片冒充不了活人。为确保数据的准确性,手机上的认证软件基本都会要求用户在识别过程中进行指定的动作操作,比如眨眼,摇头,点头等动...

  • 什么是人脸识别门禁

    什么是人脸识别门禁

    人脸识别门禁系统是在人脸识别技术的基础上,主要通过摄像头采集人脸信息,并与数据库的巨大人脸模板进行比较,将其与门禁系统相结合,对人员的面部信息进行分析,通过繁杂的数学方式计算人脸相似度,毫秒间与人脸模板比对,匹配成功后自动开启的门禁系统。人...

  • MicroPython是什么

    MicroPython是什么

    MicroPython是Python3编程语言的一个完整软件实现,用C语言编写,被优化于运行在微控制器之上。运行在微控制器硬件之上的完全的Python编译器和运行时系统。提供给用户一个交互式提示符来立即执行所支持的命令。Mi...

  • Python语言有哪些特点

    Python语言有哪些特点

    简单易学、面向对象、可移植性、解释性、高级语言、可扩展性、丰富的库、规范的代码、开放源码软件。Python是一种面向对象的、解释型的、通用的、开源的脚本编程语言,它之所以非常流行为主要有三点原因:Python简单易用,学习成本低,看起来...

  • Python是什么意思

    Python是什么意思

    Python是计算机程序设计语言,应用于Web和Internet开发、人工智能、教育、软件开发等领域。Python的设计风格简单明确、清晰优雅,采用的都是最成熟的优化技术,非常受用户欢迎。Python是计算机程序设计语言,应用...

  • 周排行
  • 月排行
  • 年排行

精彩推荐