提交面试材料,人脸检测进阶:使用 dlib,写给Python开发的小程序布局指南

值得注意的是,还有其他风格的面部标记检测器,包括可以在HELEN数据集上训练的194点模型。

无论使用哪一个数据集,都可以利用相同的dlib框架在输入训练数据上训练形状预测器-如果您想训练面部标记检测器或自定义形状预测器,这非常有用。

在这篇博文的剩余部分,我将演示如何在图像中检测这些面部标记。

使用dlib、OpenCV和Python检测面部标记

=====================================================================================

这篇博文使用到了imutils库face_utils.py中的两个函数。

第一个实用函数是rect_to_bb,是“矩形到边框”的缩写:

def rect_to_bb(rect):

#获取dlib预测的边界并将其转换

#按照我们通常使用的格式(x,y,w,h)

#使用OpenCV

x = rect.left()

y = rect.top()

w = rect.right() - x

h = rect.bottom() - y

返回一个元组 (x, y, w, h)

return (x, y, w, h)

此函数接受一个参数rect,该参数假定为dlib检测器(即面部检测器)生成的边框矩形。

rect对象包括检测的(x,y)-坐标。

然而,在OpenCV中,我们通常认为边界框是“(x,y,width,height)”,因此为了方便起见,rect_to_bb函数将这个rect对象转换为4元组坐标。

第二,shape_to_np函数:

def shape_to_np(shape, dtype=“int”):

#初始化(x,y)-坐标列表

coords = np.zeros((68, 2), dtype=dtype)

#在68个面部标记上循环并转换它们

#到(x,y)-坐标的2元组

for i in range(0, 68):

coords[i] = (shape.part(i).x, shape.part(i).y)

#返回(x,y)坐标的列表

return coords

dlib面部标记检测器将返回一个包含面部标记区域68(x,y)坐标的形状对象。

使用shape_to_np函数,我们可以将这个对象转换成一个NumPy数组。

有了这两个辅助函数,我们现在就可以检测图像中的面部标记了。

图像


打开一个新文件,将其命名为facial_landmarks.py,然后插入以下代码:

import the necessary packages

from imutils import face_utils

import numpy as np

import argparse

import imutils

import dlib

import cv2

#构造参数解析器并解析参数

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())

导入所需的Python包。

将使用imutils的face_utils子模块访问上面详述的助手函数。

然后将导入dlib。

解析我们的命令行参数:

–shape-predictor:这是通往dlib预先训练的面部标记检测器的路径。你可以在这里下载检测器模型,也可以使用本文的“下载”部分来获取代码+示例图像+预先训练过的检测器。

–image:我们要检测面部标记的输入图像的路径。

既然我们的导入和命令行参数已经处理完毕,让我们初始化dlib的面部检测器和面部标记预测器:

初始化dlib的人脸检测器(基于HOG)然后创建

面部标记预测器

detector = dlib.get_frontal_face_detector()

predictor = dlib.shape_predictor(args[“shape_predictor”])

初始化dlib的预训练人脸检测器,该检测器基于对用于对象检测的定向梯度标准直方图+线性SVM方法的修改。

然后使用提供的shape_predictor的路径加载面部标记预测器。

但是,在我们能够实际检测面部标记点之前,我们首先需要检测输入图像中的面部:

加载输入图像,调整大小,并将其转换为灰度

image = cv2.imread(args[“image”])

image = imutils.resize(image, width=500)

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

在灰度图像中检测人脸

rects = detector(gray, 1)

通过OpenCV从磁盘加载我们的输入图像,然后通过调整图像大小使其具有500像素的宽度并将其转换为灰度来预处理图像。

处理检测图像中面的边界框。

探测器的第一个参数是我们的灰度图像(尽管这种方法也可以用于彩色图像)。

第二个参数是在应用检测器之前放大图像时要应用的图像金字塔层的数量(这相当于在图像上计算cv2.N次)。

在人脸检测之前提高输入图像分辨率的好处是,它可能允许我们检测图像中的更多人脸-缺点是输入图像越大,检测过程的计算成本就越高。

给定图像中人脸的(x,y)-坐标,我们现在可以对每个人脸区域应用人脸标记检测:

循环面部检测

for (i, rect) in enumerate(rects):

确定面部区域的面部标志,然后

将面部标志 (x, y) 坐标转换为 NumPy数组

shape = predictor(gray, rect)

shape = face_utils.shape_to_np(shape)

将 dlib 的矩形转换为 OpenCV 样式的边界框

[即(x, y, w, h)],然后绘制人脸边界框

(x, y, w, h) = face_utils.rect_to_bb(rect)

cv2.rectangle(image, (x, y), (x + w, y + h), (255, 255, 0), 2)

显示人脸编号

cv2.putText(image, “Face #{}”.format(i + 1), (x - 10, y - 10),

cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 0), 2)

循环面部标志的 (x, y) 坐标

并将它们绘制在图像上

for (x, y) in shape:

cv2.circle(image, (x, y), 1, (0, 255, 0), -1)

显示带有人脸检测 + 人脸标记的输出图像

cv2.imshow(“Output”, image)

cv2.waitKey(0)

循环每个人脸检测。

对于每个人脸检测,给出68(x,y)-坐标,该坐标映射到图像中的特定人脸特征。

然后将dlib形状对象转换为具有形状(68,2)的NumPy数组。

绘制图像上检测到的人脸周围的边界框,绘制人脸的索引。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。

分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。

分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-mIanfLVI-1712541396800)]

  • 24
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值