ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

中文版 labelImg 1.8.6 打开即用:YOLO 数据集标注与避坑指南

中文版 labelImg 1.8.6 打开即用:YOLO 数据集标注与避坑指南 简介这份资源是中文版 labelImg 1.8.6 免安装压缩包面向需要做图像标注的算法工程师、数据标注人员以及深度学习入门学习者。解压后直接运行即可使用省去 Python 环境配置与依赖安装的繁琐步骤适合快速投入目标检测数据集的制作。压缩包共 151 个文件约 31.63MB以 85 个 dll 动态库和 30 个 pyd 扩展模块为主承担界面渲染与 Python 运行时支撑另有 23 个 qm 中文语言文件、7 个 xsl 样式表及 1 个 exe 主程序共同构成完整的可执行环境。LabelImg 支持在 JPEG、PNG 等图像上绘制矩形或多边形框标注目标位置与类别并可导出 XML、YOLO、CreateML 等格式方便与主流检测框架对接。目前已有 2209 人学习下载适合希望跳过环境搭建、直接上手标注的读者使用。1. 中文版 labelImg 1.8.6 打开即用为什么一线标注现场都在找这个包如果你做过目标检测数据集大概率经历过这个场景在 Ubuntu 18.04 上按教程装 labelImgpip 装完一跑就闪退报错指向 Qt 平台插件换到 WindowsPython 版本和 PyQt5 版本打架折腾一下午标注工具还没打开。中文版 labelImg 1.8.6 打开即用这个方向解决的正是这件事——把标注工具从「环境工程」降级成「双击一个可执行文件」。它面向的是需要快速产出 YOLO 或 VOC 格式标注数据的算法工程师、数据标注负责人以及刚入门目标检测、不想在环境配置上消耗热情的新手。这一章先把「打开即用」到底省掉了什么、1.8.6 这个版本在标注流程里处于什么位置讲清楚后面几章再拆解目录结构、快捷键、格式转换和踩坑排查。labelImg 本身是经典的矩形框标注工具中文版的意义不只是界面汉化更在于把预训练类别、默认保存格式、快捷键提示这些高频操作做成开箱即用的状态。2. 中文版 labelImg 1.8.6 的目录结构与运行方式先搞清楚你拿到的是什么2.1 打开即用包通常包含哪些文件一个典型的「打开即用」中文版 labelImg 1.8.6 分发包不会只有一个 exe。它一般包含主程序、Qt 运行时依赖、中文语言资源、预置类别文件和一份简短的快捷键说明。下面这张表是我在整理这类包时最关注的几个部分你可以对照自己手里的目录看一眼。文件或目录作用缺失后的典型表现labelImg.exe主程序入口双击无反应或提示找不到入口platforms/qwindows.dllQt 平台插件启动即闪退报 could not find platform plugintranslations/zh_CN.qm中文界面翻译界面仍是英文但功能正常predefined_classes.txt预置类别列表每次标注都要手动输入类别名data/predefined_classes.txt同上部分版本放在 data 下类别下拉框为空README 或快捷键说明操作提示需要自己回忆快捷键如果你拿到的是源码目录而不是打包好的可执行文件那「打开即用」的前提是你本地已经有 Python 环境。常见做法是进入目录后直接运行主脚本但这种方式在 Windows 上仍然可能遇到 PyQt5 缺失的问题。所以真正意义上的打开即用指的是已经用 PyInstaller 或类似工具打包成单目录或单文件的可执行程序。2.2 在 Windows 上双击运行的最小步骤假设你拿到的是一个解压后的目录路径里没有中文和空格操作顺序如下。# 1. 解压到一个纯英文路径例如 D:\tools\labelImg_chinese_1.8.6 # 2. 进入目录确认 labelImg.exe 和 platforms 文件夹在同一层 dir D:\tools\labelImg_chinese_1.8.6 # 3. 双击 labelImg.exe或者在命令行里启动以便看到报错 D:\tools\labelImg_chinese_1.8.6\labelImg.exe这里用命令行启动而不是直接双击原因是闪退时命令行窗口会保留错误信息。参数方面labelImg 1.8.6 支持在启动时指定预置类别文件和保存目录常见做法是labelImg.exe D:\dataset\images D:\dataset\classes.txt D:\dataset\labels第一个参数是图片文件夹第二个是类别定义文件第三个是标注文件输出目录。如果你不传这些参数程序启动后也可以在界面里通过「打开目录」和「改变存放目录」来设置。注意路径中不要出现中文Qt 在部分 Windows 环境下对中文路径的处理并不稳定这是后面避坑章节会展开的一条。2.3 在 Ubuntu 18.04 上不装 Python 直接跑的方式Ubuntu 18.04 是很多算法团队还在用的老环境系统自带的 Python 版本和 Qt 库版本都比较旧。如果你拿到的是 Linux 版打包程序常见做法是赋予执行权限后直接运行。# 进入解压目录 cd ~/tools/labelImg_chinese_1.8.6 # 赋予可执行权限 chmod x labelImg # 直接运行观察终端输出 ./labelImg如果提示缺少 libxcb 相关库说明系统缺少 Qt 运行所需的 X11 依赖。这时候不要急着重装 Python 版先补系统库sudo apt-get install libxcb-xinerama0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1这几个库是 Qt 界面在 Linux 上启动的常见依赖缺一个就可能导致启动失败。补完之后再运行通常就能看到中文界面。参数上Linux 版同样支持在命令后追加图片目录和类别文件用法和 Windows 版一致。3. 用中文版 labelImg 1.8.6 标注 YOLO 数据集的完整流程3.1 标注前的目录准备与格式选择labelImg 1.8.6 支持两种主流标注格式Pascal VOC 的 XML 和 YOLO 的 TXT。选择哪种格式取决于你后面要喂给哪个训练框架。如果你用 YOLOv5、YOLOv8 这类 Ultralytics 系框架直接选 YOLO 格式最省事如果你用 MMDetection 或早期 TensorFlow 模型VOC XML 更通用。中文版界面里格式切换在左侧工具栏按钮文字是「PascalVOC」和「YOLO」点一下就能切换。目录结构建议提前整理成下面这样避免标注到一半发现图片和标签混在一起dataset/ images/ # 存放所有待标注图片 labels/ # YOLO 格式标注输出目录 classes.txt # 类别列表每行一个类别名classes.txt 的内容示例person helmet vest machinery这个文件在启动时传给 labelImg界面右侧的类别下拉框就会自动加载这些类别。如果你不传程序会默认使用 data/predefined_classes.txt或者让你手动输入。手动输入的问题是容易拼写不一致同一个人写成 person 和 Person训练时会被当成两个类别这是标注阶段最隐蔽的坑之一。3.2 快捷键驱动的标注操作标注效率的核心在快捷键。中文版 labelImg 1.8.6 的快捷键和原版一致但界面提示是中文的新手更容易记住。下面这张表是我带标注团队时要求每个人背下来的几个键。快捷键功能使用场景W创建矩形框当前图片有目标时A上一张回看漏标图片D下一张标注完成后快速切换CtrlS保存当前标注每标完一张就按CtrlShiftS保存并跳到下一张批量标注时最常用Del删除选中框框画错了CtrlZ撤销误操作后悔药实际操作节奏是按 D 进入下一张看到目标按 W 拉框选类别按 CtrlShiftS 保存并跳转。一套动作熟练后一张图三到五个目标大约十秒内完成。注意 YOLO 格式下保存时会自动生成同名的 txt 文件内容归一化后的中心点和宽高。如果你发现保存后 labels 目录是空的先检查是否切换到了 YOLO 格式VOC 格式生成的是 XML不会出现在 labels 目录里。3.3 标注文件的内容与校验YOLO 格式的标注文件每行代表一个目标格式是类别索引 中心点x 中心点y 宽度 高度所有数值都是相对于图片宽高的归一化值范围在 0 到 1 之间。下面是一个校验脚本用来检查标注文件是否存在越界或空文件。import os labels_dir dataset/labels images_dir dataset/images for name in os.listdir(labels_dir): if not name.endswith(.txt): continue path os.path.join(labels_dir, name) with open(path, r, encodingutf-8) as f: lines f.readlines() if len(lines) 0: print(f空标注文件: {name}) continue for i, line in enumerate(lines): parts line.strip().split() if len(parts) ! 5: print(f字段数异常: {name} 第{i1}行 - {line.strip()}) continue cls, cx, cy, w, h parts values [float(cx), float(cy), float(w), float(h)] if any(v 0 or v 1 for v in values): print(f归一化越界: {name} 第{i1}行 - {line.strip()})这段脚本做三件事检查空文件、检查每行是否五个字段、检查归一化值是否在 0 到 1 之间。空文件通常意味着你画了框但没保存或者保存时格式选错了。字段数异常多半是手动改过标注文件。归一化越界一般是图片旋转或裁剪后没有重新标注导致的。跑一遍这个脚本能提前发现大部分标注质量问题比训练时 loss 不下降再回头查要省时间。4. 中文版 labelImg 1.8.6 避坑与排查闪退、乱码、保存失败怎么处理4.1 双击闪退命令行报 platform plugin 错误现象双击 labelImg.exe 后窗口一闪而过或者命令行里出现「could not find or load the Qt platform plugin windows」。原因Qt 运行时找不到 platforms 目录或者 platforms 目录里的 qwindows.dll 缺失。打包程序在解压后如果目录层级被改变比如把 exe 单独拖出来就会触发这个问题。解决确保 labelImg.exe 和 platforms 文件夹在同一级目录。如果 platforms 文件夹存在但仍然报错检查环境变量 QT_QPA_PLATFORM_PLUGIN_PATH 是否被其他软件设置成了别的路径。可以在命令行里临时清空再启动set QT_QPA_PLATFORM_PLUGIN_PATH labelImg.exe4.2 界面中文显示为方框或乱码现象菜单和按钮上的中文变成方块或者显示成问号。原因系统缺少中文字体或者 translations 目录下的 zh_CN.qm 文件损坏。Windows 简体中文版一般不会缺字体但某些精简版系统会删掉部分字体。解决先确认 translations/zh_CN.qm 存在且大小不为零。如果文件正常尝试在系统里安装一款中文字体比如思源黑体或微软雅黑。Linux 下则是安装 fonts-noto-cjk 包。这个问题不影响标注功能但会影响新手对按钮含义的判断建议优先解决。4.3 保存后 labels 目录为空现象标注时明明画了框按了保存但 labels 目录里没有对应的 txt 文件。原因最常见的是格式没有切换到 YOLO。VOC 格式保存的是 XML默认输出到图片同级目录而不是你指定的 labels 目录。另一个原因是「改变存放目录」没有设置正确程序仍然在往默认目录写。解决先看左侧工具栏确认「YOLO」按钮处于按下状态。然后点「改变存放目录」选中你的 labels 文件夹。保存一张后立刻去目录里确认不要等标完几百张再检查。如果仍然没有检查图片文件名是否包含特殊字符部分版本在遇到空格或中文文件名时会保存失败。4.4 标注到一半程序卡死或自动关闭现象连续标注几十张后界面无响应或者直接退出。原因labelImg 1.8.6 在处理大尺寸图片时内存占用会持续上升尤其是图片分辨率超过 4000 像素时。另一个诱因是同时打开了过多图片的预览缓存。解决把大图提前缩放到 2000 像素以内再标注或者每标注五十张就重启一次程序。如果是在 Ubuntu 18.04 上运行检查系统内存是否被其他进程占满。标注工作本身是重复劳动养成定时保存和分段重启的习惯比事后找后悔药实际。4.5 类别下拉框为空或类别错乱现象启动后右侧类别列表是空的或者显示的类别和 classes.txt 不一致。原因启动时没有传 classes.txt 路径程序回退到了默认的 predefined_classes.txt而那个文件可能是空的。另一种情况是 classes.txt 编码不是 UTF-8中文类别名读取失败。解决启动时显式传入 classes.txt 路径并确保文件是 UTF-8 无 BOM 编码。如果类别名包含中文建议在训练脚本里也保持一致的编码设置。类别错乱会导致训练标签和实际类别对不上属于必须当场发现的问题标完一批就抽查几张。5. 从标注到训练用校验脚本和格式转换把 labelImg 1.8.6 的产出接进流水线标注完成只是第一步真正决定模型效果的是标注质量和格式转换的准确性。我一般会在标注结束后跑两个脚本一个做质量校验一个做数据集划分。质量校验脚本在 3.3 已经给过这里补一个划分脚本把 images 和 labels 按 8:2 拆成训练集和验证集。import os import random import shutil images_dir dataset/images labels_dir dataset/labels output_dir dataset/split train_ratio 0.8 random.seed(42) names [n for n in os.listdir(images_dir) if n.lower().endswith((.jpg, .png, .jpeg))] random.shuffle(names) split_index int(len(names) * train_ratio) for subset, subset_names in [(train, names[:split_index]), (val, names[split_index:])]: img_out os.path.join(output_dir, subset, images) lbl_out os.path.join(output_dir, subset, labels) os.makedirs(img_out, exist_okTrue) os.makedirs(lbl_out, exist_okTrue) for name in subset_names: shutil.copy(os.path.join(images_dir, name), os.path.join(img_out, name)) label_name os.path.splitext(name)[0] .txt label_path os.path.join(labels_dir, label_name) if os.path.exists(label_path): shutil.copy(label_path, os.path.join(lbl_out, label_name)) else: print(f缺少标注: {name})这段脚本的随机种子固定为 42保证每次划分结果一致方便复现实验。train_ratio 控制训练集比例常见做法是 0.8 或 0.9。如果某个图片没有对应的标注文件脚本会打印出来这些图片要么补标要么从数据集中剔除。划分完成后在训练配置里把 train 和 val 的路径指向 split 目录即可。还有一个容易被忽略的点labelImg 1.8.6 保存的 YOLO 格式类别索引是从 0 开始的和 Ultralytics 系框架的约定一致。如果你用的是其他框架比如某些版本的 Darknet类别索引可能从 1 开始这时候需要在转换脚本里做偏移。我一般会在划分脚本之后再加一步检查统计每个类别出现的次数如果某个类别样本数少于总样本的 1%就要考虑补充标注或做数据增强。最后说一个我自己的习惯标注开始前先拿十张图试标跑一遍校验脚本确认格式、类别、路径都没问题再让团队批量开工。这个习惯帮我省过至少两次返工。中文版 labelImg 1.8.6 打开即用的价值不在于它有多强大而在于它把标注这件事的门槛降到了「解压、双击、开标」。希望帮到你。本文还有配套的精品资源点击获取
返回列表