人脸检测实战终极:使用 OpenCV 和 Python 进行人脸对齐

为了计算旋转矩阵 M ,我们使用 cv2.getRotationMatrix2D 指定 eyeCenter 、角度和比例。这三个值中的每一个都先前已计算过,因此请根据需要返回。

cv2.getRotationMatrix2D 的参数说明如下:

  • eyeCenter :眼睛之间的中点是我们将围绕面部旋转的点。

  • angle:我们将面部旋转到的角度,以确保眼睛位于同一水平线上。

  • scale :我们将放大或缩小图像的百分比,确保图像缩放到所需的大小。

现在必须更新矩阵的平移分量,使人脸在仿射变换后仍然在图像中。

取所需面宽的一半并将值存储为 tX,即 x 方向的平移。

为了计算 tY ,y 方向的平移,将所需的面部高度乘以所需的左眼 y 值,desiredLeftEye[1]。

使用 tX 和 tY ,通过从它们对应的眼睛中点值(第 66 行和第 67 行)中减去每个值来更新矩阵的平移分量。

然后应用仿射变换来对齐人脸:

apply the affine transformation

(w, h) = (self.desiredFaceWidth, self.desiredFaceHeight)

output = cv2.warpAffine(image, M, (w, h),

flags=cv2.INTER_CUBIC)

return the aligned face

return output

为方便起见,将 desiredFaceWidth 和 desiredFaceHeight 分别存储到 w 和 h 中(第 70 行)。

然后调用 cv2.warpAffine 执行最后一步。 此函数调用需要 3 个参数和 1 个可选参数:

  • image : 人脸图像。

  • M :平移、旋转和缩放矩阵。

  • (w, h) :输出面所需的宽度和高度。

  • flags :用于扭曲的插值算法,在本例中为 INTER_CUBIC 。 要了解其他可能的标志和图像转换,请参阅 OpenCV 文档。

最后,对齐的脸面。

对齐人脸

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

开始编写人脸对齐脚本,将其命名为Now let’s put this alignment class to work with a simple driver script. Open up a new file, name it align_faces.py:

import the necessary packages

from imutils.face_utils import FaceAligner

from imutils.face_utils import rect_to_bb

import argparse

import imutils

import dlib

import cv2

construct the argument parser and parse the arguments

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

如果您的系统上没有安装 imutils 和/或 dlib,请确保通过 pip 安装/升级它们:

pip install --upgrade imutils

pip install --upgrade dlib

win10安装dlib参考:如何安装dlib gpu版本_AI浩-CSDN博客

initialize dlib’s face detector (HOG-based) and then create

the facial landmark predictor and the face aligner

detector = dlib.get_frontal_face_detector()

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

fa = FaceAligner(predictor, desiredFaceWidth=256)

使用 dlib 的 get_frontal_face_detector 初始化我们的检测器对象。

使用 --shape-predictor 来实例化我们的面部标志预测器,这是 dlib 的预训练预测器的路径。

通过在第 21 行初始化一个对象 fa 来利用刚刚在上一节中构建的 FaceAligner 类。我们指定了 256 像素的人脸宽度。

接下来,加载图像并为人脸检测做准备:

load the input image, resize it, and convert it to grayscale

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

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

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

show the original input image and detect faces in the grayscale

image

cv2.imshow(“Input”, image)

rects = detector(gray, 2)

加载由命令行参数 --image 指定的图像。 调整图像的大小,保持第 25 行的纵横比,使其宽度为 800 像素。 然后将图像转换为灰度。

处理输入图像中的人脸检测,我们在其中应用了 dlib 的人脸检测器。 此函数返回 rects ,这是我们检测器发现的人脸周围的边界框列表。

在下一个块中,我们遍历 rects ,对齐每个人脸,并显示原始和对齐的图像。

loop over the face detections

for rect in rects:

extract the ROI of the original face, then align the face

using facial landmarks

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

faceOrig = imutils.resize(image[y:y + h, x:x + w], width=256)

faceAligned = fa.align(image, gray, rect)

display the output images

cv2.imshow(“Original”, faceOrig)

cv2.imshow(“Aligned”, faceAligned)

cv2.waitKey(0)

开始循环。

对于 dlib 预测的每个边界框 rect,我们将其转换为格式 (x, y, w, h)。

随后,将框的大小调整为 256 像素的宽度,保持纵横比。将这个原始但调整大小的图像存储为 faceOrig 。

对齐图像,指定图像、灰度图像和矩形。

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

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

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



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

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

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

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

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

/img-blog.csdnimg.cn/111f5462e7df433b981dc2430bb9ad39.png)

简历模板在这里插入图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值