Ultralytics YOLOv8.0.226 进出计数

文章介绍了如何使用Python中的Ultralytics库创建一个名为ObjectCounter的类,实现在视频流中对进入和离开特定区域的对象进行计数的功能。它结合了YOLO对象检测模型和鼠标事件处理,可以设置计数区域并实时更新进出人数。

in_and_out_counting

对本地视频文件进行出入计数

from ultralytics import YOLO
from collections import defaultdict
import cv2
from ultralytics.utils.checks import check_imshow, check_requirements
from ultralytics.utils.plotting import Annotator, colors
from shapely.geometry import Polygon
from shapely.geometry.point import Point
from datetime import datetime, timedelta
import re
from ultralytics.utils import LOGGER, colorstr
from openpyxl import Workbook

check_requirements('shapely>=2.0.0')


class ObjectCounter:

    def __init__(self):
        self.is_drawing = False
        self.selected_point = None
        self.reg_pts = None
        self.counting_region = None
        self.region_color = (255, 255, 255)
        self.im0 = None
        self.tf = None
        self.view_img = True
        self.names = None
        self.annotator = None
        self.in_counts = 0
        self.out_counts = 0
        self.counting_list = []
        self.track_history = defaultdict(list)
        self.track_thickness = 2
        self.draw_tracks = True
        self.env_check = check_imshow(warn=True)
        self.incount_label = 'InCount: 0'
        self.outcount_label = 'OutCount: 0'
        self.k = 1

    def set_args(self, classes_names, reg_pts, region_color=None, line_thickness=2, track_thickness=2, view_img=True, draw_tracks=True):
        self.tf = line_thickness
        self.view_img = view_img
        self.track_thickness = track_thickness
        self.draw_tracks = draw_tracks
        self.reg_pts = reg_pts
        self.counting_region = Polygon(self.reg_pts)
        self.names = classes_names
        self.region_color = region_color if region_color else self.region_color

    def mouse_event_for_region(self, event, x, y, flags, params):
        if event == cv2.EVENT_LBUTTONDOWN:
            for i, point in enumerate(self.reg_pts):
                if isinstance(point, (tuple, list)) and len(point) >= 2:
                    if abs(x - point[0]) < 10 and abs(y - point[1]) < 10:
                        self.selected_point = i
                        self.is_drawing = True
                        break
        elif event == cv2.EVENT_MOUSEMOVE:
            if self.is_drawing and self.selected_point is not None:
                self.reg_pts[self.selected_point] = (x, y)
                self.counting_region = Polygon(self.reg_pts)
        elif event == cv2.EVENT_LBUTTONUP:
            self.is_drawing = False
            self.selected_point = None

    def extract_and_process_tracks(self, tracks):
        boxes = tracks[0].boxes.xyxy.cpu()
        clss = tracks[0].boxes.cls.cpu().tolist()
        track_ids = tracks[0].boxes.id.int().cpu().tolist()
  
### Ultralytics 8.0.99 的解压与运行 要完成 `ultralytics-8.0.99.tar.gz` 文件的解压和运行操作,可以按照以下方式处理: #### 解压文件 对于 `.tar.gz` 类型的压缩包,通常使用 Linux 或 macOS 提供的标准工具来解压。以下是具体的命令: ```bash tar xzvf ultralytics-8.0.99.tar.gz ``` 这条命令会将压缩包中的内容提取到当前目录下[^1]。 #### 安装依赖项 进入解压后的目录后,可能需要安装一些 Python 库作为项目的依赖项。如果项目附带了一个 `requirements.txt` 文件,则可以通过 pip 来自动安装这些库: ```bash pip install -r requirements.txt ``` 如果没有提供 `requirements.txt` 文件,则可以根据文档说明手动安装必要的库,比如 PyTorch 和其他支持库。 #### 运行程序 Ultralytics 是一个基于 YOLOv5/YOLOv8 的目标检测框架,其具体运行方式取决于所使用的功能模块。一般情况下,可以从官方文档或 README.md 中找到启动脚本的信息。常见的运行方式如下所示: ##### 训练模型 训练一个新的模型通常涉及指定数据集路径和其他参数: ```python from ultralytics import YOLO model = YOLO('yolov8n.pt') # 加载预训练权重 results = model.train(data='path/to/data.yaml', epochs=100, imgsz=640) ``` ##### 推理测试 加载已有的模型并对图像或视频执行推理: ```python from ultralytics import YOLO model = YOLO('yolov8n.pt') # 使用预定义模型 results = model('https://ultralytics.com/images/bus.jpg') ``` 以上代码片段展示了如何通过 API 调用来实现基本的功能调用[^2]。 --- #### 注意事项 在实际操作过程中需要注意以下几点: - 确保环境配置正确,特别是 CUDA 和 cuDNN 版本需匹配 GPU 驱动版本。 - 如果遇到权限问题,在某些场景下可尝试加上 `sudo` 命令前缀以提升权限。 - 对于大型数据集或者复杂计算任务,建议优先选用性能更强的工作站或云端实例。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值