解决not well-formed (invalid token)BUG,xml标签转到txt标签,txt标签转到xml标签,滑动窗口切割图像并且同步标签

紧接上次,我的最终目的现在是滑动窗口切割图片并且同步标签。需要对xml文件进行读写。

python报错xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 3, column 50

我的解决方式最后我发现一个问题目标框好像被移动了。

所以最后我是xml文件转txt标签,然后根据txt文件新建xml文件,还可以没有错误啦!

xml标签 to yolov4txt标签

'''#这个文件为对ann_path_origin和img_path_origin选取特定类别的图片和xml
#生成的结果为一个图,一个txt文件,这个代码删除了只添加正样本(含有想要检测对象的样本),意味着尽管这张图片没有包含目标也会被写入txt
不会复制提取出来的图片
'''
import os
from tqdm import tqdm
import shutil
import xml.etree.ElementTree as ET
import xml

ann_path_origin = r'/home/xys/CloundShiProjects/traffic_light/trafficlight_dect/data/Annotations/'        #要提取的ann的xml标签文件路径,按需修改
img_path_origin = r'/home/xys/CloundShiProjects/traffic_light/trafficlight_dect/data/JPEGImages/'         #要提取的Image文件路径,按需修改
# img_savepath = r'/home/xys/CppProjects/darknet/xinding/obj/'         #要保存到的Images文件路径,按需修改
txt_save_path = r'/home/xys/CloundShiProjects/traffic_light/trafficlight_dect/data/labels/'   #存入txt的路径,,按需修改
class_names_path=r'/home/xys/CloundShiProjects/traffic_light/trafficlight_dect/data/class.txt'     #类别文件路径

#-----------------------函数定义------------------------------------
def read_class_name(path):        #读取path下的类别民
    f = open(path,'r')
    classes_name = []
    for i in f.readlines():
        classes_name.append(i.strip())
    return classes_name

def mkr(path):
    '''
    如果path存在,就先删除所有内容再创建,否则直接创建
    '''
    if os.path.exists(path):#先删除再创建
        shutil.rmtree(path)#递归删除目录树
        os.mkdir(path)#创建目录
    else:
        os.mkdir(path)#如果不存在则直接创建

names = locals()
classes_name = read_class_name(class_names_path)  #读取类别信息,按需修改
# mkr(img_savepath)                               #创建文件夹
mkr(txt_save_path)

count = 0
for xml_file_name in tqdm(os.listdir(ann_path_origin),ncols=150):
    file_name = xml_file_name[:-4]
    xml_file = open(ann_path_origin+xml_file_name,errors='ignore')      #打开xml文件
    tree = ET.parse(xml_file)
    # try:
    #     tree = ET.parse(xml_file)
    # except xml.etree.ElementTree.ParseError:
    #     print(xml_file_name)
    #     file_front = xml_file_name[:-4]
    #     shutil.move(ann_path_origin+xml_file_name, '/home/xys/CloundShiProjects/traffic_light/trafficlight_dect/data/新建文件夹')
    #     shutil.move(img_path_origin+file_front+'.jpg', '/home/xys/CloundShiProjects/traffic_light/trafficlight_dect/data/新建文件夹')
    root = tree.getroot()                               #得到根
    image_width = int(root.find('size').find('width').text)
    image_height = int(root.find('size').find('height').text)

    all_line = []
    for obj in root.iter('object'):
        diffcult = obj.find('difficult').text         #找到difficult,难以识别的类
        cls_name = obj.find('name').text
        if cls_name not in classes_name or int(diffcult) == 1:
            continue

        #--------------------下面的语句表示存在这个boundingbox,将此boundingbox的坐标类别写入到xml里-------------------
        xmlbox = obj.find('bndbox')                 #找到boundingbox标签
        xmin = int(float(xmlbox.find('xmin').text))
        ymin = int(float(xmlbox.find('ymin').text))
        xmax = int(float(xmlbox.find('xmax').text))
        ymax = int(float(xmlbox.find('ymax').text))

        #将boundingbox的四个坐标准换成中心点的坐标和boundingbox的宽高,并且转换映射到0-1
        cls_id = classes_name.index(cls_name)
        bb_h, bb_w = ymax - ymin, xmax - xmin
        if image_width == 0 or image_height == 0:
            continue
        coodr_x, coord_y = (xmin + bb_w / 2) / image_wid
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言初-xys

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值