这篇博客将介绍一个新的dlib面部标志检测器——5点人脸标志模型,它比原始版本更快(提高了8-10%),效率更高,模型更小(降低了10倍)。

该5点面部标志检测器被认为是最初随dlib库一起分发的68点标志检测器的直接替代品。

5点面部标志检测器

  • 1. 5点与68点面部标志检测器效果对比
  • 2. 各种人脸检测器算法的优劣对比
  • 3. 如何在自己的脚本中实现五点面部标志检测器
  • 4. 5点面部标志检测器的局限性
  • 5. 源码
  • 6. 参考

1. 5点与68点面部标志检测器效果对比

68点面部标志检测器把面部分为眉毛、眼睛、鼻子、嘴巴、下颌五部分;
5点面部标志检测器将面部分为5个点,左眼2点、右眼2点、鼻子1点;

68点面部标志检测器(模型【99.7M】)
5点面部标志检测器(
相比68点,速度快10%、效率更高、模型小10倍【9.2M】),小十倍的模型!对于移动应用程序用户的下载时间/资源上一个极大的进步;

68点面部标志检测器效果图:

5点面部标志检测效果图:

2. 各种人脸检测器算法的优劣对比

  • Haar级联:快速,但准确性较低。调整参数可能会很麻烦;
  • HOG +线性SVM:通常(显著)比Haar级联更准确,假阳性更少。在测试时需要调整的参数较少。与Haar级联相比,速度可能较慢。
  • 基于深度学习的检测器:经过正确培训,其比Haar级联和HOG +线性SVM显着更准确,更耐用。根据模型的深度和复杂性,它可能非常慢。可以通过在GPU上执行检测来加快速度;

对于不同的平台,实现不同的功能,在选择那种人脸检测器需要考虑这些准则;

3. 如何在自己的脚本中实现五点面部标志检测器

1) 加载模型,加载图片
2) 面部检测,面部标志检测
3) 绘制每个点在图像上

4. 5点面部标志检测器的局限性

5点面部标志检测器(左眼2点、右眼2点、鼻子1点)的一个良好应用是面部对齐,比68点更高效;

但在眨眼检测,疲劳驾驶检测(核心:计算眼睛的EAR(眼睛的纵横比),在某个瞬间达到0)时,则必须需要使用68点面部标志检测器,以及任何其他需要了解更多面部细节(如鼻子、嘴巴、眉毛、下颌)的应用程序也需要使用68点面部标志检测器。

5. 源码

# python faster_facial_landmarks.py --shape-predictor shape_predictor_5_face_landmarks.dat --image images/03.jpg
# python faster_facial_landmarks.py --shape-predictor shape_predictor_68_face_landmarks.dat --image images/03.jpg# 导入必要的包
from imutils import face_utils
import argparse
import imutils
import dlib
import cv2# 构建命令行参数,解析参数
# --shape-predictor 面部标志检测器模型路径
# --image 图像路径
ap = argparse.ArgumentParser()
ap.add_argument("-p", "--shape-predictor", required=True,help="path to facial landmark predictor")
ap.add_argument("-i", "--image", required=True,help="path to input image")
args = vars(ap.parse_args())# 初始化dlib基于 HOG的面部检测器
# 初始化面部标志检测器
print("[INFO] loading facial landmark predictor...")
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(args["shape_predictor"])# 加载图像,保持宽高比的缩放到宽度为500像素,转换为灰度图
image = cv2.imread(args["image"])
image = imutils.resize(image, width=800)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 使用HOG+线性SVM检测器 从灰度图帧中检测面部
rects = detector(gray, 0)# 判断是否检测到了面部,并打印检测到的人脸数目在屏幕上
if len(rects) > 0:text = "{} face(s) found".format(len(rects))
cv2.putText(image, text, (10, 20), cv2.FONT_HERSHEY_SIMPLEX,0.5, (0, 0, 255), 2)# 遍历每一个人脸
for rect in rects:# 计算人脸的边界框,并打印在评不上(bX, bY, bW, bH) = face_utils.rect_to_bb(rect)cv2.rectangle(image, (bX, bY), (bX + bW, bY + bH),(0, 255, 0), 1)# 从面部区域中检测面部标志# 转换检测到的面部标志坐标为Numpy数组shape = predictor(gray, rect)shape = face_utils.shape_to_np(shape)# 遍历每一个面部标志结果的(x, y)像素,并绘制小圆圈在屏幕上for (i, (x, y)) in enumerate(shape):cv2.circle(image, (x, y), 1, (0, 0, 255), -1)cv2.putText(image, str(i + 1), (x - 10, y - 10),cv2.FONT_HERSHEY_SIMPLEX, 0.35, (0, 0, 255), 1)# 展示图片
cv2.imshow("image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

6. 参考

  • https://www.pyimagesearch.com/2018/04/02/faster-facial-landmark-detector-with-dlib/#download-the-code

使用Python,dlib中新型、更快、更小的5点面部标志检测器检测人脸、眼睛、鼻子相关推荐

  1. 【Python并行计算】- Dask 让你的python更快更强

    [Python并行计算]- Dask 让你的python更快更强 Dask(https://docs.dask.org/en/latest/) 是一个灵活的python并行/分布式计算的框架. 类似的 ...

  2. python实践意义_在Python学习中过程比结果更有意义

    原标题:在Python学习中过程比结果更有意义 如果人生是一趟旅行,那我们最应该关注的是沿途的风景而不是最终的目的地.对于学习Python而言,提升自身能力.提高处理问题的速度.培养自己勤思考.善于思 ...

  3. 使用现场总线更快更远

    使用现场总线更快更远 Going faster and further with Fieldbus PROCENTEC等行业专家表示,基于RS-485的现场总线技术(PROFIBUS®)和工业以太网( ...

  4. 实用的it知识学习_怎样能更快更好的学习好书法?分享一些比较实用的理论知识...

    如何能更快更高效的学习书法?首先了解一些书法理论知识是很有必要的!它能让你在学习书法的过程中不至于迷茫 !能助你更快学好书法! 一.书论在实践中产生 我们大部分人都觉得学习书法可以没有理论,但不可无技 ...

  5. IEEE ICIP 2019 | 更快更好的联邦学习:一种特征融合方法

    目录 前言 Abstract 1.Introduction 2.Related Work 3.Methods 3.1 Feature Fusion Modules 3.1.1 Conv operato ...

  6. YOLOv5全面解析教程③:更快更好的边界框回归损失

    作者|Fengwen.BBuf 边界框回归是目标检测的关键步骤,在现有方法中,虽然被广泛用于边界框回归,但它不是针对评估指标量身定制的,即 Intersection over Union (IoU). ...

  7. 更快更安全,HTTPS 优化总结

    在网站升级到 HTTPS 之后,我们还可以有很多玩意可以折腾,优化 HTTPS,让它更快更安全.这里是一篇 HTTPS 优化的总结,也包含问题的解决方法,不过不仅仅包括 HTTPS 的优化,也包含 H ...

  8. 极智Paper | YOLOv7 更高 更快 更强

      欢迎关注我的公众号 [极智视界],获取我的更多笔记分享   大家好,我是极智视界,本文解读一下 更高.更快.更强的 YOLOv7:Trainable bag-of-freebies sets ne ...

  9. 与阿里云整个生态体系共同成长,更快更好的为房地产行业客户提供高价值的服务。...

    免费开通大数据服务:https://www.aliyun.com/product/odps "最早是新业务要做,但是买服务器来不及,管理员没到位,而且新业务的成本很高,是否能成功也是未知,因 ...

最新文章

  1. tableView 删除一行后下一行点击事件被忽略
  2. 经典C语言程序100例之三
  3. Any problem in computer science can be solved with another layer of indirection
  4. 太畅销了!AirTag送货时间延长至4-5周
  5. 基于C#的MongoDB数据库开发应用(4)--Redis的安装及使用
  6. VS启动多个实例调试
  7. Skype协议分析[0]_安装Skype
  8. input隐藏域传值
  9. m180n 如何设置网络打印_「hp彩色打印机」惠普m180n打印机怎么设置彩色打印? - seo实验室...
  10. PCB设计时应该考虑的几个问题
  11. 微信小程序设置文字样式white-space失效
  12. springMvc视图解析器作用
  13. uniapp 侧边选项卡(左右滚动)
  14. 60个英文阅读网站推荐
  15. 匹兹堡大学申请条件计算机科学,匹兹堡大学计算机科学理学硕士研究生申请要求及申请材料要求清单...
  16. SQL 触发器的作用,好处和坏处
  17. Kafka连接器深度解读之JDBC源连接器
  18. unity文字逐个出现实现文字打印机效果-Text
  19. 天空之门手游怎么用电脑玩 天空之门手游模拟器教程
  20. FlexibleButton驱动移植

热门文章

  1. 2021年大数据常用语言Scala(十二):基础语法学习 方法调用方式
  2. 手抖把Python2.7卸载了,导致了自己的yum不可用
  3. HarmonyOS ToastDialog 的使用
  4. android studio 图片的命名规则
  5. RelativeLayout(相对布局)的分析
  6. 剑指offer-丑数
  7. 2018年爱奇艺校招笔试
  8. 智能开发框架 JEECG 作者张代浩专访
  9. unity3d-----Collider 组件参考
  10. python 错误之SyntaxError: Missing parentheses in call to 'print'