RPA中检测一张图片中是否含有人脸

想要检测一张图片中是否含有人脸,需要用到的关键技术就是人脸检测。

人脸检测算法的输入是一张图像,输出是人脸框的坐标序列,具体结果是 0 个人脸框或 1 个人脸框或多个人脸框。

人脸检测算法的原理简单来说是一个“扫描”加“判定”的过程。即首先在整个图像范围内扫描,再逐个判定候选区域是否为人脸的过程。因此人脸检测算法的计算速度会跟图像尺寸大小以及图像内容相关。在实际编写代码时,我们可以通过设置“输入图像尺寸”、或“最小脸尺寸限制”、“人脸数量上限”等参数来加快算法的运行速度。

我们使用 opencv 这个库来进行人脸的检测,这个库在我们的 RPA 中已经内置,直接导入即可。

相关代码及注释如下:

import cv2

image = cv2.imread('1.png')  # 加载图片
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  # 转换成灰度图,提高计算速度

face_cascade = cv2.CascadeClassifier(r"C:\iS-RPA\plugin\Com.Isearch.Func.Python\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml")  # 加载Haar特征分类器

faces = face_cascade.detectMultiScale(
    gray,                        # 要检测的图像
	scaleFactor = 1.15,      # 图像尺寸每次缩小的比例
	minNeighbors = 3,        # 一个目标至少要被检测到3次才会被标记为人脸
	minSize = (5, 5)         # 目标的最小尺寸
)  # 探测图片中的人脸

for (x,y,w,h) in faces:
    cv2.rectangle(image, (x,y), (x+w,y+h), (0,255,0), 2)  # 为每个人脸绘制矩形框
	
cv2.imshow("image", image)
cv2.waitKey(0)

len(faces) 即为检测到图片中人脸的数量