import numpy as npimport cv2import osfrom sklearn.model_selection import train_test_splitdef open_img(path_): # 图片 img_list = [] # 各图片对应的人名 labels_ = [] # 仅人名(无重复) label = [] for file in os.listdir(path_): if file == '.anonr' or file == '.htaccess': continue label.append(file) position = path_+'/'+file for parent, dirnames, filenames in os.walk(position): for filename in filenames: if filename == '.htaccess': continue labels_.append(len(label)-1) img = cv2.imread(position+'/'+filename, cv2.IMREAD_GRAYSCALE) img = cv2.resize(img, (250, 350)) img_list.append(img) return img_list, labels_def train_and_test(img_list, labels_): x_train, x_test, y_train, y_test = train_test_split(img_list, np.array(labels_), test_size=0.3, random_state=42, stratify=np.array(labels)) recognizer = cv2.face.FisherFaceRecognizer_create() recognizer.train(x_train, y_train) right = 0 false = 0 for cnt in range(len(y_test)): test_label = recognizer.predict(x_test[cnt]) if (test_label == y_test[cnt]).any(): right += 1 else: false += 1 return right/(right+false)if __name__ == '__main__': path = "../faces" imgList, labels = open_img(path) print('人脸识别的准确率为:', train_and_test(imgList, labels))