现在我们执行的是第二步建立人脸预测模型
# -*- coding: utf-8 -*
import cv2
import os
from PIL import Image
import numpy as np
def 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)
#获取每张图片id
id = 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,ids
if __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后缀名的文件,这就是我们需要的。