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