【人工智能项目】面部表情识别
这次,使用传统的机械法识别脸部表情。 主要步骤是首先提取人脸表情特征,将特征进行拼接,发送到机器学习模型中,得到最终的检测结果。 那就干吧!
此次用于生成所需图像的数据为fer2013.csv数据,图像以像素值的形式保存在csv文件中,因此需要制成图像。
importpandasaspddf=PD.read _ CSV ('./fer 2013.CSV ' ) df.head ) # encoding 3360 utf-8 importpandasasaspdimportnumpyasportnumpyasv '1':'disgust '3':'happy ','4':'sad ','5':'surprised ', '6':'normal'} defcreatedir(dir ) :ifOS.path.exists(dir ) isfalse:OS.makedirs ) defsaveimager csv文件faces _ data=pata )并遍历CSV文件内容,按分类保存图像数据的forindexinrange(len(faces_data ) )解析各行的CSV文件的内容的emotion _ data=faces # usage _ data=faces _ data.loc [ index ] [2] #将图像数据转换为48*48data_array=list(map ) float, image_data.split () ) data_array=NP.asarray ) data_array ) image=data_array.reshape(48, 48 ) #选择分类文件名dirname=usage _ dataemotionname=emotions [ str (emotion _ data ) ] #用于保存图像的文件夹image path=OS.path.jath emotionname(#分类和表情文件夹createdir(dirname ) create dir (create dir ) imagepath ) )图像文件名imagename=OS.path.join ) imagepath,sth image ) imageCount=index print ) )全部) str ) imagecount )单张图像) ) )。
将生成的图像可视化展示分析。
#可视化图像angerdisgustfearhappynormalsadsurprisedfromtensorflow.keras.preprocessing.imageimportload _ img, img _ to _ arrayimportmatplotlib.pyplotaspltimportosimportwarnings % matplotlibinline #图像的像素大小为48* 48PIC_size=48PLT.FIZE 20 ) CPT=0forexpressioninos.list dir (./training/' ) : foriinrange (1,6 ) : CPT=6 cpt ) img=load _ img ('./training/' expression '/' OS.list dir ('./training/' expression ) ) I,target_
然后,统计训练图像中类别数
#训练图像中每个类别的数量forexpressioninos.list dir ('./training/' ) :print ) str ) OS.listdir )、'./tr
aining/"+expression)))+" " + expression +" images")95 anger images
436 disgust images
4097 fear images
7215 happy images
4965 normal images
4830 sad images
3171 surprised images
同理,对其余文件夹中的图片进行相同操作,生成各个表情的特征之后,对其拼接。
x_train = np.vstack((anger_hists,disgust_hists,fear_hists,happy_hists,normal_hists,sad_hists,surprised_hists))y_train = []anger_list = list(anger_arr)disgust_list = list(disgust_arr)fear_list = list(fear_arr)happy_list = list(happy_arr)normal_list = list(normal_arr)sad_list = list(sad_arr)surprised_list = list(surprised_arr)anger_list.extend(disgust_list)anger_list.extend(fear_list)anger_list.extend(happy_list)anger_list.extend(normal_list)anger_list.extend(sad_list)anger_list.extend(surprised_list)y_train = np.array(anger_list) x_train.shapey_train.shape重新划分
from sklearn.model_selection import train_test_splitx_train,x_test,y_train,y_test = train_test_split(X,y,test_size=0.1,random_state=2019) SVM模型 from sklearn.svm import SVCsvm = SVC(kernel="linear") svm.fit(x_train,y_train)SVC(C=1.0, break_ties=False, cache_size=200, class_weight=None, coef0=0.0,
decision_function_shape=‘ovr’, degree=3, gamma=‘scale’, kernel=‘linear’,
max_iter=-1, probability=False, random_state=None, shrinking=True,
tol=0.001, verbose=False)
LBP+SVM人脸识别的准确率相比较深度学习比较一般,不过主要是让大家了解如何提取特征,送入机器学习模型当中。那么本次就到这里了,下次见!