如何从带有图像注释的CSV文件中提取值,并将它们附加到Python中RetinaNet的新CSV文件中?
我正在尝试将VGG图像注释器软件中的csv文件转换为可在RetinaNet中使用的csv文件。我需要的视网膜网训练数据格式是:path/to/image.jpg,x1,y1,x2,y2,class_name。这是我的CSV文件示例,来自VIA: +=============+===========+==============+===========+========================================================+===+ |文件名|文件大小|区域计数|区域id |区域形状|属性|| +=============+===========+==============+===========+========================================================+===+ |img-30.png | 2331731 | 10 | 0 |{名称:rect,x:65,y:778,宽度:108,高度:65}| +-------+------+-------+------+----------------------------+--+ 基本上,我需要从括号中提取x、y、width和height属性,并将它们附加到列表中。这是我的python代码:如何从带有图像注释的CSV文件中提取值,并将它们附加到Python中RetinaNet的新CSV文件中?,python,csv,deep-learning,conv-neural-network,retinanet,Python,Csv,Deep Learning,Conv Neural Network,Retinanet,我正在尝试将VGG图像注释器软件中的csv文件转换为可在RetinaNet中使用的csv文件。我需要的视网膜网训练数据格式是:path/to/image.jpg,x1,y1,x2,y2,class_name。这是我的CSV文件示例,来自VIA: +=============+===========+==============+===========+========================================================+===+ |文件名|文件大小|区
import csv
via_path = 'data/tiled/via.csv'
image_annotations = []
with open(via_path, "r") as f:
reader = csv.reader(f, delimiter=",")
for line in reader:
if '#' in line[0][0]:
# bypassing comments in csv
continue
filename = line[1][2:-2]
# strip brackets, split and get only the values we care about, then convert all the string to int
top_left_x, top_left_y, width, height = list(map(int,list(map(float, line[4].strip('][').split(',')[1:]))))
if width == 0 or height == 0:
continue
# move from top left and width/height to x and y values
if top_left_x < 0:
top_left_x = 1
if top_left_y < 0:
top_left_y = 1
x1 = top_left_x
x2 = top_left_x + width
y1 = top_left_y
y2 = top_left_y + height
# TODO didn't add names this time since it is all one class
name = "bird"
# create the csv row
new_row = []
new_row.append(filename)
new_row.append(x1)
new_row.append(y1)
new_row.append(x2)
new_row.append(y2)
new_row.append(name)
image_annotations.append(new_row)
区域\形状\属性列是一个JSON字符串。您需要对其进行解析,以获取其包含的值
Python具有内置的JSON支持:
import json
# ... open CSV file, for each record ...
shape = json.parse(line[4])
top_left_x = shape['x']
top_left_y = shape['y']
# etc
import json
# ... open CSV file, for each record ...
shape = json.parse(line[4])
top_left_x = shape['x']
top_left_y = shape['y']
# etc