Labelme缩放上限突破1000%:修改 zoom_widget.py 实现更高倍率标注 - 开源小栈 - 专注于高质量开源项目、AI论文复现与开发者工具分享

AI摘要:Labelme 6.3.1 默认将图像缩放上限限制在 1000%,对于需要精细标注大图或微小目标的用户来说远远不够。本文记录了从排查 canvas.pyapp.py 到最终定位 zoom_widget.pyPERCENT_MAX 常量的完整过程,并给出具体修改步骤:将 PERCENT_MAX: Final = 1000 改为 5000 或 10000,保存后重启 Labelme 即可突破缩放限制。同时提醒源码修改在软件升级后会被覆盖,以及高倍率下的性能注意事项。

问题分析

我使用的是 Labelme 6.3.1,在标注一些分辨率较高、目标较小的图像时,发现缩放最多只能到 1000%,再往上滚轮就没有反应了。对于需要放大到 2000% 甚至 5000% 才能看清边缘的标注任务来说,这个限制非常影响效率。

于是我开始排查 Labelme 的源码,想找到缩放上限到底在哪里控制的。

一开始我怀疑是 canvas.py 里的 wheelEventzoom_request 限制了缩放。查看后发现,canvas.py 只负责发出缩放信号。

真正处理缩放的逻辑在 app.py 中。继续查看 app.py,找到了 _add_zoom_set_zoom_zoom_requested 等方法:

def _add_zoom(self, increment: float, pos: QtCore.QPointF | None = None) -> None:
    zoom_value: int
    if increment > 1:
        zoom_value = math.ceil(self._canvas_widgets.zoom_widget.value() * increment)
    else:
        zoom_value = math.floor(self._canvas_widgets.zoom_widget.value() * increment)
    self._zoom_mode = _ZoomMode.MANUAL_ZOOM
    self._set_zoom(value=zoom_value, pos=pos)

_set_zoom 最终调用:

self._canvas_widgets.zoom_widget.setValue(value)

再看 _paint_canvas

self._canvas_widgets.canvas.scale = 0.01 * self._canvas_widgets.zoom_widget.value()

就是说,canvas.scale 完全由 zoom_widget.value() 决定。而 zoom_widget 是一个 QSpinBox,它的最大值决定了缩放上限。

zoom_widget.py 中的 PERCENT_MAX

打开 labelme/widgets/zoom_widget.py,果然找到了限制:

class ZoomWidget(QtWidgets.QSpinBox):
    PERCENT_MAX: Final = 1000
    PERCENT_SUFFIX: Final = " %"

    def __init__(self) -> None:
        super().__init__()
        self.setRange(1, self.PERCENT_MAX)
        ...

PERCENT_MAX = 1000 就是缩放上限 1000% 的根源。setRange(1, 1000) 把输入范围卡死了,所以 setValue 传再大的值也会被截断。

修改步骤

找到你的 Labelme 安装路径。如果和我一样是 Anaconda 环境,通常在:

D:\anaconda\envs\你的环境名\Lib\site-packages\labelme\widgets\zoom_widget.py

用文本编辑器打开 zoom_widget.py,把 PERCENT_MAX 改大,例如改成 5000 或 10000:

class ZoomWidget(QtWidgets.QSpinBox):
    PERCENT_MAX: Final = 5000          # 原来是 1000
    PERCENT_SUFFIX: Final = " %"

    def __init__(self) -> None:
        super().__init__()
        self.setRange(1, self.PERCENT_MAX)
        ...

保存文件,完全关闭并重新启动 Labelme

修改前建议复制一份 zoom_widget.py,万一改错可以恢复。通过 pip 或 conda 升级 Labelme 后,zoom_widget.py 会被新版本替换,需要重新修改。缩放到 5000% 以上时,Qt 渲染大图的负担会明显增加,可能出现卡顿。建议根据电脑配置选择 3000%~5000%,不要盲目设成 10000% 以上。这个方法简单直接,适合需要高倍率精细标注的用户。

分类: 开源工具 标签: Labelme 缩放上限Labelme 1000%Labelme 6.3.1Labelme 放大Labelme 缩放上限怎么改Labelme 如何放大超过 1000%Labelme 标注大图缩放不够Labelme 大图标注Labelme 精细标注Labelme 6.3.1 突破缩放限制Labelme 高倍率标注设置

评论

暂无评论数据

暂无评论数据

目录