最近需要清洗大量无人脸数据,于是想到了使用OpenCV来进行清理,原理是:首先扫描全部图片数据再使用OpenCV的人脸检测框,如果有大于0的话说明有人脸就对该图片进行操作。
原理说完开始上代码
首先导入包
import cv2
import numpy as np
import sys, os, glob, numpy
from skimage import io
再对照片进行处理
path = '*/图片地址'
# 指定图片的人脸识别然后存储
img = cv2.imread(path)
# 画框颜色
color = (0, 255, 0)
grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
classfier = cv2.CascadeClassifier(
r'C:\ProgramData\Anaconda3\envs\pytorch2\Lib\site-packages\cv2\data\haarcascade_frontalface_alt2.xml')
# scaleFactor表示每次图像尺寸减小的比例,minNeighbors表示每一个目标至少要被检测到9次才算是真的目标,
# minSize为目标的最小尺寸,minSize为目标的最大尺寸
faceRects = classfier.detectMultiScale(grey, scaleFactor=1.02, minNeighbors=9, minSize=(71, 71), maxSize=(800, 800))
if len(faceRects) > 0: # 大于0则检测到人脸
for faceRect in faceRects: # 单独框出每一张人脸
x, y, w, h = faceRect
cv2.rectangle(img, (x - 10, y - 10), (x + w + 10, y + h + 10), color, 2) # 2控制绿色框的粗细
# 写入图像
cv2.imwrite('image', img)
#展示图片效果
cv2.imshow("image", img)
cv2.waitKey(0)
代码中的XML文件是需要填写自己电脑中的路径的
我们可以根据自己的需求对detectMultiScale的参数进行修改
scaleFactor表示每次图像尺寸减小的比例 minNeighbors表示每一个目标至少要被检测到n次才算是真的目标,例如文中的检测9次 minSize为目标的最小尺寸 maxSize为目标的最大尺寸
文中代码是检测一张图片的,如果需要检测多张的话可以写一个循环