---
# System prepended metadata

title: labelme修改心得

---

# 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)
        )
```
