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) # float64 pos = switch_pos(word) # index of the word vector[pos] = 1 return 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_size def convertgray(img): if len(img.shape) > 2: gray = np.mean(img, -1) return gray else: return img for 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
转载请注明出处,谢谢
