news 2026/11/3 5:44:12

labelme安装避坑:conda虚拟环境与PyQt5依赖版本对齐

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
labelme安装避坑:conda虚拟环境与PyQt5依赖版本对齐

简介:面向图像分割与标注入门者的 Labelme 安装配置实操文档,针对 Python 环境搭建与工具上手过程中版本选择、虚拟环境创建等常见障碍,给出可照做的流程。正文以 Anaconda 为起点,区分 Python2 与 Python3 两套 conda 建环境与依赖安装指令,并说明 labelme 启动方式,以及用 labelme_json_to_dataset 将 JSON 标注文件转为可视化结果、查看 label_viz.png 的完整流程,适合计算机视觉、机器学习方向的数据标注初学者与需快速复制环境的工程人员参考。资源包共 1 个 docx 文件,约 14KB,篇幅紧凑、步骤集中,便于随查随用。已有 15266 人学习下载,经过较多读者验证。读者可据此独立完成环境准备、标注工具调用与标注结果转换,减少版本不匹配和依赖安装上的反复试错,并形成从标注到数据可视化的基本认识。

1. 版本没对齐:labelme 敲下去满屏红字的那一晚

某开发者把 Anaconda 装好,环境建好,pip install labelme回车,屏幕上Successfully installed labelme,心里一松。接着敲labelme,一片红字滚上去,最后一行停在ModuleNotFoundError: No module named 'PyQt5'。包是装上了,界面起不来,问题不在 labelme 本身,而在它挂着的那个 GUI 依赖上。

labelme 安装教程在网上到处都是,真正让人卡住的从来不是命令数量,而是版本和依赖的对应关系:Python 2.7 那条线走conda install pyqt,Python 3.6 那条线走pip install pyqt5,两条线混着敲,出来的环境就是个黑匣子,报错还指不到根上。这套流程适合刚拿到一批待标注图片、准备自己搭标注环境的人,也适合装过一次没起来、想搞清楚哪一步错了的人。

2. 装之前先把环境定死:Anaconda 与 Python 版本对照

labelme 不是那种pip install完就能跑的纯 Python 库,它带图形界面,界面背后是 Qt 的 Python 绑定。这套绑定在不同 Python 版本上叫不同名字、走不同包管理器,所以装之前必须先定死一件事:这条环境用哪个 Python 大版本。这个决定一旦定下来,后面建环境、装依赖、启动命令全都跟着它走,中途改主意等于推倒重来。

我一般会先问清楚两件事:机器上准备跑什么模型训练代码,那套代码要求哪个 Python;以及这台机器以前有没有装过 Anaconda。前者决定 labelme 环境跟不跟主环境合并,后者决定要不要重新配 PATH。绝大多数情况下答案都是分开建一个独立环境,因为 labelme 的 Qt 依赖版本很挑,塞进主环境容易把别的库带崩。

2.1 两条版本线:Python 2.7 配 pyqt,Python 3.6 配 pyqt5

labelme 的安装路线在官方教程里就分成两条,差别只在 Python 大版本和 GUI 依赖包名:

路线Python 版本GUI 依赖装依赖的命令建环境命令
旧线2.7pyqt(conda 包)conda install pyqtconda create --name=labelme python=2.7
新线3.6pyqt5(pip 包)pip install pyqt5conda create --name=labelme python=3.6

这张表里最容易被忽略的是「装依赖用哪个包管理器」这一列。旧线用conda install pyqt,新线用pip install pyqt5,不是随便写的:旧线那个 pyqt 包在 conda 的默认频道里有现成的二进制构建,直接 conda 装省事;新线的 PyQt5 走 pip 装更常见,版本选择也更自由。

真正的坑在混用。有人在 Python 3.6 环境里顺手敲了conda install pyqt,conda 会去装一套老的 Qt4 绑定,然后pip install labelme再拉一套 PyQt5 进来,两套 Qt 库同名不同版本,启动时谁先被 import 到全看运气。这种现象在 Windows 上尤其明显,因为 DLL 搜索路径的优先级不是按 Python 的 import 顺序来的。

提示:定路线的时候顺便把「以后要不要在这个环境里装 torch、opencv 之类的大包」想清楚。要装,就把 Python 小版本往高里选一档,别硬卡在 3.6。

关于 Python 小版本的取舍,还有一层现实约束。原文给的是python=3.6,这是当时能稳定跑通 labelme 的版本。现在 pip 默认会解析到较新的 labelme 版本,新版本对 Python 的最低要求已经抬高了,在 3.6 上直接pip install labelme有可能报requires a different Python。常见做法是二选一:要么把建环境那条命令里的python=3.6换成更高的一个小版本(3.8 及以上都行),要么在 pip 后面钉一个还支持 3.6 的 labelme 版本号。前者更省心,后者适合老机器没法升级的情况。

2.2 装 Anaconda:安装包要跟 Python 版本对上

Anaconda 的下载页面会按 Python 版本给出不同的安装包,选的时候对应自己想用的那个版本就行,不用纠结「最新版一定最好」。安装过程本身没什么技术含量,值得停下来看一眼的是最后那几步选项:

  • 安装路径别带中文、别带空格。C:\Users\张三\anaconda3这种路径,后面 conda 建环境和 pip 写脚本入口时都可能出问题,装到一半报编码错误很难往回查。
  • 「Add Anaconda to my PATH environment variable」这个勾,官方默认不勾是有道理的。勾了会把它塞到系统 PATH 最前面,和其他 Python 解释器抢python这个名字;不勾的话就用开始菜单里的 Anaconda Prompt,环境变量由它自己临时设好。
  • 「Register Anaconda as my default Python」这一项,机器上只有一套 Python 时勾不勾都行,有多套时建议不勾。

装完先开一个 Anaconda Prompt,敲一句版本号确认装的是活的:

# 确认 conda 可用,顺便看版本 conda --version # 看当前 conda 挂了多少个频道、根环境在哪 conda info

第一条命令返回类似conda 23.x.x就说明装好了。第二条命令输出里的base environment那一行是根环境路径,后面排查「包装到哪去了」的时候要用到它。如果conda --version报「不是内部或外部命令」,说明当前这个窗口的 PATH 里没有 conda,八成是用了普通的 cmd 而不是 Anaconda Prompt,这个在 5.3 节展开。

2.3 打开 cmd 的三种方式,以及它们为什么不等价

原文里给的方式是「按下 Windows 键 + R,输入 cmd」,这是最快的一条路,但它是普通命令提示符,不会自动带上 conda 的环境变量。实际用下来有三种入口,行为不一样:

第一种,Win+R 输入cmd,最干净的 cmd,PATH 里只有系统级变量。如果安装 Anaconda 时没勾「Add to PATH」,在这里敲conda是找不到的。

第二种,开始菜单里搜「Anaconda Prompt」,本质还是个 cmd,但启动时会先执行一遍 conda 的初始化脚本,把 conda 加进当前会话的 PATH。日常建环境、装包,我都推荐用这个。

第三种,装完 Anaconda 后新开的普通 cmd。这里有个容易忽略的细节:conda 的初始化是写进用户环境变量的,已经开着的窗口读不到新写入的变量,必须关掉重开。所以「装完 Anaconda 立刻在原来的 cmd 里敲 conda 报错」这种情况,先别怀疑安装失败,关掉窗口重开一次再说。

三种方式背后是同一套 conda,区别只在当前会话的环境变量。搞清楚这一点,后面遇到「同一条命令在 A 窗口能跑、B 窗口不能跑」,就不会往玄学上想了。

3. 建虚拟环境:conda create 到 activate 的完整命令链

环境隔离这件事,在标注工具上比在普通脚本上更重要。labelme 依赖的 Qt 绑定是个大块头,一旦和别的项目共用一套 site-packages,版本冲突几乎是必然的。conda 建环境的价值就在这儿:给 labelme 单开一个目录,装坏了conda remove -n labelme --all一把删干净,主环境一点不受影响,这就是后悔药。

整条命令链其实只有四步:建环境、激活、装 GUI 依赖、装 labelme。原文把 Python 2 和 Python 3 的命令分开放了,这里按新线(Python 3)走一遍,旧线的差异单独标出来。

3.1 conda create --name=labelme python=3.6 的参数拆解

# 建一个名为 labelme 的独立环境,指定 Python 版本 conda create --name=labelme python=3.6 # 中途会列出将要安装的包,输入 y 确认 # Proceed ([y]/n)? y

--name=labelme是环境名,等号两边不能有空格,写成--name labelme也可以,两种写法 conda 都认。这个名字会直接变成环境目录名,默认落在 Anaconda 安装目录下的envs\labelme,所以别用中文、别用空格。

python=3.6是版本约束,conda 会去频道里找满足这个约束的最新补丁版。这里要注意单等号和双等号的区别:python=3.6是模糊匹配 3.6 系列,python==3.6.8才是精确锁定。日常建环境用单等号就够了,除非要复现一个特定 bug。

旧线把这一句换成conda create --name=labelme python=2.7即可,其余结构完全一样。两条线不要在同一个环境名上反复建,conda 会提示环境已存在,得先删。

建完可以列一下确认:

# 列出所有 conda 环境,当前激活的那个前面有星号 conda env list # 或者用这个,输出更详细,带每个环境的路径 conda info --envs

输出里应该能看到一行labelme加上它的绝对路径。看不到就是没建成功,往上翻创建过程的日志,常见原因是频道连不上或者磁盘空间不够。

3.2 激活环境:source activate 和 activate 不是一回事

原文写的是source activate labelme,这一句在 Linux 和 macOS 的终端里是标准写法,但搬到 Windows 的 cmd 里大概率报「'source' 不是内部或外部命令」。原因很直白:source是 bash 的内置命令,cmd 里根本没有这个东西。

Windows 下激活环境有三种写法,按 conda 版本从旧到新:

# 老版本 conda(4.6 以前)在 Windows 上的写法 activate labelme # 新版本 conda 的通用写法,跨平台一致 conda activate labelme # 如果想沿用原文的 source 写法,需要用 Git Bash 之类的 bash 环境 source activate labelme

推荐直接用conda activate labelme。它是 conda 4.6 之后统一的做法,Windows、Linux、macOS 三端一致,脚本里写这一句不会因为换机器就失效。activate labelme在老版本上还能用,新版本有些安装会把它当成一个独立的批处理入口,行为不完全一样。

激活成功的标志是命令行提示符前面多了一对括号:

# 激活后提示符大概长这样 (labelme) C:\Users\someone>

没有这对括号,后面所有 pip 命令都会装到 base 环境里去,这是新手最常踩的一脚,5.1 节专门讲。

环境不用了要退出,敲conda deactivate。要彻底删掉重建,先退出再删:

# 退出当前环境 conda deactivate # 删除整个 labelme 环境,装崩了就用这一句重来 conda remove -n labelme --all

--all不能省,省了只删环境里的包不删环境本身。这行命令是我在装崩时的第一反应,比重装 Anaconda 快得多。

3.3 环境建好先自查:python、pip、conda 三者的指向

激活之后别急着装 labelme,先花三十秒确认三个东西指向同一处:

# 确认 python 解释器来自 labelme 环境 python -V where python # 确认 pip 也来自 labelme 环境 pip -V where pip

python -V应该输出刚才指定的版本,比如Python 3.6.x。where python输出的第一行路径里应该包含envs\labelme,如果第一行是 Anaconda 根目录下的python.exe,说明环境其实没激活成功,或者 PATH 里有个优先级更高的解释器把前面的盖住了。

pip -V的输出格式是「pip 版本 + 对应的 Python 路径 + site-packages 路径」,后面两个路径都必须落在 labelme 环境里。这一步查出来的问题,比装完 labelme 再回头查要省事十倍——因为那时候报的错往往是 Qt 相关的,跟环境错位八竿子打不着。

还有个细节:如果where python输出了好幾行,说明系统里装了多套 Python。这时不要靠调整 PATH 顺序去赌,直接用完整路径调用,比如C:\Users\someone\anaconda3\envs\labelme\python.exe -V,确认这一套是好的,再回到激活状态下的简写命令。

4. 装 labelme 本体:pyqt5 依赖与 pip 的先后顺序

到了装包这一步,顺序是有讲究的:先装 GUI 依赖,再装 labelme。反过来的话,pip install labelme会把 PyQt5 当成普通依赖顺手拉一个版本进来,这个版本不一定和当前 Python 小版本匹配,后面再想换版本就得先卸再装,容易留下半截文件。先手动装 PyQt5,等于把这个选择权握在自己手里。

原文的命令是分开两行敲的,这里照做,只是在每条后面补上验证动作。

4.1 先装 GUI 依赖:Python 3 用 pyqt5,Python 2 用 conda install pyqt

新线(Python 3):

# 确认已激活 labelme 环境,提示符前有 (labelme) pip install pyqt5

旧线(Python 2):

# 旧线用 conda 装 pyqt,不用 pip conda install pyqt

两条命令的差别不只是包名。pip install pyqt5从 PyPI 拉 wheel 包,装完是一套独立的 PyQt5;conda install pyqt从 conda 频道拉二进制包,装进去的是一套和 conda 生态兼容性更好的构建。这两套东西不要装在同一个环境里,理由在 2.1 节说过。

装 PyQt5 的时候留意两件事。一是版本,pip install pyqt5不带版本号会装最新的,最新版对 Python 小版本有要求,如果 pip 提示找不到匹配的发行版,就退一档装,写法是pip install "pyqt5<5.15"这种形式(具体上限按 pip 的报错信息给的范围来)。二是位数,Python 是 64 位的就必须装 64 位的 PyQt5 wheel,混装 32 位会在 import 时报 DLL 加载失败,这个在 5.2 节展开。

网络不好的时候 pip 会卡在下载环节,常见做法是加-i指到一个能连通的镜像:

# 把 <镜像地址> 换成你手边能用的那个 pip 镜像 pip install pyqt5 -i <镜像地址> # 顺手把超时时间放宽一点,大包下载不容易断 pip install pyqt5 -i <镜像地址> --default-timeout=120

--default-timeout单位是秒,默认 15 秒,PyQt5 这个体积的包在网络抖动时很容易触发超时重试,调到 120 秒基本不会再断。

装完验证一下能不能 import:

# 能打印出版本号就说明 Qt 绑定装对了 python -c "from PyQt5 import QtCore; print(QtCore.QT_VERSION_STR)"

这条命令不弹窗口,只是加载 QtCore 并打印 Qt 的版本。如果这里就报错,先别往下装 labelme,问题一定在 PyQt5 这一层。

4.2 pip install labelme:装到哪个目录、装了什么

# 同样在 labelme 环境里执行 pip install labelme

这一句会做几件事:从 PyPI 拉 labelme 的源码包或 wheel,解析它的依赖(包括 numpy、Pillow、PyQt5 等),然后把可执行入口写进环境的Scripts目录。所谓「可执行入口」,就是在envs\labelme\Scripts\下生成一个labelme.exe,这也是为什么激活环境后能直接敲labelme这个名字。

想知道装到哪了,用 where 查:

# 定位 labelme.exe 的实际路径 where labelme # 查 labelme 的版本和安装位置 pip show labelme

where labelme的输出应该只有一行,路径里带envs\labelme\Scripts。如果输出为空,说明 Scripts 目录不在当前 PATH 里;如果输出了多行,说明之前用别的方式装过一份,两份会打架,得把多余的那份卸掉。

pip show labelme输出里的Location字段是 site-packages 路径,Version是装上的版本。把这两个值记下来,后面出问题排查时有用。

如果 pip 报ERROR: Package 'labelme' requires a different Python,说明解析到的 labelme 版本要求更高的 Python。两条路:回去把环境重建一个更高的 Python 小版本,或者在 pip 后面钉一个版本号,具体钉哪个看报错信息里给出的兼容范围。

4.3 启动入口与一个双击就能用的启动脚本

原文的启动方式是「打开 Anaconda 界面,输入 activate labelme,再输入 labelme」。三步走没问题,但每次标注都要重来一遍,用久了烦。我一般会在桌面放一个批处理文件,双击直接进:

@echo off REM 先激活 conda 的初始化环境,让 activate 命令可用 call C:\Users\someone\anaconda3\Scripts\activate.bat REM 激活 labelme 环境 call conda activate labelme REM 启动 labelme labelme

三行call各有作用:第一行把 conda 的 activate 脚本拉进当前会话,没有它第二行会报「不是内部或外部命令」;第二行切环境;第三行才是真正的启动。C:\Users\someone\anaconda3这一段换成自己机器上 Anaconda 的实际安装路径,路径里有空格的话整段要加引号。

保存成.bat文件,编码存 ANSI 或者 UTF-8 不带 BOM,存成带 BOM 的 UTF-8 会让 cmd 把第一行当乱码。

如果不想写脚本,退一步的做法是:每次标注前先开一个 Anaconda Prompt,敲conda activate labelme,再敲labelme。两条命令敲习惯了也就几秒钟的事。

启动成功的界面是一个带菜单栏的窗口,可以打开单张图片,也可以打开整个目录。打开目录时注意一点:图片数量多的时候加载会慢,几百张以内还能接受,上千张建议分批,不然内存会顶上去。

5. 避坑与排查:装 labelme 时最常见的五处翻车

这一节是血泪经验攒出来的。每一条都按「现象 → 原因 → 解决」写,遇到对应症状直接对号入座,不用从头推。

5.1 现象:pip install 成功,敲 labelme 提示不是内部或外部命令

现象很典型:pip install labelme的输出最后一行是Successfully installed labelme-x.x.x,接着敲labelme,cmd 回一句「'labelme' 不是内部或外部命令,也不是可运行的程序」。

原因基本只有一个:包装到了别的环境里。最常见的情形是忘了激活,pip 默认落在 base 环境,而 base 的 Scripts 目录不在当前 PATH 里,或者当前 PATH 里根本没有 base 的 Scripts。另一种情形是激活失败但没注意,提示符前没有(labelme),人以为激活了。

解决分三步。先确认当前环境:

# 提示符前没有 (labelme) 就是没激活 conda activate labelme # 确认 pip 指向哪个环境 pip -V

pip -V输出里的路径如果落在anaconda3\Lib\site-packages(base 的目录)而不是anaconda3\envs\labelme\Lib\site-packages,就说明装错地方了。这时候不用重装,激活正确环境后再pip install labelme一次即可,pip 会识别到这是新环境,正常安装。如果之前装在 base 里,建议pip uninstall labelme卸掉,避免以后在两个环境里各有一份、互相干扰。

还有一种少见情况:确实装在 labelme 环境里,但envs\labelme\Scripts这个目录不在 PATH 上。正常激活 conda 环境时会自动把这个 Scripts 目录加进去,如果没加,多半是 conda 版本太老或者激活脚本被改过。应急做法是用完整路径启动:C:\Users\someone\anaconda3\envs\labelme\Scripts\labelme.exe。能起来就说明包没问题,是 PATH 的事。

5.2 现象:ImportError: DLL load failed while importing QtCore

这个报错比上一个难缠,红字一长串,最后一行是ImportError: DLL load failed while importing QtCore: 找不到指定的模块。程序还没到 labelme 的代码里就挂了。

原因是 PyQt5 的原生 DLL 加载不上。三种可能:位数不匹配(Python 64 位配了 32 位 PyQt5,或反过来)、PyQt5 版本和 Python 版本不兼容、环境里同时存在两套 Qt 库导致 DLL 名字冲突。

先把位数查清楚:

# 输出里带 64 或 32,就是解释器的位数 python -c "import platform; print(platform.architecture())" # 看 PyQt5 装的是哪个版本 pip show pyqt5

两边的位数对不上,就卸掉重装对应位数的 PyQt5。位数一致但还是报错,通常是版本问题:卸掉当前版本,装一个和 Python 小版本匹配的旧版。

# 先卸干净 pip uninstall pyqt5 pyqt5-qt5 pyqt5-sip -y # 再装一个明确的版本,具体版本号按 pip 的兼容提示选 pip install pyqt5==<版本号>

如果卸了重装还是同样的错,检查环境里是不是同时有 conda 装的 pyqt 和 pip 装的 pyqt5。查法是conda list | findstr -i qt(Windows)或者conda list | grep -i qt(bash),输出里出现两套来源不同的 Qt 包,就说明混装了。这种环境我一般直接conda remove -n labelme --all删掉重建,比一个个卸快。

5.3 现象:conda activate 报错,或者 activate 命令根本不存在

现象是敲conda activate labelme之后提示「CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'」,或者干脆说conda不是内部或外部命令。

原因在 PATH 和 shell 初始化上。安装 Anaconda 时如果没勾「Add to PATH」,普通 cmd 里是找不到 conda 的;即使能找到 conda,conda activate也需要先执行一次 shell 初始化才能用。

解决办法看场景。日常使用,直接用开始菜单里的 Anaconda Prompt,它启动时已经做过初始化,不会有这个问题。一定要在普通 cmd 里用,就先手动跑一遍初始化:

# 按自己机器上 Anaconda 的安装路径改 C:\Users\someone\anaconda3\Scripts\activate.bat # 之后 conda activate 就能用了 conda activate labelme

activate.bat这一句是临时生效,关掉窗口就没了。要永久生效,得conda init cmd.exe,这条命令会往注册表里写初始化脚本,改之前想清楚,卸载 Anaconda 时容易留尾巴。

原文写的source activate labelme在 Windows cmd 里报错,也是这一类原因——source是 bash 的命令,cmd 没有。用 Git Bash 打开终端时它能用,因为那里面确实是 bash。

5.4 现象:labelme 启动了但闪退、白屏,或者窗口出不来

现象是敲labelme之后没有报错,窗口闪一下就没了;或者界面出来了但一片白,菜单点不动;或者卡在启动画面一直不进去。

原因分几类。闪退最常见的是 Qt 平台插件加载失败,报错信息在窗口关掉之后就看不到了,得从命令行启动才能看到完整输出——也就是说,别用桌面快捷方式双击,老老实实在 Anaconda Prompt 里敲labelme,让错误打在终端里。

白屏多见于显卡驱动和 Qt 的渲染后端打架。可以先试试强制指定渲染方式:

# 关掉 Qt 的硬件加速,用软件渲染启动 set QT_OPENGL=software labelme

QT_OPENGL=software是个环境变量,只在当前会话有效,重启窗口就失效。如果软件渲染下正常,说明问题在显卡驱动那一层,长期方案是更新驱动,或者把这个环境变量写进启动脚本里。

还有一种容易被忽略的原因:中文路径。图片目录或者 json 文件路径里带中文,在某些系统编码设置下会让程序在读文件时抛异常然后静默退出。排查办法是把图片挪到纯英文路径下再试一次,能正常打开就说明是路径编码的锅,把工作目录固定成英文路径就行。

5.5 现象:labelme_json_to_dataset 报错或者生成的目录是空的

标注完了,要转数据集,敲python labelme_json_to_dataset xxx.json,报can't open file 'labelme_json_to_dataset': [Errno 2] No such file or directory;或者命令跑完了,输出目录里没有label_viz.png。

第一种是命令写法的问题。python labelme_json_to_dataset的含义是「用 python 执行当前目录下名为 labelme_json_to_dataset 的脚本文件」,而实际上这个脚本在环境的 Scripts 目录里,不在当前目录。Windows 下更稳的写法是直接调可执行入口:

# 直接调 Scripts 目录下的入口,不经过 python 命令 labelme_json_to_dataset xxx.json # 一次转一整个目录的 json labelme_json_to_dataset <json目录> -o <输出目录>

第二种是 json 内容的问题。labelme 保存时如果没勾选「保存图像数据」相关的选项,json 里就只有标注坐标没有原图,转换时找不到图像,输出的可视化结果自然是空的或者直接报错。这种 json 没法补,只能回到 labelme 里重新打开图片、重新保存一次,保存时确认图像数据被一起写进去了。

路径里带中文同样会让这个转换脚本出问题,输出目录名和 json 文件名都建议用英文加数字。

6. 装完怎么验证:labelme 启动、标注、json 转数据集三步跑通

装完不做验证,等于没装。我判断一套 labelme 环境是否可用,只看三步,每步都有一个明确的成功标志,任何一步不过就回到对应章节查。

6.1 三步验证法

第一步,启动。开 Anaconda Prompt,conda activate labelme,敲labelme。成功标志不是「窗口出来了」,而是「终端里没有红字,窗口能打开一张本地图片」。打开图片这一步要真做,因为有些 Qt 插件缺失的问题只在加载图像时才暴露。

第二步,标注并保存。随便圈一个多边形,输入标签名,保存成 json。成功标志是磁盘上出现了 json 文件,用文本编辑器打开能看到shapes字段里有你标的那几个点。这一步验证的是写盘链路,比只验证启动要严。

第三步,json 转数据集。在 json 所在目录执行转换命令:

# 单文件转换,输出默认落在 json 同名的目录下 labelme_json_to_dataset xxx.json # 转换完看输出目录里有什么 dir xxx_json

成功标志是输出目录里出现label_viz.png,用图片查看器打开能看到原图上叠着彩色的标注区域。这个文件就是整条链路跑通的证据:图片读进来了、标注解析对了、渲染也正常。输出目录里通常还会有几张配套的标注图和一个记录标签名的文本文件,label_viz.png是最直观的那个。

三步都过,环境就算立住了。这里有个容易忽略的点:第三步要在 labelme 环境激活的状态下跑,因为转换脚本依赖环境里的 numpy 和 PIL。在 base 环境里跑,报的是ModuleNotFoundError,跟安装本身没关系。

验证步骤命令成功标志失败先去哪查
启动labelme窗口打开且能加载图片5.2、5.4
标注保存界面内保存 jsonjson 里有 shapes 字段5.1(环境错位)
转换数据集labelme_json_to_dataset xxx.json输出目录里有 label_viz.png5.5

6.2 一个我每次都会做的小检查

三步之外,我还会多做一件事:把conda env list、pip -V、where labelme这三条命令的输出复制到一个文本文件里,跟环境一起存着。理由很实际——这套环境可能三个月后才会出问题,那时候早就忘了当初装的是哪个版本、路径长什么样。有这份记录,重装的时候照着抄就行,不用重新推一遍版本对应关系。

从那以后我每次装这类带 GUI 依赖的 Python 工具,都强制走一遍「先定版本线、再建独立环境、装完跑三步验证」的流程,哪怕装的时候觉得很顺。翻车往往不是发生在装的那一刻,而是发生在半年后某次pip install顺手升级了某个依赖的时候。希望这套流程能帮你少走一遍我当年走过的弯路。

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/3 5:43:31

Camera Link三模式带宽、端口映射与故障排查

简介&#xff1a;面向工业相机与图像采集卡开发、调试人员&#xff0c;这份文档围绕Camera Link的Base、Medium、Full三种接口配置展开&#xff0c;适合需要理解相机输出模式、线缆与采集卡匹配关系的中初级工程师查漏补缺。文档先从Camera Link标准的产生背景与Channel Link多…

作者头像 李华
网站建设 2026/11/3 5:42:47

AI编程工具静默上传代码引信任危机:从技术原理到开源自救全面解析

1. 事件全貌&#xff1a;一场关于“沉默”的信任危机1.1 从社区爆料到全面发酵&#xff1a;ZCode事件时间线梳理这段时间AI编程圈子里最热闹的事情&#xff0c;莫过于ZCode这波从“静默上传”到全面开源的连续操作。作为一个每天都在跟各种AI编程工具打交道的开发者&#xff0c…

作者头像 李华
网站建设 2026/11/3 5:42:47

Kubernetes WorkQueue原理与实践指南

1. Kubernetes WorkQueue 深度解析在分布式系统开发中&#xff0c;任务队列是协调多个组件工作的核心机制。Kubernetes 控制器模式的核心组件 WorkQueue 提供了一套高效、可靠的任务处理框架&#xff0c;它不仅仅是简单的先进先出队列&#xff0c;而是针对 Kubernetes 特有的场…

作者头像 李华
网站建设 2026/11/3 5:42:47

Kubernetes WorkQueue 核心原理与应用实践

1. Kubernetes WorkQueue 深度解析在分布式系统开发中&#xff0c;任务队列是协调多个组件工作的核心机制。Kubernetes 控制器模式的核心组件 WorkQueue 提供了一套高效、可靠的任务处理框架&#xff0c;它不仅仅是简单的先进先出队列&#xff0c;而是针对 Kubernetes 特有的场…

作者头像 李华
网站建设 2026/11/3 5:42:00

JSP上机实习报告复盘:编码、JavaBean与转发链路避坑清单

简介&#xff1a;这份JSP上机实习报告文档面向学习Java Web开发与JSP技术的在校学生及初学者&#xff0c;围绕课程实验场景整理了一套可直接参考的上机实践记录。内容覆盖在JSP页面中用Java代码完成11计算并输出结果、创建BookInfo JavaBean封装name、price、stock、author属性…

作者头像 李华
网站建设 2026/11/3 5:40:48

Paperclip架构:Node.js+React+本地LLM的桌面AI应用开发范式

1. 项目概述&#xff1a;Paperclip 不是回形针&#xff0c;而是一个被严重误读的 AI 工程实践符号“Paperclip”这个词在中文技术社区里&#xff0c;最近半年正经历一场奇特的语义漂移。它不再指代办公桌上那个弯折金属丝制成的物理小物件&#xff0c;而是悄然演变成一个高频出…

作者头像 李华