import cv
import svm
import svmutil
import glob
import operator
import os
import os.path
import numpy
import pickle
import math
import thread
import sys
from sklearn.lda import LDA
from sklearn.decomposition import PCA
from config import *
models = {}
pca = {}
lda = {}
def get_features(img, height = 8, width = 6):
features = []
step_x = img.height / height;
step_y = img.width / width;
for x in xrange(0 + step_x, img.height, step_x):
for y in xrange(0 + step_y, img.width, step_y):
features.append(img[x, y])
return features
def get_image_features(img):
features = []
for phase in gabor_phase:
for pulsation in gabor_pulsation:
(t_img_mag, t_img) = gabor(img, kernel_var, pulsation, phase, gabor_psi)
features.extend(get_features(t_img_mag))
return features
def gabor(image, pos_var, pos_w, pos_phase, pos_psi):
global kernel_size
if kernel_size % 2 == 0:
kernel_size += 1
kernel = cv.CreateMat(kernel_size, kernel_size, cv.CV_32FC1)
src = cv.CreateImage((image.width, image.height), cv.IPL_DEPTH_8U, 1)
src_f = cv.CreateImage((image.width, image.height), cv.IPL_DEPTH_32F, 1)
if cv.GetElemType(image) == cv.CV_8UC3:
cv.CvtColor(image, src, cv.CV_BGR2GRAY)
else:
src = image
cv.ConvertScale(src, src_f, 1.0 / 255, 0)
dest = cv.CloneImage(src_f)
dest_mag = cv.CloneImage(src_f)
var = pos_var / 1.0
w = pos_w / 10.0
phase = pos_phase * cv.CV_PI / 180.0
psi = cv.CV_PI * pos_psi / 180.0
cv.Zero(kernel)
for x in range(-kernel_size / 2 + 1, kernel_size / 2 + 1):
for y in range(-kernel_size / 2 + 1, kernel_size / 2 + 1):
kernel_val = math.exp(-((x * x) + (y * y)) / (2 * var)) * math.cos(w * x * math.cos(phase) + w * y * math.sin(phase) + psi)
cv.Set2D(kernel, y + kernel_size / 2, x + kernel_size / 2, cv.Scalar(kernel_val))
cv.Filter2D(src_f, dest, kernel, (-1, -1))
cv.Pow(dest, dest_mag, 2)
return (dest_mag, dest)
def data_gen(img_kind, subdir = "data/train/"):
classes = []
data = []
the_ones = glob.glob(subdir + "f_" + img_kind + "*.jpg")
all_of_them = glob.glob(subdir + "f_*_*.jpg")
the_others = []
for x in all_of_them:
if the_ones.count(x) < 1:
the_others.append(x)
for x in the_ones:
classes.append(1)
data.append(get_image_features(cv.LoadImageM(x)))
for x in the_others:
classes.append(-1)
data.append(get_image_features(cv.LoadImageM(x)))
return (classes, data)
def fit_pca_and_lda(img_kind, data, classes):
print 'Fiting ' + img_kind
c_pca = PCA(pca_components)
c_lda = LDA(lda_components)
c_pca.fit(data)
c_lda.fit(data, classes)
num = len(data)
for i in xrange(num):
pca_list = c_pca.transform(data[i]).tolist()[0]
lda_list = c_lda.transform(data[i]).tolist()[0]
data_list = []
data_list.extend(pca_list)
data_list.extend(lda_list)
data[i] = data_list
pca[img_kind] = c_pca
lda[img_kind] = c_lda
def train():
data_dict = {}
classes_dict = {}
global pca
global lda
pca = {}
lda = {}
print 'Fiting PCA and LDA'
for img_kind in img_kinds:
(classes, data) = data_gen(img_kind, train_subdir)
fit_pca_and_lda(img_kind, data, classes)
data_dict[img_kind] = data
classes_dict[img_kind] = classes
print '================================'
write_pca_to_file()
write_lda_to_file()
global models
models = {}
print 'BUILDING TRAIN MODELS'
for img_kind in img_kinds:
print "\t" + img_kind
data = data_dict[img_kind]
classes = classes_dict[img_kind]
problem = svm.svm_problem(classes, data)
param = svm.svm_parameter(svm_params)
models[img_kind] = svmutil.svm_train(problem, param)
save_model(models[img_kind], img_kind)
print_model(img_kind)
print '================================'
def test():
total_count = 0
correct_count = 0
wrong_count = 0
print 'TESTING MODELS'
for img_kind in img_kinds:
images = glob.glob(test_subdir + "f_" + img_kind + "*.jpg")
for image in images:
print "\t" + image
image_data = get_image_features(cv.LoadImage(image))
(sorted_results, result) = test_image(image_data)
total_count += 1
if result == img_kind:
print 'YES :' + result
correct_count += 1
else:
print 'NO :' + result
print sorted_results
wrong_count += 1
print '-----------------------'
print '================================'
print "Total Pictures: " + str(total_count)
print "Correct: " + str(correct_count)
print "Wrong: " + str(wrong_count)
print "Accuracy: " + str(correct_count/float(total_count) * 100)
def test_image(image_data):
results = {}
for kind in img_kinds:
pca_data = pca[kind].transform([image_data]).tolist()[0]
lda_data = lda[kind].transform([image_data]).tolist()[0]
data = []
data.extend(pca_data)
data.extend(lda_data)
predict_input_data = []
predict_input_data.append(data)
print 'match: ' + kind
(val, val_2, label) = svmutil.svm_predict([1] ,predict_input_data, models[kind])
results[kind] = label[0][0]
sorted_results = sorted(results.iteritems(), key=operator.itemgetter(1))
result = sorted_results[len(sorted_results)-1][0]
return sorted_results, result
def get_gray_image(image):
#image_2 = cv.CreateImage((img_width, img_height), 8, 1)
#cv.Resize(image, image_2)
img_gray = cv.CreateImage(cv.GetSize(image), 8, 1)
cv.CvtColor(image, img_gray, cv.CV_RGB2GRAY)
cv.EqualizeHist(img_gray, img_gray)
return img_gray
def build_gray_image(src_dir, dst_dir):
images = glob.glob(src_dir + "*.jpg")
for image in images:
img = cv.LoadImage(image)
img_gray = None
try:
(img_f, img_r) = face.handle_camera_image(img)
img_gray = img_r
except TypeError:
img_gray = get_gray_image(img)
cv.SaveImage(dst_dir + os.path.basename(image), img_gray)
def write_models_to_file():
for img_kind in img_kinds:
print "Writing model: " + img_kind
svmutil.svm_save_model(models_dir + img_kind + '.model', models[img_kind])
def read_models_from_file():
for img_kind in img_kinds:
print "Loading model: " + img_kind
models[img_kind] = svmutil.svm_load_model(models_dir + img_kind + '.model')
def save_model(model, img_kind):
svmutil.svm_save_model(models_dir + img_kind + '.model', model)
def print_model(img_kind):
f = open(models_dir + img_kind + '.model')
for line in f:
print line
f.close()
def write_pca_to_file():
f = open(models_dir + 'pca.pkl', "wb")
pickle.dump(pca, f)
f.close()
def read_pca_from_file():
print 'Loading PCA model'
f = open(models_dir + 'pca.pkl', "rb")
global pca
pca = pickle.load(f)
f.close()
def write_lda_to_file():
f = open(models_dir + 'lda.pkl', "wb")
pickle.dump(lda, f)
f.close()
def read_lda_from_file():
print 'Loading LDA model'
f = open(models_dir + 'lda.pkl', "rb")
global lda
lda = pickle.load(f)
f.close()
def pca_test(img_kind):
import pylab as pl
from mpl_toolkits.mplot3d import Axes3D
(classes, data) = data_gen(img_kind, train_subdir)
pca = PCA(pca_components, whiten=True)
print 'fiting'
pca.fit(data)
print 'transforming'
X_r = pca.transform(data)
print '----'
print X_r.shape
x0 = [x[0] for x in X_r]
x1 = [x[1] for x in X_r]
pl.figure()
for i in xrange(0,len(x0)):
if classes[i] == 1:
pl.scatter(x0[i], x1[i], c = 'r')
else:
pl.scatter(x0[i], x1[i], c = 'b')
pl.legend()
pl.title('PCA of dataset ' + img_kind)
pl.show()
def lda_test(img_kind):
import pylab as pl
(classes, data) = data_gen(img_kind, train_subdir)
lda = LDA(lda_components)
print 'fiting'
lda.fit(data, classes)
print 'transforming'
X_r = lda.transform(data)
print '----'
print X_r.shape
x0 = [x[0] for x in X_r]
x1 = [x[1] for x in X_r]
pl.figure()
for i in xrange(0,len(x0)):
if classes[i] == 1:
pl.scatter(x0[i], x1[i], c = 'r')
else:
pl.scatter(x0[i], x1[i], c = 'b')
pl.legend()
pl.title('LDA of dataset ' + img_kind)
pl.show()
def gabor_test(file_path):
import cv2
image = cv.LoadImage(file_path)
hcatImage = None
for phase in gabor_phase:
vcatImage = None
for pulsation in gabor_pulsation:
(t_img_mag, t_img) = gabor(i
没有合适的资源?快使用搜索试试~ 我知道了~
人脸表情/微表情识别,毕设作品 使用gabor滤波,pca+lda降维,svm分类 图形界面使用pyqt

共807个文件
jpg:749个
xml:21个
model:6个

1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉

温馨提示
人脸表情/微表情识别,毕设作品。使用gabor滤波,pca+lda降维,svm分类。图形界面使用pyqt。libSVM经过重新编译,可通过设置全局变量OMP_NUM_THREADS来使用多线程训练模型。
资源推荐
资源详情
资源评论




























收起资源包目录





































































































共 807 条
- 1
- 2
- 3
- 4
- 5
- 6
- 9
资源评论

- m0_734691742025-04-03资源不错,对我启发很大,获得了新的灵感,受益匪浅。

Java程序员-张凯
- 粉丝: 1w+
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 技术转移机构如何借助AI+数智应用应对市场竞争加剧与服务能力不足的挑战?.docx
- 技术转移机构如何通过AI+数智应用实现业务增长与客户价值提升?.docx
- 技术转移机构在AI+数智应用转型中面临挑战,如何借助AI+数智应用方案突破瓶颈?.docx
- 科技服务合作伙伴如何借助AI+数智应用帮助提升产品差异化竞争力?.docx
- 科技服务机构如何借力AI+数智应用提升品牌价值和客户信任度?.docx
- 科技服务产品同质化严重,如何借助AI+数智应用打造差异化竞争力?.docx
- 科技服务机构如何借助AI+数智应用低成本构建智能化服务体系?.docx
- 科技服务机构如何借助AI+数智应用低成本拓展业务增量?.docx
- 科技服务机构如何借助AI+数智应用高效满足企业多元化需求?.docx
- 科技服务机构如何借助AI+数智应用工具高效支持企业技术创新?.docx
- 科技服务机构如何借助AI+数智应用结合企业共性需求,打造高附加值解决方案?.docx
- 科技服务机构如何借助AI+数智应用工具提升品牌价值并拓展客户群体?.docx
- 科技服务机构如何借助AI+数智应用快速响应企业的临时创新需求?.docx
- 科技服务机构如何借助AI+数智应用手段丰富服务内容、延伸服务链?.docx
- 科技服务机构如何借助AI+数智应用提升产品差异化竞争力?.docx
- 科技服务机构如何借助AI+数智应用提升竞争力?.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
