☰
labelImg安装避坑指南:Python与Qt版本选择及环境配置
2026/10/19 4:24:21 网站建设 项目流程

简介:LabelImg-master.zip 是一款面向计算机视觉与神经网络方向学习者的开源图像标注工具源码包,适合从事目标检测、语义分割等任务的数据集准备人员,也方便非编程背景的标注人员快速上手。压缩包共 108 个文件,以 27 个 py 脚本、39 个 png 界面素材为主,另含 svg 图标、sh 脚本、rst 与 md 说明文档、properties 配置及 txt 安装排错说明等,整体约 6.29MB,结构完整便于直接运行与二次开发。该工具提供直观图形界面,支持矩形框、多边形等多种标注类型,标注结果可保存为 XML 或 JSON 格式并加载续编,兼容 Windows、Mac OS 与 Linux,还允许自定义快捷键提升效率。包内附带的安装方法与错误解决说明,能帮助读者应对 Python 环境、依赖库版本不兼容等常见问题。目前已有 425 人学习下载,适合希望快速构建高质量训练数据集、推进模型训练的学习者参考使用。

1. 从一张标注歪掉的图说起:labelImg 环境到底该怎么装

上周帮一个做目标检测的 A 同学看训练结果,mAP 死活上不去,排查了半天发现不是模型的问题,是标注框整体偏了七八个像素。他用的就是 labelImg,装的时候图省事,直接pip install labelImg拉了个最新版,结果那阵子某个依赖版本抽风,画框坐标在保存时被四舍五入到了整数位,小目标全废。这事听起来玄学,但装过的人都知道,labelImg 这工具本身不复杂,坑全在 Python 版本、Qt 绑定和依赖版本这三者的排列组合上。它是个用 Python + Qt 写的图形化图片标注工具,做神经网络训练前处理的人几乎绕不开,支持 Pascal VOC 和 YOLO 两种标注格式导出。装好了十分钟上手,装不好就是闪退、黑窗口、框画不出来。这篇就按我自己的习惯,把环境列清、步骤走一遍、坏了怎么救写透,适合刚接触图片标注的新手,也适合被依赖冲突折腾过的熟手对照版本差异。

2. 装之前先把环境定死:Python 与 Qt 的版本取舍

2.1 为什么我不建议直接用 pip 装最新版

labelImg 的源码包在 GitHub 上以labelImg-master.zip的形式分发,解压后是一个标准的 Python 项目结构,核心文件是labelImg.py,依赖清单在requirements目录下按不同平台分了好几个文件。很多人图快,直接pip install labelImg,装完确实能打开,但问题在于 PyPI 上的包更新节奏和源码包不完全同步,而且它会把 PyQt5 或 PyQt6 作为依赖自动拉下来,具体拉哪个版本取决于你的 pip 解析结果。我遇到过最典型的情况是:系统里已经有一个 PyQt5 用于其他工具,pip 装 labelImg 时复用了那个版本,结果 Qt 的插件路径冲突,启动直接报could not find or load the Qt platform plugin "windows"。所以我的习惯是,不用 pip 全局装,而是从源码包走,配合虚拟环境把版本锁死。

2.2 版本对照表:Python 3.9 是甜点区

labelImg 对 Python 版本不算挑剔,但 Qt 绑定对 Python 版本有隐性要求。下面这张表是我在几台机器上实测后整理的,供参考:

组件推荐版本可接受范围备注
Python3.9.x3.7 – 3.103.11+ 部分 PyQt5 轮子缺失
PyQt55.15.95.15.x不要用 PyQt6,源码默认导入 PyQt5
lxml4.9.x4.6 – 4.9写 VOC 格式 XML 用
PyYAML6.05.x – 6.x读预定义类别文件用

Python 3.9 是我用得最顺的,3.10 也能跑,但 3.11 开始有些 PyQt5 的预编译轮子跟不上,得自己编译 Qt,那就不是装工具而是装编译器了。PyQt6 虽然更新,但 labelImg 源码里from PyQt5.QtGui import ...这类导入写死了,硬换 PyQt6 得改一堆 import,不值当。

2.3 虚拟环境创建与依赖锁定

我一般用 venv,不碰 conda,因为 conda 的 Qt 库和 pip 的 PyQt5 容易打架。命令如下:

# 创建虚拟环境,指定 Python 3.9 python3.9 -m venv labelimg-env # 激活环境(Linux/macOS) source labelimg-env/bin/activate # 激活环境(Windows) labelimg-env\Scripts\activate # 升级 pip 到较新版本,避免解析旧轮子 pip install --upgrade pip

激活后命令行前面会出现(labelimg-env),说明环境隔离生效了。这一步的意义在于,后面装的 PyQt5 和 lxml 都只在这个环境里,不会污染系统 Python,也不会和别的工具抢 Qt 插件。如果跳过这步直接全局装,一旦出问题,卸载都卸不干净,这是血泪经验。

3. 从源码包到可运行:labelImg 安装全流程

3.1 解压与目录结构确认

拿到labelImg-master.zip后,先解压到一个路径里不带中文和空格的目录,比如D:\tools\labelImg-master或~/tools/labelImg-master。路径带空格在某些 Qt 版本下会导致资源加载失败,虽然不常见,但没必要赌。解压后目录里应该有这些关键内容:

  • labelImg.py:主入口
  • libs/:核心逻辑,包括标注框绘制、格式转换
  • requirements/:分平台的依赖文件
  • resources.py:Qt 资源编译后的文件

如果resources.py不存在,说明源码包没带编译好的资源,需要自己用 pyrcc5 编译.qrc文件,这个后面排错章节会讲。

3.2 安装依赖:按平台选对 requirements 文件

进入解压后的目录,根据系统选对应的依赖文件安装:

# 进入源码目录 cd labelImg-master # Linux / macOS 用这个 pip install -r requirements/requirements-linux-python3.txt # Windows 用这个 pip install -r requirements/requirements-windows-py3.txt

这两个文件内容略有差异,Windows 版会额外指定 PyQt5 的版本号,Linux 版有时会带上pyqt5-tools。装完后用pip list确认 PyQt5 和 lxml 都在列表里。如果 pip 下载慢,可以临时指定国内镜像源,但注意镜像源同步有延迟,偶尔会拉到旧版本,装完最好核对一下版本号是否落在 2.2 节的推荐范围内。

3.3 启动方式与参数说明

依赖装好后,启动很简单:

# 在源码目录下直接运行 python labelImg.py # 带参数启动:指定预定义类别文件和保存目录 python labelImg.py --labels predefined_classes.txt --savedir ./annotations

--labels指向一个 txt 文件,每行一个类别名,启动后画框时可以直接从下拉列表选,不用手打,做多类别标注时能省不少事。--savedir指定标注文件的默认保存目录,不指定的话每次保存都要手动选路径。这两个参数是我每次必带的,尤其是类别多的时候,手打类别名打错一个字母,训练时就得回头改。

启动后界面左侧是文件列表,中间是画布,右侧是标注框列表和类别选择。按W键进入画框模式,画完选类别,按Ctrl+S保存。保存格式在左侧工具栏切换,Pascal VOC 生成.xml,YOLO 生成.txt,切换前确认一下,因为格式切换不会自动转换已有标注。

4. 配置项怎么调:让标注效率翻倍的几个设置

4.1 预定义类别文件与自动保存

预定义类别文件是个纯文本,格式就是一行一个类名,比如:

person car traffic_light

启动时用--labels加载后,画完框直接在下拉框选,不用弹输入框。另外建议在界面里勾上View -> Auto Save mode,这样每次切换图片时自动保存当前标注,避免画了十几张结果忘了按保存,一切重来。这个选项默认是关的,我第一次用的时候不知道,丢过一整轮的标注。

4.2 标注格式切换与坐标精度

labelImg 支持 VOC XML 和 YOLO TXT 两种主流格式。VOC 存的是绝对像素坐标,YOLO 存的是归一化后的中心点坐标加宽高。切换入口在左侧工具栏的按钮上,图标是个小方块切换。这里有个细节:YOLO 格式在保存时会做归一化除法,如果图片尺寸读取出错,归一化结果就会偏。所以标注前确认图片能被正常加载,不要用损坏的图。

4.3 快捷键与批量操作习惯

几个我常用的快捷键:W画框,D下一张,A上一张,Ctrl+S保存,Ctrl+Shift+S另存为。批量标注时,我习惯先把所有图过一遍画框,再统一检查一遍,而不是画一张存一张,这样节奏更连贯。另外Ctrl+U可以加载整个目录,比一张张打开快得多。

5. 避坑与排查:labelImg 装完打不开的几种救法

5.1 报错 Qt platform plugin 加载失败

现象:命令行运行python labelImg.py后,弹出报错框说could not find or load the Qt platform plugin "windows",或者 Linux 下报xcb相关错误。

原因:PyQt5 的插件路径没被正确识别,通常是系统里存在多个 Qt 安装,或者虚拟环境里的 PyQt5 装得不完整。

解决:先确认虚拟环境激活了,然后重装 PyQt5:

pip uninstall PyQt5 PyQt5-Qt5 PyQt5-sip -y pip install PyQt5==5.15.9

如果还不行,手动设置环境变量指向插件目录:

# Linux/macOS export QT_QPA_PLATFORM_PLUGIN_PATH=$(python -c "import PyQt5; print(PyQt5.__path__[0])")/Qt5/plugins # Windows 在命令行临时设置 set QT_QPA_PLATFORM_PLUGIN_PATH=%VIRTUAL_ENV%\Lib\site-packages\PyQt5\Qt5\plugins

5.2 启动闪退,无任何报错

现象:双击或命令行启动后窗口一闪就没了,命令行也没输出。

原因:多半是resources.py缺失或损坏,Qt 加载资源时静默失败。

解决:检查源码目录下有没有resources.py。没有的话,用 pyrcc5 从resources.qrc编译:

pyrcc5 -o resources.py resources.qrc

pyrcc5是 PyQt5 自带的资源编译器,装完 PyQt5 就有。编译完再启动,一般就能看到界面了。

5.3 画框后保存的坐标全是整数

现象:标注小目标时,保存的 XML 里坐标都是整数,框的位置和实际有偏差。

原因:某些旧版本的 labelImg 在计算坐标时用了整数除法,或者 PyQt5 版本过旧导致浮点精度丢失。

解决:升级到源码包里的最新labelImg.py,并确认 PyQt5 在 5.15 以上。如果还不行,检查libs/canvas.py里画框的坐标计算逻辑,把整除改成浮点除法。这个改动不大,但能救回小目标的标注精度。

5.4 中文路径下图片加载不出来

现象:图片放在中文命名的文件夹里,文件列表能看到文件名,但画布是空白的。

原因:Qt 在部分版本下对非 ASCII 路径的处理有 bug。

解决:最省事的办法是把图片和标注都放在纯英文路径下。如果非要中文路径,升级 PyQt5 到 5.15.9 以上,多数情况下能缓解,但不保证彻底解决。我一般直接避开中文路径,省心。

5.5 pip 装依赖时编译 lxml 失败

现象:pip install -r requirements...卡在 lxml 编译,报缺少 libxml2 头文件。

原因:lxml 没有匹配当前 Python 版本的预编译轮子,pip 回退到源码编译,而系统缺开发库。

解决:Linux 下装开发包:

sudo apt-get install libxml2-dev libxslt1-dev python3-dev

Windows 下一般不会遇到,因为官方轮子覆盖得全。如果遇到了,换个 Python 版本到 3.9,轮子覆盖率最高。

6. 装完怎么验证跑通:三步确认法

装完不是能打开界面就算完,得确认标注、保存、格式转换这条链路是通的。我一般走三步验证,每步都有明确的通过标准。

第一步,启动并加载图片。用python labelImg.py --labels predefined_classes.txt启动,按Ctrl+U选一个包含三五张图的目录,确认左侧列表出现文件名,点击后画布能正常显示图片。如果图片显示但颜色异常,检查图片本身的色彩空间,labelImg 对灰度图和 RGBA 图的处理略有不同,必要时先转成 RGB。

第二步,画一个框并保存,检查输出文件。按W画一个框,选类别,按Ctrl+S保存。然后打开生成的 XML 或 TXT 文件,核对坐标。VOC 格式下,<bndbox>里的xmin/ymin/xmax/ymax应该是整数像素值,且xmax > xmin、ymax > ymin。YOLO 格式下,每行五个值,第一个是类别索引,后四个是归一化坐标,都在 0 到 1 之间。如果坐标出现负数或大于 1,说明图片尺寸读取有问题,回头检查图片是否损坏。

第三步,切换格式再存一次。点左侧工具栏切换到 YOLO 格式,再保存一次,确认生成的 TXT 文件和刚才的 XML 对应同一张图,框的位置一致。这一步能验证格式转换逻辑没坏。我见过有人只测了一种格式,结果训练时才发现另一种格式的坐标全错,回头重标,那才是真的翻车。

下面这张表是我验证时用的检查清单,可以照着过一遍:

检查项通过标准不通过时看哪里
界面启动窗口正常显示,无报错弹窗第 5.1、5.2 节
图片加载画布显示图片,无空白第 5.4 节
画框保存输出文件坐标合理第 5.3 节
格式切换两种格式坐标一致检查图片尺寸读取

从那以后我每次装完 labelImg,都强制走一遍这三步,哪怕只是帮别人装个环境,也不跳过。因为标注这活是训练的前置,前面错一点,后面模型怎么调都白搭。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询