批量修改YOLO数据集镜面后的labels和解决Python中bug

 

在Python3.8环境下用OpenMV对yolo数据集进行数据增强-镜面转换时,打算直接批量修改镜像前txt里的某值作为镜像后的labels。但发现有bug的风险,于是把代码移植到Python控制台。上图看出将字符串转化成float后再转化成str有出错的风险。除非用中间值传递。博主通过控制float精度并四舍五入解决,附上菜鸟代码

import os
path = './labels_aftermirror/test/'
for file in os.listdir(path):
    f = open(path + file, 'r+')
    temp = f.readlines()
    needx = []  # 存储截取后的每一块小数据
    for line in temp:
        needx.extend(line.split())  # ['序号','中心点x坐标', '中心点y坐标', 'x相对长度', 'y相对长度']
    for n in range(7):  # 此值应大于一张image中目标的最大数量
        if len(temp) > n:
            m = n*5 - 4
            needx[m] = str('{:.6f}'.format(1 - float(needx[m])))  # 若无精度限制,则可能报错
    f.seek(0)
    f.truncate()
    i = 1
    for data in needx:
        f.write(data + ' ')
        if i % 5 == 0:  # 每五个值留出空行
            f.write('\n')
        i = i + 1
    needx.clear()
    del n
    f.close()

其他:博主误把输出时的data+' '写成data+'\0',导致转化后的txt格式虽然看上去无误,但在调用cv2可视化代码时出现could not convert string to float,无法读取\x00。后来尝试将txt中空格删除并重打后发现可以读取。即txt文件中的‘ ’不一定是真的空格。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值