跳转至

使用labelme标注人体关键点

软件安装

标注软件labelme直接去github 上找即可,github上有各个平台提前build好的软件, 直接下载就可以使用

img.png

数据准备

将所有待标注的图片放到一个文件夹内,比如data。人体关键点标注成本较高,因此在正式标注之前最好先用已有的人体关键点模型跑一遍,这样在标注的时候 就只需要把位置不准确的关键点手动调整一下就可以了。labelme软件每一张图片image.jpg对应一个标注文件image.json,因此预处理的时候只需要把每一张 图片跑一下然后生成对应的json文件就可以了,以下图为例

img_1.png

预处理跑出来的json文件是

{
  "version": "5.0.1",
  "flags": {},
  "shapes": [
    {
      "label": "boxer",
      "points": [
        [
          295,
          328
        ],
        [
          1005,
          1472
        ]
      ],
      "group_id": 0,
      "shape_type": "rectangle",
      "flags": {}
    },
    {
      "label": "nose",
      "points": [
        [
          476,
          492
        ]
      ],
      "group_id": 0,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "left_eye",
      "points": [
        [
          510,
          469
        ]
      ],
      "group_id": 0,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "right_eye",
      "points": [
        [
          465,
          469
        ]
      ],
      "group_id": 0,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "left_ear",
      "points": [
        [
          555,
          481
        ]
      ],
      "group_id": 0,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "right_ear",
      "points": [
        [
          432,
          481
        ]
      ],
      "group_id": 0,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "left_shoulder",
      "points": [
        [
          622,
          626
        ]
      ],
      "group_id": 0,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "right_shoulder",
      "points": [
        [
          443,
          648
        ]
      ],
      "group_id": 0,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "left_elbow",
      "points": [
        [
          711,
          782
        ]
      ],
      "group_id": 0,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "right_elbow",
      "points": [
        [
          409,
          805
        ]
      ],
      "group_id": 0,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "left_wrist",
      "points": [
        [
          756,
          927
        ]
      ],
      "group_id": 0,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "right_wrist",
      "points": [
        [
          365,
          927
        ]
      ],
      "group_id": 0,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "left_hip",
      "points": [
        [
          588,
          983
        ]
      ],
      "group_id": 0,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "right_hip",
      "points": [
        [
          476,
          972
        ]
      ],
      "group_id": 0,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "left_knee",
      "points": [
        [
          588,
          1240
        ]
      ],
      "group_id": 0,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "right_knee",
      "points": [
        [
          499,
          1240
        ]
      ],
      "group_id": 0,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "left_ankle",
      "points": [
        [
          622,
          1408
        ]
      ],
      "group_id": 0,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "right_ankle",
      "points": [
        [
          543,
          1408
        ]
      ],
      "group_id": 0,
      "shape_type": "point",
      "flags": {}
    }
  ],
  "imagePath": "yujiannan.jpg",
  "imageData": null,
  "imageHeight": 1440,
  "imageWidth": 1080
}
其中各项解释如下

  • version:应该是labelme的版本,目前最新的是501
  • flags:本张图片的附加信息,应该用不到
  • shapes:一个一个的标注信息
  • imageData:图片原始数据

对于shapes里的标注信息有两种,一种是人体检测的结果,一种是人体关键点的结果,使用shape_type来区分。需要注意的是group_id,每个人 检测框要有,表示这个人的id,每个关键点也要有,表示这个关键点是属于哪个人的,这些信息都要有,不然最后转coco格式的时候也会有问题,至此数据集准备完毕

img_2.png

启动软件

以Windows平台为例,下载labelme.exe到桌面,然后准备一个label.txt文件,用于表示要标注的关键点的label,对于COCO数据集类型的 人体关键点,label.txt内容是

boxer
nose
left_eye
right_eye
left_ear
right_ear
left_shoulder
right_shoulder
left_elbow
right_elbow
left_wrist
right_wrist
left_hip
right_hip
left_knee
right_knee
left_ankle
right_ankle
即人体检测的label加上COCO数据集的17个人体关键点。然后使用命令行启动label.exe,命令是
.\Labelme.exe data --labels .\label.txt --labelflags '{.*: [invisible]}'
其中data表示的是数据集目录,--labels .\label.txt表示要标注的label类别。--labelflags '{.*: [visible]}'``表示每个label会有一个个额外的信息visible`, 表示这个关键点是不是不可见的,不可见的也就是画面中被遮挡的关键点,然后标注的时候估计出来的一个位置

数据标注

首先对标注软件进行设置。选择数据文件夹和保存标注结果文件夹都是data,然后勾选上自动保存,取消勾选保存图片数据

img_3.png

img_4.png

然后开始标注,标注工作主要包括两部分内容

  • 标注人体检测框,如果人体检测框不准的话进行调整,使框完整的框住对应的人,不能出现框过大或者过小的情况
  • 标注人体关键点,如果人体关键点不准的话进行调整,使得每个人都有标注对应的17个关键点并且尽可能同真实位置保持一致

如果需要新建人体检测框或者关键点的话就在画面上右键选择创建矩形或者创建点,如果需要编辑矩形或者点就右键切换到编辑模式然后切换。

img_5.png

如果新建或者编辑矩形的时候,需要注意选择矩形的group_id,表示这个人的id,每个人一个id,从0开始。

img_6.png

如果新建或者编辑关键点的话,需要注意选择关键点的group_id,表示这个关键点属于哪个人,跟人的group_id是对应起来的,同时还要标注这个关键点 是可以看见的,还是被遮挡猜测出来的

img_8.png

标注完成后检查 - 图片中需要标注的每个人都有不同的group_id - 每个标注的人都标记了所有的17个关键点,没有遗漏,同时关键点的group_id和对应人的group_id保持一致 - 每个不可见的关键点都标注了不可见

数据转换

TODO

评论