欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

NIST指纹数据识别(二)数据处理

发布时间:2024/3/12 编程问答 74 豆豆
生活随笔 收集整理的这篇文章主要介绍了 NIST指纹数据识别(二)数据处理 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

数据处理

数据分析

NIST指纹数据介绍

前面一篇文章简单介绍了NIST指纹数据集的大概形式和组成,一张图片配一个标签的txt文件。两个文件名相同(.png和.txt)由于图片标签是分开的。我们需要生成两个对应的批次来对图片和标签进行处理。


数据准备

首先,我们先对标签进行处理,观察下图标签格式。

我们这次只对指纹纹型进行分析,所以只关注class属性。共有W,A,R,L,T五种属性。所以可以采用独热编码 ,原理很简单,即每个标签用一个numpy数组表示,数组有5个元素,按照W,A,R,L,T的顺序,只在该图片对应的类型的数组元素处置1,其他置0,即可表示。代码如下。

import numpy as np import os def switch_pos(word):switcher = {"W":0,"A":1,"R":2,"L":3,"T":4}return switcher.get(word, "nothing")def text2vec(word,classes):vector = np.zeros(classes) # float64pos = switch_pos(word) # index of the wordvector[pos] = 1return vector

这样,我们就得到了一张标签对应的独热编码形式。其他其他的文件打开等等就先不放在这里了。有兴趣的可以去我的github拿完整的代码。


顺便提一句,我这里是先建立了两个列表,一个是图片路径列表和对应的标签列表。


处理好标签之后,我们开始生成供训练用的batch。因为没有怎么看tensorflow的queue和producer这里。所以这里就简单粗暴的用自己的方式生成batch。
第一步,为了保证shuffle的效果,我用randint先生成一个读取的start位置。为了均衡性能问题,就不一个个都随机生成了,就直接在start+batch_size处设置end。然后迭代输入的图片和标签列表,送入batch中。

import cv2 import random as rd def get_random_batch(image_list,label_list,image_H,image_W,batch_size,classes):image_batch = np.zeros(batch_size,image_H*image*W)label_batch = np.zeros(batch_size,classes)start = rd.randint(0,len(image_list)-batch_size)end = start + batch_sizedef convertgray(img):if len(img.shape) > 2:gray = np.mean(img, -1)return grayelse:return imgfor i in range(start, end):image = cv2.imread(image_list[i])image = convert2gray(image)image_batch[i-start,:] = image.fatten()label_batch[i-start,:] = label_list[i] return image_batch, label_batch

好了,今天先介绍到这里,之后会把神经网络这一块放上来,也会用tensorflow里的函数重新实现下数据读取。看完之后如果有疑问可以联系我交流,邮箱982827552@qq.com,完整代码放在我的github上了,希望大家可以顺手给个星啊。
github:https://github.com/xiaoye74/NIST_fingerprint/blob/master/README.md#input-part

转载请注明出处,谢谢

总结

以上是生活随笔为你收集整理的NIST指纹数据识别(二)数据处理的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。