主要是自带的haar模型提取,代码很简单
import cv2
import os
def crop():
classfier = cv2.CascadeClassifier("E:/sign_system/opencv/haarcascades/haarcascade_frontalface_alt2.xml")
path = 'E:/faces'
dirs = os.listdir(path)
for file in dirs:
label = file.strip('/')[-1]
#print(label)
new_path = 'E:/sign_system/haar_crop/'+str(label)
print(new_path)
if not os.path.exists(new_path):
os.makedirs(new_path)
num = 0
file_name = path + '/' + label
for pic in os.listdir(file_name):
#print(pic)
pic_name = file_name + '/' + pic
img = cv2.imread(pic_name)
if img is None:
continue
grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faceRects = classfier.detectMultiScale(grey, scaleFactor = 1.2, minNeighbors = 3, minSize = (32, 32))
print(faceRects)
if len(faceRects) > 0: # 大于0则表示检测到人脸
for faceRect in faceRects: # 单独框出每一张人脸
x, y, w, h = faceRect # 获取识别信息的坐标信息
# 将当前截取的人脸保存
img_name = '%s/%d.jpg'%(new_path, num)
image = img[y - 10: y + h + 10, x - 10: x + w + 10]
cv2.imwrite(img_name, image)
num = num +1
if __name__ == '__main__':
crop()