基于 YOLOv8 深度学习视觉检测,实时识别人员与动物闯入行为。自定义多边形围栏边界,入侵自动报警截图存证。
三大 AI 能力守护草坪安全,让踩踏无处遁形
YOLOv8 深度学习模型实时识别行人、猫、狗三类目标,置信度阈值可调,检测精准高效。
鼠标点击即可在画面上绘制任意多边形电子围栏,Ray Casting 算法精确判定目标是否越界。
目标闯入时立即触发声光报警,自动截图保存证据,完整记录每次入侵的时间与目标类型。
电脑摄像头实时采集 + 服务端 YOLOv8 AI 检测,浏览器即开即用
草坪电子围栏 AI 智能防踩踏系统 — 完整技术架构、算法流程与参数配置说明。
开始 ↓ 摄像头实时采集画面(MJPEG 推流 12 FPS) ↓ 逐帧调用 YOLOv8n 目标检测 ├── class=0 (person) → 人体检测 ├── class=15 (cat) → 猫检测 └── class=16 (dog) → 狗检测 ↓ 用户在视频画面上绘制电子围栏多边形(Canvas 交互,任意顶点) ↓ 每条检测结果判断是否在围栏内(射线投射算法 / Ray Casting) ├── 在围栏内 → 触发报警 + 自动截图取证 └── 不在围栏内 → 继续监测 ↓ 报警状态: ├── 保存带标注框的截图至 captures/ 目录 ├── 记录入侵事件(时间 + 目标类型 + 置信度)至 records.json └── 3 秒冷却期防止重复报警 ↓ 前端每 2 秒轮询 /api/status + /api/records,实时更新界面 ↓ 结束
1. 项目目录结构
lawn-fence/ ├── backend/ │ ├── app.py ← Flask 主入口 + MJPEG 推流 + API 路由 │ ├── detector.py ← YOLOv8n 检测引擎 + 围栏判定 + 截图取证 │ ├── camera.py ← USB 摄像头驱动(可选) │ ├── yolov8n.pt ← YOLOv8n 模型权重 (6.5MB) │ ├── records.json ← 入侵记录持久化存储 │ └── requirements.txt ← Python 依赖清单 ├── 前端/ ← 静态前端页面 │ └── index.html ← 主页面(响应式设计) └── captures/ ← 报警截图自动存储目录
2. MJPEG 实时视频推流引擎
基于 Flask Response(generate_frames(), mimetype='multipart/x-mixed-replace') 实现 MJPEG 推流。后台检测线程以 12 FPS 独立运行,每帧经 YOLOv8n 推理 + 围栏可视化标注后编码为 JPEG,通过线程锁安全传递给 MJPEG 流。Dummy 模式生成模拟草坪画面供无摄像头场景演示。
3. YOLOv8n 目标检测(FenceDetector 类)
模型加载:Lazy load,首次 detect() 调用时才加载 YOLO。
目标过滤:仅保留 person(0)/cat(15)/dog(16),忽略其余 77 类。
标注绘制:侵入围栏者红色标注 + 置信度,正常目标绿色标注。
围栏判定:_is_inside_fence() 使用射线投射算法(Ray Casting)判断目标中心点是否在多边形内。
报警触发:任一目标入界 → alarm_active=True,3 秒冷却期。
4. 电子围栏配置(Canvas 交互 + API 持久化)
前端 Canvas 叠加在视频画面上,用户点击放置顶点,右键闭合多边形。POST /api/set_fence 将顶点坐标数组发送至后端。围栏支持任意顶点数,可凸可凹。
5. 截图取证与记录管理
自动截图:_save_alarm_capture() 保存完整标注帧至 captures/ 目录。
JSON 持久化:入侵记录写入 records.json。
前端轮询:每 2 秒调 GET /api/status + GET /api/records 更新状态和日志。
app.py (Flask 入口 + Waitress 生产服务器) ├── detector.py (FenceDetector 类) │ ├── detect() YOLOv8n 推理 → 过滤 person/cat/dog │ ├── _is_inside_fence() 射线投射算法 (Ray Casting) │ ├── set_fence() 存储围栏顶点坐标 │ ├── _save_alarm_capture() 报警截图 JPEG 保存 │ ├── get_status() 返回报警状态 + 检测统计 │ └── get_records() 返回入侵记录 JSON 列表 ├── yolov8n.pt ──────────────── YOLOv8n 模型权重 (6.5MB) ├── camera.py (可选) ────────── USB 摄像头驱动 ├── frontend/ ───────────────── 静态前端页面 └── captures/ ───────────────── 报警截图自动存储
本文系统引用以下学术成果与技术标准。