修改文件位于YOLO主路径下utils/plots.py
找到box_label函数,在该函数内修改,该函数分为两个部分,一部分使用PIL进行图片上文字添加,另一部分使用cv2实现图片上文字添加。
本博客只做了PIL下的标签大小修改,修改过程如下
def box_label(self,
box,
label='',
color=(128, 128, 128),
txt_color=(255, 255, 255),
font_size=18): #在此处添加控制标签文字大小变量,一般为12时是保持当前大小
if self.pil or not is_ascii(label): #第一部分:使用PIL方式在图片上添加文字
self.draw.rectangle(box, width=self.lw, outline=color) # box
if label:
new_font = ImageFont.truetype(self.font.path,font_size) #创建一个新的font
#将控制大小变量加入至新的font中
w , h = self.draw.textsize(label,font=new_font) #改变w,h的获取方式
#w, h = self.font.getsize(label) # text width, height #原有的w,h获取方式
outside = box[1] - h >= 0 # label fits outside box
self.draw.rectangle([
box[0], box[1] - h if outside else box[1], box[0] + w + 1,
box[1] + 1 if outside else box[1] + h + 1
],
fill=color)
# self.draw.text((box[0], box[1]), label, fill=txt_color, font=self.font, anchor='ls') # for PIL>8.0
self.draw.text((box[0], box[1] - h if outside else box[1]),
label,
fill=txt_color,
font=new_font,
)
else: # cv2 ,第二种方式,使用cv2在图片上添加文字,这里我没有进行更改
p1, p2 = (int(box[0]), int(box[1])), (int(box[2]), int(box[3]))
cv2.rectangle(self.im,
p1,
p2,
color,
thickness=self.lw,
lineType=cv2.LINE_AA)
if label:
tf = max(self.lw - 1, 1) # font thickness
w, h = cv2.getTextSize(label,
0,
fontScale=self.lw /3 ,
thickness=tf)[0] # text width, height
outside = p1[1] - h - 3 >= 0 # label fits outside box
p2 = p1[0] + w, p1[1] - h - 3 if outside else p1[1] + h + 3
cv2.rectangle(self.im, p1, p2, color, -1,
cv2.LINE_AA) # filled
cv2.putText(self.im,
label,
(p1[0], p1[1] - 2 if outside else p1[1] + h + 2),
0,
self.lw / 3,
txt_color,
thickness=tf,
lineType=cv2.LINE_AA)