根据xml文件自动生成tainval.txt文件--用于多目标分类识别

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值