开发一款segmentation标记的工具

电子说

1.3w人已加入

描述

目前市面上的图片标记工具琳琅满目,不同的标记几乎都能找到相对应的标记工具来使用,但是,能加以客制化适应特殊需求的却不多,因此,本文试着开发一款segmentation标记的工具,能够针对不同标记公司及用户的需求以加入特定标记功能,也能够兼容于特别指定的输入输出要求。

PixelAnnotationTool

PixelAnnotationTool是一款简单方便的segmentation工具,之前所训练的道路区域检测模型,便是用这工具来标记道路区域。

python

优点:

1.支援Linux, Windows, Mac等平台。

2.免费, 开源。

3.支持多标记:不同颜色代表不同的类别class,点选便可标记涂刷各种标记。

4.直接将segmentation结果存为png格式的mask檔。

5.可用鼠标图片放大缩小,可进行精细的标记调整。

缺点:

1.自定类别繁锁:预设为COCOdataset的类别,要修改为自己的类别须汇出config json档后,自行修改再载入。

2.开启一个档案便会产生一个页签,超过某数量后便无法再开启其它图档,需关闭页签后才能再开其它档案。

3.使用点按方式调整透明度、笔筛大小等,但调整按键过小,且要重复点击多次后才能到达需要的数值。

4.无法另外设定标记mask的储存路径,默认只能与dataset图片放置于同一路径。

5.标记mask图片默认皆为输出三张color_mask、_mask、_watershed_mask,名称及种类无法更改。

自制的Segmentation Tool

自行开发的segmentation tool,可针对需求加以客制功能,例如,在碰到不晓得怎么标记的图片,希望有个按钮将此图片移到指定文件夹,好让其它人员来review教导。「删除」的功能也是一样,他们不希望图片直接被删除,而是移到指定区域,代表这些图片不需要标记。此外,在输入及输出的图片命名格式,也可依据需求来修改。

开发使用的组件

开发此Tool UI的工具是采用CVUI:https://dovyski.github.io/cvui/,这是一套另人印象深刻的好用工具,对于那些只想单纯用OpenCV开发的人,不需要辛苦的用绘图指令刻出各种按钮组件了,CVUI已经替你作好,而且不仅仅是阳春简单的版面。

python

不过,由于OpenCV本身就不支持显示中文,因此,CVUI也无法显示中文字型,这是唯一比较可惜的地方。

特色:

1.简单、轻量

2.仅需要OpenCV无需其它组件

3.完全基于OpenCV绘图产生,不需要OpenGL或Qt等套件

4.采用C开发,速度快

5.使用行列方式自动排列,不需担心组件的位置

6.提供简单功能完整的mouse API

7.不多不少的接口组件(约11个)

8.支援C++及Python

安装:

pip install cvui

基本用法:

下方范例为产生一张空白的图档frame,然后再上面显示Hello world!

注意原有的cv2.imshow 已被 cvui.imshow 所取代。

如果想用cv2.imshow,那么可在cv2.imshow之前先呼叫cvui.update()。cv2.imshow+cvui.update()就等于cvui.imshow()

importnumpy as np

importcv2

importcvui

WINDOW_NAME= ‘CVUI Test’

cvui.init(WINDOW_NAME)

frame =np.zeros((200, 400, 3), np.uint8)

whileTrue:

    frame[:] = (49, 52, 49)

    cvui.text(frame, 10, 15, ‘Hello world!’)

cvui.imshow(WINDOW1_NAME,frame)

    if cv2.waitKey(20) == 27:

        break

OpenCV画面的priority

由于程序同时需显示三个画面:工具栏、编辑主画面、放大画面,这些画面都是透过OpenCV的imshow()命令来执行,我们必须先呼叫setWindowProperty,让工具栏及放大画面的窗口皆保持在编辑主画面上方,否则会被遮盖(后方数字愈大则在愈上方)。

cv2.setWindowProperty(WINDOW_NAME,cv2.WND_PROP_TOPMOST, 1)

使用接口

总共分为三个窗口:工具栏、主图片、以及Zoom放大三个窗口。

为了提供伊甸的标记人员操作方便,工具栏图示特意放得较大,且以方便按到为原则,显示文字也以直觉易懂为主。

python

1.点按数字0-9可调整图片mask的透明度,确定mask是否正确。

python

python

python

2.笔刷调整,可于工具栏上预览目前笔刷的大小。鼠标左键为白色,右键为黑色,代表在黑白的mask上增加及减少区域。

3.「存盘」按钮:直接将目前看到mask所编修的画面,存成黑白mask檔(png格式),若没有按此键存档就跳到其它张,不会储存。

4.「不会」及「删除」按钮:此两个按钮会把目前图片移到指定的区域(可在配置文件中修改域位置),方便事后作检视的动作。

5.「上一张」及「下一张」:切换图片使用。

6.Zoom放大区:放大预览目前鼠标所在的区域。放大倍率可在配置文件中调整。

.ini 配置文件说明

[PATHS]

#待标注图片的路径(例如imagesf1)

source_path = images

#不晓得怎么标注的图片, 要存放的路径(「不会」按钮)

unknown_path = unknown

#不需要标注的图片, 要存放的路径(「删除」按钮)

removed_path = dont_need

[DISPLAY]

#工具栏的方向:0为横向, 1为踪向。

tool_box = 1

[masks]

#是否要在标记完成所储存的mask图档,文件名前方加上额外字符串。(空白代表不需要)

txt_prefix =

#是否要在标记完成所储存的mask图档,文件名后方加上额外字符串。(空白代表不需要)

#下方范例,代表要加上 _mask 字符串,可让PixelAnnotationTool程序读取。

txt_append = _mask

#储存的mask图档格式

ext_format = .png

#放大预览的尺寸(单位为pixels)

zoom_size = 600

未来可加入的功能

针对不同的标记对象,可加入该对象相关的mask检测功能。例如此次的目标物为人物,那么可加入训练好的人物mask检测模型,先替用户产生预先mask好的图片,让用户进行编修,以加快标记mask的速度。





审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分