需求
训练数据中带的标签是英文,想在模型推理的时候,绘制出来的标签改成中文。
我实验了一种投机取巧的方法,改动代码不是很多。来看下步骤:
步骤
1 在Results类中增加一个接口
主要是用来设置英文标签对应的中文标签数组。改动文件results.py
2 修改plot函数
修改绘制函数plot,也在results.py中,绘制文本的时候,类别名称改成步骤1中设置的中文数组。
3 调用
在进行推理时,每次推理得到results后,都设置一遍中文标签数组(按理说是在加载模型的时候,去设置好中文标签数组的,只需要设置一次,这里我没找到更好的方式,所以暂时这么写了,如果你有更好的方式,欢迎留言讨论!)。
results = model.predict(....)
for i, result in enumerate(results):
result.set_ch_names(ch_names_array) # 你的中文标签数组
result.plot(pil=True,font="SimHei.ttf") # pil需要设置为True,font给一个中文字体,需要已经下载好到本地
注意的是,pil要设置成True,否则plot时会报错,AttributeError: 'Annotator' object has no attribute 'draw'。跟代码发现,box_label函数中,如果不是ASCII码,会使用self.draw进行绘制,而self.draw是在初始化时创建的,详细请看截图的源码。如果这里pil不传入True,还可以直接改源码,在Annotator初始化时,传入的example为中文字符应该也是可以的。
4 效果
改成中文后,性能变差,视频识别用未改动的原有的plot函数,显示英文标签很流畅,但是改成中文后会变卡顿。
如果您有更好的方法,欢迎随时交流!