AI工具-标注工具labelme
在人工智能领域,数据是一切应用的基础,特别是有标签的数据。今天介绍一款在图像视觉领域的基于python开源打标签工具Labelme
, 该工具可以支持图像分类,目标检测, 语义分割和实例分割等最常见的视觉任务。
其他类似的工具有Labelimg
1. 安装
lableme开源代码见 https://github.com/wkentaro/labelme
本地安装如下:
pip install labelme
pip install lxml
## 运行
./labelme
2 使用
从上面的界面(pyQt)可以看出Labelme
- 左边为标注的图形:支持圆形,方形 和多边形
- 中间为图像标注区域
- 右边为类别和文件信息
作为打标工具,Labelme是支持在标注时再输入标签类别信息,但是建议在标注之前构建一个标签元数据,作为输入。
建议的使用步骤如下:
构建标签列表
创建标签名称label.txt,格式如下前面两行为固定
:
__ignore__
_background_
dog
cat
导入标签,并启动
labelme --labels label.txt
开始标注
根据标注任务的不同,Labelme会生成一个与图片名称相同的json文件,以目标检测为例,标注好的json样例为:
{
"version": "4.6.0",
"flags": {
},
"shapes": [
{
"label": "nochefclothes",
"points": [
[
278.53846153846155,
390.3076923
],
[
513.9230769230769,
955.5384615384615
]
],
"group_id": null,
"shape_type": "rectangle",
"flags": {
}
}
],
"imagePath": "3a7b9c1896e19feab13bc201cbf2a86b.jpeg",
"imageData": "",
"imageHeight": 1000,
"imageWidth": 798
}
可以看出
label
为类别信息,points
为bounding box位置信息,如果是目标检测(方形)分别为左上(xmin,ymin)和右下(xmax, ymax)的坐标信息,如果是语义分割和实例分割,则为多个点shape_type
: 目标检测为rectangle, 语义分割和实例分割为polysgons
等标注完成,保存即可;标注完成之后想查看标注结果,可以通过不同的方式来打开
# 空白
labelme --labels label.txt
# 单图json
labelme ./img1.json --labels label.txt
# 目录方式
labelme ./img_dir --labels label.txt
另外,Labelme也是支持视频标注的。通过视频抽帧之后再标注。
3. 格式转换
由于Labelme是按照json格式来保存标注结果的,这和现有的常用任务格式有些区别,如目标检测的VOC COCO等,Labelme也提供的相应的转换工具脚本进行转换,十分方便。
- 转换voc
# It generates:
# - data_dataset_voc/JPEGImages
# - data_dataset_voc/SegmentationClass
# - data_dataset_voc/SegmentationClassVisualization
# - data_dataset_voc/SegmentationObject
# - data_dataset_voc/SegmentationObjectVisualization
./labelme2voc.py data_annotated data_dataset_voc --labels labels.txt
python -u labelme2voc.py ./multi_defect ./multi_defect_voc --labels ./labels.txt --noviz
- 转换coco
# It generates:
# - data_dataset_coco/JPEGImages
# - data_dataset_coco/annotations.json
./labelme2coco.py data_annotated data_dataset_coco --labels labels.txt
4. 总结
本文简单分享了开源标注工具Labelme的使用,希望对你有帮助。先总结如下:
- labelme适用于图像分类、目标检测、语义分割、实例分割
- labelme 图片视频都可用
- 开始新建立标签文件,记住前两行是固定的(没有特别的含义,就是代码逻辑是这样的)
- json注意label,points和shape_type
- labelme2voc和labelme2coco来转换经典格式