如果我们的classes是汉字,在使用Faster-RCNN检测完成后,需要将其标注到图片上查看效果时,可能会面临一些问题。一是Python2的编码问题比较混乱,可能带来错误;第二个是Python2的默认字体不支持中文,即使打印到图片上,也可能显示的是乱码。 因此,在将汉字classes打印到图片上的过程中,需要进行一些特殊的处理。我们在这里进行一下记录以便备忘。 在Python里,对图片进行处理时,我们通常使用Matplotlib或PIL,因此,这里我们也对这两个方法分别加以介绍。
1.使用Matplotlib
使用Matplotlib处理起来比较简单方便,只需要进行一个设置,如下:
import matplotlib as mpl
mpl.rcParams[‘font.sans-serif’] = [‘SimHei’]
通过这种方式,将Matplotlib的默认字体设置为一种支持中文的字体即可,这里我们将其设置为“SimHei”,即黑体。 然后按照正常的方式,将classes绘制到图片上即可。 还需要注意的是,将classes绘制到图片上时,如下:
class_name = ‘老虎’
ax.text(bbox[0], bbox[1] - 2,
u’{:s} {:.3f}’.format(class_name.decode(‘utf-8’), score))
我们需要将type为str的class_namedecode,并将其转换为unicode类型。当然,直接这样转换也可以:
unicode(class_name.decode(‘utf-8’)) + str(score)
详细的代码可以参阅GitHub上的程序。
2.使用PIL
PIL也是Python里用于处理图片的一个常用工具,因此我们对使用PIL绘制汉字也进行一下总结和介绍。 相对来说,使用PIL绘制汉字稍微复杂一下。它也是首先需要对字体进行设置,如下:
import PIL.ImageFont as ImageFont
try:
font = ImageFont.truetype(‘wqy-microhei.ttc’, 14)
except IOError:
font = ImageFont.load_default()
这里,我把字体设置为了“wqy-microhei.ttc”,即文泉驿,你也可以设置为其他字体,只是需要是系统已经安装了的字体即可。 随后的处理就是正常情况了,绘制矩形框,绘制汉字,显示图片即可。而这里绘制汉字,直接使用utf-8编码即可,无需转化为Unicode,如下:
draw.text(
(left, top-14),
class_name.decode(‘utf-8’),
fill=’black’,
font=font)
更详细的代码可以参阅GitHub上的程序。