python使用yolo实现对摄像头监控入口进出人流量数量统计代码

代码语言:python

所属分类:其他

代码描述:python使用yolo实现对摄像头监控入口进出人流量数量统计代码

代码标签: python 使用 yolo 摄像头 监控 入口 进出 流量 数量 统计 代码

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

#!/usr/local/python3/bin/python3
# -*- coding: utf-8 -*
import cv2
import torch
import numpy as np

# 加载YOLO模型
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)

# 设置视频捕获
cap = cv2.VideoCapture(0)

# 初始化计数器和跟踪列表
enter_count = 0
exit_count = 0
tracked_objects = {}
next_object_id = 0

# 定义计数线(图像中间)
line_position = 320  # 假设图像宽度为640

while True:
    # 读取一帧
    ret, frame = cap.read()
    if not ret:
        break

    # 调整图像大小为模型期望的输入大小
    frame = cv2.resize(frame, (640, 640))

    # 进行推理
    results = model(frame)

    # 获取检测到的人
    detections = results.xyxy[0].cpu().numpy()
    current_objects = {}

    for *xyxy, conf, cls in detections:
        if int(cls) == 0:  # 假设类别0为人
            # 计算检测到的物体的中心坐标
            x_center = (xyxy[0] + xyxy[2]) / 2
            y_center = (xyxy[1] + xyxy[3]) / 2
            
            # 初始化变量,用于寻找最近的已跟踪物体
            closest_object_id = None
            closest_distance = float('inf')
            
            # 遍历所有已跟踪的物体,计算与当前检测物体的距离
            for obj_id, obj_data in tracked_objects.items():
                distance = np.sqrt((x_center - obj_data['x'])**2 + (y_center - obj_data['y'])**2)
                if distance < closest_distance:
                    closest_distance = distance
                    closest_object_id = obj_id
            
            # 如果找到了足够近的已跟踪物体(距离小于50),认为是同一个物体
            if closest_object_id is not None and closest_distance < 50:  # 阈值可以调整
                # 更新该物体的位置
                current_objects[closest_object_id] = {'x': x_center, 'y': y_center}
                
            .........完整代码请登录后点击上方下载按钮下载查看

网友评论0