在YOLOv5实时检测画面上打印信息

       为了使结果呈现更加直观,可以在摄像头实时检测的画面上打印计数结果、帧率等信息,本文以单摄像头实时检测为例,介绍实现方法。

实现方法

       在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自带的文本输出功能,注意几个参数依次如下:

  1. 要绘制的图像,和cv2.imshow()的第一个参数保持一致,表示在捕获、识别、框选处理后的图像上进行绘制操作
  2. 要绘制的文本字符串(即text)
  3. 文本在画面的位置(x, y),注意窗口左上角为坐标原点,向右为x正方向、向下为y正方向(OpenCV的规定)
  4. 要使用的字体类型(font),这里用OpenCV的内嵌字体cv2.FONT_HERSHEY_SIMPLEX
  5. 字体大小(font_scale),在此处为1(你也可以换其他数字试一下,美观就好)
  6. 字体颜色(font_color),在此处为红色(0, 0, 255)
  7. 字体线宽(thickness),在此处为4

效果

       如图所示,能够实现计数、帧率和标签的打印。希望能够帮助到大家。

在图书馆里试验了一下,效果还行

求学路上,你我共勉(๑•̀ㅂ•́)و✧

猜你喜欢

转载自blog.csdn.net/Albert_yeager/article/details/129902812