2017-01-03 6 views
1

Ich möchte die JPEG-Bilder in Batch für die Bilderkennung lesen. Die Bilder befinden sich in der Datei/Image_p/und der Bildname wird in der Datei label.csv aufgelistet, die wie 14634_right dargestellt wird.Kann Bild in Tensorflow nicht erfolgreich lesen

Meine Frage ist Wie kann ich meinen Code reparieren, um die Bilder erfolgreich in den Stapel zu lesen? Um genauer zu sein, weiß ich nicht, ob ich eine for Schleife schreiben und wo es implementieren soll.

Für den Original-Code, bekam ich die Fehlermeldung auf tf.train.shuffle_batch() Funktion:

ValueError: All shapes must be fully defined: [TensorShape([Dimension(None), Dimension(None), Dimension(3)]), TensorShape([])] 

Meine Herkunft Code:

# filepath 
csv_filepath = r'C:\Users\Jeffy\OneDrive\Course\NMDA\retinaProject\label.csv' 

# image parameter 
pic_num = 100 
pic_height = 64 
pic_width = 64 
batch_size = 10 

# ============================================================================= 
# import library 
import tensorflow as tf 
import numpy as np 

# ============================================================================= 
# read csv data 
csv = np.loadtxt(open(csv_filepath,"rb"), delimiter=",", dtype='str') 
pic_filename = ["" for x in range(pic_num)] 

for i in range(pic_num): 
    pic_filename[i] = eval(csv[i,0]).decode("utf-8") +'.jpeg' 

# read the data into batch 
for i in range(pic_num): 
    # read and decode the image 
    image_contents = tf.read_file('Image_p/' + eval(csv[i,0]).decode("utf-8") +'.jpeg') 
    image = tf.image.decode_jpeg(image_contents, channels=3) 
    image = tf.to_float(image) 

    # Generate batch 
    batch = tf.train.shuffle_batch([image, float(eval(csv[i,1]))], 
            batch_size = batch_size, 
            num_threads = 1, 

            capacity = batch_size * 100, 
            min_after_dequeue = batch_size * 10) 


with tf.Session() as sess:  
    sess.run(tf.global_variables_initializer()) 

    coord = tf.train.Coordinator() 
    threads = tf.train.start_queue_runners(coord=coord) 

    image_tensor = sess.run([batch]) 
    print(batch) 

    coord.request_stop() 
    coord.join(threads) 

Plus, ich habe eine neue Datei auch writen, die ein Bild lesen erfolgreich (Danke für die Hilfe von Martianwars). Mein Testcode:

import tensorflow as tf  
# read and decode the image 
image_contents = tf.read_file('Image_p/11247_left.jpeg') 
image = tf.image.decode_jpeg(image_contents, channels=3) 

with tf.Session() as sess: 
    img = sess.run(image) 
    print(img) 
+0

Hat die Antwort Ihnen @Jeffy geholfen? – martianwars

Antwort

0

image eine (?, ?, 3) Form haben, da ist es noch nicht gelesen, aber Sie haben den Kanal in der decode_jpeg() Funktion angegeben. Versuchen Sie, stattdessen zu drucken

with tf.Session() as sess: 
    img = sess.run(image) 
    print(img) 
+0

vielen Dank. Würdest du mir helfen, den ersten Ursprungscode zu reparieren? ehrlich gesagt weiß ich nicht, ob und wo ich die for-Schleife und die 'tf.train.shuffle_batch()' schreiben soll. Ich bin ein ziemlich Anfänger in ML, vielen Dank! – Jeffy

+0

Können Sie versuchen, 'tf.train.shuffle_batch()' * nach * Sie haben 'sess.run (image)' ausgeführt? – martianwars

+0

thx viel! Es scheint funktioniert, aber ich habe immer noch einige Probleme bei der Zuordnung Bild mit seiner Bezeichnung = ( – Jeffy