如何从 pts 标签文件导出 TFRecords 用于 tensorflow 对象检测 api?
How to export TFRecords from pts label files for tensorflow object detection api?
通常我们从xml标签文件(例如labelimg)生成TFRecords时,有x.min、x.max、y.min和y.max,显示一个方形标签。
我们可以从中制作 CSV 数据并从中生成 TFRecords。
但在 pts 的情况下,值是作为非方形边界框,例如:
bounding_box: 534.588998862 232.095176337; 101.596234357 388.45367463; 51.3295676906 249.25367463; 484.322332196 92.8951763367
所以有四个 x 和 y 点,而不是 labelimg 给出的两个。
有人可以向我解释如何从 pts 生成 TFRecord 吗?
所以为了以防万一其他人有同样的问题,我写了一个脚本,将这四个点作为 xmin xmax ymin ymax 的正方形,这样我们就可以像从 xml labelimg.
这里是:
import os
import glob
import pandas as pd
from PIL import Image
import csv
for pts_file in glob.glob("./labels" + '/*.pts'):
with open(pts_file) as f:
im=Image.open("./img/" + pts_file[9:-3] + "jpg")
filename = pts_file[9:-3] + "jpg"
width = str(im.size[0])
height = str(im.size[1])
classs = "fish"
lines = f.readlines()
content = [line.split(' ')for line in open (pts_file)]
xmax = max(int(float(content[0][1])), int(float(content[0][4])), int(float(content[0][7])), int(float(content[0][10])))
xmin = min(int(float(content[0][1])), int(float(content[0][4])), int(float(content[0][7])), int(float(content[0][10])))
ymax = max(int(float(content[0][3][0:5])), int(float(content[0][6][0:5])), int(float(content[0][9][0:5])), int(float(content[0][11][0:5])))
ymin = min(int(float(content[0][3][0:5])), int(float(content[0][6][0:5])), int(float(content[0][9][0:5])), int(float(content[0][11][0:5])))
fields=[filename,width,height,classs,xmin,ymin,xmax,ymax]
with open(r'name', 'a', newline='') as f:
writer = csv.writer(f)
writer.writerow(fields)
print('Successfully converted pts to csv.')
通常我们从xml标签文件(例如labelimg)生成TFRecords时,有x.min、x.max、y.min和y.max,显示一个方形标签。 我们可以从中制作 CSV 数据并从中生成 TFRecords。
但在 pts 的情况下,值是作为非方形边界框,例如:
bounding_box: 534.588998862 232.095176337; 101.596234357 388.45367463; 51.3295676906 249.25367463; 484.322332196 92.8951763367
所以有四个 x 和 y 点,而不是 labelimg 给出的两个。 有人可以向我解释如何从 pts 生成 TFRecord 吗?
所以为了以防万一其他人有同样的问题,我写了一个脚本,将这四个点作为 xmin xmax ymin ymax 的正方形,这样我们就可以像从 xml labelimg.
这里是:
import os
import glob
import pandas as pd
from PIL import Image
import csv
for pts_file in glob.glob("./labels" + '/*.pts'):
with open(pts_file) as f:
im=Image.open("./img/" + pts_file[9:-3] + "jpg")
filename = pts_file[9:-3] + "jpg"
width = str(im.size[0])
height = str(im.size[1])
classs = "fish"
lines = f.readlines()
content = [line.split(' ')for line in open (pts_file)]
xmax = max(int(float(content[0][1])), int(float(content[0][4])), int(float(content[0][7])), int(float(content[0][10])))
xmin = min(int(float(content[0][1])), int(float(content[0][4])), int(float(content[0][7])), int(float(content[0][10])))
ymax = max(int(float(content[0][3][0:5])), int(float(content[0][6][0:5])), int(float(content[0][9][0:5])), int(float(content[0][11][0:5])))
ymin = min(int(float(content[0][3][0:5])), int(float(content[0][6][0:5])), int(float(content[0][9][0:5])), int(float(content[0][11][0:5])))
fields=[filename,width,height,classs,xmin,ymin,xmax,ymax]
with open(r'name', 'a', newline='') as f:
writer = csv.writer(f)
writer.writerow(fields)
print('Successfully converted pts to csv.')