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

部署运行你感兴趣的模型镜像

视频演示

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


 

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

计数效果

程序效果

如上图所示,程序会检测画面中的所有行人,紫色的矩形框是我们统计的区域

当行人从北向南进入紫色矩形框时,会计入进入人数

当行人从南向北进入紫色矩形框时,会计入离开人数

核心代码

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

  • 读取视频
  • 设置区域的坐标
  • 初始化目标计数对象
  • 依次读取视频中的帧图像,调用counter进行统计
  • 释放视频资源
/* by yours.tools - online tools website : yours.tools/zh/img2base64.html */
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=[0],  # 检测的类别
)

# 处理视频
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后,我们对程序把控的能力会更强一些,我们可以中途停止视频的处理,也可以随时更换新的视频来进行检测。

这就是本次的内容,有问题欢迎小伙伴评论区留言~

 

您可能感兴趣的与本文相关的镜像

Yolo-v5

Yolo-v5

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

内容概要:本文详细介绍了“秒杀商城”微服务架构的设计与实战全过程,涵盖系统从需求分析、服务拆分、技术选型到核心功能开发、分布式事务处理、容器化部署及监控链路追踪的完整流程。重点解决了高并发场景下的超卖问题,采用Redis预减库存、消息队列削峰、数据库乐观锁等手段保障数据一致性,并通过Nacos实现服务注册发现与配置管理,利用Seata处理跨服务分布式事务,结合RabbitMQ实现异步下单,提升系统吞吐能力。同时,项目支持Docker Compose快速部署和Kubernetes生产级编排,集成Sleuth+Zipkin链路追踪与Prometheus+Grafana监控体系,构建可观测性强的微服务系统。; 适合人群:具备Java基础和Spring Boot开发经验,熟悉微服务基本概念的中高级研发人员,尤其是希望深入理解高并发系统设计、分布式事务、服务治理等核心技术的开发者;适合工作2-5年、有志于转型微服务或提升架构能力的工程师; 使用场景及目标:①学习如何基于Spring Cloud Alibaba构建完整的微服务项目;②掌握秒杀场景下高并发、超卖控制、异步化、削峰填谷等关键技术方案;③实践分布式事务(Seata)、服务熔断降级、链路追踪、统一配置中心等企业级中间件的应用;④完成从本地开发到容器化部署的全流程落地; 阅读建议:建议按照文档提供的七个阶段循序渐进地动手实践,重点关注秒杀流程设计、服务间通信机制、分布式事务实现和系统性能优化部分,结合代码调试与监控工具深入理解各组件协作原理,真正掌握高并发微服务系统的构建能力。
<think>嗯,用户想用YOLO算法实现风扇扇叶计数的具体方法,这个问题很有意思。从用户提供的引用材料看,ta已经对YOLO的基本原理有了一定了解(比如网格划分、回归预测等概念),但需要具体落地到扇叶计数这种特定场景。用户可能是工业质检工程师或自动化专业的学生,正在做实物检测相关的项目。 风扇扇叶计数有几个技术难点需要特别注意:首先是扇叶旋转时会产生运动模糊,普通YOLO模型容易漏检;其次是密集重叠问题,当扇叶间距较小时边界框会重叠;还有就是金属反光干扰。这些在引用材料里都没提到,需要我补充实战经验。 我决定从数据准备开始逐步引导用户:针对运动模糊问题,要建议ta采集不同转速下的训练数据;针对重叠问题,可以优化预测框大小并采用分割辅助;针对反光问题,需要推荐数据增强方法。考虑到用户可能刚接触YOLO,还要提醒标注时的注意事项——比如扇叶根部才是稳定特征点。 用户引用的材料[3]提到YOLOv8命令行训练,这很实用,我可以基于这个给出具体命令示例。但要注意提醒epochs和batch size的调整策略,毕竟扇叶检测属于小目标识别。最后一定要强调后处理的重要性——原始检测框直接计数会重复,必须用NMS和中心点过滤。 突然想到用户可能还需要现成的代码参考,虽然ta没明确要求。可以在最后主动提出提供数据生成脚本和推理代码模板,这样能节省ta大量时间。不过要注意保持回答简洁性,把代码示例折叠显示比较合适。 </think>使用YOLO算法实现风扇扇叶计数的核心思路是**将扇叶检测转化为目标检测任务**。下面是具体步骤和注意事项: --- ### **关键步骤** 1. **数据准备与标注** - 收集风扇多角度、多转速的图片(静止/旋转状态) - 使用标注工具(如LabelImg/Roboflow)对**每个扇叶**标注矩形框,类别统一标记为`blade` - 示例标注标准: ```markdown 旋转风扇需标注叶片根部(避免运动模糊干扰) 静止风扇可直接标注整个扇叶 ``` 2. **模型选择与训练** - 推荐模型:**YOLOv8n**(轻量级)或 **YOLOv8s**(精度更高) - 训练命令(参考引用[3]): ```bash yolo task=detect mode=train model=yolov8n.pt data=fan_blades.yaml epochs=100 imgsz=640 ``` - 配置文件 `fan_blades.yaml` 要点: ```yaml path: ./datasets/fan train: images/train val: images/val names: 0: blade # 仅需一个类别 ``` 3. **旋转状态处理的技巧** - **运动模糊**:数据增强中添加运动模糊(`mosaic=1.0, motion_blur=0.3`) - **重叠检测**:降低NMS参数(`iou=0.3`)避免漏检密集叶片 - **反光干扰**:HSV色彩空间增强(`hsv_h=0.015, hsv_s=0.7`) 4. **后处理计数逻辑** ```python results = model(frame) # YOLO推理 blade_count = 0 for box in results[0].boxes: if box.conf > 0.7: # 置信度阈值 blade_count += 1 print(f"扇叶数量: {blade_count}") ``` --- ### **优化方向** 1. **小目标检测优化** - 修改模型:使用**PP-YOLOE**或**YOLOv5-P6**(更高分辨率输入) - 添加注意力机制:在`backbone`中插入`CBAM`模块 2. **旋转自适应策略** ```python # 动态调整置信度阈值(针对旋转模糊) current_speed = get_fan_speed() # 通过传感器获取转速 conf_threshold = 0.8 if current_speed > 1000 else 0.6 ``` 3. **误检过滤** - 几何约束:只统计以圆心为中心环形区域内的检测框 - 轨迹追踪:对连续帧检测结果做`Kalman Filter`平滑 --- ### **注意事项** 1. **标注一致性**:旋转风扇应标注叶片根部而非叶尖(避免运动残影导致框抖动)[^2] 2. **工业部署**:使用TensorRT加速(YOLOv8导出`engine`格式) 3. **极端场景**: - 叶片缺损:需额外标注`broken_blade`类别 - 异物遮挡:增加遮挡数据增强(`cutout=0.3`) > 代码示例:完整推理流程见 [YOLOv8风扇检测示例](https://github.com/ultralytics/ultralytics/issues/2315#issuecomment-1487547342) [^3] --- **
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值