孟清妍 发表于 3 天前

使用Yolo12算法进行区域内实时目标计数


视频演示

使用Yolo12算法进行区域内实时目标计数
 
大家好,今天给大家分享一个使用yolo12算法进行区域内目标实时计数的项目。
计数效果


如上图所示,程序会检测画面中的所有行人,紫色的矩形框是我们统计的区域
当行人从北向南进入紫色矩形框时,会计入进入人数
当行人从南向北进入紫色矩形框时,会计入离开人数
核心代码

处理的核心流程大概如下:

[*]读取视频
[*]设置区域的坐标
[*]初始化目标计数对象
[*]依次读取视频中的帧图像,调用counter进行统计
[*]释放视频资源
import cv2
from ultralytics import solutions

# 读取视频
cap = cv2.VideoCapture("MOT16-04-raw.webm")
#判断视频是否读取成功
assert cap.isOpened(), "Error reading video file"

# 检测区域的坐标
# region_points = [(20, 400), (1080, 400)]                                    # line counting
region_points = [(20, 400), (600, 400), (600, 300), (20, 300)]# rectangle region
# region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360), (20, 400)]   # polygon region


# 初始化目标计数对象
counter = solutions.ObjectCounter(
    show=True,# 是否显示检测过程
    region=region_points,# 检测区域
    model="yolo12n.pt",# 使用的检测模型
    classes=,# 检测的类别
)

# 处理视频
while cap.isOpened():
    # 读取视频帧图像
    success, im0 = cap.read()

    #判读是否读取成功
    if not success:
      print("Video frame is empty or processing is complete.")
      break

    #调用counter进行计数处理
    results = counter(im0)

#释放视频对象
cap.release()
#按键处理
cv2.waitKey(0)
cv2.destroyAllWindows()# 关闭所有窗口上述代码中,我们已经对关键地方做了注释,这里大概对关键地方进行下说明:
我们这里需要region_points设置区域的坐标,分别是四组坐标,分别表示矩形区域的左上角、右上角、右下角、左下角。
region_points坐标除了设置矩形外,还可以设置直线和多边形,当坐标只有两组的时候,是一条直线,当超过4组之后,是多边形区域。
在solutions.ObjectCounter我们需要设置一些参数,这里的model需要填写权重文件,这里我们写了yolo12n的预训练权重文件。
GUI系统

上述我们提到,我们需要设定一组坐标来控制检测的区域部分,但是坐标的部分不是太好把控,因为我们需要把坐标值和视频中的实际位置关联起来。
所以更好的办法是做一个界面,然后可以通过鼠标在图像上进行框选来绘制矩形框,这样更加直观的显示矩形框的位置。

界面我们采用pyqt5实现的,可以选择绘制矩形还是直线。
有GUI后,我们对程序把控的能力会更强一些,我们可以中途停止视频的处理,也可以随时更换新的视频来进行检测。
这就是本次的内容,有问题欢迎小伙伴评论区留言~
 


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 使用Yolo12算法进行区域内实时目标计数