一. 为什么labelimg总是在崩溃
Labelimg是一个用来对图片进行标注的工具,标注的过程是用鼠标进行的,涉及到程序图形界面的工作和文件的读写操作,这便是程序崩溃的两大来源。如果我们去看程序崩溃时的报错信息,那么我们可以总结出如下几条:
① 画线时的drawLine参数类型出错
② 使用txt文件进行标注时classes.txt的编码不能正常识别
(相关资料图)
③ TXT标注中分隔符的问题
二. 画线时参数类型的解决方法
画框框时,鼠标图标上下左右,有十字相随。十字的出现是伴随着鼠标图标的,所以要以鼠标图标位置为事件,触发绘图函数,并在鼠标图标离开后消除原有十字,形成新十字。
要画出十字,则需要确认十字的颜色。由于版本的兼容性问题,setPen函数有时无法正常使用。根据报错信息,定位到问题所在之地为canvas.py文件。找到paintEvent(self, event)函数,发现setPen函数在调用时的参数不能正常使用,为此,可以直接定其为常量。由于这个函数在此是确定画笔颜色的,为了简单,我们完全可以设置画笔颜色为纯粹的黑,那么那里就成了
当然,为了好看,也可以是别的颜色。
另外,颜色设置的后面是画十字的,前一行是在图像区域画竖线,后一行表示画横线。因为参数问题,电脑经常报错说传入的参数是float而非int,但是在电脑屏幕上显示图形,坐标往往是int的。开始画框时,欲显示十字,则报错如下:
对此,直接一个强制的数据类型转换,不管原来是什么东西,反正改成int就行了。
而且,前方显示框框的地方也是这样:
由此,画线的闪退问题解决。
有意思的是,后面还有一个很无聊的玩意,点了一个verify按钮,就是换了一个背景颜色,真不知道有什么用。
三.保存标签名称的TXT文件编码出错之解决方法
为了方便,很多时候标签的名称是中文的,这也就意味着UTF编码的更多的使用。经过几次试验,发现当标签的名称是中文时,文件classes.txt必须以UTF-8的编码来保存,但是,每次做完标注后,按下保存的按键,这个文件就变成了ANSI编码的。
由于程序一开始不认识中文,默认的是以纯英文的方式去读取文件的,所以标注工作一开始就会出问题。为此,我们需要让程序认识中文,也就是对classes.txt文件以UTF-8的形式读取。当程序一开始不认识中文时,我们根据其报错的信息找到文件yolo_io.py,锁定在某一部分的代码。
上面是报错信息,判定出错之地的文件路径在C:\Users\你的电脑用户名\AppData\Local\Programs\Python\Python310\Lib\site-packages\libs
这里是一个读取文件进行标注工作初始化的部分。可以看到,出错的read函数是不能识别汉字的,而这与文件打开的方法有关,在上面的open函数里,我们可以在最右边写上 ,encoding='utf-8' 表明这里用UTF-8编码打开文件,由此完成classes.txt的读取工作。
反之,在保存标注结果时,经过实验,发现中文的标签也容易出问题。根据报错信息我们可以找到对应的代码:
这里是负责保存文件的,将对象out_class_file的文件打开的方式中,加上同样的UTF-8编码的说明,告知机器用UTF-8编码保存文件,从而解决问题。同理,在yolo_io.py之结尾处,为了保险起见,也要如此。在函数parse_yolo_format(self)中同样是open方法,针对对象bnd_box_file修改。
三. 分隔符问题的解决方法
既然我们都是用UTF-8编码了,那么写文件的操作也是很有可能写入UTF-8的字符。TXT文件中每一行都有空格,写入时可能是中文的空格,也可能是英文的。查有关资料可以发现,中文和英文的空格居然不是同一个字符。
如果TXT文件内有中文空格,那么用labelimg打开试一试,必然报错。问题同样出在yolo_io.py上,看它的结尾处,是这样的:
看报错信息,在循环体的第一行上,里面有一个split函数,这是一个使用正则表达式进行匹配,匹配的内容是对每一行的遍历,匹配的选项是一个英文的空格。
如果发现中文空格而不是英文的,那么匹配失败,报错。反之,我们也不能保证所有的空格都是中文的空格,也很有可能报错,为此,可以进行错误检测。另外,如果在某些条件下人为修改TXT文件,很有可能会促使标注的数值之间多了空格。所以为了避免这种极端情况的报错,可以要求匹配多个空格,修改结果如下:
其中”\s”是用来匹配多个空格的。
标签:
- labelimg总是崩溃的若干解决办法
- 圆环面的表面积的基础求法
- ROG 掌机低配版曝光:搭载锐龙 Z1,预计为 AMD“大小核”处理器_环球今日报
- 当前速看:直降至1859元磁吸连接 大疆Action 2运动相机值得入手吗
- 画出武器2好玩吗 画出武器2玩法简介 世界快看
- 夜滑官网在哪下载 最新官方下载安装地址-即时
- 世界实时:方块逃脱之锈湖根源什么时候出 公测上线时间预告
- 海信视像归母净利润高增速或难持续
- 河南加强知识产权创造、运用、保护 全链条服务为科技创新“添翼”
- 全球热消息:“出彩河南人”第七届最美护士初评结果出炉
- 全球新动态:一季度河南重点民生实事有序进展
- 当前滚动:河南将打造地热供暖集中连片示范区
- 23日起,郑州四路段停水,影响多个小区和单位-环球头条
- 环球热文:“川酒全国行”线上推广活动启动 打造“永不落幕”的川酒盛会
- 一季度全国纪检监察机关处分11.1万人|环球视讯
- “共建美好金牛共享生态文明” 2023年金牛区4.22世界地球日主题活动顺利举办
- 法工委发言人:立法促进残疾人走出家门、融入社会_天天微头条
- 广集民意 无障碍环境建设立法采取多种方式听取公众意见 热文
- 环球观热点:“星舰”火箭“炸了” 百亿美元“蒸发”
- 美国一校车司机急刹车“教训孩子” 面临虐待儿童指控
- 环球滚动:奔向各地春色、点燃消费热情——旅游专列人气旺
- 骑车不守规矩,右转车道越来越难“过”!谁之过?|热点在线
- 当前观点:调配优质医疗资源,全力救治长峰医院火灾事故伤病员!目前在院治疗39人
- 天天观察:法甲-姆巴佩双响梅西送助攻 巴黎2-1昂热暂时11分领跑积分榜
- 天天动态:拼多多怎么开通先用后付(拼多多怎么开通先用后付功能为什么用不了)
- 猎狐杨建群演员 猎狐杨建群演员是谁 环球聚焦
- 鬼谷八荒如何找仇人 鬼谷八荒怎么结仇人|环球热文
- 润泽科技2022年净利润同比增长66% 拟10转8股_当前速读
- 盛泰集团04月21日被沪股通减持4.03万股
- 天天热议:mysql_front使用教程