简介:这份资源是一款免 Python 环境的 labelimg.exe 图像标注工具包,主要面向需要快速完成图像标注、又不想搭建 Python 开发环境的计算机视觉初学者与研究人员。工具采用图形界面,直接双击运行即可启动,支持边界框、多边形等常用标注方式,并可将标注结果保存为 XML/YAML 格式,方便导入 Pascal VOC、YOLO 等机器学习框架;内置图像查看器支持缩放和平移,便于看清图像细节后进行精准标注。资源包内共计 109 个文件,包含可直接执行的 labelimg.exe、13 个 DLL 运行库、20 个 Python 源码、19 个 pyc 编译文件,另有图标、文档和项目配置文件,压缩后大小约 22.64MB,既轻量又保留了必要的运行组件与源码参考。解压后无需额外配置即可上手,也便于有需要的用户查阅源码或二次修改。目前已有 5012 人学习下载,适合目标检测、语义分割等任务的快速标注入门。 做目标检测的朋友应该都经历过这个场景:模型选好了,数据集还没着落。YOLO、SSD 这类模型训练之前,绕不开给图片画框标注。而提到画框标注,labelimg 几乎就是默认工具,网上随便一搜数据标注工具,十个教程里八个用的都是它。可真正动手时会发现,第一次用 labelimg 的人,消耗精力最多的地方不是标注,而是装环境——装 Python、配 pip、建虚拟环境、装依赖、处理各种报错,一圈下来可能还没画出一个框。所以当"labelimg.exe 不用安装 python 环境"这个说法出现时,马上吸引了大量被环境配置劝退的标注新手。这篇文章就围绕这个免安装的 exe 版本,把它的原理、用法、格式门道和坑一次性讲清楚。
1. labelimg.exe 的免安装到底是什么意思
1.1 它只是把 Python 环境"打包"了
一个现实情况是,labelimg 本身就是用 Python 写的图形界面工具,核心代码依赖 PyQt5 和 Python 标准库。所以所谓免安装,并不是说这东西脱离了 Python,而是有人用 PyInstaller 这类打包工具,把 Python 解释器、PyQt5 依赖、labelimg 的核心代码全部塞进了一个 exe 文件里。你双击 exe 时,它会在临时目录里把运行环境释放出来再启动,所以你表面上没装 Python,但程序内部自带了一个完整的解释器。
用生活化类比:pip 安装版就像你自己买菜、切菜、开火把菜做好;exe 版像别人把菜做好装进保温盒,你直接打开就吃。保温盒里确实有菜、有调味料、有餐具,只是不需要你亲自下厨房。理解了这一层,你就能明白为什么 exe 版体积动辄一两百兆,也就能明白为什么它和系统里的 Python 版本完全互不干扰——你机器上 Python 3.8 也好、3.12 也罢,都不会影响这个 exe 的运行。
1.2 exe 版和 pip 版怎么选
| 对比项 | exe 免安装版 | pip 安装版 |
|---|---|---|
| 环境要求 | 无需自装 Python | 需要 Python 环境 |
| 启动方式 | 双击 exe | 命令行输入 labelimg |
| 部署门槛 | 极低 | 中高 |
| 版本更新速度 | 依赖打包者,通常较慢 | 跟随官方最新版本 |
| 二次开发 | 基本不可 | 可改源码、可集成脚本 |
| 适合场景 | 快速标注、临时使用、新手体验 | 长期标注、批量处理、自定义功能 |
我给的建议很简单:如果你只是想把几百张图标完喂给模型训练,exe 完全够用;如果你除了标注,还希望自动化生成预处理、自定义标签逻辑、或者在训练流程里批量跑标注脚本,那你就该走 pip 版。两条路径并不是二选一,很多人两种方式都保留着,不同场景用不同方式。
2. 拿到 labelimg.exe 后怎么跑起来
2.1 获取渠道与下载前后的校验
先说下载。exe 版本多数来自 GitHub Release、技术社区分享或网盘转载,来源决定风险。从官方或可信渠道下载是第一原则,下载完最好核对一下文件哈希。这里要特别提一句:PyInstaller 打包的 exe 很容易触发 Windows Defender 等杀毒软件的误报,很多正经打包工具也逃不过这个命运。看到报毒先别慌,先看文件来源和哈希,再用在线扫描服务综合判断。
另一个容易被忽略的点是路径。下载后的 exe 建议放在纯英文路径下,比如D:\tools\labelimg.exe,不要放在带中文的桌面文件夹里。因为 PyInstaller 打包的 exe 在运行时会在临时目录解包,中文用户名或中文路径在某些 Windows 版本上会导致程序启动后找不到文件、打不开图片等奇怪问题。这种问题最坑的地方在于报错信息不明确,可能只是弹个无意义的提示框,让人完全摸不着头脑。
2.2 首次启动与界面速览
双击 exe,等待几秒,主界面就出来了。整体布局很直观:左侧是图片预览区,右侧是文件列表和标注框列表。顶部工具栏的核心按钮有 Open Dir(打开图片目录)、Change Save Dir(设置标注文件保存目录)、Next Image/Prev Image(上一张/下一张)、Verify Image(标记验证)、Save(保存当前标注)。
第一次使用最常见的困惑是:为什么打开的图片目录里看不到图?通常是因为没有设置保存目录,或者图片目录里混入了程序不支持的格式。labelimg 默认支持常见图像格式,jpg、png、bmp 这些没问题。建议在动手标注之前,先把图片目录和保存目录都设置好,再开始干活。这两步顺序错了,保存的 xml 或 txt 就会跑到奇怪的位置,后面整理数据集时够你头疼的。另外如果你在启动时遇到缺少MSVCP140.dll之类的报错,通常是系统缺少 VC++ 运行库,装一个对应的运行库合集就能解决,这是 exe 版常见的依赖问题。
3. 标注流程与格式选择的门道
3.1 动手前先把目录结构理清
在开始标第一张图之前,最好先把目录结构定好。我平时用的结构是这样:
dataset/ ├── images/ # 原始图片 ├── annotations/ # 标注结果 └── predefined_classes.txt # 预设类别列表images 放原图,annotations 放标注结果,两个目录建议同级。这样做的意义在于:训练脚本和数据划分脚本处理起来最顺手,而且 labelimg 在 YOLO 模式下会在保存目录自动生成 classes.txt。如果你把标注结果和原图混在一个目录,后期整理数据、划分训练集验证集会非常痛苦。这个习惯从第一个项目就要养成,别等到标了几千张图以后再去重构目录。
3.2 两种保存格式的底层逻辑
这是最值得花时间理解的部分。labelimg 支持两种输出格式:PascalVOC 格式会在保存目录生成 xml 文件,记录每个目标的类别和 bndbox 坐标(xmin、ymin、xmax、ymax),是绝对像素值,人眼可读;YOLO 格式会生成同名 txt 文件,每行一个目标,格式是class_id x_center y_center width height,坐标都做了归一化(除以图片宽高)。训练 YOLO 系列模型时,txt 格式可以直接用;训练 Detectron2、MMDetection 这类框架时,xml 格式更常见。
举个例子,一张 800x600 的图里有一只猫,框的左上角在 (100, 80),右下角在 (320, 480)。PascalVOC 里对应大概是:
<annotation> <size> <width>800</width> <height>600</height> </size> <object> <name>cat</name> <bndbox> <xmin>100</xmin> <ymin>80</ymin> <xmax>320</xmax> <ymax>480</ymax> </bndbox> </object> </annotation>而同一个框在 YOLO 模式下对应的 txt 内容是:
0 0.2625 0.4667 0.275 0.6667这些数字怎么来的?x_center=(100+320)/2/800=0.2625,y_center=(80+480)/2/600=0.4667,width=(320-100)/800=0.275,height=(480-80)/600=0.6667。归一化坐标不依赖图片实际分辨率,模型训练做数据增广时也不用做额外的坐标换算,这是 YOLO 格式能被主流框架直接使用的重要原因。
界面顶部有个当前格式按钮,显示PascalVOC或YOLO,点击即可切换。这里有个容易被坑的地方:默认配置下,如果你之前用 PascalVOC 保存过某张图,切到 YOLO 后再保存,可能同时存在 xml 和 txt 两个文件,这容易造成数据混乱。建议一个项目全程只使用一种格式,比如最终要训练 YOLO,就一开始切到 YOLO 模式,不要中途混用。
另一个坑是 classes.txt。一旦切换到 YOLO 模式,labelimg 会在保存目录维护一个 classes.txt,每次保存都会重写它。如果你手动在 classes.txt 里添加了第 4 类、第 5 类,下一次保存后很可能被覆盖回程序自己检测到的类别集合。正确做法是在predefined_classes.txt里维护你所有的预设标签,启动前先把这个文件配好,避免中途反复改类名。这个小知识点能帮你省掉大量重复劳动。
3.3 标注操作与快捷键细节
标注操作本身不复杂:按 W 进入画框模式,在图上按住鼠标左键拖出矩形框,松开后弹出类别输入框,输入或选择类别后回车确定;按 D 切到下一张,按 A 回上一张,按 Ctrl+S 保存当前图,空格键可以将图片标记为已验证,图片上方会出现绿色边框。这些快捷键熟练后,一张图的平均标注时间能压到几秒,一天标个几百张并不夸张。
还有一个实用技巧:标注大图时,先用 Zoom In 放大局部,画完框后按快捷键快速平移。不过在非 100% 缩放下,个别老版本 exe 存在坐标偏移问题,虽然现在的版本大多修复了,但为了保险,关键框最好在 100% 缩放下核对一遍,尤其是小目标密集的场景。你也不想辛苦标完几千张图,训练时发现框全部偏了几个像素吧。
4. 实战中的常见问题与排查技巧
4.1 常见问题速查表
exe 版用久了,总会碰到一些反复出现的问题。我把平时遇到的和身边朋友问得多的整理成了一张表:
| 问题现象 | 可能原因 | 解决思路 |
|---|---|---|
| 杀毒软件删掉 exe | PyInstaller 打包特征被误报 | 从可信渠道重新下载,添加信任白名单 |
| 双击后无反应 | 缺少 VC++ 运行库或系统组件 | 安装对应运行库,检查系统是否为 64 位 |
| 中文路径下无法打开图片 | 程序对非英文路径兼容差 | 将工程放在纯英文路径,避免中文用户名目录 |
| 切到 YOLO 后没生成 txt | 当前仍是 PascalVOC 模式 | 点击顶部格式按钮切换为 YOLO 后重新保存 |
| classes.txt 刚加的类又没了 | 每次保存会重写该文件 | 用 predefined_classes.txt 维护预设类别 |
| 标注框在 Zoom 时偏移 | 缩放映射问题 | 放大标注时核对坐标,关键框在 100% 下复查 |
| 多图标注后内存占用过高 | 预览加载过多高分辨率大图 | 分批标注,及时关闭程序重启 |
这张表里的问题我基本都实际遇到过,尤其是杀毒、路径、格式这三大类,占掉了日常排障的八成时间。第一次用的朋友如果卡住了,先对照这张表排查,大部分问题都能自己解决,不用急着去群里问。
4.2 我踩过的几个坑
我实际用下来踩过两个印象比较深的坑。第一个是杀毒软件误报。当时从某个渠道下载了一个打包好的 labelimg.exe,Windows Defender 直接给删了。我第一反应是文件可能被二次打包动了手脚,后来从可信渠道重新下载,把哈希值比对无误,再在 Defender 里加了排除项,才算顺利跑起来。自此我养成一个习惯:凡是这种命令行工具或打包 exe,下载后先算哈希、再做一次在线扫描,确定干净再放进工程目录。
第二个坑是格式混乱。有一次项目要训练 YOLOv5,我前期一直用的默认 PascalVOC 模式,标了 200 多张图,后面切到 YOLO 模式继续标。等数据整理时发现同名的 xml 和 txt 混在一起,转换脚本跑出来类别编号对不上。最后没办法,写了段脚本把 xml 统一转 txt 才救回来。从那以后,我每个项目开始前第一件事就是确认标注模式,这个习惯帮我避免了很多返工。
5. 什么时候该从 exe 迁回 Python 环境
5.1 exe 版的边界在哪里
聊完优势也得说边界。exe 版最大的问题是版本滞后。labelimg 官方仓库更新频率不算高,但社区修复和一些实用功能,比如更好的高 DPI 适配、部分格式兼容修复,往往只体现在源码版本里,打包版不一定跟着更新。如果有一天你发现 exe 版在某个新的 Windows 版本上表现异常,大概率是因为打包时用的运行库太旧。
其次是无法脚本化。数据标注到了一定规模,很多人会希望批量预标注、批量清洗、自动生成标签检查报告。这些东西都依赖 import labelimg 或调用其底层接口,而 exe 版只是一个独立程序,无法嵌入到你的 Python 脚本里。如果你做 halcon 深度学习之类更专门的标注流程,或者团队在评估 cvat 这类平台化标注工具,那 exe 版就只是个临时方案,只能在初期帮你跑通流程,很难承担起数据工程的一部分职责。
5.2 按需求选择你的路线
所以我的选择标准很简单:
- 刚入门、只标几十到几百张图、训练小模型验证流程:直接用 exe,省掉环境折腾。
- 长期做数据标注、要写脚本批量处理、需要紧跟官方版本:走 pip 安装路线。
如果你决定走 pip 路线,最简步骤是:装好 Python 后开一个虚拟环境隔离依赖,python -m venv labelimg_env,激活虚拟环境,pip install labelimg,然后命令行输入labelimg启动。过程中如果遇到 PyQt5 相关的依赖报错,基本都是 Python 版本和 pip 版本不匹配造成的,优先检查虚拟环境和 Python 版本。exe 版和 pip 版并不冲突,我自己的主力机上两个都有:exe 给同事快速标注用,pip 版用来跑脚本。
最后再分享一个个人经验。我之前在测试机上一直用 exe 版做临时快速标注,主力开发机上用 pip 版跑批量脚本。在实际推荐给刚入门的朋友时,我会先让他们用 exe 版把标注流程跑通、把 PascalVOC 和 YOLO 格式的差异看明白,等他们真正理解"标注这件事本身就是数据工程的一部分"之后,再去碰环境配置,心态会完全不一样。如果你刚开始接触目标检测,别一上来就被环境配置劝退,先下载一个 exe 标注一张图试试,整个机器学习数据准备的地基就算打下来了。
本文还有配套的精品资源,点击获取