ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于 Ultralytics YOLO26 的停车场管理系统(Parking Management)完整实战指南

基于 Ultralytics YOLO26 的停车场管理系统(Parking Management)完整实战指南 基于 Ultralytics YOLO26 的停车场管理系统Parking Management完整实战指南【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics本指南以 docs/en/guides/parking-management.md 为核心系统讲解如何用 Ultralytics YOLO26 目标检测与跟踪能力构建一套实时车位占用检测与停车场管理解决方案从使用ParkingPtsSelection图形化标注工具圈定车位多边形、生成bounding_boxes.json布局文件到运行ParkingManagement对单路视频/摄像头画面实时统计“占用/可用”车位并导出标注视频最后深入其底层实现ultralytics/solutions/parking_management.py讲解逐车位判定原理与全部可调参数。读完本文你将能够独立把该方案落地到任意一个停车场布局上并按其需要自定义检测模型、类别过滤、跟踪器与推理设备。一、什么是基于 YOLO26 的停车场管理系统一个基于 Ultralytics YOLO26 构建的停车场管理系统会对视频流中的车辆进行实时检测与跟踪从而判断每个已定义车位是“被占用Occupied”还是“可用Available”并持续上报整个停车场的实时占用率。它把 YOLO26 的目标检测能力车辆检测与一份JSON 格式的车位布局定义相结合使你仅需一路视频流或摄像头画面即可监控整个停车场。从仓库中的类结构看ultralytics/solutions/parking_management.py整套体系只由两个公开组件构成职责划分非常清晰ParkingPtsSelection基于 Tkinter 的图形化标注工具用于在帧图像上通过鼠标点击绘制多边形车位并保存为 JSONParkingManagement(BaseSolution)负责加载 YOLO 模型与车位 JSON在每帧上执行检测/跟踪、逐车位判定占用情况并进行可视化统计。两者均可从顶层导出见 ultralytics/solutions/init.pyfrom .parking_management import ParkingManagement, ParkingPtsSelection。系统的三大优势效率Efficiency优化车位空间利用率缓解场内拥堵让司机更快找到空位安全与安防Safety and Security借助持续监控提升人员与车辆的安全保障水平减少排放Reduced Emissions通过合理疏导场内车流、缩短寻位与怠速时间间接降低停车场的尾气排放。真实场景应用在真实落地中这类方案通常以高空俯瞰Aerial View或顶部俯视Top View的摄像头视角部署一个视野即可覆盖多排车位官方演示视频与配图也正是采用这两种机位。其典型用途包括车位状态检测Parking Space Detection准确区分可用/已占车位安防监控Surveillance通过实时监控增强场区安全车流疏导Traffic Flow Management依据各区域占用率引导车辆降低怠速与拥堵。二、系统代码工作流总览整个“从零到可用”的工作流共分 4 步。其中最关键的一步是车位点选标注——车位的多边形边界是否画得准确直接决定后续占用判定质量。Ultralytics 通过内置的 “Parking slots annotator” 标注工具把这一复杂任务图形化点选结果可被后续处理直接复用。Step-1取帧。从你要管理的视频或摄像头流中抓取一帧画面。Step-2启动标注 GUI。运行下方代码即可打开图形界面选择一张图片然后通过鼠标点击依次勾勒每个车位每次点击落点会形成多边形顶点每 4 个点自动闭合为一个车位区域。!!! example Parking slots annotator车位标注器??? note 依赖项 tkinter 的额外安装步骤 tkinter 通常随 Python 一并打包。若未安装可按系统执行 - **Linux (Debian/Ubuntu)**sudo apt install python3-tk - **Linux (Fedora)**sudo dnf install python3-tkinter - **Linux (Arch)**sudo pacman -S tk - **Windows**重装 Python并在安装界面的 **Optional Features** 中勾选 tcl/tk and IDLE - **macOS**从 Python 官网重新安装 Python或执行 brew install python-tk Python python from ultralytics import solutions solutions.ParkingPtsSelection() 从源码实现看parking_management.py 中ParkingPtsSelection该工具内部包含三个按钮Upload Image上传图片、Remove Last Bounding Box撤销上一个车位框、Save保存 JSON。画布最大尺寸为 1280×720加载图片时会按原宽高比自动缩放适配单击画布绑定鼠标左键事件每满 4 个点就调用draw_box把当前框以蓝色 2 像素线条绘制出来。另外它还借用了check_imshow校验当前环境是否支持 GUI 显示——无桌面图形环境的服务器如纯 SSH 终端无法运行该标注器此时建议在本地桌面环境完成标注后再把 JSON 上传到推理服务器。Step-3保存布局文件。完成所有车位多边形勾勒后点击save数据即被写入当前工作目录下的bounding_boxes.json——这正是下文管理脚本默认加载的同名文件。Step-4运行车位管理方案。用下方 Python 或 CLI 代码执行实时车位管理。!!! example 使用 Ultralytics YOLO 进行停车场管理 Python python import cv2 from ultralytics import solutions # 视频读取 cap cv2.VideoCapture(path/to/video.mp4) assert cap.isOpened(), Error reading video file # 视频写出 w, h, fps (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS)) video_writer cv2.VideoWriter(parking management.avi, cv2.VideoWriter_fourcc(*mp4v), fps, (w, h)) # 初始化车位管理对象 parkingmanager solutions.ParkingManagement( modelyolo26n.pt, # 模型文件路径未指定时默认 yolo26n.pt json_filebounding_boxes.json, # 车位标注文件路径 ) while cap.isOpened(): ret, im0 cap.read() if not ret: break results parkingmanager(im0) # print(results) # 访问输出结果 video_writer.write(results.plot_im) # 写入处理后的帧 cap.release() video_writer.release() cv2.destroyAllWindows() # 关闭所有打开窗口 CLI bash yolo solutions parking sourcepath/to/video.mp4 json_filebounding_boxes.json showTrue !!! note 请先用 Python 中的 ParkingPtsSelection()即上面 Step 2创建车位区域标注再把生成的 JSON 文件传给 CLI 命令。CLI 子命令背后的映射关系上面yolo solutions parking ...之所以能路由到车位管理是因为仓库在 ultralytics/cfg/init.py 中维护了一张SOLUTION_MAP注册表其中parking映射到ParkingManagement类该文件同时内置了对应示例命令见其SOLUTIONS_HELP_MSG第 9 条示例yolo solutions parking sourcepath/to/video.mp4 json_filebounding_boxes.json。CLI 方式下source参数只能以命令行形式传入见 docs/en/solutions/index.md 与配置容器 ultralytics/solutions/config.py 中的说明。三、bounding_boxes.json车位布局文件格式正确理解 JSON 结构是自定义停车场布局的前提。参考ParkingPtsSelection.save_to_json的实现parking_management.py#L165-L176保存时会根据画布缩放比例scale_w imgw / canvas_width、scale_h imgh / canvas_height把画布像素坐标换算回原始图像坐标再写入文件[ { points: [ [402, 339], [607, 312], [732, 463], [487, 472] ] }, { points: [ [102, 450], [302, 420], [388, 561], [150, 584] ] } ]要点说明顶层是一个数组数组中的每个元素对应一个车位每个车位是一个字典含一个键points其值为4 个[x, y]像素坐标组成的四边形顶点列表代码中rg_data保存的正是每 4 点一组的数据即每个框由 4 个点定义坐标为图像原始分辨率下的像素坐标而非画布缩放后的坐标save_to_json已做还原。在ParkingManagement加载侧parking_management.py#L203-L213会执行json.load读取该文件若json_file为空则直接抛出ValueError提示JSON file path cannot be empty。四、ParkingManagement参数详解ParkingManagement继承自BaseSolution构造时会把所有关键字参数合并进配置容器SolutionConfig定义于 ultralytics/solutions/config.py含集中式参数校验非法参数名会直接报错。下表是官方文档给出的专属参数及其默认值ArgumentTypeDefaultDescriptionmodelstrNone缺省自动回退yolo26n.ptUltralytics YOLO 模型文件路径。可指向官方预训练权重也可指向自训练检测模型json_filestrNone包含全部车位坐标数据的 JSON 文件路径必填否则抛异常line_widthint2方案绘制框线、关键点与计数文字所用的线条粗细verboseboolTrue是否逐帧打印输入尺寸、类别计数与处理耗时日志底层 tracking 调用本身始终保持静默上述默认值来自 docs/en/macros/solutions-args.md 的参数宏与 config.py 中的SolutionConfig字段定义。可透传的跟踪track参数ParkingManagement底层通过model.track()进行多目标跟踪见下文“实现剖析”因此还透传以下 track 模式参数ArgumentTypeDefaultDescriptiontrackerstrbotsort.yaml指定跟踪算法。内置选项见 ultralytics/cfg/trackers/ 目录botsort.yaml、bytetrack.yaml、ocsort.yaml、deepocsort.yaml、fasttrack.yaml、tracktrack.yamlconffloat0.25检测置信度阈值。调低会跟踪更多目标但也可能引入误检ioufloat0.7用于过滤重叠检测框的 IoU交并比阈值classeslistNone按类别索引过滤结果。例如classes[2, 5, 7]仅跟踪 COCO 中的 car、bus、truck按 COCO 惯例索引 2/5/7 对应这三类车避免行人干扰车位判定devicestrNone推理设备如cpu、cuda:0或0可视化选项方案支持开关实时画面显示ArgumentTypeDefaultDescriptionshowboolFalse为True时在窗口中实时显示标注画面便于开发调试注意ParkingManagement在帧上的可视标注是固定开启的多边形框线、车位占用统计等始终绘制到plot_imshow只控制是否弹窗即时预览。五、核心算法实现剖析一个车位“何时算被占用”为了让使用者明白参数背后的判定逻辑下面结合源码逐层拆解 ParkingManagement.process 的执行链。1. 检测与跟踪由基类完成ParkingManagement直接调用继承自 BaseSolution.extract_tracks 的方法其内部核心调用为self.tracks self.model.track( sourceim0, persistTrue, classesself.classes, verboseFalse, **self.track_add_args )[0]track_add_args见 solutions.py#L118-L120会把iou、conf、device、max_det、quantize、tracker、imgsz一并传给跟踪器。随后从跟踪结果中解出边界框self.boxes、类别索引self.clss、跟踪 IDself.track_ids与置信度self.confs若当前帧无任何跟踪目标则打印No tracks found.日志并清空这些列表此时所有车位自然全部显示为“可用”。2. 逐车位执行“质心 点在多边形内”判定每帧的处理循环parking_management.py#L245-L266逻辑非常直观把 JSON 中某车位的 4 个点region[points]转换为np.int32的多边形数组遍历本帧所有跟踪框对每个框取质心(xc, yc)即外接框中心调用 OpenCV 的cv2.pointPolygonTest(region_polygon, (xc, yc), False)做“点在多边形内”测试若返回距离 0质心在多边形内或落在边界上该车位即判定为被占用并在质心处用display_objects_labels绘制类别名标签self.model.names[int(cls)]随即break跳出该车位的检测循环。统计方式初始available_slots len(self.json)所有车位皆可用、occupied_slots 0每判定一个占用车位则occupied_slots 1、available_slots - 1最后写回self.pr_info {Occupancy: occupied_slots, Available: available_slots}。3. 可视化与返回值绘制上采用BGR 颜色见 parking_management.py#L217-L219车位区域多边形被占用 绿色(0, 255, 0)可用 红色(0, 0, 255)线宽固定 2 像素cv2.polylines画面右上角通过SolutionAnnotator.display_analytics实时渲染一行统计“Occupancy: N”与“Available: N”带深色底纹标签。process返回一个 SolutionResults 对象可通过属性访问结构化结果results.plot_im叠加了全部标注的帧写入视频时用这个results.filled_slots当前占用车位总数results.available_slots当前可用车位总数results.total_tracks本帧跟踪对象总数len(self.track_ids)。print(results)之所以能打印友好摘要是因为SolutionResults.__str__会列出所有非空、非零的属性solutions.py#L856-L867。4. 测试验证与进度日志仓库的自动化测试矩阵tests/test_solutions.py把ParkingManagement与专用样例资产parking_video、parking_areas、parking_model定义见 tests/init.py捆绑验证并专门覆盖“缺省 JSON 时优雅报错”的分支test_parking_json_none。此外BaseSolution.__call__solutions.py#L268-L291会在verboseTrue时逐帧输出两类耗时track 阶段耗时与 solution含车位判定绘制阶段耗时方便你按帧定位性能瓶颈。六、常见问题FAQ1. Ultralytics YOLO26 如何增强停车场管理系统YOLO26 提供实时的车辆检测与跟踪监控能力实时检测与跟踪入场车辆优化车位使用、缓解拥堵并通过持续监控提升安全水平。把它运行在实时摄像头流上还能帮助疏导车流、最大限度减少车辆怠速时间。完整搭建流程见上文“系统代码工作流”。2. 将 YOLO26 用于智能停车有哪些收益效率优化车位利用、减少拥堵与寻位时间安全与安防增强监控覆盖保障车辆与行人安全环境效益通过减少车辆怠速降低排放。3. 如何用 YOLO26 定义标注车位区域三步即可完成从视频或摄像头流中抓取一帧画面运行solutions.ParkingPtsSelection()打开标注 GUI选择图片并以鼠标绘制多边形圈定车位每 4 点一组点击 Save 把标注数据以 JSON 格式保存供后续流程加载。无桌面环境时会收到 Tkinter 未配置的告警提示源码通过ImportError捕获并按平台给出修复命令可参照前文安装说明补齐tkinter。4. 如何针对自己的停车场定制 ParkingManagement最具“场地个性”的参数是json_file把指向你用车位标注器生成的 JSON 即可适配新布局。其余可按需组合微调详见“参数详解”将model换成针对你场地训练的自定义检测模型如区分小车/货车用classes限制只统计特定车辆类别例如仅跟踪 car/bus/truck调整conf与iou阈值以平衡误检与漏检通过tracker切换跟踪算法或指定其他跟踪配置 YAML用line_width缩放画面上的标签与占用统计字体的观感用device选择推理设备CPU/指定 GPU。如需做区域而非车位粒度的监控可参考仓库的区域计数指南RegionCounter 类ultralytics/solutions/region_counter.py。5. 车位颜色与统计数字各代表什么判定结果实时可视化在每一帧上BGR 颜色约定源于 parking_management.py#L217-L219绿色多边形 该车位已被占用红色多边形 该车位当前可用画面右上角文本同时给出全场汇总Occupancy已占与Available可用两个数字。6. CLI 模式下忘记生成 JSON 会怎样ParkingManagement构造时若json_file为空会直接抛出ValueError源码 parking_management.py#L208-L210因此请务必先运行 Python 版ParkingPtsSelection()生成布局 JSON再执行yolo solutions parking ...。七、延伸阅读Solutions 总览文档了解车位管理所属的整体解决方案家族计数、热力图、排队管理等检测任务说明与跟踪模式说明掌握model.track()的底层任务与参数语义相关源码ParkingPtsSelection标注与ParkingManagement管理的完整实现基类与结果封装BaseSolution跟踪流程、SolutionResults结构、SolutionAnnotator绘制方法配置容器所有解决方案共享参数的默认值与校验入口测试用例ParkingManagement的端到端验证方式与样例资产约定【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表