labelImg 修改不同类别的颜色(点大小、标签大小、框角)+ 打包为.exe文件 + 解决闪退bug

您所在的位置:网站首页 ppt怎么改变边框线的颜色和大小尺寸 labelImg 修改不同类别的颜色(点大小、标签大小、框角)+ 打包为.exe文件 + 解决闪退bug

labelImg 修改不同类别的颜色(点大小、标签大小、框角)+ 打包为.exe文件 + 解决闪退bug

2024-07-14 20:44:49| 来源: 网络整理| 查看: 265

1. 问题

在我的任务中,有 blue_obj、 green_obj 和 yellow_obj ,但它们显示在不同颜色的框中,这使得我很难检查注释。我直接修改 box 的颜色后,下一张图片就不生效了。我应该如何将 box 的颜色修改为特定颜色?

例如:

blue_obj:命名是蓝色,但 box 是黄色red_obj:命名是红色,但 box 是蓝色yellow_obj:命名是黄色,但 box 是红色

以上这些框的颜色就会让人混乱。

2. 解决方案

为了解决这个问题,我们可以参考《LabelImg目标检测标注工具之标记框修改显示明显、特定标签指定颜色》这篇文章,具体做法为:

Step 1 下载 labelImg 的源码,下载地址为:labelImg

Step 2 根据 Readme -> Installation -> Build from source,按照不同操作系统安装相关依赖

pip install pyqt=5 pip install -c anaconda lxml

Step 3 修改 labelImg\libs\utils.py 文件中的函数:

""" 函数解释:根据text(即标签名)生成对应颜色 修改自己需要的标签 """ def generate_color_by_text(text): s = ustr(text) hash_code = int(hashlib.sha256(s.encode('utf-8')).hexdigest(), 16) r = int((hash_code / 255) % 255) g = int((hash_code / 65025) % 255) b = int((hash_code / 16581375) % 255) Q = QColor(r, g, b, 155) # RGBA格式: (R, G, B, 透明度),范围均为 [0, 255],其中透明度的越大越不透明,越小越透明 if text == "类别1": # 类别1 设置为红色(完全不透明) Q = QColor(255, 0, 0, 255) elif text == "类别2": # 类别2 设置为绿色(完全不透明) Q = QColor(0, 255, 0, 255) elif text == "类别3": # 类别3 设置为蓝色(完全不透明) Q = QColor(0, 0, 255, 255) return Q

💡 Tips:其中 类别 指的是具体的类别名称,比如 cat、dog 这种。

Step 4 编译源码,使上述修改生效:

pyrcc5 -o libs/resources.py resources.qrc

Step 5 打开修改后的 labelImg:

python labelImg.py 3. 修改 box 的四个角的大小和 label 名称的大小

修改 libs\shape.py 文件:

class Shape(object): P_SQUARE, P_ROUND = range(2) MOVE_VERTEX, NEAR_VERTEX = range(2) # The following class variables influence the drawing # of _all_ shape objects. line_color = DEFAULT_LINE_COLOR fill_color = DEFAULT_FILL_COLOR select_line_color = DEFAULT_SELECT_LINE_COLOR select_fill_color = DEFAULT_SELECT_FILL_COLOR vertex_fill_color = DEFAULT_VERTEX_FILL_COLOR h_vertex_fill_color = DEFAULT_HVERTEX_FILL_COLOR point_type = P_ROUND point_size = 8 # 点的大小 scale = 1.0 label_font_size = 8

💡 Tips:要想让每一个框在旁边显示其类别,可以使用快捷键 ctrl + shift + p。

4. 修改 [显示类别] 的文字大小

在 labelImg.py 中,修改:

def paint_canvas(self): assert not self.image.isNull(), "cannot paint null image" self.canvas.scale = 0.01 * self.zoom_widget.value() self.canvas.overlay_color = self.light_widget.color() self.canvas.label_font_size = int(0.02 * max(self.image.width(), self.image.height())) self.canvas.adjustSize() self.canvas.update()

将 self.canvas.label_font_size = int(0.02 * max(self.image.width(), self.image.height())) 中的 0.02 改成为 0.01 或其他你想要的大小。

5. [补充] RBGA 颜色大全

RGB颜色大全(HEX、对照表、Matplotlib、plt、好看的颜色)

6. 将 labelImg 打包为 .exe 可执行文件 6.1 安装环境 pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install lxml -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple/ 6.2 打包为 .exe 文件 conda activate 之前的环境 pyinstaller --hidden-import=pyqt5 --hidden-import=lxml -F -n "CustomlabelImg" -c labelImg.py -p ./libs -p ./

pyinstaller 是一个可以将 Python 代码打包成独立可执行程序的工具。这个命令的意思是:

pyinstaller labelImg.py :使用 pyinstaller 打包 labelImg.py 这个 Python 脚本文件;--hidden-import=pyqt5 和 --hidden-import=lxml:表示隐藏导入 pyqt5 和 lxml 两个模块,因为它们是 labelImg.py 依赖的第三方模块,需要一起打包;-F:表示生成一个文件,将所有依赖都打包到一个可执行文件中;-n "CustomlabelImg":表示生成的可执行文件名为 CustomlabelImg;-c labelImg.py:表示要打包的主 Python 文件是 labelImg.py;-p ./libs 和 -p ./:表示要打包的额外文件夹有 ./libs 和 当前目录。

总结:使用 pyinstaller 将 labelImg.py 及其依赖的第三方库、资源文件等都打包到一个名为 labelImg 的可执行文件中。这样生成的 labelImg 文件可以在其他机器上直接运行,不需要安装 Python 环境和第三方库。

6.2 存在的问题:预置的标签怎么使用?

在 labelImg 项目中,有 data\predefined_classes.txt 这样的文件,目的是预置一些类别:

cat dog lion

但是按照上面打包的方式之后,是没有使用预置文件的。如果想要使用预置文件,则在打包时使用下面命令:

pyinstaller --hidden-import=pyqt5 --hidden-import=lxml -F -n "CustomlabelImg" -c labelImg.py -p ./libs -p ./ -p ./data --add-data=./data/predefined_classes.txt;./data

💡 Tips:注意自己修改 data\predefined_classes.txt 中的内容嗷。

6.3 自定义图标

假如我有一个名为 data\labelImgXtastien.ico 的图标,则可以使用下面的命令:

pyinstaller --hidden-import=pyqt5 --hidden-import=lxml -F -n "CustomlabelImg" -c labelImg.py -p ./libs -p ./ -p ./data --add-data=./data/predefined_classes.txt;./data --icon=./data/labelImgXtastien.ico

💡 Tips:将图片转换为图标请见 image2ico 😄

7. 闪退问题 7.1 [不推荐] 临时方案

有时候我们运行 python labelImg.py 或者运行 CustomlabelImg.exe 文件后,在选择了图片文件夹和 xml 标签文件夹后会报错,此时我的解决方案不太好,但是也可以用 😂

在你要标注的文件夹下打开 cmd 或者 powershell;切换有 labelImg 的 Python 环境;打开环境自带的 labelImg(不是我们修改后的 labelImg):labelImg加载图片文件夹和标签文件夹;如果没有问题了,退出这个 labelImg;打开我们自己的 labelImg:运行 python labelImg.py 或者运行 CustomlabelImg.exe 文件;再次加载图片文件夹和标签文件夹;此时应该就正常了。

💡 Tips:以上的解决方案虽然能解决问题,但是临时且繁琐的。

7.2 [推荐] 一劳永逸的方法

闪退的原因是有一个名为 C:\Users\用户名\.labelImgSettings.pkl 的文件存在,这导致了闪退,那我们可以修改 labelImg.py,当检测到有这个文件时,自动删除,代码如下:

def _debug_for_windows(): import getpass username = getpass.getuser() need_to_del_file_path = os.path.join(r'C:\Users', username, '.labelImgSettings.pkl') if os.path.exists(need_to_del_file_path): os.remove(need_to_del_file_path) if __name__ == '__main__': _debug_for_windows() sys.exit(main())

💡 Tips:这种解决方案也是可以打包为 .exe 可执行文件的 😄。

参考 LabelImg目标检测标注工具之标记框修改显示明显、特定标签指定颜色【人工智能】labelimg导出exe格式教程及报错解决办法Python中运行LabelImg闪退


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭