TensorFLow能够识别的图像文件,可以通过numpy,使用tf.Variable或者tf.placeholder加载进tensorflow;也可以通过自带函数(tf.read)读取,当图像文件过多时,一般使用pipeline通过队列的方法进行读取。下面我们介绍两种生成tensorflow的图像格式的方法,供给tensorflow的graph的输入与输出。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import cv2 import numpy as np import h5py height = 460 width = 345 with h5py. File ( 'make3d_dataset_f460.mat' , 'r' ) as f: images = f[ 'images' ][:] image_num = len (images) data = np.zeros((image_num, height, width, 3 ), np.uint8) data = images.transpose(( 0 , 3 , 2 , 1 )) |
先生成图像文件的路径:ls *.jpg> list.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import cv2 import numpy as np image_path = './' list_file = 'list.txt' height = 48 width = 48 image_name_list = [] # read image with open (image_path + list_file) as fid: image_name_list = [x.strip() for x in fid.readlines()] image_num = len (image_name_list) data = np.zeros((image_num, height, width, 3 ), np.uint8) for idx in range (image_num): img = cv2.imread(image_name_list[idx]) img = cv2.resize(img, (height, width)) data[idx, :, :, :] = img |
2 Tensorflow自带函数读取
1
2
3
4
5
6
7
8
9
10
11
12
|
def get_image(image_path): """Reads the jpg image from image_path. Returns the image as a tf.float32 tensor Args: image_path: tf.string tensor Reuturn: the decoded jpeg image casted to float32 """ return tf.image.convert_image_dtype( tf.image.decode_jpeg( tf.read_file(image_path), channels = 3 ), dtype = tf.uint8) |
pipeline读取方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
# Example on how to use the tensorflow input pipelines. The explanation can be found here ischlag.github.io. import tensorflow as tf import random from tensorflow.python.framework import dtypes dataset_path = "/path/to/your/dataset/mnist/" test_labels_file = "test-labels.csv" train_labels_file = "train-labels.csv" test_set_size = 5 IMAGE_HEIGHT = 28 IMAGE_WIDTH = 28 NUM_CHANNELS = 3 BATCH_SIZE = 5 def encode_label(label): return int (label) def read_label_file( file ): f = open ( file , "r" ) filepaths = [] labels = [] for line in f: filepath, label = line.split( "," ) filepaths.append(filepath) labels.append(encode_label(label)) return filepaths, labels # reading labels and file path train_filepaths, train_labels = read_label_file(dataset_path + train_labels_file) test_filepaths, test_labels = read_label_file(dataset_path + test_labels_file) # transform relative path into full path train_filepaths = [ dataset_path + fp for fp in train_filepaths] test_filepaths = [ dataset_path + fp for fp in test_filepaths] # for this example we will create or own test partition all_filepaths = train_filepaths + test_filepaths all_labels = train_labels + test_labels all_filepaths = all_filepaths[: 20 ] all_labels = all_labels[: 20 ] # convert string into tensors all_images = ops.convert_to_tensor(all_filepaths, dtype = dtypes.string) all_labels = ops.convert_to_tensor(all_labels, dtype = dtypes.int32) # create a partition vector partitions = [ 0 ] * len (all_filepaths) partitions[:test_set_size] = [ 1 ] * test_set_size random.shuffle(partitions) # partition our data into a test and train set according to our partition vector train_images, test_images = tf.dynamic_partition(all_images, partitions, 2 ) train_labels, test_labels = tf.dynamic_partition(all_labels, partitions, 2 ) # create input queues train_input_queue = tf.train.slice_input_producer( [train_images, train_labels], shuffle = False ) test_input_queue = tf.train.slice_input_producer( [test_images, test_labels], shuffle = False ) # process path and string tensor into an image and a label file_content = tf.read_file(train_input_queue[ 0 ]) train_image = tf.image.decode_jpeg(file_content, channels = NUM_CHANNELS) train_label = train_input_queue[ 1 ] file_content = tf.read_file(test_input_queue[ 0 ]) test_image = tf.image.decode_jpeg(file_content, channels = NUM_CHANNELS) test_label = test_input_queue[ 1 ] # define tensor shape train_image.set_shape([IMAGE_HEIGHT, IMAGE_WIDTH, NUM_CHANNELS]) test_image.set_shape([IMAGE_HEIGHT, IMAGE_WIDTH, NUM_CHANNELS]) # collect batches of images before processing train_image_batch, train_label_batch = tf.train.batch( [train_image, train_label], batch_size = BATCH_SIZE #,num_threads=1 ) test_image_batch, test_label_batch = tf.train.batch( [test_image, test_label], batch_size = BATCH_SIZE #,num_threads=1 ) print "input pipeline ready" with tf.Session() as sess: # initialize the variables sess.run(tf.initialize_all_variables()) # initialize the queue threads to start to shovel data coord = tf.train.Coordinator() threads = tf.train.start_queue_runners(coord = coord) print "from the train set:" for i in range ( 20 ): print sess.run(train_label_batch) print "from the test set:" for i in range ( 10 ): print sess.run(test_label_batch) # stop our queue threads and properly close the session coord.request_stop() coord.join(threads) sess.close() |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://blog.csdn.net/helei001/article/details/51354404