找回密码
 立即注册
首页 业界区 业界 使用Yolo12算法进行区域内实时目标计数

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

孟清妍 昨天 17:10

视频演示

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

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

1.png

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

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

  • 读取视频
  • 设置区域的坐标
  • 初始化目标计数对象
  • 依次读取视频中的帧图像,调用counter进行统计
  • 释放视频资源
  1. import cv2
  2. from ultralytics import solutions
  3. # 读取视频
  4. cap = cv2.VideoCapture("MOT16-04-raw.webm")
  5. #判断视频是否读取成功
  6. assert cap.isOpened(), "Error reading video file"
  7. # 检测区域的坐标
  8. # region_points = [(20, 400), (1080, 400)]                                      # line counting
  9. region_points = [(20, 400), (600, 400), (600, 300), (20, 300)]  # rectangle region
  10. # region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360), (20, 400)]   # polygon region
  11. # 初始化目标计数对象
  12. counter = solutions.ObjectCounter(
  13.     show=True,  # 是否显示检测过程
  14.     region=region_points,  # 检测区域
  15.     model="yolo12n.pt",  # 使用的检测模型
  16.     classes=[0],  # 检测的类别
  17. )
  18. # 处理视频
  19. while cap.isOpened():
  20.     # 读取视频帧图像
  21.     success, im0 = cap.read()
  22.     #判读是否读取成功
  23.     if not success:
  24.         print("Video frame is empty or processing is complete.")
  25.         break
  26.     #调用counter进行计数处理
  27.     results = counter(im0)
  28. #释放视频对象
  29. cap.release()
  30. #按键处理
  31. cv2.waitKey(0)
  32. cv2.destroyAllWindows()  # 关闭所有窗口
复制代码
2.gif
上述代码中,我们已经对关键地方做了注释,这里大概对关键地方进行下说明:
我们这里需要region_points设置区域的坐标,分别是四组坐标,分别表示矩形区域的左上角、右上角、右下角、左下角。
region_points坐标除了设置矩形外,还可以设置直线和多边形,当坐标只有两组的时候,是一条直线,当超过4组之后,是多边形区域。
在solutions.ObjectCounter我们需要设置一些参数,这里的model需要填写权重文件,这里我们写了yolo12n的预训练权重文件。
GUI系统

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

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


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册