I am using the code that I am providing below to convert csv to tfrecord in pycharm, but I can t get the tfrecord file. I get this message:
tensorflow.python.framework.errors_impl.NotFoundError: Failed to create a
NewWriteableFile: : The system cannot find the file specified.
; No such file or directory
我寻找了不同的选择,但没有人给我一个解决办法,也许我不理解什么,或者我没有发现的法典有错误。
我的守则是:
csv_input = "C:/Users/Documents/Model
A/MTrain_labels.csv"
output_path = "C:/Users/Documents/Model A/"
image_dir = "C:/Users/Documents/Model A/Base"
from __future__ import division
from __future__ import print_function
from __future__ import absolute_import
import os
import io
import sys
import pandas as pd
import tensorflow as tf
import protos
from PIL import Image
from object_detection.utils import dataset_util
from collections import namedtuple, OrderedDict
from numpy import split
flagsMJ.DEFINE_string( csv_input , , Path to the CSV input )
flagsMJ.DEFINE_string( output_path , , Path to output TFRecord )
flagsMJ.DEFINE_string( image_dir , , Path to images )
def class_text_to_int(row_label):
if row_label == "MM":
return 1
elif row_label == "JJ":
return 2
else:
row_label = None
def slipt(df, group):
data = namedtuple( data , [ filename , object ])
gb = df.groupby(group)
return [data(filename, gb.get_group(x)) for filename, x in zip(gb.groups.keys(),
gb.groups)]
def create_tf_example(group, path):
with tf.io.gfile.GFile(os.path.join(path, {} .format(group.filename)), rb ) as
fid:
encoded_jpg = fid.read()
encoded_jpg_io = io.BytesIO(encoded_jpg)
image = Image.open(encoded_jpg_io)
width, height = image.size
filename = group.filename.encode( utf8 )
image_format = b jpg
xmins = []
xmaxs = []
ymins = []
ymaxs = []
classes_text = []
classes = []
for index, row in group.object.iterrows():
xmins.append(row[ xmin ] / width)
xmaxs.append(row[ xmax ] / width)
ymins.append(row[ ymin ] / height)
ymaxs.append(row[ ymax ] / height)
classes_text.append(row[ class ].encode( utf8 ))
classes.append(class_text_to_int(row[ class ]))
tf_example = tf.train.Example(features=tf.train.Features(feature={
image/height : dataset_util.int64_feature(height),
image/width : dataset_util.int64_feature(width),
image/filename : dataset_util.bytes_feature(filename),
image/source_id : dataset_util.bytes_feature(filename),
image/encoded : dataset_util.bytes_feature(encoded_jpg),
image/format : dataset_util.bytes_feature(image_format),
image/object/bbox/xmin :
dataset_util.float_list_feature(xmins),
image/object/bbox/xmax :
dataset_util.float_list_feature(xmaxs),
image/object/bbox/ymin :
dataset_util.float_list_feature(ymins),
image/object/bbox/ymax :
dataset_util.float_list_feature(ymaxs),
image/object/class/text :
dataset_util.bytes_list_feature(classes_text),
image/object/class/label :
dataset_util.int64_list_feature(classes),
}))
return tf_example
def main(_):
writer =
tf.compat.v1.python_io.TFRecordWriter(FLAGS.output_path)
path = os.path.join(FLAGS.image_dir)
examples = pd.read_csv(FLAGS.csv_input)
grouped = split(examples, filename )
for group in grouped:
tf_example = create_tf_example(group, path)
writer.write(tf_example.SerializeToString())
writer.close()
output_path = os.path.join(os.getcwd(), FLAGS.output_path)
print( Successfully created the TFRecords:
{} .format(output_path))
if __name__ == __main__ :
tf.compat.v1.app.run()