机器学习之掌纹识别

  • 一、掌纹特征提取
    • 1.1 Gabor滤波器
  • 二、掌纹信息分类
    • 2.1 基于PCA+SVM的掌纹信息分类
    • 2.2 基于PCA+KNN的掌纹信息分类
    • 分类结果总结
  • 三、掌纹信息匹配
    • 3.1掌纹信息相似度匹配

一、掌纹特征提取

1.1 Gabor滤波器

Gabor滤波器是一个或一组Gabor函数离散形式,在计算机视觉中常用到Gabor滤波器来提取纹理特征。说白了,就是一个加了高斯窗的傅里叶变换。
Gabor滤波器(专注于纹理特征的一种滤波器)
链接: Gabor特征的详细介绍(博主推荐)

下面时我们项目的代码部分:
Gabor特征采集部分如下(示例):
1.建立Gabor滤波器

def build_filters():gabor_filters = []gabor_size = [6,9,12,15,18,21] #定义gabor尺度,6个lamda = np.pi/1.0 #波长for theta in np.arange(0,np.pi,np.pi / 4): #定义gabor的4个方向for i in range(6):kern = cv2.getGaborKernel((gabor_size[i],gabor_size[i]),1.0,theta,lamda,0.5,0,ktype=cv2.CV_32F)kern /= 1.2*kern.sum()filters.append(kern)print("np.arange(0,np.pi,np.pi / 4)",np.arange(0,np.pi,np.pi / 4))print("np.pi",np.pi)print("len",len(gabor_filters))return gabor_filters

2.Gabor特征提取

def getGabor(img,filters):print('len(filters)',len(filters))res = [] #滤波结果for i in range(len(filters)):res1 = scan_win(img,filters[i])res.append(np.asarray(res1))# pb.figure(2)for temp in range(len(res)):pb.subplot(4,6,temp+1)pb.imshow(res[temp],cmap='gray')# pb.show()return res

3.整合特征导入txt文件

def make_feature(filters):pic_list = []#将所有图片的特征向量进行堆叠,最后得到(500,16384)大小的特征矩阵stack_metrix = np.array([[0]])count=0for i in range(0, 100):# 用于存放当前类别标签(用外层循环i的值来表示)pic_list.append(i)class_matrix = np.array(pic_list, ndmin=2)for j in range(1, 6):path = 'ROI/p_{}_{}.bmp'.format(i, j)x = cv2.imread(path)data=getGabor(x,filters)data = np.asarray(data)data=normalization(data)data = np.reshape(data, (1, -1))one_data = np.column_stack((data, class_matrix))print(one_data)count=count+1print('第{}次'.format(count))# y压缩标签列表添加到每张图片特征矩阵的最后一维即为扁平化处理# 第一次不堆叠if i == 0 and j == 1:stack_metrix = one_datacontinuestack_metrix = np.row_stack((stack_metrix, one_data))pic_list.pop()np.savetxt('(new)feature.txt', stack_metrix)

二、掌纹信息分类

2.1 基于PCA+SVM的掌纹信息分类

链接: SVM(支持向量机)最佳理解.

代码如下(示例):

def train_model_pca_svm():"""1.PCA+SVM进行分类2.PCA降维至20维:return:"""data, target = load_data()x_train, x_test, y_train, y_test = train_test_split(data, target, test_size=0.3, random_state=13)# 利用PCA将特征降至20维,测试集上的预测精度为: 0.9487179487179487# 利用PCA将特征降至50维,测试集上的预测精度为: 0.9572649572649573# 利用PCA将特征降至100维,测试集上的预测精度为: 0.9658119658119658pca = PCA(n_components=100)x_train = pca.fit_transform(x_train)svm_clf = SVC(C=100)svm_clf.fit(x_train, y_train)# 利用在训练集上进行降维的PCA对测试数据进行降维# 保证转换矩阵相同x_test_process = pca.transform(x_test)y_predict = svm_clf.predict(x_test_process)score = svm_clf.score(x_test_process, y_test)print('测试集上的预测精度为:{}'.format(score))print('\n')print('测试集前10个样本的类别为:', y_test[:10].tolist())print('预测的类别为:', y_predict[:10])print('\n')print(classification_report(y_test, y_predict))

2.2 基于PCA+KNN的掌纹信息分类

链接: KNN(K邻近)最佳理解.

代码如下(示例):

def train_model_pca_knn(i):"""1.PCA+KNN进行分类2.PCA降维至20维:return:"""data, target = load_data()x_train, x_test, y_train, y_test = train_test_split(data, target, test_size=0.3, random_state=13)# 利用PCA将特征降至100维,测试集上的预测精度为: 0.9658119658119658pca = PCA(n_components=20)x_train = pca.fit_transform(x_train)my_model=KNeighborsClassifier(algorithm='kd_tree',p=10,n_neighbors=i)my_model.fit(x_train, y_train)#k为1,测试集上的预测精度为:0.9316239316239316# 利用在训练集上进行降维的PCA对测试数据进行降维# 保证转换矩阵相同x_test_process = pca.transform(x_test)y_predict = my_model.predict(x_test_process)score = my_model.score(x_test_process, y_test)print('测试集上的预测精度为:{}'.format(score))print('\n')print('测试集前10个样本的类别为:', y_test[:10].tolist())print('预测的类别为:', y_predict[:10])print('\n')print(classification_report(y_test, y_predict))

分类结果总结

对于该类掌纹分类效果上看,分类效果可见SVM优于KNN,由此可得出结论,SVM在该类图片数据集上的分类效果较好。

三、掌纹信息匹配

3.1掌纹信息相似度匹配

原理:获取特征文件进行扁平化处理之后对特征集的数据逐一匹配。

def compare_pic(feature1,feature2):unsim = 0x1 = np.array(feature1).flatten() #将特征做扁平化处理x2 = np.array(feature2).flatten()for pic1,pic1 in zip(x1,x2):if pic1 != pic1:unsim += 1print(unsim)sim = 1 - unsim/len(x1)print('相似度',sim)return sim

之后对图片特征逐个遍历检索即可。

    for i in range(0, 100):path = 'ROI/p_{}_{}.bmp'.format(i,1)x = cv2.imread(path)data=Gg.getGabor(x,filters)simial_score.append(int(compare_pic(data,feature)*1000))count=count+1print('第{}次检索'.format(count))class_score=simial_score.index(max(simial_score))

又是熬夜写文章的一晚。

希望可以帮助到有需要的朋友,我们一起学习,一起进步!!!
如果愿意和我交流技术的朋友,您将获得一下交流方式
QQ:1093279164
(纯粹交流技术!谢谢!也可以一起打比赛!!!)

机器学习之掌纹识别(掌纹分类)相关推荐

  1. linux搭建声纹识别,声纹识别SDK-FreeSR

    FreeSR (A Free Library for Speaker Recognition),免费的声纹识别/性别识别SDK,支持Android/Windows/Linux等平台. https:// ...

  2. 知物由学 | 听声辨人,看声纹识别技术如何保障内容安全?

    大家对"指纹"并不陌生,但听说过"声纹"吗? "违法犯罪变得越来越困难了.如今罪犯都没法使用电话了,因为侦探们可以通过他们在话筒上留下的声纹来追踪他. ...

  3. 声纹识别概述(1)初识

    声纹识别 1. 声纹概念 2. 声纹识别的分类 3. 声纹识别的原理 4. 声纹识别的关键 特征提取 模式识别 5. 声纹识别的技术指标 6. 影响声纹识别水平的因素 初识声纹 1. 声纹概念 声波频 ...

  4. 业界首个声纹识别与音频检索系统上线,10分钟搭建产业级应用

    随着深度学习技术的升级与产业的发展,智能语音交互已成为了我们日常生活中一个重要的组成部分,并广泛应用在地图导航播报.智能客服回访.手机语音输入以及各类智能助手等应用场景中,可以说语音已成为了人与机器之 ...

  5. 业界首个声纹识别与音频检索系统,10分钟搭建产业级应用

    随着深度学习技术的升级与产业的发展,智能语音交互已成为了我们日常生活中一个重要的组成部分,并广泛应用在地图导航播报.智能客服回访.手机语音输入以及各类智能助手等应用场景中,可以说语音已成为了人与机器之 ...

  6. 声纹识别demo_声纹识别 iOS SDK 文档

    # 声纹识别 iOS SDK 文档 # 1.简介 声纹识别(Voiceprint Recognition),是一项提取说话人声音特征和说话内容信息,自动核验说话人身份的技术.MSC SDK 声纹识别( ...

  7. 【论文解读】经典CNN对2D3D掌纹及掌静脉识别的性能评估

    掌纹识别(palmprint recognition)及掌静脉识别(palm vein recognition)作为两种新兴的生物特征识别技术已经引起广泛关注.最近几年,深度学习已经成为人工智能领域最 ...

  8. 深度学习之掌纹识别(DeepLearning Palmprint)

    深度学习之掌纹识别(Update) 本次我们还是基于Gabor滤波器去提取出掌纹特征,嘻嘻,这次打算复现一下今年五月份的那篇进口论文!<Deep Distillation Hashing for ...

  9. 基于深度学习的近红外掌纹识别原型系统设计与实现

    基于深度学习的近红外掌纹识别原型系统设计与实现 一.绪论 二.深度学习知识 三.Tensorflow 四.卷积神经网络 五.掌纹识别理论 掌纹图像采集 掌纹图像预处理 掌纹特征提取 掌纹特征匹配 掌纹 ...

最新文章

  1. elasticsearch 根据条件去除重复值_Excel工作表中的条件格式,不只是查找重复值,还有7种典型用法...
  2. KubeCon直击 | 华为云以技术布道“云边端芯”
  3. linux 自学系列:文件内容查找命令grep
  4. 带中文字库的12864LCD显示程序
  5. wxpython textctrl_如何从wxpython中的textctrl接受值
  6. startService和onBinderService混合开发音乐播放器
  7. PHP 根据referer 跳转,PHP利用REFERER根居访问来地址进行页面跳转
  8. 产品心经:产品经理应该知道的60件事
  9. MCPTAM标定部分 运行结果
  10. 【转贴CSDN】关于DataGrid的精华
  11. 暴露了自己的无知不是问题,问题是还坚决不改
  12. int main(argc,char *argv[])的含义
  13. ubuntu锐捷校园网
  14. 删除亚马逊Kindle电子书的DRM,将AZW转为PDF格式文档
  15. java正则判断11位手机号码_java-正则表达式判断手机号
  16. 2-1 组合优化问题
  17. :幽灵蛛(pholcus)(三)--header get post学习资料
  18. 为什么说采购一定要成为专家
  19. html双引号打不正确,双引号要占一个空格吗 为什么打双引号要空格一下才能出来...
  20. 无背景图片添加白色背景

热门文章

  1. 强大的同步工具FreeFileSync
  2. 数据结构——王卓老师PPT
  3. JavaScript 编码练习:利用一个按钮实现开始计时和停止计时
  4. win7旗舰版6l打印机咋安驱动_win7系统安装网络打印机驱动图文教程
  5. 2022年建筑电工(建筑特殊工种)考试模拟100题模拟考试平台操作
  6. 计算机专业申请phd美国,申请美国计算机PHD全奖的建议
  7. iOS自动化之tidevice
  8. 几何画板领衔起跑,提前启动双十一!
  9. 游戏微服务架构设计:etcd
  10. 大学物理第十二章复习笔记:气体动理论