import numpy as npimport cv2import osfrom sklearn.model_selection import train_test_splitdef open_img(path): imgList = [] #图片 labels = [] #各图片对应的表情 label = [] #仅表情(无重复) for file in os.listdir(path): if file == '.anonr' or file == '.htaccess': continue position = path+'/'+file for parent, dirnames, filenames in os.walk(position): for filename in filenames: if filename == '.htaccess': continue fileList = filename.split('_') if fileList[2] not in label: label.append(fileList[2]) labels.append(label.index(fileList[2])) img = cv2.imread(position+'/'+filename,cv2.IMREAD_GRAYSCALE) img = cv2.resize(img, (250, 350)) imgList.append(img) return imgList,labelsdef train_and_test(imgList,labels): x_train,x_test,y_train,y_test = train_test_split(imgList,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))