首页 > 其他分享 >YOLOV8中文类名显示报错

YOLOV8中文类名显示报错

时间:2023-04-18 23:33:37浏览次数:55  
标签:中文 dist simhei matplotlib YOLOV8 报错 font local 类名

YOLOV8中文显示问题

问题引出:

​ 最近再跑YOLOV8项目,跑到这份数据集的类名是中文类名,自己也没有太在意,知道的过程出现些报错,这些爆错如下:

/usr/local/lib/python3.8/dist-packages/ultralytics/yolo/utils/metrics.py:399: UserWarning: Glyph 24102 (\N{CJK UNIFIED IDEOGRAPH-5E26}) missing from current font.
  fig.savefig(save_dir, dpi=250)
/usr/local/lib/python3.8/dist-packages/ultralytics/yolo/utils/plotting.py:261: UserWarning: Glyph 24102 (\N{CJK UNIFIED IDEOGRAPH-5E26}) missing from current font.
  plt.savefig(save_dir / 'labels.jpg', dpi=200)

这些报错不仅出现在训练开始,在训练结束,以及验证结束也会出现,如下所示:

这个时候我意识到问题不对,但是程序并没有停止,想着看看跑完会如何:最后的结果是,所检测的图片的结果均完好

但是所生成的评价标准的各种图像的x,y轴名称是均发生了乱码,如下:

分析问题:

​ 首先对于目标检测的结果图没有问题,但是其评价指标的各种变量名出现了问题,观察报错路径是由python包中的matplotlib引起,且评估指标也是由matplotlib进行绘制,随意问题出在了matplotlib的中文显示。

​ 通过查找资料,只需要将中文字体加入近代码,并设置全局识别即可完美解决。

解决问题:

  1. 首先查询出本地存放matplotlib字体的路径
打开python 终端获取路径

import matplotlib    
print(matplotlib.matplotlib_fname())

#/usr/local/lib/python3.8/dist-packages/matplotlib/mpl-data/matplotlibrc

  1. 下载好的simhei.ttf放到/usr/local/lib/python3.8/dist-packages/matplotlib/mpl-data/fonts/ttf/目录
  1. 修改…/mpl-data/matplotlibrc配置文件
# 去掉前面的#  
font.family         : sans-serif   

# 去掉前面的#,并在冒号后面添加simhei(我的是小写,如果你下载的是大写的就大写)
font.sans-serif     : simhei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif  

# 去掉前面的#,并将True改为False
axes.unicode_minus  : False

8

  1. 删除matplotlib的缓冲目录
# python 终端获取缓存路径
import matplotlib
print(matplotlib.get_cachedir())
# /root/.cache/matplotlib
# 删除缓冲目录
rm -rf /root/.cache/matplotlib
  1. 修改/usr/local/lib/python3.8/dist-packages/ultralytics/yolo/utils/metrics.py文件

在其文件内加上

sn.set(font='simhei',font_scale=1.0 if nc < 50 else 0.8)
plt.rcParams['font.sans-serif'] = ['simhei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

6.修改/usr/local/lib/python3.8/dist-packages/ultralytics/yolo/utils/plotting.py文件

plt.rcParams['font.sans-serif'] = ['simhei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

10

效果展示:

改完后,无论是训练,验证,还是推理测试都没有发生任何的报错,如下所示

参考文献:

解决YOLOv5算法中的中文标签显示问题 http://t.csdn.cn/dCKU6

Matplotlib------画图详解及步骤(Matplotlib定义、添加刻度、Matplotlib中文乱码解决、添加网格、添加描述信息、添加图例、在一个坐标系中绘制多个图像、折线图) http://t.csdn.cn/hw8mf

Glyph 26426 missing from current font.解决matplotlib画图中文字体乱码问题 http://t.csdn.cn/cHjHw

python解决中文显示问题Glyph 24179 (\N{CJK UNIFIED IDEOGRAPH-5E73}) missing from current font. func(*args) http://t.csdn.cn/nGIGw

标签:中文,dist,simhei,matplotlib,YOLOV8,报错,font,local,类名
From: https://www.cnblogs.com/ambitionx/p/17331653.html

相关文章

  • https发送post请求报错403,但不是跨域问题。
    这段时间在公司写一个项目,在项目中遇到一个问题,查阅了网上很多资料都没解决。问题是vue中https发送post请求报错403,但不是跨域问题。 于是我根据网上资料发现是请求头部的问题。源代码 headers:{  'Content-Type':'application/x-www-form-urlencoded', },当......
  • 报错解决:user.Case: (models.E020) The 'Case.check()' class method is currently ov
    Django在启动时报错,如下:user.Case:(models.E020)The'Case.check()'classmethodiscurrentlyoverriddenby<django.db.models.query_utils.DeferredAttributeobjectat0x0000020331E0AE20>.意思是说:在user.Case.check()在执行的过程中被【django.db.models.query_ut......
  • idea+maven配置scala环境报错
    (未解决)环境:Java1.7+scala2.10.6配置:创建maven工程,建立如下目录结构:pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-in......
  • MySQL8初始化报错 --Data Dictionary initialization failed
     我使用的命令是:/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/mysql3306/  --user=mysql  拷少参数了还找半天,,,,,,,, [root@node02bin]#./mysqld--initialize-insecure--defaults-file=/etc/my.cnf--basedir=/usr/lo......
  • 浏览器报错net::err_connection_timed_out 怎么解决
    误代码“err_connection_timed_out”的解决方案2017-04-2011:02曾经试过用浏览器访问一个或几个特定网站,出现“err_connection_timed_out”错误,而其他网站加载良好没有任何问题或错误。上网查过发现这是一个常见的互联网错误。发生此DNS错误是因为访问或浏览该网站时,Internet......
  • javassist 报错 ; is missing
    在通过javassist编写的时候,主要代码如下:Stringcode="for(Stringaa:tt){....}";启动后报 Exceptioninthread"main"javassist.CannotCompileException:[sourceerror];ismissingatjavassist.CtNewMethod.make(CtNewMethod.java:84)atjava......
  • MySQL多源复制报错,在线更改relay_log_info_repository,master_info_repository参数
    MySQL在5.7之后才支持多源复制,之前介绍过官方文档。原理:多源复制加入了一个叫做Channel的概念,每一个Channel都是一个独立的Slave,都有一个IO_THREAD和SQL_THREAD。原理和普通复制一样。我们只需要对每一个Master执行ChangeMaster语句,只需要在每个语句最后使用ForChannel来进行......
  • DG搭建报错 ORA-16047: DGID mismatch between destination setting and target datab
    最近有需求要给数据库新搭一个DG变为一主两从,搭好之后测试发现一直没有同步,检查问题。从库一直等待接收71855号日志主库有归档日志发送失败的报错,可以看到归档到dest_2(原从库)是成功的,而到desc_3(新从库)则是失败的根据日志提示查看arc2进程的trace日志看到有ora-16058和ora-16047的报......
  • Oracle 单进程可用PGA为4G限制导致的ORA-4030报错
    一、问题背景收到开发反馈,系统报表运行过程中报错,一看发现是ORA-4030,内存的问题查看alert日志,发现期间有大量ORA-4030报错,并且主要是pga相关的打开trace文件,可以看到报错进程使用内存接近4G但是查看pga参数设置,发现设置的上限是20G,完全没到,并且期间总的PGA使用率也不高 二、报错......
  • 应用连MySQL 报错ERROR 1129 Host is blocked because of many connection errors
    开发反馈应用连MySQL报错 createconnectionSQLException,url:连接串,errorCode1129。搜索1129报错,报错内容为:Hostisblockedbecauseofmanyconnectionerrors一、报错原因同一个ip在短时间内产生太多中断的数据库连接(超过mysql数据库max_connection_errors设置),导......