目前市面上的圖片標(biāo)記工具琳瑯滿目,不同的標(biāo)記幾乎都能找到相對(duì)應(yīng)的標(biāo)記工具來(lái)使用,但是,能加以客制化適應(yīng)特殊需求的卻不多,因此,本文試著開(kāi)發(fā)一款segmentation標(biāo)記的工具,能夠針對(duì)不同標(biāo)記公司及用戶的需求以加入特定標(biāo)記功能,也能夠兼容于特別指定的輸入輸出要求。
PixelAnnotationTool
PixelAnnotationTool是一款簡(jiǎn)單方便的segmentation工具,之前所訓(xùn)練的道路區(qū)域檢測(cè)模型,便是用這工具來(lái)標(biāo)記道路區(qū)域。
優(yōu)點(diǎn):
1.支援Linux, Windows, Mac等平臺(tái)。
2.免費(fèi), 開(kāi)源。
3.支持多標(biāo)記:不同顏色代表不同的類(lèi)別class,點(diǎn)選便可標(biāo)記涂刷各種標(biāo)記。
4.直接將segmentation結(jié)果存為png格式的mask檔。
5.可用鼠標(biāo)圖片放大縮小,可進(jìn)行精細(xì)的標(biāo)記調(diào)整。
缺點(diǎn):
1.自定類(lèi)別繁鎖:預(yù)設(shè)為COCOdataset的類(lèi)別,要修改為自己的類(lèi)別須匯出config json檔后,自行修改再載入。
2.開(kāi)啟一個(gè)檔案便會(huì)產(chǎn)生一個(gè)頁(yè)簽,超過(guò)某數(shù)量后便無(wú)法再開(kāi)啟其它圖檔,需關(guān)閉頁(yè)簽后才能再開(kāi)其它檔案。
3.使用點(diǎn)按方式調(diào)整透明度、筆篩大小等,但調(diào)整按鍵過(guò)小,且要重復(fù)點(diǎn)擊多次后才能到達(dá)需要的數(shù)值。
4.無(wú)法另外設(shè)定標(biāo)記mask的儲(chǔ)存路徑,默認(rèn)只能與dataset圖片放置于同一路徑。
5.標(biāo)記mask圖片默認(rèn)皆為輸出三張color_mask、_mask、_watershed_mask,名稱及種類(lèi)無(wú)法更改。
自制的Segmentation Tool
自行開(kāi)發(fā)的segmentation tool,可針對(duì)需求加以客制功能,例如,在碰到不曉得怎么標(biāo)記的圖片,希望有個(gè)按鈕將此圖片移到指定文件夾,好讓其它人員來(lái)review教導(dǎo)?!竸h除」的功能也是一樣,他們不希望圖片直接被刪除,而是移到指定區(qū)域,代表這些圖片不需要標(biāo)記。此外,在輸入及輸出的圖片命名格式,也可依據(jù)需求來(lái)修改。
開(kāi)發(fā)使用的組件
開(kāi)發(fā)此Tool UI的工具是采用CVUI:https://dovyski.github.io/cvui/,這是一套另人印象深刻的好用工具,對(duì)于那些只想單純用OpenCV開(kāi)發(fā)的人,不需要辛苦的用繪圖指令刻出各種按鈕組件了,CVUI已經(jīng)替你作好,而且不僅僅是陽(yáng)春簡(jiǎn)單的版面。
不過(guò),由于OpenCV本身就不支持顯示中文,因此,CVUI也無(wú)法顯示中文字型,這是唯一比較可惜的地方。
特色:
1.簡(jiǎn)單、輕量
2.僅需要OpenCV無(wú)需其它組件
3.完全基于OpenCV繪圖產(chǎn)生,不需要OpenGL或Qt等套件
4.采用C開(kāi)發(fā),速度快
5.使用行列方式自動(dòng)排列,不需擔(dān)心組件的位置
6.提供簡(jiǎn)單功能完整的mouse API
7.不多不少的接口組件(約11個(gè))
安裝:
pip install cvui
基本用法:
下方范例為產(chǎn)生一張空白的圖檔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畫(huà)面的priority
由于程序同時(shí)需顯示三個(gè)畫(huà)面:工具欄、編輯主畫(huà)面、放大畫(huà)面,這些畫(huà)面都是透過(guò)OpenCV的imshow()命令來(lái)執(zhí)行,我們必須先呼叫setWindowProperty,讓工具欄及放大畫(huà)面的窗口皆保持在編輯主畫(huà)面上方,否則會(huì)被遮蓋(后方數(shù)字愈大則在愈上方)。
cv2.setWindowProperty(WINDOW_NAME,cv2.WND_PROP_TOPMOST, 1)
使用接口
總共分為三個(gè)窗口:工具欄、主圖片、以及Zoom放大三個(gè)窗口。
為了提供伊甸的標(biāo)記人員操作方便,工具欄圖示特意放得較大,且以方便按到為原則,顯示文字也以直覺(jué)易懂為主。
1.點(diǎn)按數(shù)字0-9可調(diào)整圖片mask的透明度,確定mask是否正確。
2.筆刷調(diào)整,可于工具欄上預(yù)覽目前筆刷的大小。鼠標(biāo)左鍵為白色,右鍵為黑色,代表在黑白的mask上增加及減少區(qū)域。
3.「存盤(pán)」按鈕:直接將目前看到mask所編修的畫(huà)面,存成黑白mask檔(png格式),若沒(méi)有按此鍵存檔就跳到其它張,不會(huì)儲(chǔ)存。
4.「不會(huì)」及「刪除」按鈕:此兩個(gè)按鈕會(huì)把目前圖片移到指定的區(qū)域(可在配置文件中修改域位置),方便事后作檢視的動(dòng)作。
5.「上一張」及「下一張」:切換圖片使用。
6.Zoom放大區(qū):放大預(yù)覽目前鼠標(biāo)所在的區(qū)域。放大倍率可在配置文件中調(diào)整。
.ini 配置文件說(shuō)明
[PATHS]
#待標(biāo)注圖片的路徑(例如imagesf1)
source_path = images
#不曉得怎么標(biāo)注的圖片, 要存放的路徑(「不會(huì)」按鈕)
unknown_path = unknown
#不需要標(biāo)注的圖片, 要存放的路徑(「刪除」按鈕)
removed_path = dont_need
[DISPLAY]
#工具欄的方向:0為橫向, 1為蹤向。
tool_box = 1
[masks]
#是否要在標(biāo)記完成所儲(chǔ)存的mask圖檔,文件名前方加上額外字符串。(空白代表不需要)
txt_prefix =
#是否要在標(biāo)記完成所儲(chǔ)存的mask圖檔,文件名后方加上額外字符串。(空白代表不需要)
#下方范例,代表要加上 _mask 字符串,可讓PixelAnnotationTool程序讀取。
txt_append = _mask
#儲(chǔ)存的mask圖檔格式
ext_format = .png
#放大預(yù)覽的尺寸(單位為pixels)
zoom_size = 600
未來(lái)可加入的功能
針對(duì)不同的標(biāo)記對(duì)象,可加入該對(duì)象相關(guān)的mask檢測(cè)功能。例如此次的目標(biāo)物為人物,那么可加入訓(xùn)練好的人物mask檢測(cè)模型,先替用戶產(chǎn)生預(yù)先mask好的圖片,讓用戶進(jìn)行編修,以加快標(biāo)記mask的速度。
審核編輯:劉清
-
OpenGL
+關(guān)注
關(guān)注
1文章
85瀏覽量
29243 -
OpenCV
+關(guān)注
關(guān)注
31文章
634瀏覽量
41337 -
python
+關(guān)注
關(guān)注
56文章
4792瀏覽量
84626
原文標(biāo)題:影像Segmentation工具開(kāi)發(fā)
文章出處:【微信號(hào):易心Microbit編程,微信公眾號(hào):易心Microbit編程】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論