电子说
目前市面上的图片标记工具琳琅满目,不同的标记几乎都能找到相对应的标记工具来使用,但是,能加以客制化适应特殊需求的却不多,因此,本文试着开发一款segmentation标记的工具,能够针对不同标记公司及用户的需求以加入特定标记功能,也能够兼容于特别指定的输入输出要求。
PixelAnnotationTool
PixelAnnotationTool是一款简单方便的segmentation工具,之前所训练的道路区域检测模型,便是用这工具来标记道路区域。
优点:
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已经替你作好,而且不仅仅是阳春简单的版面。
不过,由于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放大三个窗口。
为了提供伊甸的标记人员操作方便,工具栏图示特意放得较大,且以方便按到为原则,显示文字也以直觉易懂为主。
1.点按数字0-9可调整图片mask的透明度,确定mask是否正确。
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的速度。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !