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

2023-05-16

 

在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文件中的‘ ’不一定是真的空格。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐