现在我们执行的是第二步建立人脸预测模型
# -*- coding: utf-8 -*import cv2import osfrom PIL import Imageimport numpy as npdef getImageAndLabels(path):#存储人脸数据faceSamples = []#存储姓名ids = []#存储图片信息imagePaths =[os.path.join(path,f) for f in os.listdir(path)]#加载分类器face_dector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')#遍历列表中的图片for image in imagePaths:#打开图片文件转为灰色,每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度PIL_img =Image.open(image).convert('L')#将图像数字化,数组作为图像类型操作img_numpy = np.array(PIL_img,'uint8')#获取图片人脸特征,把人脸那一块取出来faces = face_dector.detectMultiScale(img_numpy)#获取每张图片idid = int(os.path.split(image)[1].split('.')[0])#添加到列表中for x,y,w,h in faces:ids.append(id)faceSamples.append(img_numpy[y:y+h,x:x+w])print('id:',ids)print('fs:',faceSamples)return faceSamples,idsif __name__ == '__main__':#图片路径path ='./picture'#获取图像数组和id标签数组和姓名faces,ids =getImageAndLabels(path)#识别器recognizer = cv2.face.LBPHFaceRecognizer_create()#训练recognizer.train(faces,np.array(ids))#保存文件recognizer.write('./train/trainer.yml')
最后会生成一个.yml后缀名的文件,这就是我们需要的。