目的
为第五步合成照片墙做准备,这步为选作,如果朋友比较多,可以过滤一下,如果比较少,就不用过滤了。
安装第三方库opencv
pip install opencv
项目准备
- 新建一个目录(user_no_face),不含人脸的图片会被转移到该目录
- 把人脸识别模型文件(haarcascade_frontalface_alt.xml),拷贝到项目目录下。该文件在安装完opencv库后可以在以下位置找到:
image.png
代码
# -*-coding:utf8-*- import os import cv2 import shutil def getAllPath(dirpath): PathArray = [] for filename in os.listdir(dirpath): if filename.endswith('jpg') or filename.endswith('png'): PathArray.append(os.path.join(dirpath, filename)) return PathArray # 从源路径中读取所有图片放入一个list,然后逐一进行检查,把其中的脸扣下来,存储到目标路径中 def readPicSaveFace(sourcePath,invalidPath): try: ImagePaths = getAllPath(sourcePath) # 对list中图片逐一进行检查,找出其中的人脸然后写到目标文件夹下 # haarcascade_frontalface_alt.xml为库训练好的分类器文件,下载opencv,安装目录中可找到 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml') for imagePath in ImagePaths: img = cv2.imread(imagePath) if type(img) != str: faces = face_cascade.detectMultiScale(img, 1.1, 5) if len(faces): print(imagePath + " have face") else: shutil.move(imagePath, invalidPath) except IOError: print("Error") if __name__ == '__main__': invalidPath = './user_no_face' sourcePath = 'user' readPicSaveFace(sourcePath,invalidPath)
备注:
- detecMultiScale()函数
参数介绍:
参数1:image--待检测图片,一般为灰度图像加快检测速度;
参数2:objects--被检测物体的矩形框向量组;
参数3:scaleFactor--表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%;
参数4:minNeighbors--表示构成检测目标的相邻矩形的最小个数(默认为3个)。
如果组成检测目标的小矩形的个数和小于 min_neighbors - 1 都会被排除。
如果min_neighbors 为 0, 则函数不做任何操作就返回所有的被检候选矩形框,
这种设定值一般用在用户自定义对检测结果的组合程序上;
参数5:flags--要么使用默认值,要么使用CV_HAAR_DO_CANNY_PRUNING,如果设置为
CV_HAAR_DO_CANNY_PRUNING,那么函数将会使用Canny边缘检测来排除边缘过多或过少的区域,
因此这些区域通常不会是人脸所在区域;
参数6、7:minSize和maxSize用来限制得到的目标区域的范围。
2.人脸检测器
Opencv自带训练好的人脸检测模型,存储在sources/data/haarcascades文件夹和sources/data/lbpcascades文件夹下。其中几个.xml文件如下:
人脸检测器(默认):haarcascade_frontalface_default.xml
人脸检测器(快速Harr):haarcascade_frontalface_alt2.xml
人脸检测器(侧视):haarcascade_profileface.xml
眼部检测器(左眼):haarcascade_lefteye_2splits.xml
眼部检测器(右眼):haarcascade_righteye_2splits.xml
嘴部检测器:haarcascade_mcs_mouth.xml
鼻子检测器:haarcascade_mcs_nose.xml
身体检测器:haarcascade_fullbody.xml
人脸检测器(快速LBP):lbpcascade_frontalface.xml