python實現labelme樣本自動標注
前言
公司前段時間做一個項目,需要用到語義分割,樣本很多,但是都沒有標注,也沒有讓標注公司弄,只好自己標注,平均兩分半一張,一天標200多張人都要瘋了,而且項目進度也比較着急。所以自己實現了一個基於labelme的自動標注模塊,在了解正文之前,請先看下一段的說明,選擇性繞道,以免耽誤個人寶貴的時間。
說明
一、模塊適用場景應滿足以下條件:
1、 樣本的標簽數量、標簽類別不變的場景(但也可以基於圖像處理做標簽檢測,有標簽出現時,可以實現自動標注,這就要看具體場景了)
2、 標簽形態,大小,無明顯變化,只存在相對位置的平移和旋轉
3、 可利用圖像處理技術,匹配到樣本中一個或多個固定的位置(且該位置相對於樣本的像素位置不變)
二、實現模塊需要具備的相應技能:
1、 了解json文件的結構;
2、 了解圖片的I/O操作及相應的類型轉換;
3、 了解基礎的圖像處理技術,能實現圖像突出特征點或區域的檢測;
4、 python基礎
三、模塊效果:
1、模塊標注准確率在90%以上,只需要調整小部分樣本即可;
2、效果圖如下(第一張為未標注狀態)
:
正文
一、 json文件簡介及相關API:
json結構簡介:
{ "imageHeight": 178,#圖片的高(rows) "imageData": "/9j/4AAQSkZJRgABAQA.............gAooooA//2Q==",#圖片編碼成的str類型數據,可以再次解碼成圖片 "flags": {},#分類樣本標注時用到,是樣本的類別(整個圖片屬於什么類別) "version": "4.2.10", "imageWidth": 1236,#圖片寬(cols) "imagePath": "001194.jpg",#圖片的名稱 "shapes": [#shepe里面以字典的形式存放標注的標簽個數(類別個數) { "shape_type": "polygon",#標注形式,默認為多邊形,還可以有矩形等其他形狀 "flags": {},#分類標簽 "label": "2",#這個框所屬的類別 "points": [#圍成框的所有點,標注時第一個點存放在這里index為0的位置。 [ 172.89719626168224,#第一個點的寬(cols) 39.77881619937695#第一個點的高(rows) ], [ 141.1214953271028, 53.17445482866043 ], ...... [ 144.23676012461058, 86.81931464174455 ] ], "group_id": null#組別 }, { "shape_type": "polygon", "flags": {}, "label": "0", "points": [ [ 170.09345794392522, 47.255451713395644 ], ...... [ 186.91588785046727, 74.3582554517134 ] ], "group_id": null }, { "shape_type": "polygon", "flags": {}, "label": "1", "points": [ [ 184.11214953271028, 36.35202492211838 ], ...... [ 185.0467289719626, 55.97819314641744 ] ], "group_id": null }, { "shape_type": "polygon", "flags": {}, "label": "0", "points": [ [ 1063.2398753894083, 37.90965732087227 ], ...... [ 1080.9968847352025, 64.0778816199377 ] ], "group_id": null }, { "shape_type": "polygon", "flags": {}, "label": "3", "points": [ [ 1061.0591900311526, 30.121495327102807 ], ...... [ 1092.2118380062304, 79.96573208722741 ] ], "group_id": null }