def input_stream(record_path, scope=None):
"""
Input data stream
ARGS
`record_path`: tf records file path
RETURN
`streams`: data streams
"""
with tf.device('/cpu:0'):
with tf.variable_scope(scope or 'input_stream'):
reader = tf.TFRecordReader()
filename_queue = tf.train.string_input_producer([record_path], None)
_, record_value = reader.read(filename_queue)
features = tf.parse_single_example(record_value,
{
'image_jpeg': tf.FixedLenFeature([], tf.string),
'image_name': tf.FixedLenFeature([], tf.string),
'word_polygons': tf.VarLenFeature(tf.float32),
# 'words': tf.VarLenFeature(tf.string) // FIXME: problem with parsing words
})
# decode jpeg image
image = tf.cast(tf.image.decode_jpeg(features['image_jpeg'], channels=3), tf.float32)
# extract bounding polygons
word_polygons = tf.sparse_tensor_to_dense(features['word_polygons'])
word_polygons = tf.reshape(word_polygons, [-1, WORD_POLYGON_DIM])
# extract words
# words = tf.sparse_tensor_to_dense(features['words'])
# output streams
streams = {'image': image,
'image_name': features['image_name'],
'image_jpeg': features['image_jpeg'],
'word_polygons': word_polygons}
return streams
评论列表
文章目录