无论你是最近开始探索OpenCV还是已经使用它很长一段时间,在任何一种情况下,您都一定遇到过“人脸检测”这个词。随着机器变得越来越智能,它们模仿人类行为的能力似乎也在增加,而人脸检测就是人工智能的进步之一。
所以今天,我们将快速了解一下面部检测是什么,为什么它很有用,以及如何仅用 15 行代码就可以在您的系统上实际实现面部检测!
让我们从了解面部检测开始。
什么是人脸检测?
人脸检测是一种基于人工智能的计算机技术,能够识别和定位数码照片和视频中人脸的存在。简而言之,机器检测图像或视频中人脸的能力。
由于人工智能的重大进步,现在可以检测图像或视频中的人脸,无论光照条件、肤色、头部姿势和背景如何。
人脸检测是几个人脸相关应用程序的起点,例如人脸识别或人脸验证。如今,大多数数码设备中的摄像头都利用人脸检测技术来检测人脸所在的位置并相应地调整焦距。
那么人脸检测是如何工作的呢? 很高兴你问了!任何人脸检测应用程序的主干都是一种算法(机器遵循的简单分步指南),可帮助确定图像是正图像(有脸的图像)还是负图像(没有人脸的图像)。
为了准确地做到这一点,算法在包含数十万张人脸图像和非人脸图像的海量数据集上进行了训练。这种经过训练的机器学习算法可以检测图像中是否有人脸,如果检测到人脸,还会放置一个边界框。
使用 OpenCV 进行人脸检测
计算机视觉是人工智能中最令人兴奋和最具挑战性的任务之一,有几个软件包可用于解决与计算机视觉相关的问题。OpenCV 是迄今为止最流行的用于解决基于计算机视觉的问题的开源库。
OpenCV 库的下载量超过1800 万次,活跃的用户社区拥有 47000 名成员。它拥有 2500 种优化算法,包括一整套经典和最先进的计算机视觉和机器学习算法,使其成为机器学习领域最重要的库之一。
图像中的人脸检测是一个简单的 3 步过程:
第一步:安装并导入open-cv模块:
代码语言:javascript复制pip install opencv-python
代码语言:javascript复制import cv2
import matplotlib.pyplot as plt # 用于绘制图像
第 2 步:将 XML 文件加载到系统中
下载 Haar-cascade Classifier XML 文件并将其加载到系统中:
Haar-cascade Classifier 是一种机器学习算法,我们用大量图像训练级联函数。根据不同的目标对象有不同类型的级联分类器,这里我们将使用考虑人脸的分类器将其识别为目标对象。
您可以点击此处找到用于人脸检测的经过训练的分类器 XML 文件
代码语言:javascript复制# 加载级联
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
第 3 步:检测人脸并在其周围绘制边界框
使用Haar-cascade 分类器中的detectMultiScale()函数检测人脸并在其周围绘制边界框:
代码语言:javascript复制# 读取输入图像
img = cv2.imread('test.png')
# 检测人脸
faces = face_cascade.detectMultiScale(image = img, scaleFactor = 1.1, minNeighbors = 5)
# 在人脸周围绘制边界框
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x w, y h), (255, 0, 0), 2)
# 显示图像中检测到的人脸数量
print(len(faces),"faces detected!")
# 绘制检测到人脸的图像
finalimg = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
plt.figure(figsize=(12,12))
plt.imshow(finalimg)
plt.axis("off")
plt.show()
detectMultiScale() 参数:
- image: CV_8U 类型的矩阵,其中包含检测到对象的图像。
- scaleFactor:指定在每个图像比例下图像尺寸减小多少的参数。
- minNeighbors:参数指定每个候选矩形应该保留多少邻居。
可能需要调整一下这些值来获取最佳结果。
就像这样,你可以实现计算机视觉最独特的应用程序之一。可以在下面的GitHub找到整个人脸检测实现的详细代码模板。
https://github.com/wanghao221/Face-Detection
注意:本教程仅适用于图像文件中的人脸检测,而不适用于实时摄像机源或视频。
是不是感觉很棒?你刚刚学习了如何实现人工智能和机器学习最有趣的应用之一。希望你喜欢我的博客。谢谢阅读!