標(biāo)注工具 LabelImg 改造指南
分享一下對(duì)于 labelimg 的一些改造技巧
如何找到代碼的位置
在?anaconda prompt 下輸入如下指令
或者,用 vscode 打開,然后輸入
按住 control 鍵鼠標(biāo)點(diǎn)擊 labelImg 后會(huì)自動(dòng)跳轉(zhuǎn)到
<Anaconda 安裝路徑>\Lib\site-packages\labelImg\__init__.py
(本文此后路徑中,紫色的部分都將省略掉)
改動(dòng)之前記得做好版本控制
去除 change save dir

由于點(diǎn)擊 open dir 后還需要再點(diǎn)擊 change save dir 來設(shè)置保存路徑,這樣兩步操作就會(huì)容易出錯(cuò),并且通常保存路徑和打開路徑都是同一個(gè),所以個(gè)人決定把這個(gè)反人類的設(shè)計(jì)去除掉。
相關(guān)代碼在?labelImg\labelImg.py 第 1241 行
這里把我們把這個(gè)函數(shù)整個(gè)刪除掉,以及將 1325 行?open_prev_image, 1350 行?open_next_image 中的?change_save_dir_dialog 去掉
然后把第 221 行
刪除,以及將所有引用變量 change_save_dir 的地方,把變量?change_save_dir 刪除
最后在 1274 行的?open_dir_dialog 函數(shù)的最后加入?self.default_save_dir = target_dir_path,如下
同理你也可以把 open (打開單個(gè)文件)去掉,因?yàn)閷?shí)在找不到這個(gè)功能的任何實(shí)用價(jià)值
對(duì) Labels List 排序
第 806 行,load_labels 函數(shù)的最開頭加入一個(gè) sort:
上面這個(gè)代碼就是根據(jù)標(biāo)簽名進(jìn)行排序
排序之后可以看得清楚一點(diǎn),不會(huì)再雜亂無章
由于 labelimg 最上層的方框會(huì)覆蓋下面的,所以也可以根據(jù)自定義排序,把想要調(diào)整的物體拉到最前端
改變文字大小
第 1165 行
中的 0.02 控制字體大小,個(gè)人感覺 0.01 左右最合適
文字描邊
由于 labelimg 的字體實(shí)在是太細(xì),所以加一個(gè)描邊會(huì)看得清楚一些,相關(guān)的代碼在libs\shape.py 這個(gè)文件下面
在第 87 行的 paint 函數(shù)中,在 if self.paint_label 這個(gè)條件判斷的最后加入如下代碼
這樣是給所有的文字加上了一個(gè)白邊
調(diào)整方框?qū)挾取㈩伾?br>
還是上面的那個(gè) paint 函數(shù),第 92 行
這里的 1 和 2.0 控制方框的寬度
這個(gè)文件最開頭的幾行
控制著大部分的顏色(rgba),自行研究即可
個(gè)人傾向于將選中的方框填充色和方框顏色一致,所以第 134 行
改成了
這里的 self.line_color 就是邊框、標(biāo)簽的顏色
修改標(biāo)簽列表大小

簡單粗暴的方法是在第 930 行后面插入一句改變大小
一個(gè)比較好的方案(未完全測試過)是將 libs\labelDialog.py 中的?QListWidget 改成 QTableWidget,這樣可以一行顯示多個(gè)標(biāo)簽
以上的代碼替換掉源代碼 39~45 行

修改快捷鍵
第 210 行以后一系列的代碼
這里,action 的第 3 個(gè)參數(shù)就是快捷鍵
去除自動(dòng)選擇
第 1116 行開始的這 3 行代碼刪除即可
這樣打開圖片的時(shí)候就不會(huì)自動(dòng)選擇最后一個(gè)標(biāo)簽了

后記:PyQt 里面是不是統(tǒng)一沒有 property, 感覺很多東西都要調(diào)函數(shù)……