为了使结果呈现更加直观,可以在摄像头实时检测的画面上打印计数结果、帧率等信息,本文以单摄像头实时检测为例,介绍实现方法。
实现方法
在detect.py文件中进行操作,找到下面这个位置(你的行数和我可能不一样,直接Ctrl+F查找cv2.imshow就行)
cv2.imshow()函数是用来打印画面的,因此在它之前添加如下代码即可。
#############################在窗口中显示标签#############################
text = 'count = %d, FPS=30, Albert_yeager'%(count)
cv2.putText(im0, text, (40, 100), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 4)
# 要绘制的图像(im0)
# 要绘制的文本字符串(text)
# 文本的位置(x, y),窗口左上角为(0,0)
# 要使用的字体类型(font),这里用OpenCV的内嵌字体
# 字体大小(font_scale),在此处为1
# 字体颜色(font_color),在此处为红色(0, 0, 255)
# 字体线宽(thickness),在此处为4
#########################################################################
其实加的代码就两行,第一行是定义打印的内容,格式就用标准输出格式即可,这里的count是对目标的计数,详细的实现方法可以看我之前的博客:
YOLOv5实现目标计数_Albert_yeager的博客-CSDN博客
计数功能涉及的主要代码(在之前博客里都有)如下:
# Write results+计数
count = 0
for *xyxy, conf, cls in reversed(det):
if save_txt: # Write to file
xywh = (xyxy2xywh(torch.tensor(xyxy).view(1, 4)) / gn).view(-1).tolist()
line = (cls, *xywh, conf) if opt.save_conf else (cls, *xywh)
with open(txt_path + '.txt', 'a') as f:
f.write(('%g ' * len(line)).rstrip() % line + '\n')
if save_img or view_img: # Add bbox to image
c = int(cls)# integer class分类数
label = f'{names[int(cls)]} {conf:.2f}'
plot_one_box(xyxy, im0, label=label, color=colors[int(cls)], line_thickness=3)
count += 1
FPS后面即为帧率,这里我是直接给代码的设定值,但实际上在实时检测过程中帧率是会变化的,所以需要考虑一边计算帧率一边打印,这里留个坑,之后来补。 ( ̄ε(# ̄)☆╰╮o( ̄皿 ̄///)
添加代码的第二行就是用OpenCV自带的文本输出功能,注意几个参数依次如下:
- 要绘制的图像,和cv2.imshow()的第一个参数保持一致,表示在捕获、识别、框选处理后的图像上进行绘制操作
- 要绘制的文本字符串(即text)
- 文本在画面的位置(x, y),注意窗口左上角为坐标原点,向右为x正方向、向下为y正方向(OpenCV的规定)
- 要使用的字体类型(font),这里用OpenCV的内嵌字体cv2.FONT_HERSHEY_SIMPLEX
- 字体大小(font_scale),在此处为1(你也可以换其他数字试一下,美观就好)
- 字体颜色(font_color),在此处为红色(0, 0, 255)
- 字体线宽(thickness),在此处为4
效果
如图所示,能够实现计数、帧率和标签的打印。希望能够帮助到大家。文章来源:https://www.toymoban.com/news/detail-470932.html
求学路上,你我共勉(๑•̀ㅂ•́)و✧文章来源地址https://www.toymoban.com/news/detail-470932.html
到了这里,关于在YOLOv5实时检测画面上打印信息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!