YOLO相同等级关键点标注修改方案
创作时间:
作者:
@小白创作中心
YOLO相同等级关键点标注修改方案
引用
CSDN
1.
https://m.blog.csdn.net/qq_43914400/article/details/138157163
在使用YOLOv8进行关键点检测时,如果需要标注大量相同等级的关键点,逐个标注会非常耗时。本文提出了一种解决方案:先统一标注这些关键点,再通过Python代码批量修改标签。这种方法可以显著提高标注效率,特别适用于处理像章鱼脚这样的相同等级关键点标注任务。
问题描述
在标注具有相同等级的关键点时,无法对每个点进行区分,且一个一个选标签会非常耗时。例如,人体的关键点都是不相同的:
而对于章鱼脚来说,各个脚的都是相同等级的关键点!如果想要进行区分标注十分困难,因此考虑统一标注相同的关键点,后续进行修改。
统一标注
首先,我们可以统一标注所有相同等级的关键点:
获取标注JSON文件
标注完成后,会生成一个包含所有关键点坐标的JSON文件,示例如下:
{
"version": "5.1.1",
"flags": {},
"shapes": [
{
"label": "foot",
"points": [
[
176.1094674556213,
45.95857988165682
]
],
"group_id": null,
"shape_type": "point",
"flags": {}
},
{
"label": "foot",
"points": [
[
335.28106508875743,
42.70414201183433
]
],
"group_id": null,
"shape_type": "point",
"flags": {}
},
{
"label": "foot",
"points": [
[
400.9615384615385,
216.66863905325448
]
],
"group_id": null,
"shape_type": "point",
"flags": {}
},
{
"label": "foot",
"points": [
[
264.2751479289941,
324.9526627218935
]
],
"group_id": null,
"shape_type": "point",
"flags": {}
},
{
"label": "foot",
"points": [
[
117.52958579881656,
208.97633136094677
]
],
"group_id": null,
"shape_type": "point",
"flags": {}
}
]
}
运行修改代码
接下来,我们使用Python代码批量修改这些关键点的标签:
import os
import json
# 载入JSON数据
def load_json(json_path):
with open(json_path, 'r') as file:
data = json.load(file)
return data
# 判断点是否在矩形框内
def is_point_in_rect(point, rect):
x_min = min(rect[0][0], rect[1][0])
x_max = max(rect[0][0], rect[1][0])
y_min = min(rect[0][1], rect[1][1])
y_max = max(rect[0][1], rect[1][1])
return x_min <= point[0] <= x_max and y_min <= point[1] <= y_max
# 处理JSON数据,寻找并重命名关键点
def process_data(data):
for shape in data['shapes']:
if shape['shape_type'] == 'rectangle':
# 找到矩形框
rect = shape['points']
# 寻找矩形内的所有关键点
seed_heads = [s for s in data['shapes'] if s['shape_type'] == 'point' and s['label'] == 'Seed_head' and is_point_in_rect(s['points'][0], rect)]
# 对关键点进行排序并重新命名
seed_heads.sort(key=lambda x: (x['points'][0][0], x['points'][0][1])) # 按x坐标和y坐标排序
for idx, head in enumerate(seed_heads):
head['label'] = f'foot{idx + 1}'
# 主函数
def main():
input_folder = 'keypoint' # 输入文件夹路径
output_folder = 'keypoint1' # 输出文件夹路径
# 确保输出文件夹存在,若不存在则创建
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# 遍历输入文件夹中的所有文件
for filename in os.listdir(input_folder):
if filename.endswith('.json'):
json_path = os.path.join(input_folder, filename)
output_path = os.path.join(output_folder, filename)
data = load_json(json_path)
process_data(data)
# 保存修改后的数据
with open(output_path, 'w') as f:
json.dump(data, f, indent=4)
main()
需要修改的位置
在使用上述代码时,需要根据实际情况修改以下位置:
seed_heads = [s for s in data['shapes'] if s['shape_type'] == 'point' and s['label'] == 'foot' and is_point_in_rect(s['points'][0], rect)]
:将foot
修改成你的标签head['label'] = f'foot{idx + 1}'
:将foot
修改成你的标签input_folder = 'keypoint'
和output_folder = 'keypoint1'
:根据实际的文件夹路径进行修改
结果
下面是修改后的JSON文件:
{
"version": "5.1.1",
"flags": {},
"shapes": [
{
"label": "foot2",
"points": [
[
176.1094674556213,
45.95857988165682
]
],
"group_id": null,
"shape_type": "point",
"flags": {}
},
{
"label": "foot4",
"points": [
[
335.28106508875743,
42.70414201183433
]
],
"group_id": null,
"shape_type": "point",
"flags": {}
},
{
"label": "foot5",
"points": [
[
400.9615384615385,
216.66863905325448
]
],
"group_id": null,
"shape_type": "point",
"flags": {}
},
{
"label": "foot3",
"points": [
[
264.2751479289941,
324.9526627218935
]
],
"group_id": null,
"shape_type": "point",
"flags": {}
},
{
"label": "foot1",
"points": [
[
117.52958579881656,
208.97633136094677
]
],
"group_id": null,
"shape_type": "point",
"flags": {}
},
{
"label": "star",
"points": [
[
102.22868217054264,
30.984496124031068
],
[
414.63178294573646,
339.5116279069768
]
],
"group_id": null,
"shape_type": "rectangle",
"flags": {}
}
]
}
标签修改成功
总结
- 标注时可以选用相同名称进行标注节省时间
- 使用代码对JSON文件进行修改
- 找到框
- 找到所有点
- 判断哪个点在哪个框里后修改
- 完成标注关键点
热门推荐
磷酸铁锂电池成储能主流,度电成本有望降至0.2元
安全性高但能量密度低,磷酸铁锂电池能否胜任汽车副电瓶
龙德二年定州之战:李存勖巧布战术,大败契丹
Web3激励机制创新:代币经济与AI融合的新机遇
选十中十概率仅千万分之一,专家提醒理性对待快乐8
艺术与科技的未来:teamLab数字艺术展
民政部颁布两项福彩行业标准,全国福彩系统推进规范管理
从“55555”连号看彩票本质:随机性、公益性和理性购彩
双色球大乐透完全随机:概率论解读彩票开奖原理
芹菜苹果汁:冬季养生的绿色秘诀
鲜芹苹果汁:养生界的降压新星
《原神》和《王者荣耀》带你穿越戏曲世界
车辆年检过期,保险理赔坑太大!
苦瓜山药食疗,糖尿病患者福音?
车辆年检过期?当心罚款200元扣3分,还有这些严重后果!
艺人张某某因车辆年检过期被罚,这些后果你可能不知道!
车辆年检过期,罚款扣分了解一下?
寻寻觅觅与闭门觅句:解读“觅”字成语的文化意蕴
职场中的十二生肖:从鼠到猪,每个属相都有独特优势
属猴属鸡职场搭档:用沟通技巧化解性格差异
从搭档到逆袭:解析属猴属鸡人的职场之道
方便!今日起,北京公交地铁实行“一码通乘”!覆盖1500余条公交、23条地铁!
精英婚恋平台:高学历相亲的秘密
退休族养宠指南:狗狗篇
退休后,你最想去哪里旅游?
抗/抑菌洗衣液选购指南:科学检测标准与使用建议
冬季自驾闯关东:从车辆准备到安全驾驶全攻略
畅游全球最大冰雪乐园:哈尔滨冰雪大世界自驾攻略
长白山自驾攻略:关东第一山的四季美景与实用贴士
406%游客增长,659%收入增长:吉林冰雪旅游元旦交出惊人答卷