You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

无法获取JSON坐标数据,如何提取并标注图片用于CNN关键点训练?

解决JSON坐标提取问题,为CNN生成关键点标注

先看你的问题:你想从标注JSON里提取x/y坐标,用来生成适合CNN训练的关键点标注,但现有代码只打印x、y的键名,拿不到数值。咱们一步步来理清楚问题出在哪,以及怎么修正。

你的代码错误原因

你原来的循环代码:

for item in data:
    for label in item['Label']['radiuksen inklinaatio']:
        for cordinates in label['geometry']:
            print(cordinates)

问题有两个核心点:

  1. 第三层循环for cordinates in label['geometry']:——label['geometry']是一个字典(比如{"x": 193, "y": 222}),直接遍历字典的话,Python默认会遍历字典的键名,所以你会看到输出x、y,而不是对应的数值。
  2. 拼写不匹配:你的JSON里标注类型的键是"radius inclination angle",但代码里写的是'radiuksen inklinaatio',这会直接触发KeyError,得先和JSON里的键名严格匹配。

修正后的代码实现

我们需要遍历每个标注类型,提取每个geometry里的x和y,然后按照你想要的格式整理输出。这里提供完整的实现代码:

基础版:提取所有坐标合并到label字段

# 假设data是你加载后的JSON数据(如果是多个标注的列表,外层加循环即可)
result = []

# 获取当前标注对应的图片URL
image_url = data["Labeled Data"]

# 收集所有关键点的坐标字符串
coords_str_list = []
# 遍历Label下的所有标注类型(比如radius inclination angle、radioulnar等)
for label_type, points in data["Label"].items():
    # 遍历当前类型下的每个关键点
    for point in points:
        x = point["geometry"]["x"]
        y = point["geometry"]["y"]
        coords_str_list.append(f'"x":{x}, "y":{y}')

# 拼接成你需要的label格式
label_str = ", ".join(coords_str_list)

# 添加到结果列表
result.append({
    "label": label_str,
    "image": image_url
})

# 打印或保存结果
print(result)

可选:按标注类型分组坐标

如果你想保留每个标注类型的分组信息,可以调整label字符串的格式:

coords_str_list = []
for label_type, points in data["Label"].items():
    # 生成当前类型下的坐标字符串
    type_coords = [f'"x":{p["geometry"]["x"]}, "y":{p["geometry"]["y"]}' for p in points]
    coords_str_list.append(f'"{label_type}": [{", ".join(type_coords)}]')

label_str = ", ".join(coords_str_list)

关键知识点总结

  • 遍历字典时,直接for k in dict得到的是键名,要获取值的话可以用dict[k],或者for k, v in dict.items()同时拿到键和值。
  • 必须严格匹配JSON里的键名,大小写、空格、拼写都不能错,否则会触发KeyError。
  • 字符串拼接优先用f-stringjoin(),比逐个字符串相加更高效、可读性更强。

运行修正后的代码后,就能得到你期望的输出格式:

[ {'label': '"x":193, "y":222, "x":242, "y":228, "x":244, "y":227, "x":250, "y":225, "x":224, "y":217, "x":219, "y":217', 'image': 'url_from_json'}, ... ]

内容的提问来源于stack exchange,提问作者Ode

火山引擎 最新活动