赞
踩
效率与质量齐飞,标注工具全面横评里详细对比了不同标注工具的优势和劣势
labelme是使用python写的基于QT的跨平台图像标注工具,可用来标注分类、检测、分割、关键点等常见的视觉任务,支持VOC格式和COCO等的导出,代码简单易读,是非常利于上手的良心工具.
最简单的方式莫过于通过pip安装 pip install labelme
但是由于我们要在其基础上二次开发,所以只能 pip install -e .
- cd examples/tutorial
- labelme apc2016_obj3.jpg # specify image file
- labelme apc2016_obj3.jpg -O apc2016_obj3.json # close window after the save
- labelme apc2016_obj3.jpg --nodata # not include image data but relative image path in JSON file
- labelme apc2016_obj3.jpg \
- --labels highland_6539_self_stick_notes,mead_index_cards,kong_air_dog_squeakair_tennis_ball # specify label list
-
- # semantic segmentation example
- cd examples/semantic_segmentation
- labelme data_annotated/ # Open directory to annotate all images in it
- labelme data_annotated/ --labels labels.txt # specify label list with a file
可视化
- 可视化真值: labelme_draw_label_png apc2016_obj3_json/label.png
- 可视化真值并导出数据: labelme_json_to_dataset apc2016_obj3.json -o apc2016_obj3_json
代码解析
程序的入口在__main__.py中的main函数, 其处理了外部传进的命令行后传递给MainWindow,还实现了不同语言的适配.MainWindows的实现在app.py中, 初始化时构建了菜单、docker栏、快捷键等, 所有的标注都会绘制在一个canvas上, shape.py用于绘制已经标注的图形,主要看mousePressEvent、mouseMoveEvent和mouseReleaseEvent三个鼠标回调函数
mousePressEvent是鼠标按下时消息的回调,有一个ev参数作为输入,保存了鼠标按下时的上下文,首先将鼠标的坐标由窗口坐上角转换为以点击点为中心的坐标, 然后判断按下的是鼠标左键还是右键,如果是左键,还需进一步判断当前所属的模式是创建制模式还是修改模式,如果是创建模式,则需要创建选中元素的点,将其添加到形状列表中,而修改模式则需要判断是否选中了某个元素,然后将其坐标进行修改.如果按下的是右键则默认修改模式,直接拖动点.
mouseMoveEvent用于绘制元素添加的中间过程,以便有更清晰的提示,判断逻辑与之前类似,还判断了已有元素是否处于选中状态,如果是则将其高亮显示.
mouseReleaseEvent用于处理鼠标抬起的回调,主要就是恢复鼠标按下时修改的光标形状,如果有修改则setDirty用于标识需要保存.
目前labelme的标签并不会显示在标注点而是docker栏上,这很不方面我们直接看,因此需要增加这项能力.
在def drawVertex(self, path, i):最后加上就可以了
- if i == 0:
- myFont = QtGui.QFont("Times", 20)
- mypoint = point - QtCore.QPointF(0,d)
- path.addText(mypoint,myFont,self.label)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。