# labelme修改心得
labelme 的功能不完全符合我的標註需求,所以稍微修改了點程式。
我的 labelme 是直接 pip install labelme 安裝在win10系統上的。其他的情況我不清楚,不過我只要找到site-packages資料夾中的labelme並修改裡面的內容就好。
以 anaconda 來說,如果安裝在預設 base 環境下,則 labelme 在C:\Users\<使用者名稱>\anaconda3\Lib\site-packages\中可以找到。安裝在其他環境中,則會在C:\Users\<使用者名稱>\anaconda3\envs\<環境名稱>\Lib\site-packages找到。
最保險、簡單的找到labelme安裝路徑的方法:
1. 在開始工具列搜尋 labelme
2. 找到後選擇「開啟檔案位置」,會找到labelme的捷徑
3. 對出現的labelme圖標右鍵選擇「開啟檔案位置」,會找到labelme安裝的環境。
4. 此時路徑像是"...\Scripts",將路徑替換成"...\Lib\site-packages"即可找到labelme的程式碼
## 讓bounding box和多邊形能超出圖片外
修改shape只能畫在圖片內部的限制:
1. 找到labelme/widgets/canvas.py並打開
2. 找到函數outOfPixmap(self, p)
3. 將回傳值改為 False
函數outOfPixmap原本長成這樣:
```language-python
def outOfPixmap(self, p):
w, h = self.pixmap.width(), self.pixmap.height()
return not (0 <= p.x() <= w - 1 and 0 <= p.y() <= h - 1) #<==要修改的部分
```
解除限制後長成這樣:
```language-python
def outOfPixmap(self, p):
return False
```
也可以只是稍微放寬限制,例如改成:
```language-python
def outOfPixmap(self, p):
w, h = self.pixmap.width(), self.pixmap.height()
return not (-w*.1 <= p.x() <= w*1.1 - 1 and -h*.1 <= p.y() <= h*1.1 - 1)
```
可以讓shape只能畫在不超過圖片外10%寬高的位置,要怎麼調整判斷式任君選擇。
## 讓Group ID可以加入使用負號
1. 找到labelme/widgets/label_dialog.py並打開
2. 在LabelDialog類別的__init__函數中找到self.edit_group_id.setValidator(應該是在55-57行),會找到:
```language-python
self.edit_group_id.setValidator(
QtGui.QRegExpValidator(QtCore.QRegExp(r"\d*"), None)
)
```
改成:
```language-python
self.edit_group_id.setValidator(
QtGui.QRegExpValidator(QtCore.QRegExp(r"-?\d*"), None)
)
```