起因
运行mmocr推断程序的时候,标注目标框的时候出现的问题
这个warning是找不到’Noto Serif CJK JP’字体
不仅找不到字体,中文的字符也只能长方形框来表示了,这非常不利于结果可视化!
解决方法
原因出在matplotlib找不到中文字体,我分三步解决这个问题
1、下载Noto Serif CJK JP字体
在noto字体github地址上看到很多字体,但是Language-specific Variable Fonts
以及Region-specific Subset Variable Fonts
的字体不要选!!windows不支持。
OTF|TTF中选择一个下载,我这里选择TTF下载
下载完成后,安装字体。
2、字体保存到matplotlib下的fonts\ttf文件夹下
查找字体路径
import matplotlib
# 查找字体路径
print(matplotlib.matplotlib_fname())
结果:
D:\anaconda\envs\yolov5\Lib\site-packages\matplotlib\mpl-data\matplotlibrc
将安装好的字体复制到D:\anaconda\envs\yolov5\Lib\site-packages\matplotlib\mpl-data\fonts\ttf
文件夹下,这里的地址是你的字体路径地址
3、删除.matplotlib
linux系统下matplotlib在~/.cache文件夹下,直接rm -rf ~/.cache/matplotlib
windows下在C:\Users\[你的用户名]
下.matplotlib,直接删除
结果
运行python程序,不报错了
题外
1、可以通过手动修改matplotlib/fontlist-v330.json
文件中的字体名称来实现:命名为楷体的字体,实际中matplotlib中采用的却是黑体的骚操作
2、可以修改D:\anaconda\envs\yolov5\Lib\site-packages\matplotlib\mpl-data\matplotlibrc这个文件,添加你想呈现的字体类型。
Ctrl+F找sans-serif,将注释去掉,添加自己想添加的字体
这里font.sans-serif会优先选择前面的字体。注意,SimHei这个字体的添加和前面Noto Serif CJK JP的字体添加步骤基本一致。
3、fonts\ttf文件夹下可以放除.ttf格式的字体文件,而且运行时不报错。
这里的.ttc也可行
4、RuntimeError: In FT2Font: Can not load face
这个报错信息不一定是字体文件损坏导致的,也有可能是你的系统不支持这种字体。
如NotoSerifJP-VF.ttf
这种字体可以在FontLab中正常打开、正常显示,但是windows系统不支持。