如何使用OpenCV库检测图像中的人脸
在本文中,将展示如何使用Python构建简单的面部检测器。建立一个可以检测人脸的程序是一个很好的项目,可以开始使用计算机视觉。
从名称可以理解,我们将编写一个程序来检测图像中的面部。当我说“程序”时,您可以将其理解为教机器做什么。我喜欢使用教学而不是编程,因为这实际上是我们正在做的事情。最好的学习方法是教学,因此在教机器如何识别人脸的同时,我们也在学习。在进入项目之前,讲一讲人脸检测和人脸识别器之间的区别。
人脸检测与人脸识别
这两件事听起来很相似,但实际上它们并不相同。让我们理解它们之间的区别,以便我们不会错过重点。人脸检测是从图像或视频中检测人脸的过程,无关紧要。该程序除了发现面孔外没有做任何其他事情。但是,另一方面,人脸识别程序会找到人脸,并且还能分辨出谁属于谁。因此,它不仅仅是提供检测信息。有更多的编程,换句话说,就是更多的教学。
假设您正在观看街道,汽车正在驶过。人脸检测就像告诉路过的物体是一辆汽车。而面部识别器就像是能够分辨路过的汽车的模型。这是一个很好的图像,显示了实际的差异。
我们将为此项目使用一个模块库,称为OpenCV。OpenCV是高度优化的库,专注于实时应用程序。
OpenCV(开源计算机视觉库)是一个开源计算机视觉和机器学习软件库。OpenCV的构建旨在为计算机视觉应用程序提供通用的基础结构,并加速在商业产品中使用机器感知。作为BSD许可的产品,OpenCV使企业可以轻松地使用和修改代码。
安装软件包
pip install opencv-python
安装完成后,我们可以将其导入到我们的程序中。
import cv2
OpenCV已经包含许多针对面部,眼睛,微笑等的经过预先训练的分类器。这些XML文件存储在文件夹中。我们将使用面部检测模型。
如果您有帐户,则可以从Github下载XML文件。如果不这样做,请随时从下面的链接复制代码,并将其粘贴到文本文档中,并将其另存为“ face_detector.xml”。
将文件保存到当前文件夹后,让我们将其加载到程序中。
# Load the cascade
face_cascade = cv2.CascadeClassifier('face_detector.xml')
导入图片
在此步骤中,您将选择要在其上测试代码的图像。确保图像中至少有一张脸,以便我们的程序可以找到一张。这是一个人的示例图像。
选择图像后,让我们在程序中对其进行定义。确保图像文件位于您正在使用的文件夹中。
#读取输入图像
img = cv2.imread('test.jpg')
人脸检测
感谢为OpenCV做出的贡献。这是检测图像中人脸的代码:
#检测人脸
face = face_cascade.detectMultiScale(img,1.1,4)
我们在代码前面定义了face_cascade。检测到面部之后,我们将在其周围绘制矩形,以便我们知道机器看到的内容。机器可能会犯错误,但是我们的目标应该是教导最佳和最优化的方法,以使预测更加准确。
使用以下代码可以在检测到的面部周围绘制矩形:
# Draw rectangle around the faces
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)(255,0,0)是我们要绘制的矩形的颜色。您可以使用它并更改颜色。
(2)视线的粗细。您可以更改值并查看其外观。
结果
这是最后一步,现在我们将结果导出为图像文件。此图像将显示人脸检测的结果。要保存新的图像文件,我们将使用cv2库中的一种名为“ imwrite”的方法。保存完成后,您将在终端中看到“成功保存”。
# Export the result
cv2.imwrite("face_detected.png", img)
print('Successfully saved')
现在,就已经创建了一个检测图像中人脸的程序。感谢阅读!