我用VGG注释器注释了一些视频帧,这些视频帧以JSON
格式为我提供了注释,并希望对其进行解析以提取所需的值(x,y坐标)。
我看过该网站上的其他帖子,但是随着文件名长度的变化,即我的情况似乎与我的情况不符。帧号0到9,然后是10到99、100到999、1000到9999,并增加一位。
我尝试了import glob
并使用通配符范围,单个字符和星号。
现在我的代码:
#Edited
while count < 1200:
x = data[key]['regions']['0']['shape_attributes']['cx']
y = data[key]['regions']['0']['shape_attributes']['cy']
pts = (x, y)
xy.append(pts)
count += 1
f = open("coordinates.txt", "w")
f.write(xy)
f.close()
JSON如下:
"shape_attributes": {
"name": "point",
"cx": 400,
"cy": 121
},
"region_attributes": {}
}
}
},
"frame48.jpg78647": {
"fileref": "",
"size": 78647,
"filename": "frame48.jpg",
"base64_img_data": "",
"file_attributes": {},
"regions": {
"0": {
"shape_attributes": {
"name": "point",
"cx": 404,
"cy": 114
},
"region_attributes": {}
}
}
编辑:由于不知道如何直接将JSON转换为.txt
文件,因此将其解析以获取我的值。
我尝试转换为字符串并按以下方式解析字符串: 这样做的工作是仅将x,y坐标(3位整数)附加到列表中,然后我将其转换为(x,y)的元组列表,并打印到文本文件中,以用作以后的标签神经网络,我可以在电视上跟踪网球比赛中网球的坐标。
xy.append(re.findall(r'\b\d\d\d\b', datatxt))
答案 0 :(得分:1)
您不能在字典中使用通配符。您实际上是否真正在乎这些键-是否有要忽略的条目,还是很高兴拥有其中的所有键?
如果键不重要,请使用data.values()
,这将是字典列表,您可以浏览其中的前1200个条目。
如果某些键不符合您提供的格式,请遍历它们并检查它们是否首先匹配:
for key in data.keys():
m = re.match('frame(\d+).jpg(\d+)$', key)
if not m: continue
f1, f2 = map(int, m.groups())
if f1<0 or f1>1199 or f2<10000 or f2>99999: continue
x = data[key]['regions']['0']['shape_attributes']['cx']
y = data[key]['regions']['0']['shape_attributes']['cy']
...