Labelme 制作手部21个关键点数据
因为导师的项目是手部姿态估计,经过一些技术预研,最后选定了 Open-MMLab 的 MMPose 作为基础框架来做底层架构。先说下Open-MMLab我认为的优点:
1. 代码优质:模块化做的非常好,易于扩展
2. 多研究方向支持:现在有十几个研究方向,包括MMCV(用于计算机视觉研究的基础)、MMDetection(目标检测工具箱)、MMDetection3D(3D目标检测)、MMSegmentation(语义分割工具箱)、MMClassification(分类工具箱)、MMPose(姿势估计工具箱)、MMAction2(动作理解工具箱)、MMFashion(视觉时尚分析工具箱)、MMEditing(图像和视频编辑工具箱)、MMFlow(光流工具箱)等等
3. 社区活跃:社区沟通一般是通QQ群或者微信群进行沟通,有任何问题都在社区得到相对及时的回答,而且针对一些业务思路,社区志愿者或者官方也会给出一些思路或者建议,这个非常不错。
4. 高性能:提供的现成SOTA算法和预训练模型都比官方的实现有显著的提升
5. 文档丰富:官方文档在不同研究方向上都有非常详细的中英文教程,新手可以按照教程迅速上手,赞一个
技术预研的时候看了包括百度的飞浆(PP)、旷视的天元(MegEngine),也都做得非常好,但是支持的研究方向就少了一些。
实验过程和一些注意事项如下文,希望帮助到有缘人,o( ̄︶ ̄)o
1:环境准备
1.1 基础环境
操作系统:Windows 10
Python:3.8
Anaconda:4.10.1 (这个版本不重要)
Anaconda环境安装,如果没有安装的请自行搜索安装下,或者参考我之前的安装教程(Windows10 安装 Anaconda + CUDA + CUDNN )
1.2 安装 Labelme
- 可以参考官方的安装,地址:https://github.com/wkentaro/labelme
1.2.1:创建anaconda虚拟环境
conda create -n labelme python=3.8
1.2.2:激活虚拟环境
conda activate labelme
1.2.3:安装labelme的依赖
conda install pillow
conda install pyqt
1.2.3:安装labelme
pip install labelme
1.2.4:运行
lableme


2. 标注图片 (要先用rectangle把手圈起来,然后在rectangle里面打点)
标注过程很简单,就是简单的对手部进行画矩形框和对手部的21个关键点进行打点
打完点,大概是这个样子:

3. 标注转化(运行代码的时候一定要保证rectangle和keypoints都有)
现在比较流行的标注是 COCO 和 VOC,因为 Open-MMLab 对 COCO 支持的比较好,就转成 COCO 格式的数据集了。
代码如下,有详细的注释。
import os
import sys
import glob
import json
import shutil
import argparse
import numpy as np
import PIL.Image
import os.path as osp
from tqdm import tqdm
from labelme import utils
from sklearn.model_selection import train_test_split
class Labelme2coco_keypoints():
def __init__(self, args):
"""
Lableme 关键点数据集转 COCO 数据集的构造函数:
Args
args:命令行输入的参数
- class_name 根类名字
"""
self.classname_to_id = {
args.class_name: 1}
self.images = []
self.annotations = []
self.categories = []
self.ann_id = 0
self.img_id = 0
def save_coco_json(self, instance, save_path):
json.dump(instance, open(save_path, 'w', encoding='utf-8'), ensure_ascii=False, indent=1)
def read_jsonfile(self, path):
with open(path, "r", encoding='utf-8') as f:
return json.load(f)
def _get_box(self, points):
min_x = min_y = np.inf
max_x = max_y = 0
for x, y in points:
min_x = min(min_x, x)
min_y = min(min_y, y)
max_x = max(max_x, x)
max_y = max(max_y, y)
return [min_x, min_y, max_x

本文介绍如何使用Labelme工具标注手部21个关键点,并将标注数据转化为COCO格式,以便于使用OpenMMLab的MMPose进行手部姿态估计。
最低0.47元/天 解锁文章
1999

被折叠的 条评论
为什么被折叠?



