2017-09-28 10 views
0

自分のデータでInceptionV3モデルを再学習し、Tensorflow画像分類チュートリアルhttps://www.tensorflow.org/tutorials/image_recognitionからコードを修正しようとしています。複数の画像を分類するためのTensorFlowチュートリアルのlabel_image.pyの変更

は私がリストとしてディレクトリに読み込み、それをループしようとしましたが、これは動作しませんでした:

load_graph(FLAGS.graph) 

filelist = os.listdir(FLAGS.image) 

for i in filelist: 
    # load image 
    image_data = load_image(i) 

私はエラーがFLAGSが定義されていないことを言ってもらうので、私はFLAGSが持っていると思いますload_image関数と一緒に行く?これは動作するはず

import os 
import tensorflow as tf 

# Define this after your imports. This is similar to python argparse except more verbose 
FLAGS = tf.app.flags.FLAGS 

tf.app.flags.DEFINE_string('image', '/Users/photos', 
          """ 
          Define your 'image' folder here 
          or as an argument to your script 
          for eg, test.py --image /Users/.. 
          """) 



# use listdir to list the images in the target folder 
filelist = os.listdir(FLAGS.image) 

# now iterate over the objects in the list 
for i in filelist: 
    # load image 
    image_data = load_image(i) 

from __future__ import absolute_import 
from __future__ import division 
from __future__ import print_function 

import argparse 
import sys 
import os 
import tensorflow as tf 

parser = argparse.ArgumentParser() 
parser.add_argument(
    '--image', required=True, type=str, help='Absolute path to image file.') 
parser.add_argument(
    '--num_top_predictions', 
    type=int, 
    default=5, 
    help='Display this many predictions.') 
parser.add_argument(
    '--graph', 
    required=True, 
    type=str, 
    help='Absolute path to graph file (.pb)') 
parser.add_argument(
    '--labels', 
    required=True, 
    type=str, 
    help='Absolute path to labels file (.txt)') 
parser.add_argument(
    '--output_layer', 
    type=str, 
    default='final_result:0', 
    help='Name of the result operation') 
parser.add_argument(
    '--input_layer', 
    type=str, 
    default='DecodeJpeg/contents:0', 
    help='Name of the input operation') 


def load_image(filename): 
    """Read in the image_data to be classified.""" 
    return tf.gfile.FastGFile(filename, 'rb').read() 


def load_labels(filename): 
    """Read in labels, one label per line.""" 
    return [line.rstrip() for line in tf.gfile.GFile(filename)] 


def load_graph(filename): 
    """Unpersists graph from file as default graph.""" 
    with tf.gfile.FastGFile(filename, 'rb') as f: 
    graph_def = tf.GraphDef() 
    graph_def.ParseFromString(f.read()) 
    tf.import_graph_def(graph_def, name='') 


def run_graph(image_data, labels, input_layer_name, output_layer_name, 
       num_top_predictions): 
    with tf.Session() as sess: 
    # Feed the image_data as input to the graph. 
    # predictions will contain a two-dimensional array, where one 
    # dimension represents the input image count, and the other has 
    # predictions per class 
    softmax_tensor = sess.graph.get_tensor_by_name(output_layer_name) 
    predictions, = sess.run(softmax_tensor, {input_layer_name: image_data}) 

    # Sort to show labels in order of confidence 
    top_k = predictions.argsort()[-num_top_predictions:][::-1] 
    for node_id in top_k: 
     human_string = labels[node_id] 
     score = predictions[node_id] 
     print('%s (score = %.5f)' % (human_string, score)) 

    return 0 


def main(argv): 
    """Runs inference on an image.""" 
    if argv[1:]: 
    raise ValueError('Unused Command Line Args: %s' % argv[1:]) 

    if not tf.gfile.Exists(FLAGS.image): 
    tf.logging.fatal('image file does not exist %s', FLAGS.image) 

    if not tf.gfile.Exists(FLAGS.labels): 
    tf.logging.fatal('labels file does not exist %s', FLAGS.labels) 

    if not tf.gfile.Exists(FLAGS.graph): 
    tf.logging.fatal('graph file does not exist %s', FLAGS.graph) 


    # load image 
    image_data = load_image(FLAGS.image) 

    # load labels 
    labels = load_labels(FLAGS.labels) 

    # load graph, which is stored in the default session 
    load_graph(FLAGS.graph) 

    run_graph(image_data, labels, FLAGS.input_layer, FLAGS.output_layer, 
      FLAGS.num_top_predictions) 


if __name__ == '__main__': 
    FLAGS, unparsed = parser.parse_known_args() 
    tf.app.run(main=main, argv=sys.argv[:1]+unparsed) 

答えて

0

FLAGSは、TensorFlowフラグモジュールではなく、argparserモジュールから来ており、関数内でFLAGSを呼び出す必要があります。私は最終的に私はそれが何が起こっているかだと思う別の関数を作ることによって、これを解決:

def get_image_list(path): 
    return glob.glob(path + '*.jpg') 

その後、さらにループを呼び出すダウン:

filelist = get_image_list(FLAGS.image) 

    for i in filelist: 
     image_data = load_image(i) 

     run_graph(image_data, labels, FLAGS.input_layer, FLAGS.output_layer, 
      FLAGS.num_top_predictions) 
0

は、以下のことを試してみてくださいtf.flags.FLAGS、または上部に、from tf.flags import FLAGS

0

を試してみてください。これは、元のプログラムです。それが役に立てば幸い。

関連する問題