机器学习之掌纹识别(掌纹分类)
机器学习之掌纹识别
- 一、掌纹特征提取
- 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
(纯粹交流技术!谢谢!也可以一起打比赛!!!)
机器学习之掌纹识别(掌纹分类)相关推荐
- linux搭建声纹识别,声纹识别SDK-FreeSR
FreeSR (A Free Library for Speaker Recognition),免费的声纹识别/性别识别SDK,支持Android/Windows/Linux等平台. https:// ...
- 知物由学 | 听声辨人,看声纹识别技术如何保障内容安全?
大家对"指纹"并不陌生,但听说过"声纹"吗? "违法犯罪变得越来越困难了.如今罪犯都没法使用电话了,因为侦探们可以通过他们在话筒上留下的声纹来追踪他. ...
- 声纹识别概述(1)初识
声纹识别 1. 声纹概念 2. 声纹识别的分类 3. 声纹识别的原理 4. 声纹识别的关键 特征提取 模式识别 5. 声纹识别的技术指标 6. 影响声纹识别水平的因素 初识声纹 1. 声纹概念 声波频 ...
- 业界首个声纹识别与音频检索系统上线,10分钟搭建产业级应用
随着深度学习技术的升级与产业的发展,智能语音交互已成为了我们日常生活中一个重要的组成部分,并广泛应用在地图导航播报.智能客服回访.手机语音输入以及各类智能助手等应用场景中,可以说语音已成为了人与机器之 ...
- 业界首个声纹识别与音频检索系统,10分钟搭建产业级应用
随着深度学习技术的升级与产业的发展,智能语音交互已成为了我们日常生活中一个重要的组成部分,并广泛应用在地图导航播报.智能客服回访.手机语音输入以及各类智能助手等应用场景中,可以说语音已成为了人与机器之 ...
- 声纹识别demo_声纹识别 iOS SDK 文档
# 声纹识别 iOS SDK 文档 # 1.简介 声纹识别(Voiceprint Recognition),是一项提取说话人声音特征和说话内容信息,自动核验说话人身份的技术.MSC SDK 声纹识别( ...
- 【论文解读】经典CNN对2D3D掌纹及掌静脉识别的性能评估
掌纹识别(palmprint recognition)及掌静脉识别(palm vein recognition)作为两种新兴的生物特征识别技术已经引起广泛关注.最近几年,深度学习已经成为人工智能领域最 ...
- 深度学习之掌纹识别(DeepLearning Palmprint)
深度学习之掌纹识别(Update) 本次我们还是基于Gabor滤波器去提取出掌纹特征,嘻嘻,这次打算复现一下今年五月份的那篇进口论文!<Deep Distillation Hashing for ...
- 基于深度学习的近红外掌纹识别原型系统设计与实现
基于深度学习的近红外掌纹识别原型系统设计与实现 一.绪论 二.深度学习知识 三.Tensorflow 四.卷积神经网络 五.掌纹识别理论 掌纹图像采集 掌纹图像预处理 掌纹特征提取 掌纹特征匹配 掌纹 ...
最新文章
- elasticsearch 根据条件去除重复值_Excel工作表中的条件格式,不只是查找重复值,还有7种典型用法...
- KubeCon直击 | 华为云以技术布道“云边端芯”
- linux 自学系列:文件内容查找命令grep
- 带中文字库的12864LCD显示程序
- wxpython textctrl_如何从wxpython中的textctrl接受值
- startService和onBinderService混合开发音乐播放器
- PHP 根据referer 跳转,PHP利用REFERER根居访问来地址进行页面跳转
- 产品心经:产品经理应该知道的60件事
- MCPTAM标定部分 运行结果
- 【转贴CSDN】关于DataGrid的精华
- 暴露了自己的无知不是问题,问题是还坚决不改
- int main(argc,char *argv[])的含义
- ubuntu锐捷校园网
- 删除亚马逊Kindle电子书的DRM,将AZW转为PDF格式文档
- java正则判断11位手机号码_java-正则表达式判断手机号
- 2-1 组合优化问题
- :幽灵蛛(pholcus)(三)--header get post学习资料
- 为什么说采购一定要成为专家
- html双引号打不正确,双引号要占一个空格吗 为什么打双引号要空格一下才能出来...
- 无背景图片添加白色背景