【目标检测】旋转框标注格式转换脚本 roLabelImgxml_to_royolo5txts

【目标检测】旋转框标注格式转换脚本

roLabelImgxml_to_royolo5txts.py
代码如下:

import math
import os
import os.path as osp
BASEDIR = osp.dirname(osp.abspath(__file__))
XMLDIR = osp.join(BASEDIR, 'overAlert_xmls')
OUTDIR = osp.join(BASEDIR, 'overAlert_txts')
if not osp.exists(OUTDIR):
    os.makedirs(OUTDIR)

xmlnames = [i for i in os.listdir(XMLDIR) if i.endswith('.xml')]
# print(names)

for xmlname in xmlnames:
    cx = []
    cy = []
    w = []
    h = []
    angle = []
    
    txtname = xmlname.split('.')[-2]+'.txt'
    
    with open(osp.join(OUTDIR, txtname), 'w') as fp:
        fp.write('')
    with open(osp.join(XMLDIR, xmlname), 'r') as fp:
        lines = fp.readlines()
    for line in lines:
        # print(line, end='')
        if line.strip().startswith('<width>'):
            img_width = eval(line.strip().strip('<width>').strip('</width>'))
            # print(img_width)
        if line.strip().startswith('<height>'):
            img_height = eval(line.strip().strip('<height>').strip('</height>'))
            # print(img_height)
        if line.strip().startswith('<depth>'):
            img_depth = eval(line.strip().strip('<depth>').strip('</depth>'))
            # print(img_depth)
        if line.strip().startswith('<cx>'):
            cx.append(eval(line.strip().strip('<cx>').strip('</cx>')))
            # print(cx)
        if line.strip().startswith('<cy>'):
            cy.append(eval(line.strip().strip('<cy>').strip('</cy>')))
            # print(cy)
        if line.strip().startswith('<w>'):
            w.append(eval(line.strip().strip('<w>').strip('</w>')))
            # print(w)
        if line.strip().startswith('<h>'):
            h.append(eval(line.strip().strip('<h>').strip('</h>')))
            # print(h)
        if line.strip().startswith('<angle>'):
            angle.append(eval(line.strip().strip('<angle>').strip('</angle>')))
            # print(angle)

    for i in range(len(cx)):
        cls0 = 0.0
        cx_i = cx[i] / img_width
        cy_i = cy[i] / img_height
        w_i = w[i] / img_width
        h_i = h[i] / img_height
        a_i = int(angle[i] * 180 / math.pi)

        if w_i < h_i:
            h_i, w_i = w_i, h_i
            a_i -= 90
            if a_i < 0:
                a_i += 180

        put_str = ' '.join([str(cls0), str(cx_i), str(cy_i), str(w_i), str(h_i), str(a_i)])
        with open(osp.join(OUTDIR, txtname), 'a') as fp:
            fp.write(put_str)
            fp.write('\n')
    print(xmlname, 'to', txtname, 'done.')

OK

  • 9
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值