使用Python+OpenCV+Dlib实现人脸检测与人脸特征关键点识别

今天,我们将学习如何检测图像中的人脸并提取面部特征,如眼睛、鼻子、嘴巴等。我们可以将这些信息作为一个预处理步骤来完成,例如捕捉照片中人物的人脸(手动或通过机器学习),创建效果来“增强”我们的图像(类似于Snapchat等应用程序中的效果),对人脸进行情感分析等等。今天我们将通过引入DLib和从图像中提取面部特征来将其提升到一个新的水平。相关阅读:https://towardsdatascience.com/essential-opencv-functions-to-get-you-started-into-computer-vision-743df932e60Dlib是一个高级的机器学习库,它是为解决复杂的现实世界问题而创建的。这个库是用C++编程语言创建的,它与C/C++、Python和java一起工作。Dlib:http://dlib.net/值得注意的是,本教程可能需要对OpenCV库有一定的了解,例如如何处理图像、打开相机、图像处理和一些小技巧。它是如何工作的?我们的脸有几个可以识别的特征,比如眼睛、嘴巴、鼻子等等。当我们使用DLib算法检测这些特征时,我们实际上得到了每个特征点的映射。该映射由67个点(称为地标点)组成,可识别以下特征:

颚点= 0–16右眉点= 17–21左眉点= 22–26鼻点= 27–35右眼点= 36–41左眼点= 42–47口角= 48–60嘴唇分数= 61–67现在让我们来了解如何提取特征。安装要求与往常一样,本文将用代码演示示例,并将逐步指导你实现一个完整的人脸特征识别示例。但是在开始之前,你需要启动一个新的Python项目并安装3个不同的库:opencv pythondlib如果像我一样使用pipenv,可以使用以下命令安装所有这些文件:pipenv install opencv-python, dlib如果你使用的是Mac和某些版本的Linux,则在安装dlib时可能会遇到一些问题,如果遇到的是编译错误,请检查使用的CMake库版本。在Mac中,确保你有可用的CMake,并且使用正确的版本运行:brew install cmake对于其他操作系统,请在线检查以获得特定支持。步骤1:载入并显示图片我们将从小处着手并以代码为基础,直到有一个可以正常工作的示例为止。通常,我喜欢使用绘图来渲染图像,但是由于我们在之后的文章中准备了一些很酷的东西,因此我们将做一些不同的事情,并且将创建一个窗口来展示我们的工作结果。让我们一起看看代码吧!import cv2# read the imageimg = cv2.imread("face.jpg")# show the imagecv2.imshow(winname="Face", mat=img)# Wait for a key press to exitcv2.waitKey(delay=0)# Close all windowscv2.destroyAllWindows()很简单,对吧?我们只是用imread加载图像,然后告诉OpenCV在winname中显示图像,这将打开窗口并给它一个标题。之后,我们需要暂停执行,因为当脚本停止时,窗口会被破坏,所以我们使用cv2.waitKey来保持窗口,直到按下某个键,然后销毁窗口并退出脚本。如果使用代码并在代码目录中添加了一个名为face.jpg的图像,你应该得到如下内容:原始图像:

步骤2:人脸识别到目前为止,我们还没有对图像做任何处理,只是把它呈现在一个窗口中,这是非常无聊的,但是现在我们将开始加入其它的内容,我们将从识别图像中选择一张脸开始。为此,我们将使用名为get_frontial_face_detector()的Dlib函数,非常直观,但是有一个警告提示这个函数只适用于灰度图像,所以我们必须首先使用OpenCV。get_frontial_face_detector()会返回一个检测器,该检测器是一个我们可以用来检索人脸信息的函数,每个面都是一个对象,其中包含可以找到图像的位置点。但我们最好在代码上看看:import cv2import dlib# Load the detectordetector = dlib.get_frontal_face_detector()# read the imageimg = cv2.imread("face.jpg")# Convert image into grayscalegray = cv2.cvtColor(src=img, code=cv2.COLOR_BGR2GRAY)# Use detector to find landmarksfaces = detector(gray)for face in faces: x1 = face.left() # left point y1 = face.top() # top point x2 = face.right() # right point y2 = face.bottom() # bottom point # Draw a rectangle cv2.rectangle(img=img, pt1=(x1, y1), pt2=(x2, y2), color=(0, 255, 0), thickness=4)# show the imagecv2.imshow(winname="Face", mat=img)# Wait for a key press to exitcv2.waitKey(delay=0)# Close all windowscv2.destroyAllWindows()上面的代码将从图像中检索所有面部,并在每个面部上渲染一个矩形,从而产生如下图像:

123下一页>

(免责声明:本网站内容主要来自原创、合作伙伴供稿和第三方自媒体作者投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
任何单位或个人认为本网站中的网页或链接内容可能涉嫌侵犯其知识产权或存在不实内容时,应及时向本网站提出书面权利通知或不实情况说明,并提供身份证明、权属证明及详细侵权或不实情况证明。本网站在收到上述法律文件后,将会依法尽快联系相关文章源头核实,沟通删除相关内容或断开相关链接。 )

赞助商
2020-08-12
使用Python+OpenCV+Dlib实现人脸检测与人脸特征关键点识别
今天,我们将学习如何检测图像中的人脸并提取面部特征,如眼睛、鼻子、嘴巴等。

长按扫码 阅读全文