基于YOLOv5的多目标社交距离监测系统(yolov5实现多目标检测,距离太近为红色,距离过近为黄色,距离适中为绿色)

本项目旨在利用计算机视觉技术,特别是目标检测算法,来实时监测公共场合中人群的社交距离情况。通过摄像头或视频输入,系统能够识别并跟踪个体,评估它们之间的距离,并根据这些距离来判断是否符合推荐的社交距离标准。系统将通过颜色编码来直观地表示不同个体间的距离状态,使观察者能够快速了解现场的安全状况。

技术栈

  • YOLOv5:作为主要的目标检测模型,用于检测视频帧中的人体。
  • OpenCV:用于视频处理和图像操作。
  • Python:编程语言。
  • NumPy:进行数值计算。
  • Pandas(可选):数据处理与分析。

功能描述

  1. 人体检测:使用YOLOv5模型实时检测视频中的所有个体。
  2. 个体跟踪:对检测到的个体进行跟踪,以便持续监测其位置变化。
  3. 距离计算:计算个体之间的距离,并基于此距离进行分类。
  4. 颜色编码
    • 当两个个体之间的距离小于某个阈值时,标记为红色,表示距离过近,存在高风险。
    • 当两个个体之间的距离位于两个阈值之间时,标记为黄色,表示距离较近,存在中等风险。
    • 当两个个体之间的距离大于某个安全阈值时,标记为绿色,表示距离适中,风险较低。
  5. 可视化输出:在视频帧中标记每个个体的位置,并根据它们之间的距离用不同的颜色编码表示风险等级。

实现流程

  1. 环境搭建:安装必要的Python库,如YOLOv5、OpenCV等。
  2. 数据准备:获取训练YOLOv5模型所需的标注数据集。
  3. 模型训练:训练YOLOv5模型以精确地检测人体。
  4. 后处理:实现距离计算逻辑以及个体跟踪机制。
  5. 颜色编码与输出:开发颜色编码方案,并将其应用于视频输出。
  6. 测试与优化:对系统进行全面测试,并根据反馈进行优化。

关键代码片段

这里提供一个简化的代码示例来说明如何实现上述功能:

import cv2
import numpy as np
from ultralytics import YOLO

# 初始化YOLOv5模型
model = YOLO('yolov5s.pt')

# 安全距离阈值设置
SOCIAL_DISTANCE_THRESHOLD = 1.5  # 米
CLOSE_DISTANCE_THRESHOLD = 0.75  # 米

# 颜色定义
RED = (0, 0, 255)
YELLOW = (0, 255, 255)
GREEN = (0, 255, 0)

# 视频捕获
video_capture = cv2.VideoCapture('path/to/video.mp4')

# 主循环
while True:
    ret, frame = video_capture.read()
    if not ret:
        break
    
    # 使用YOLOv5进行人体检测
    results = model(frame)
    
    # 提取检测结果
    detections = results[0].boxes.xyxy.cpu().numpy()
    scores = results[0].boxes.conf.cpu().numpy()
    classes = results[0].boxes.cls.cpu().numpy()
    
    # 获取检测到的人体框
    person_boxes = detections[classes == 0]  # 假设0代表人体类别
    
    # 计算每个个体中心点
    centers = [(int((x1 + x2) / 2), int((y1 + y2) / 2)) for x1, y1, x2, y2 in person_boxes]
    
    # 绘制每个个体的位置
    for center in centers:
        cv2.circle(frame, center, 5, GREEN, -1)
    
    # 计算个体间距离并标记
    for i, (cx1, cy1) in enumerate(centers):
        for j, (cx2, cy2) in enumerate(centers):
            if i < j:
                distance = np.sqrt((cx1 - cx2)**2 + (cy1 - cy2)**2)
                
                # 根据距离标记颜色
                if distance <= CLOSE_DISTANCE_THRESHOLD:
                    color = RED
                elif distance <= SOCIAL_DISTANCE_THRESHOLD:
                    color = YELLOW
                else:
                    color = GREEN
                
                cv2.line(frame, (cx1, cy1), (cx2, cy2), color, 2)
    
    # 显示帧
    cv2.imshow("Social Distance Monitoring", frame)
    
    # 按'q'退出
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 清理资源
video_capture.release()
cv2.destroyAllWindows()

结论

该系统能够有效地监测公共场合中的社交距离,帮助维护公共卫生安全。通过实时的颜色编码反馈,可以提高公众对保持适当社交距离的认识,并促进社区内的健康行为。

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值