转换时,float的文字无效

时间:2017-10-18 06:39:39

标签: python

我试图在Yolo网络上训练我自己的数据,但在此之前我必须将边界框坐标转换为它想要的形式。

文件内容如下:

0
53 19 163 116

我尝试将其转换为网络使用以下内容的形式。

代码是:

import os
from os import walk, getcwd
from PIL import Image

classes = ["stopsign"]

def convert(size, box):
    dw = 1./size[0]
    dh = 1./size[1]
    x = (box[0] + box[1])/2.0
    y = (box[2] + box[3])/2.0
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x*dw
    w = w*dw
    y = y*dh
    h = h*dh
    return (x,y,w,h)


"""-------------------------------------------------------------------
""" 

""" Configure Paths"""   
mypath = "/home/decentmakeover2/BBox-Label-Tool/Labels/002/"
outpath = "/home/decentmakeover2/output/"

cls = "stopsign"
if cls not in classes:
    exit(0)
cls_id = classes.index(cls)

wd = getcwd()
list_file = open('%s/%s_list.txt'%(wd, cls), 'w')

""" Get input text file list """
txt_name_list = []
for (dirpath, dirnames, filenames) in walk(mypath):
    txt_name_list.extend(filenames)
    break
print(txt_name_list)

""" Process """
for txt_name in txt_name_list:
    #txt_file =  open("Labels/stop_sign/001.txt", "r")

""" Open input text files """
    txt_path = mypath + txt_name
    print("Input:" + txt_path)
    txt_file = open(txt_path, "r")
    lines = txt_file.read().split('\r\n')   #for ubuntu, use "\r\n" 
   instead of "\n"

""" Open output text files """
txt_outpath = outpath + txt_name
print("Output:" + txt_outpath)
txt_outfile = open(txt_outpath, "w")


""" Convert the data to YOLO format """
ct = 0
for line in lines:
    #print('lenth of line is: ')
    #print(len(line))
    #print('\n')
    if(len(line) >= 2):
        ct = ct + 1
        print(line + "\n")
        elems = line.split(' ')
        print(elems)
        xmin = elems[0]
        xmax = elems[2]
        ymin = elems[1]
        ymax = elems[3]
        #
        img_path = str('%s/images/%s/%s.JPEG'%(wd, cls, 
os.path.splitext(txt_name)[0]))
        #t = magic.from_file(img_path)
        #wh= re.search('(\d+) x (\d+)', t).groups()
        im=Image.open(img_path)
        w= int(im.size[0])
        h= int(im.size[1])
        #w = int(xmax) - int(xmin)
        #h = int(ymax) - int(ymin)
        # print(xmin)
        print(w, h)
        b = (float(xmin), float(xmax), float(ymin), float(ymax))
        bb = convert((w,h), b)
        print(bb)
            txt_outfile.write(str(cls_id) + " " + " ".join([str(a) for 
a 
in bb]) + '\n')

    """ Save those images with bb into list"""
    if(ct != 0):
        list_file.write('%s/images/%s/%s.JPEG\n'%(wd, cls, 
os.path.splitext(txt_name)[0]))

list_file.close()         

我得到错误: 首先,它打印出所有文件名和数据内容,然后,

['0\n53', '19', '163', '116\n']
(262, 192)
Traceback (most recent call last):
  File "text.py", line 84, in <module>
   b = (float(xmin), float(xmax), float(ymin), float(ymax))
ValueError: invalid literal for float(): 0
53

我不确定该怎么做。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如错误消息中所示,您的第一个字词为'0\n53',其中'0'后跟'53'。因此它不被检测为浮子。只需与'\n'分开即可。