使用Python在图像上标注汉字

在 2018-02-10 发布于 人工智能 下以来已有126人读过本文 | 0条评论 发表评论

如果我们的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上的程序

发表评论

您的昵称 *

您的邮箱 *

您的网站