使用Labelimg打标教学

本文将指导您如何使用Labelimg进行数据集打标。首先,安装Labelimg并准备包含猫狗图片的数据集。接着,创建文件夹组织数据集,包括Annotations、JPEGImages和predefined_class。开始打标前,请在命令行中打开Labelimg,并调整设置如自动保存、显示标注框和标注模式。通过常用快捷键提高打标效率。最后,完成打标任务,确保Annotations文件夹中包含所有标注文件。

首先给出数据集图片的地址

链接:https://pan.baidu.com/s/1s9PlB7oXPrBGmmCOn-INEg 
提取码:4tux

1.在命令行里面安装Labelimg:

先激活深度学习环境

 然后开始安装

pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple

 安装成功

2.自己制作数据集,数据集图片在最上面的网盘链接里面,是一些猫猫狗狗的图片

可以新建一个文件夹,用来存数据集

如下图创建文件夹

 Annotations里面存的是标注的标签文件

JPEGImages里面存的是数据集图片,就是那些猫猫狗狗的图片

predefined_class里面存的是打标的类别

数据集制作完毕

3.开始打标

首先在命令行进入刚刚创建好的VOC2007文件夹

假设目标文件夹在其他盘,进入其他盘的命令:

cd  /d  其他盘下文件夹的路径

输入命令打开Labelimg

labelimg JPEGImages predefined_classes.txt

 

 

如果感觉图片有点小,可以通过ctrl + 鼠标滚轮进行放大

点击view

 

把这几个勾选上,auto save mode(切换到下一张图的时候,自动保存标签)

display labels(会显示标注框和标签)

 Advanced Mode(标注的十字架会一直悬浮在窗口)

 

 常用快捷键如下:

A:切换到上一张图片

D:切换到下一张图片

W:调出标注十字架

del :删除标注框框

Ctrl+u:选择标注的图片文件夹

Ctrl+r:选择标注好的label标签存在的文件夹

话不多说,直接开始打标

首先按一下w调出标注十字架

 然后框选住目标,再选择类别,类别是之前再txt文件里面写好的

 一张图片就这样完成了

狗狗的打标

全部完成标注之后,Annotations文件夹会存储标注文件

 

 到此为止数据集的标注任务完成了

### Labelme 工具简介 Labelme 是一款基于 Python 的开源图形化图像注工具,支持多种类型的注任务,包括矩形框、多边形、线条和点等。它广泛应用于计算机视觉领域中的目标检测和语义分割任务。 --- ### 安装与启动 要使用 Labelme 进行图片注,首先需要安装该工具: ```bash pip install labelme ``` 完成安装后,可以通过命令行启动 Labelme 并加载待注的图片目录: ```bash labelme path_to_images/ ``` 其中 `path_to_images/` 表示存储图片的文件夹路径[^1]。 --- ### 图片注流程 #### 1. 创建签文件 在注之前,通常会创建一个签文件(如 `labels.txt`),定义所需的类别名称。例如,对于分类任务可以设置如下内容: ``` __ignore__ _background_ cat dog person ``` 上述配置表示忽略未注区域 (`__ignore__`) 和背景区域 (`_background_`),其余为自定义类别的名称。 #### 2. 启动注界面 运行以下命令以开启注模式,并指定预设好的签列表: ```bash labelme images_folder/ --labels labels.txt ``` 这一步骤允许用户通过 GUI 界面快速切换不同对象类型进行绘制操作[^2]。 #### 3. 绘制边界框或多边形 进入软件后,在左侧栏选择对应的目类别;接着利用鼠拖拽的方式画出感兴趣物体的位置范围或者精确描绘轮廓线段作为掩码(mask)。 #### 4. 导出 JSON 文件 每张已完成编辑处理后的照片都会生成一份关联性的 `.json` 数据描述文档存放在同一级目录下,默认包含了所选形状参数以及附加属性信息等内容[^4]。 --- ### 转换至其他格式 如果希望进一步训练模型,则可能需要用到准化的数据结构形式比如 PASCAL VOC XML Schema 或 COCO Json Style 。这里提供一段脚本用于转换已有的注成果到 PascalVOC 风格上: ```python import os from labelme.utils import shape_to_mask, polygons_to_mask from PIL import Image import numpy as np import xml.etree.ElementTree as ET def save_voc_xml(filename, shapes, img_size): root = ET.Element('annotation') folder = ET.SubElement(root, 'folder').text='images' filename_node=ET.SubElement(root,'filename').text=os.path.basename(filename)+'.jpg' size = ET.SubElement(root,"size") width = ET.SubElement(size,"width").text=str(img_size[0]) height = ET.SubElement(size,"height").text=str(img_size[1]) depth = ET.SubElement(size,"depth").text="3" for i,(shape_type,label),points in enumerate(shapes,start=1): object_=ET.SubElement(root,f"object_{i}") name = ET.SubElement(object_, "name").text=label bndbox = ET.SubElement(object_, "bndbox") mask=polygons_to_mask([img_size], points) ys,xs=np.where(mask==True) xmin=min(xs);xmax=max(xs); ymin=min(ys);ymax=max(ys); ET.SubElement(bndbox,"xmin").text=str(xmin) ET.SubElement(bndbox,"ymin").text=str(ymin) ET.SubElement(bndbox,"xmax").text=str(xmax) ET.SubElement(bndbox,"ymax").text=str(ymax) tree = ET.ElementTree(root) return tree if __name__=='__main__': from glob import iglob input_dir='./data_annotated/' output_dir='./data_dataset_voc/' if not os.path.exists(output_dir):os.makedirs(output_dir) json_files=[f for f in iglob(os.path.join(input_dir,'*.json'))] with open('./labels.txt')as fin: class_names={line.strip():idx+1for idx,line in enumerate(fin.readlines())} for fname in json_files: data=json.load(open(fname)) h,w=data['imageHeight'],data['imageWidth'] shapes=[[s['shape_type'], s['label']] + [[p['x'], p['y']]for p in s['points']] for s in data['shapes'] ] voc_tree=save_voc_xml(fname.split('/')[-1].split('.')[0],shapes,[h,w]) out_name=f"{output_dir}{fname.split('/')[-1].replace('.json','.xml')}" voc_tree.write(out_name,pretty_print=True) ``` 此代码片段实现了从原始 JSON 到符合 PASCAL VOC 规范 XML 文件之间的映射关系建立过程。 --- ### 自动提取题功能 另外还有一种方法可以直接获取某个特定 .json 文件内的元数据字段值,即调用专门设计用来解析这些复杂嵌套字典结构的方法函数来实现自动化读取工作流目的下的效率提升效果展示如下所示例子程序清单里头部分提到过的那段话就是这么做的具体体现方式之一而已啦! ```python def parse_labelme_file(json_path): """Parse the given LabelMe annotation file.""" with open(json_path, encoding='utf-8') as fp: d = json.load(fp) return d.get("imagePath", None) or "" # Example usage of above defined utility function. image_path = './example.json' title = parse_labelme_file(image_path) print(f"The title extracted is {repr(title)}.") ``` ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值