大数跨境

实战项目02:YOLOv8+OpenCV视频流区域入侵检测系统(安防监控实战)

实战项目02:YOLOv8+OpenCV视频流区域入侵检测系统(安防监控实战) AI与计算机视觉
2026-08-02
2
导读:哈喽各位小伙伴,欢迎继续更新AI视觉工业实战系列!前面我们完成了工业缺陷检测、模型网页部署、EXE打包、多路视频流推理等核心能力。

哈喽各位小伙伴,欢迎继续更新AI视觉工业实战系列

前面我们完成了工业缺陷检测、模型网页部署、EXE打包、多路视频流推理等核心能力。

在智能安防、园区监控、工地监控、流水线禁区防护场景中,最常用、最刚需的功能就是:区域入侵检测

传统监控只能录像回看,无法主动预警;而AI智能入侵检测可以实时识别闯入目标、自动告警、可视化标记,是目前安防毕设、工程落地的顶级热门项目。

本期零基础手把手实现YOLOv8 + OpenCV 自定义警戒区域入侵检测,支持摄像头、本地视频、RTSP监控流,代码完整、可直接运行、可直接用于毕设答辩和项目落地。

一、项目概述与功能介绍

1. 项目背景

在厂区禁区、危险区域、工地深坑、园区边界、机房重地等场景,禁止人员或车辆随意进入。依靠人工盯屏效率极低、容易漏看,需要AI自动实时识别、主动预警。

本项目基于YOLOv8目标检测算法,结合OpenCV画面绘制与区域判定技术,实现智能化入侵预警。

2. 实现功能

实时读取摄像头/视频文件/RTSP监控视频流

自定义绘制多边形警戒禁区

识别画面中的行人、车辆等危险目标

智能判断目标是否闯入警戒区域

入侵后实时红色告警框 + 文字预警提示

非入侵目标正常蓝色标记,画面层次清晰

二、核心技术原理(答辩必背)

1. YOLOv8目标检测

使用轻量高效的YOLOv8n模型,实时推理画面目标,输出检测框坐标、类别、置信度,精准锁定行人、车辆等监控目标。

2. OpenCV多边形区域判定

通过自定义多点坐标,绘制不规则警戒禁区,使用pointPolygonTest 算法判断目标中心点是否在禁区内部:

返回值≥ 0:目标在区域内 → 判定入侵

返回值 0:目标在区域外 → 正常状态

3. 目标中心点校验机制

为避免框体抖动导致误判,本项目统一使用目标底部中心点作为判定依据,相比框中心、框顶点更加稳定、贴合地面入侵判定逻辑。

三、环境依赖配置

本项目基于成熟库开发,一键安装依赖即可运行:

python
pip install ultralytics opencv-python numpy -i https://pypi.tuna.tsinghua.edu.cn/simple

四、完整可运行项目代码

代码纯净无冗余,支持摄像头、视频、RTSP流直接切换,可直接用于毕设演示:

python
import cv2
import numpy as np
from ultralytics import YOLO

# 1. 加载YOLOv8模型
model = YOLO("yolov8n.pt")

# 2. 自定义多边形警戒区域坐标(根据自己画面微调)
warn_area = np.array([
    [100, 150],
    [500, 130],
    [550, 400],
    [50, 380]
], np.int32)

# 3. 视频源设置 0=本地摄像头,可替换为视频路径/RTSP地址
cap = cv2.VideoCapture(0)

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break

    # 4. YOLO推理,只检测行人、车辆
    results = model(frame, conf=0.35, classes=[0, 2])

    # 5. 绘制警戒区域(绿色禁区)
    cv2.polylines(frame, [warn_area], isClosed=True, color=(0, 255, 0), thickness=2)

    # 6. 遍历所有检测目标
    for box in results[0].boxes:
        # 获取目标框坐标
        x1, y1, x2, y2 = box.xyxy[0].cpu().numpy()
        conf = float(box.conf[0])
        cls = int(box.cls[0])

        # 计算目标底部中心点
        center_x = int((x1 + x2) / 2)
        center_y = int(y2)

        # 判断是否在警戒区内
        res = cv2.pointPolygonTest(warn_area, (center_x, center_y), False)

        if res >= 0:
            # 入侵告警:红色框+告警文字
            cv2.rectangle(frame, (int(x1), int(y1)), (int(x2), int(y2)), (0, 0, 255), 2)
            cv2.putText(frame, "INTRUSION WARNING", (int(x1), int(y1)-10),
                        cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 0, 255), 2)
        else:
            # 正常目标:蓝色框
            cv2.rectangle(frame, (int(x1), int(y1)), (int(x2), int(y2)), (255, 0, 0), 2)

    # 展示画面
    cv2.imshow("YOLOv8 Area Intrusion Detection", frame)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cap.release()
cv2.destroyAllWindows()

五、核心参数详解(可自由调优)

conf=0.35:置信度阈值,监控场景建议0.3~0.5,平衡漏检与误检

classes=[0,2]:只检测行人、车辆,过滤无关目标,减少干扰

warn_area:自定义警戒区坐标,可根据监控画面任意调整、适配矩形、梯形、不规则区域

视频源替换cap = cv2.VideoCapture("rtsp://xxx") 可直接接入网络摄像头

六、项目优化与高阶拓展(毕设加分项)

1. 自动保存告警截图:检测到入侵自动保存当前画面,留存证据

2. 延时防误报:目标持续3帧以上闯入才触发告警,过滤瞬时抖动误判

3. 多区域分级告警:设置一级禁区、二级禁区,实现不同等级预警

4. 日志记录系统:自动记录入侵时间、目标类型,生成监控日志

5. Web端部署:结合Flask实现网页实时监控、远程查看告警画面

七、常见问题与解决方案

误检频繁:调高置信度、缩小警戒区范围、开启连续帧判定

漏检行人:适当降低conf阈值、使用yolov8s高精度模型

区域判定不准:务必使用底部中心点判定,不要使用框中心

视频卡顿:关闭多余可视化、使用GPU推理、降低分辨率

八、本期项目总结

本期我们完整实现了YOLOv8+OpenCV智能区域入侵检测系统,掌握了安防项目最核心的「区域划定+目标判定+智能告警」全套逻辑。

该项目场景真实、技术成熟、功能完整,非常适合作为计算机视觉毕设、课程设计、安防工程落地项目,拓展性极强,答辩亮点充足。

下期预告

下一期更新:YOLOv8+ByteTrack多目标跟踪+跨线车流人数统计,实现自动计数、去重统计、轨迹留存,安防项目终极完整版!


【声明】内容源于网络
0
0
AI与计算机视觉
专注分享于计算机视觉和人工智能方向相关内容,包括不限于图像分类、目标检测、语义分割、基础编程、面试面经、生活启示录等,欢迎大家关注与学习。
内容 98
粉丝 0
AI与计算机视觉 专注分享于计算机视觉和人工智能方向相关内容,包括不限于图像分类、目标检测、语义分割、基础编程、面试面经、生活启示录等,欢迎大家关注与学习。
总阅读689
粉丝0
内容98