本篇博客主要记录一下自己的学习过程,希望能够为大家提供帮助。所含的内容包含图像对齐(人脸图像中的五个特征点的坐标);分块LBP特征提取,SVM分类。图像总共含有7种表情,最后识别的准确率并没有达到很高,能够在相同的方法达到更好的效果欢迎在评论区留言。数据集链接和自己写的报告链接,可自行查阅(侵权联系删除):
通过百度网盘分享的文件:
表情实验课题.zip
链接:https://pan.baidu.com/s/1DSkJSvF2bhF7y3d3WPRgeg
提取码:529j
复制这段内容打开「百度网盘APP 即可获取」
通过百度网盘分享的文件:表情实验报告.zip
链接:https://pan.baidu.com/s/1BvQjiX8qaiP0KOXfQvGYqQ
提取码:529j
复制这段内容打开「百度网盘APP 即可获取」
导包
import os
import numpy as np
import cv2
import matplotlib.pyplot as plt
import pickle
import sklearn
import seaborn
from skimage import feature as skif
from skimage.feature import hog
from sklearn.tree import DecisionTreeClassifier
from sklearn.cluster import KMeans
from scipy.spatial.distance import cdist
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, precision_score, recall_score, confusion_matrix
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from skimage import io
from PIL import Image
from sklearn.naive_bayes import GaussianNB
LBP特征提取,加入了分块
num=14
wid=100//num
def get_lbp_data(images_data, lbp_radius=2, lbp_point=10):
n_images = len(images_data)
hist = np.zeros((n_images, num*num*59))
for i in np.arange(n_images):
#print(i)
for row in range(num):
for col in range(num):
blocks=images_data[i][row*wid+1:(row+1)*wid+1,col*wid+1:((col+1)*wid)+1]
lbp = skif.local_binary_pattern(blocks, lbp_point, lbp_radius, 'uniform')
max_bins = 59
train_hist, _ = np.histogram(lbp, normed=True, bins=max_bins, range=(0, max_bins))
index = row*num+col
#print(np.shape(train_hist))
hist[i][index*59:(index+1)*59] = train_hist
return hist
读取数据
def read_data(label2id)