create_txt.py代码如下:
import sys
import os.path
from os.path import basename
if name == “main”:
#if len(sys.argv) != 2:
# print "usage: create_csv <base_path>"
# sys.exit(1)
#BASE_PATH=sys.argv[1] #用于cmd格式下,优点是路径自己输入,这里为了IDEL中调试方便,暂不使用
BASE_PATH="D:/Tensorflow/uban/biaojiwutest/creat_txt" #creat_txt文件夹下面还有一个annotations子文件夹,多分类时可以多个子文件夹
SEPARATOR=" " #空格隔开,如biaojiwu_1 1 1 1后面有三个1,是按tensorflow原例子来的,为大类子类孙类
fh = open("trainval.txt",'w') #create_txt.py程序同一文件夹中生成trainval.txt
label = 1
for dirname, dirnames, filenames in os.walk(BASE_PATH):
for subdirname in dirnames:
subject_path = os.path.join(dirname, subdirname)
for filename in os.listdir(subject_path):
#abs_path = "%s/%s" % (subject_path, filename)
#abs_path = "%s" % (filename)
if os.path.splitext(os.path.basename(filename))[1]=='.xml':
abs_name =os.path.splitext(os.path.basename(filename))[0]
print ("%s%s%d%s%d%s%d" % (abs_name, SEPARATOR, label, SEPARATOR, label, SEPARATOR, label)) #控制台输出以便查看
#print ("%s%s%d" % (abs_name, SEPARATOR, label))
fh.write(abs_name)
fh.write(SEPARATOR)
fh.write(str(label))
fh.write(SEPARATOR)
fh.write(str(label))
fh.write(SEPARATOR)
fh.write(str(label))
fh.write("\n")
#label = label + 1
fh.close()
文件存放目录如下图:
上图中的classes.txt是用labelimg标注时候自动产生的,不用管它。create_txt.py可以放在任何目录下,trainval.txt在同一目录下产生内容如下图。
然后就可以进行训练了。不过训练前要把annotations文件夹下面的所有xml文件,trainval.txt还有图片文件放在对的位置(跟你自己的训练程序内的路径设置有关)。我的所有训练数据包括:所有xml文件,trainval.txt,所有图片文件是在data文件夹中,如下图:
进去如下:
上面生成的trainval.txt放到这里的annotations文件夹下面
xmls文件夹下面放的是所有的xml文件(跟刚开始creat_txt文件夹下面的annotations子文件夹中的xml文件一模一样),如下图(省略显示6以下):
data文件夹下的images子文件夹内放的是所有标注时用的图片即所有要训练的图片,如下:
关于程序的另一种思路:
分离路径和文件名: os.path.split()
区分文件的名字和后缀:os.path.splitext()
核心代码如下:
import os
file_path = “D:/test/test.py”
(filepath, tempfilename) = os.path.split(file_path)
(filename, extension) = os.path.splitext(tempfilename)