最近在做有关yolo的小项目,需要显示中文标签,
这里以yolov5 6.0 版本为例,需要修改的地方包括3个文件:
1.utils文件夹下的general.py
由于中文显示对应的编码格式为‘utf-8’,因此将以下代码:
with open(data, errors='ignore') as f:
修改为:
with open(data, errors='ignore',encoding='utf-8') as f:
注:可使用crtl+F进行关键字查找,较为方便。
2.utils文件夹下的metrics.py
将以下代码:
sn.set(font_scale=1.0 if nc < 50 else 0.8)
修改为:
sn.set(font='SimHei',font_scale=1.0 if nc < 50 else 0.8)
3.utils文件夹下的plots.py
在此文件开头处添加以下代码:
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
并准备一种中文字体,我这里使用的是黑体(SimHei.ttf),将其放在你matplotlib库的安装路径下mpl-data\fonts下,我的路径为D:\anaconda\Lib\site-packages\matplotlib\mpl-data\fonts\ttf
然后将Annotator类部分代码进行修改,
将以下代码:
def __init__(self, im, line_width=None, font_size=None, font='Arial.ttf', pil=False, example='abc'):
修改为:(其中font后是中文字体存放的路径,每个人对应的路径不同)
def __init__(self, im, line_width=None, font_size=None,
font='D:/anaconda/Lib/site-packages/matplotlib/mpl-data/fonts/ttf/SimHei.ttf',
pil=False, example='abc'):
将以下代码:
self.font = check_pil_font(font='Arial.Unicode.ttf' if non_ascii else font,
size=font_size or max(round(sum(self.im.size) / 2 * 0.035), 12))
修改为:(其中font后是中文字体存放的路径,每个人对应的路径不同)
self.font = check_pil_font(font='D:/anaconda/Lib/site-packages/matplotlib/mpl-data/fonts/ttf/SimHei.ttf' if non_ascii else font,size=font_size or max(round(sum(self.im.size) / 2 * 0.035), 12))
到此为止,可实现中文标签的显示。
本文参考YOLOv5 完美实现中文标签显示_不佛的博客-CSDN博客_yolov5中文标签