大家都说gabor做人脸识别是传统方法中效果最好的,这几天就折腾实现了下,网上的python实现实在太少,github上的某个版本还误导了我好几天,后来采用将C++代码封装成dll供python调用的方式,成功解决。

图像经多尺度多方向的gabor变换后,gabor系数的数目成倍上升,所以对gabor系数必须进行降维才能送至后续的SVM分类器。测试图像使用att_faces数据集(40种类型,每种随机选5张训练,5张识别),降维方式我测试了DCT、PCA两种变换方式,说实话,dct不怎么靠谱,居然准确率不到70%,所以我有点怀疑网页http://blog.csdn.net/bxyill/article/details/7937850的实现效果,PCA方式也一般,平均识别率95%左右吧;同时测试了直接下采样、均值滤波后采样、最大值滤波后采样三种方式,它们的平均识别率分别为98.6%、98.5%、99%左右。可见,最大值滤波后再下采样的方式是最好的,其他的非线性降维方法没试过,我也不太懂

下面是python实现代码,不到50行哦

#coding:utf-8
import numpy as np
import cv2, os, math, os.path, glob, random
from ctypes import *
from sklearn.svm import LinearSVCdll = np.ctypeslib.load_library('zmGabor', '.')               #调用C++动态链接库
print dll.gabor
dll.gabor.argtypes = [POINTER(c_uint8), POINTER(c_uint8), c_int32, c_int32, c_double, c_int32, c_double, c_double]def loadImageSet(folder, sampleCount=5):trainData = []; testData = []; yTrain=[]; yTest = [];for k in range(1,41):folder2 = os.path.join(folder, 's%d' %k)data = [cv2.imread(d.encode('gbk'),0) for d in glob.glob(os.path.join(folder2, '*.pgm'))]sample = random.sample(range(10), sampleCount)trainData.extend([data[i] for i in range(10) if i in sample])testData.extend([data[i] for i in range(10) if i not in sample])yTest.extend([k]* (10-sampleCount))yTrain.extend([k]* sampleCount)return trainData, testData, np.array(yTrain), np.array(yTest)def getGaborFeature(m):res = []for i in range(6):for j in range(4):g = np.zeros(m.shape, dtype = np.uint8)dll.gabor(m.ctypes.data_as(POINTER(c_uint8)), g.ctypes.data_as(POINTER(c_uint8)),m.shape[0], m.shape[1],i*np.pi/6, j, 2*np.pi, np.sqrt(2))#res.append(cv2.dct(g[:10,:10].astype(np.float)))                            #先DCT变换再取低频系数#res.append(g[::10,::10])                                                    #直接子采样#res.append(cv2.blur(g, (10,10))[5::10, 5::10])                              #先均值滤波再子采样res.append(255-cv2.erode(255-g, np.ones((10,10)))[5::10, 5::10])             #先最大值滤波再子采样return np.array(res)
def main(folder=u'D:/gabor/att_faces'):trainImg, testImg, yTrain, yTest = loadImageSet(folder)xTrain = np.array([getGaborFeature(d).ravel() for d in trainImg])xTest  = np.array([getGaborFeature(d).ravel() for d in testImg])lsvc = LinearSVC()                              #支持向量机方法lsvc.fit(xTrain, yTrain)lsvc_y_predict = lsvc.predict(xTest)print u'支持向量机识别率: %.2f%%' % (lsvc_y_predict == np.array(yTest)).mean()if __name__ == '__main__':main()

  

转载于:https://www.cnblogs.com/zmshy2128/p/6180756.html

gabor变换人脸识别的python实现,att_faces数据集平均识别率99%相关推荐

  1. PCA人脸识别的python实现

    这几天看了看PCA及其人脸识别的流程,并在网络上搜相应的python代码,有,但代码质量不好,于是自己就重新写了下,对于att_faces数据集的识别率能达到92.5%~98.0%(40种类型,每种随 ...

  2. 人脸识别的python实现代码_手把手教你用1行代码实现人脸识别 --Python Face_recognition...

    # filename : digital_makeup.py # -*- coding: utf-8 -*- # 导入pil模块 ,可用命令安装 apt-get install python-Imag ...

  3. 人脸识别的Python库

    https://github.com/ageitgey/face_recognition/blob/master/README_Simplified_Chinese.md

  4. Python破解验证码技术,识别率高达百分之八十

    本文将具体介绍如何利用Python的图像处理模块pillow和OCR模块pytesseract来识别上述验证码(数字加字母). 我们识别上述验证码的算法过程如下: 将原图像进行灰度处理,转化为灰度图像 ...

  5. ImageNet决定给人脸打码,却让哈士奇图片识别率猛增

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 315晚会让大家意识到人 ...

  6. 课程设计题目:基于python实现人脸识别打卡

    目录 摘要 一. 需求分析 二. 概要设计 总功能模块 录入人脸模块 实时检测模块 三. 详细设计 第三方库导入 建立相关储存文件 对照人脸获取 通过算法建立对照模型 人脸检测识别 日志返回 四. 执 ...

  7. 基于python的图像Gabor变换及特征提取

    基于python的图像Gabor变换及特征提取 1.前言 2. "Gabor帮主"简介 3."Gabor帮主"大招之图像变换 3."Gabor帮主&q ...

  8. openCV+ASM+LBP+Gabor实现人脸识别(GT人脸库)

    原理:使用GT人脸库做样本,VS2010下使用openCV2.44自带的Haar算法检測人脸区域,ASM Library特征检測,然后使用YCrCb颜色空间做肤色检測,再用LBP+Gabor小波提取特 ...

  9. 开源真香 离线识别率高 Python 人脸识别系统

    以往的人脸识别主要是包括人脸图像采集.人脸识别预处理.身份确认.身份查找等技术和系统.现在人脸识别已经慢慢延伸到了ADAS中的驾驶员检测.行人跟踪.甚至到了动态物体的跟踪. 由此可以看出,人脸识别系统 ...

最新文章

  1. linux mint 修改dns,如何在Ubuntu和LinuxMint中刷新DNS缓存
  2. Linux中如何添加/删除FTP用户并设置权限
  3. SQL Server:定时作业的设置方法
  4. C 语言编程 — const 关键字
  5. linux migrations病毒守付进程分析
  6. double小数点后最多几位_花了这么多冤枉钱后,我最喜欢这4款医美氨基酸洗面奶...
  7. 基于External-DNS的多集群Service DNS实践
  8. apache部署多个项目
  9. this super的用法
  10. 什么视频会议系统好?
  11. java jtree怎么初始化,java – 如何设置JTree“ctrl”选择模式始终启用
  12. java高级工程师------struts的知识重点
  13. 使用谷歌云盘生成直接下载的url
  14. 雅虎助手,thanks
  15. tomcate免安装版内存设置
  16. 安装VMware出现无效驱动器
  17. linux系统怎么设任务计划,在Linux系统上设置计划任务
  18. AUTOCAD——隔离
  19. php操作redis命令
  20. MATLAB冒号用法

热门文章

  1. python手机编译器推荐_Python编译器最新版|Python编译器手机版下载 v1.2 安卓版 - 数码资源网...
  2. Spring Cloud Config 使用总结
  3. VS返回到上次编辑和进入到下次编辑的位置快捷键
  4. Android开发笔记(一百三十八)文本输入布局TextInputLayout
  5. Spark学习之spark集群搭建
  6. ubuntu atpdpkg
  7. 前端面试之webpack面试常见问题
  8. 2018年第31周-hive支持的Delete和Update的配置
  9. □□□□□□(此处略去X个字)
  10. 瑞士Migros Ostschweiz使用RFID和EPCIS优化供应链的可视化