说完人脸识别的人脸检测和保存数据的过程,接下来是对人脸数据进行获取和利用opencv的训练方法对人脸数据进行训练,生成特定模型;
首先是读取负面素材里的40个人脸数据,全部标为-1
for i in os.walk("face_data/negative/"):#遍历图片文件夹读取训练集
if i[2]!=[]:
for j in i[2]:
im = cv2.imread(str(i[0]+'/'+j), cv2.IMREAD_GRAYSCALE)
X.append(np.asarray(im, dtype=np.uint8))
y.append(-1)
然后是对指定的素材编号为0:
for i in os.walk("face_data/positive/"):#遍历图片文件夹读取训练集
if i[2]!=[]:
for j in i[2]:
im = cv2.imread(str(i[0]+'/'+j), cv2.IMREAD_GRAYSCALE)
X.append(np.asarray(im, dtype=np.uint8))
y.append(0)
如果有多个人,还可编号其他以方便后期识别时可以区分不同的人,从而识别是哪个人
接下来是对x,y矩阵(x是人脸数据的矩阵,y是人脸对应人物的编号矩阵)的训练。
model = cf.LBPHFaceRecognizer_create()
model.train(np.asarray(X), np.asarray(y))
model.save('trainner/trainner.yml')
训练后保存为trainer.yml,可以在trainer这个文件夹下找到训练好的模型,方便后期识别的时候进行调用
完整代码:
def face_train():
import os
num=0
names = []
print(names)
X,y =[],[]
for i in os.walk("face_data/negative/"):#遍历图片文件夹读取训练集
if i[2]!=[]:
for j in i[2]:
im = cv2.imread(str(i[0]+'/'+j), cv2.IMREAD_GRAYSCALE)
X.append(np.asarray(im, dtype=np.uint8))
y.append(-1)
for i in os.walk("face_data/positive/"):#遍历图片文件夹读取训练集
if i[2]!=[]:
for j in i[2]:
im = cv2.imread(str(i[0]+'/'+j), cv2.IMREAD_GRAYSCALE)
X.append(np.asarray(im, dtype=np.uint8))
y.append(0)
y = np.asarray(y, dtype=np.int32)
print(X,y)
model = cf.LBPHFaceRecognizer_create()
model.train(np.asarray(X), np.asarray(y))
model.save('trainner/trainner.yml')