YOLOV3实现越界检测——智能安防

news2025/1/12 8:59:37

目录

应用前景

1. 安全监控系统

2. 家庭安防系统

3. 无人机监控

4. 交通管理

5. 无人驾驶技术

6. 大型活动现场

代码说明

1. YOLO 模型加载

2. 摄像头视频流捕获

3. 安全区域绘制

4. YOLOv3 目标检测

5. 过滤和标记人类目标

6. 入侵检测

7. 结果显示和退出

总结

整体代码

效果展示


18748163c25a43d6ab3120e8de120d6e.jpeg

应用前景

        越界检测系统具有广泛的应用前景,尤其是在安全监控和自动化系统中。通过引入自定义的安全区域以及实时目标检测技术,系统可以在摄像头无人机等设备上得到有效应用。以下是一些可能的应用场景及其前景:

1. 安全监控系统

  • 应用场景:在工厂、仓库、停车场或其他重要区域内安装固定摄像头,用于监控特定的边界或区域。通过识别进入特定安全区的人,能够有效防止未经授权人员入侵或进入危险区域。
  • 前景:相比于传统的摄像头监控系统,使用这种越界检测技术可以大大提升安全性。系统可以自动识别和告警,无需人为时刻监控。对高风险区域的自动监控,例如建筑工地和化工厂,这类系统能够防止工人意外进入危险区域,从而减少事故发生的可能性。

2. 家庭安防系统

  • 应用场景:在住宅区内,通过摄像头实时监控门口或后院的活动。如果检测到有人进入设定的安全区域,系统可以发出警报,或者自动触发与智能家居系统联动的措施(如锁门、开灯等)。
  • 前景:随着智能家居的普及,越来越多的家庭开始采用自动化的安防解决方案。这样的系统能够提供更为主动的安全保障,减少误报率,精准检测潜在威胁。此外,通过与手机端App或云端服务的结合,家庭成员可以随时远程监控家中状况,进一步提升安全感。

3. 无人机监控

  • 应用场景:无人机在特定任务中,比如边境巡逻、森林火灾预防、农业监控等领域,能够实时巡逻和检测人员入侵特定区域。当无人机配备此类目标检测和越界检测功能时,能在广阔的视野中检测到非法入侵者并发出预警。
  • 前景:随着无人机技术的进步,这种实时目标检测技术可以大幅度提升无人机的智能化程度,减少人工操作的负担。例如,在边境安全监控中,无人机可以自动检测非法入境者,并向控制中心实时传输信息;在农业中,系统可以帮助检测人员是否进入某些农田或设施区域,避免破坏。

4. 交通管理

  • 应用场景:通过安装在街道、地铁站、机场或其他人流密集区域的摄像头,系统可以自动监控是否有行人进入危险区域,如高速公路、铁轨、或其他禁止通行区域。
  • 前景:这种系统可以与城市的智能交通系统结合,自动识别危险行为或意外事件,及时通知交通管理人员,甚至自动触发警示灯、声音警报等。它能够在无人看守的区域提供全天候的监控服务,大幅提升城市公共安全。

5. 无人驾驶技术

  • 应用场景:在无人驾驶车辆或自动化设备中,配备该类越界检测系统可以有效识别出是否有行人或其他物体进入车辆或设备的“安全区”,从而及时采取措施避免碰撞。
  • 前景:该系统可以作为无人驾驶车载安全系统的一部分,增加设备的智能化水平,增强对复杂交通环境的应对能力。在仓储机器人中,这类系统还可以防止工人误入自动化工作区域,提升整体工作环境的安全性。

6. 大型活动现场

  • 应用场景:在体育赛事、音乐会等大型活动场所,越界检测系统可以帮助监控观众区域和后台等特殊区域,防止非授权人员进入关键区域,保障活动的有序进行。
  • 前景:这种应用可以有效地减少在大型人群活动中的混乱情况,增强活动的安全保障。同时,在紧急情况下,系统还可以帮助识别逃生通道上的异常情况,帮助安全人员迅速响应。

 


0502dbc34e6f48f496070e524a1f4b12.jpeg

 

代码说明

        这段代码的核心功能是使用 YOLOv3 模型进行实时的人类检测,并且在程序运行时让用户手动绘制一个安全区域矩形,检测是否有人进入这个区域。如果有人进入,程序会发出入侵警告,并将检测到的人用红色边框标记。以下是代码的详细实现思路:

1. YOLO 模型加载

  • 使用 cv2.dnn.readNet 函数加载 YOLOv3 的权重文件和配置文件:
     
    net = cv2.dnn.readNet('../../needFiles/yolov3.weights', '../../needFiles/yolov3.cfg')
    

     

  • 通过 net.getLayerNames() 获取网络的层名称,并得到模型的输出层,这些输出层将用于检测物体。
  • 加载 COCO 数据集中的类别标签,程序只识别“person”类别,通过 classes.index("person") 得到人的类别索引。

2. 摄像头视频流捕获

  • 使用 cv2.VideoCapture(0) 从摄像头捕获视频流。
  • 该视频流会作为输入,逐帧传递给 YOLO 模型进行处理。

3. 安全区域绘制

  • 通过 OpenCV 的 cv2.setMouseCallback 绑定鼠标事件,让用户手动框选一个矩形作为安全区域。
     
    def draw_rectangle(event, x, y, flags, param):
        if event == cv2.EVENT_LBUTTONDOWN:
            # 开始绘制,存储起点
            drawing = True
            safety_zone = [(x, y)]
        elif event == cv2.EVENT_MOUSEMOVE and drawing:
            # 鼠标移动时,实时更新矩形
            cv2.rectangle(img_copy, safety_zone[0], (x, y), (255, 0, 0), 2)
        elif event == cv2.EVENT_LBUTTONUP:
            # 绘制结束,存储矩形的结束点
            drawing = False
            safety_zone.append((x, y))
    

     

  • 这段代码中,用户通过拖动鼠标框选一个矩形区域,程序会在绘制完成后将该区域保存到 safety_zone 中。

4. YOLOv3 目标检测

  • 对每一帧图像进行预处理,使用 cv2.dnn.blobFromImage 函数将图像转换为 YOLOv3 模型输入所需的格式。转换后的数据会被传入网络:
     
    blob = cv2.dnn.blobFromImage(frame, 0.00392, (416, 416), (0, 0, 0), True, crop=False)
    net.setInput(blob)
    outs = net.forward(output_layers)
    

     

  • YOLOv3 模型会输出检测结果,其中包括物体的类别、置信度、边界框信息等。

5. 过滤和标记人类目标

  • 对每个检测结果,根据置信度阈值和类别筛选出“person”类别的检测框:
     
    if class_id == person_label_index and confidence > 0.5:
        # 提取人类目标的边界框坐标和尺寸
        center_x = int(detection[0] * width)
        center_y = int(detection[1] * height)
        w = int(detection[2] * width)
        h = int(detection[3] * height)
        x = int(center_x - w / 2)
        y = int(center_y - h / 2)
    

     

  • 通过筛选出的边界框坐标、宽度和高度,程序可以绘制出每个人的矩形框。

6. 入侵检测

  • 在检测到每个人的中心点后,程序会判断这个中心点是否位于用户绘制的安全区域内:
     
    if safety_zone[0][0] < center_x < safety_zone[1][0] and safety_zone[0][1] < center_y < safety_zone[1][1]:
        color = (0, 0, 255)  # 红色框表示入侵
        cv2.putText(frame, "Intrusion Detected", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
    

     

  • 如果中心点在安全区域内,说明有入侵行为,程序会用红色框标记入侵的目标,并显示“Intrusion Detected”警告。

7. 结果显示和退出

  • 每一帧的处理结果会通过 cv2.imshow 显示出来。用户可以通过按下 q 键退出程序。
 
cv2.imshow("Boundary Detection", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
    break

 

总结

  • 实现了一个简单的越界检测系统,使用 YOLOv3 模型检测视频中的人类,并且可以让用户手动定义一个安全区域。如果检测到有人进入该区域,系统会发出警告。

 

整体代码

import cv2
import numpy as np

# 加载 YOLO 模型
net = cv2.dnn.readNet('../../needFiles/yolov3.weights', '../../needFiles/yolov3.cfg')
layer_names = net.getLayerNames()
output_layers = [layer_names[i - 1] for i in net.getUnconnectedOutLayers()]

# 加载类标签,只识别人
with open('../../needFiles/coco.names', 'r') as f:
    classes = [line.strip() for line in f.readlines()]

# 只识别人类,类别索引是 0
person_label_index = classes.index("person")

# 设置视频源
cap = cv2.VideoCapture(0)  # 使用摄像头或视频文件

# 定义一个全局变量来存储安全区域
safety_zone = None
drawing = False  # 标志是否正在绘制安全区域


# 定义鼠标事件函数,用于选择安全区域
def draw_rectangle(event, x, y, flags, param):
    global safety_zone, drawing
    if event == cv2.EVENT_LBUTTONDOWN:  # 开始绘制
        drawing = True
        safety_zone = [(x, y)]  # 存储矩形的起始点
    elif event == cv2.EVENT_MOUSEMOVE and drawing:  # 鼠标移动,实时更新矩形
        img_copy = frame.copy()
        cv2.rectangle(img_copy, safety_zone[0], (x, y), (255, 0, 0), 2)
        cv2.imshow('Draw Safety Zone', img_copy)
    elif event == cv2.EVENT_LBUTTONUP:  # 完成绘制
        drawing = False
        safety_zone.append((x, y))  # 存储矩形的结束点


# 创建窗口并绑定鼠标事件,用于绘制安全区域
cv2.namedWindow('Draw Safety Zone')
cv2.setMouseCallback('Draw Safety Zone', draw_rectangle)

# 获取用户手动框选的安全区域
while True:
    ret, frame = cap.read()
    if not ret:
        break
    cv2.imshow('Draw Safety Zone', frame)

    if safety_zone and len(safety_zone) == 2:
        break  # 已绘制完成

    if cv2.waitKey(1) & 0xFF == ord('q'):  # 按 'q' 键退出
        break

cv2.destroyWindow('Draw Safety Zone')

# 开始处理视频帧,进行人类检测和区域入侵检测
while True:
    ret, frame = cap.read()
    if not ret:
        break

    height, width, channels = frame.shape
    blob = cv2.dnn.blobFromImage(frame, 0.00392, (416, 416), (0, 0, 0), True, crop=False)
    net.setInput(blob)
    outs = net.forward(output_layers)

    class_ids = []
    confidences = []
    boxes = []

    for out in outs:
        for detection in out:
            scores = detection[5:]
            class_id = np.argmax(scores)
            confidence = scores[class_id]
            if class_id == person_label_index and confidence > 0.5:  # 只识别人类
                center_x = int(detection[0] * width)
                center_y = int(detection[1] * height)
                w = int(detection[2] * width)
                h = int(detection[3] * height)
                x = int(center_x - w / 2)
                y = int(center_y - h / 2)

                boxes.append([x, y, w, h])
                confidences.append(float(confidence))
                class_ids.append(class_id)

    # 非极大值抑制
    indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4)

    # 绘制安全区域
    cv2.rectangle(frame, safety_zone[0], safety_zone[1], (255, 0, 0), 2)

    # 遍历检测结果
    for i in indexes.flatten():
        x, y, w, h = boxes[i]
        label = str(classes[class_ids[i]])
        color = (0, 255, 0)  # 绿色框

        # 计算物体的中心点
        center_x = x + w // 2
        center_y = y + h // 2

        # 判断中心点是否进入安全区域
        if safety_zone[0][0] < center_x < safety_zone[1][0] and safety_zone[0][1] < center_y < safety_zone[1][1]:
            color = (0, 0, 255)  # 红色框表示入侵
            cv2.putText(frame, "Intrusion Detected", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)

        # 画出物体边界框和标签
        cv2.rectangle(frame, (x, y), (x + w, y + h), color, 2)
        cv2.putText(frame, label, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, color, 2)

    # 显示处理结果
    cv2.imshow("Boundary Detection", frame)

    # 按 'q' 键退出
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

95a36b22051e459d8005b5d1fe82e146.jpeg


 

效果展示

YOLOV3 安防警告,边界检测

 

哈哈哈哈哈哈哈哈哈,后面误入帅锅了

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2124740.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

黑神话怎么录?游戏录屏必备,探索2024年7款游戏录屏软件排行榜

在游戏世界中&#xff0c;记录下每一个精彩瞬间已成为玩家们的共同需求。2024年&#xff0c;随着《黑悟空神话》等大作的问世&#xff0c;玩家们对于游戏录屏软件的需求愈发高涨。本文将为您推荐几款在2024年备受好评的游戏录屏软件&#xff0c;帮助您捕捉游戏中的每一个高光时…

NLP-文本分类文献阅读-前置基础-词汇解释-通俗易懂-9月份-学习总结

目录 迁移学习 特征选择 特征工程 朴素贝叶斯分类方法 支持向量机 K-最近邻&#xff08;K-Nearest Neighbors, KNN&#xff09; 特征向量稀疏 卷积神经网络 循环神经网络 图神经网络 TextCNN 动态 K 最大池化 One-hot BOW Word2vec 池化&#xff08;Pooling&#xff09; 全连接…

Python画笔案例-043 绘制“篱笆“

1、绘制 “篱笆” 通过 python 的turtle 库绘制 “篱笆”&#xff0c;如下图&#xff1a; 2、实现代码 绘制 “篱笆”&#xff0c;以下为实现代码&#xff1a; """篱笆.py """ import turtledef draw_triangle():"""画正三角形函…

万物皆AI:联发科技 Genio 130 与 ChatGPT 的火花 - 基于 MTK Genio 130 结合 ChatGPT 功能的解决方案

随着人工智慧(AI)在2022-2023的爆炸性成长&#xff0c;我们迎来了AI世代&#xff0c;无论是交通、工业、金融、制造、医疗等各领域&#xff0c;AI已被广泛的应用来解决各类问题与加速发展。伴随著AI走入我们的生活&#xff0c;我们也在所拥有的各类智慧装置上&#xff0c;看到各…

农田杂草检测数据集 2900张 杂草检测 带标注 voc yolo

这是一个关于农田杂草的图像识别数据集&#xff0c;包含了2900张带标注的图片&#xff0c;可以用于训练计算机视觉算法&#xff0c;如VOC或YOLO等目标检测模型。 该数据集中包含以下10类农田杂草&#xff1a; Carpetweeds&#xff08;450张&#xff09;Crabgrass&#xff08;1…

基于JavaWeb开发的Java+SpringMvc+vue+element实现上海汽车博物馆平台

基于JavaWeb开发的JavaSpringMvcvueelement实现上海汽车博物馆平台 &#x1f345; 作者主页 网顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接…

GIS数据采集软件:地理信息与遥感技术的智慧之眼

在信息时代&#xff0c;数据如同血液&#xff0c;滋养着各行各业的创新与进步&#xff0c;而地理信息与遥感领域中的数据采集软件&#xff0c;正是这股生命之源&#xff0c;它不仅为科学研究、城市规划、环境保护、灾害监测、资源管理等提供了精确数据支持&#xff0c;更是智慧…

Qt发送http请求

需要在.pro项目文件中添加网络模块&#xff0c;不然无法使用http相关的类获取数据 QT core gui network 用于http通信的类为QNetworkAccessManager 发送Get请求 通过调用QNetworkAccessManager::get方法 QNetworkReply *QNetworkAccessManager::get(const QNetworkReques…

跨部门SOP与统一知识库:打破信息孤岛,促进团队协作

引言&#xff1a; 在当今这个快速变化且高度竞争的商业环境中&#xff0c;企业面临着前所未有的挑战&#xff0c;其中之一便是如何高效地跨越部门界限&#xff0c;实现无缝协作。传统的组织结构往往导致信息孤岛的出现&#xff0c;不同部门间流程不一致、信息不共享&#xff0…

系统架构师考试学习笔记第五篇——架构设计补充知识(23)知识产权

本章考点&#xff1a; 第23课时主要学习国家与行业标准、知识产权的内容。根据考试大纲,本课时知识点会涉及单项选择题,按以往全国计算机技术与软件专业技术资格(水平)考试的出题规律约占3分。本课时内容属于补充知识范畴,考题类型固定。本课时知识架构如图23.1所示。 一、知识…

Python(PyTorch)和MATLAB及Rust和C++结构相似度指数测量导图

&#x1f3af;要点 量化检查图像压缩质量低分辨率多光谱和高分辨率图像实现超分辨率分析图像质量图像索引/多尺度结构相似度指数和光谱角映射器及视觉信息保真度多种指标峰值信噪比和结构相似度指数测量结构相似性图像分类PNG和JPEG图像相似性近似算法图像压缩&#xff0c;视频…

Linux服务器中在指定python环境中新建notebook

在指定环境下建立新的IPython内核pip install ipykernel生成ipykernel的配置文件&#xff1a;python -m ipykernel install --user --name netCLR 其中--user是指在用户级别生成&#xff0c;如果没有--user就会在系统中安装&#xff0c;如果不是管理员的话就会没有权限生成&…

【STM32】TIM输入捕获测量电平持续时间

本篇博客重点在于标准库函数的理解与使用&#xff0c;搭建一个框架便于快速开发 目录 前言 测量电平时间思路 配置中断 中断服务函数 捕获完成判断 代码示例 IC.h IC.c main.c 代码参考 前言 阅读本篇博客需了解定时器时基单元&#xff0c;更新中断和输入捕获 定时…

UWB定位系统在智能制造中的应用实践

UWB(Ultra-Wideband&#xff0c;超宽带)定位系统在智能制造中的应用实践已经取得了显著成效。以下是对其应用实践的详细阐述&#xff1a; 一、高精度定位与实时监控 高精度定位&#xff1a;UWB技术以其厘米级甚至毫米级的定位精度&#xff0c;远超传统的GPS和Wi-Fi等定位技术&a…

Endnote 插入参考文献 毕业论文

Endnote使用 1. 使用毕业论文参考文献格式1.1 GBT7714下载1.2 style导入1.3 选择GBT7714 2. 修改参考文献与编号之间的间隔2.1 点击三角2.2 修改Hanging 3. 将引用编号修改为右上角小字3.1 进入Endnote软件&#xff0c;点击Edit-->Output style-->Edit"Chinese Std …

【小鹏汽车用户平台-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

计算机网络408考研 2022

https://zhuanlan.zhihu.com/p/695446866 1 1 1SDN代表软件定义网络。它是一种网络架构&#xff0c;旨在通过将网络控制平面从数据转发平面分离出来&#xff0c;从而实现网络的灵活性和可编程性。在SDN中&#xff0c;网络管理员可以通过集中式控制器 来动态管理网络流量&…

了解Redis集群概念,集群如何选举主节点

请给胡广一个免费的三连吗&#xff1f;感谢&#xff01; 1. Redis集群 1.1 集群概念 Redis主从架构和Redis集群架构是两种不同的概念&#xff0c;大家刚接触Redis时经常弄混淆。胡广给大家贴下Redis官网对两者的解释。 &#xff08;1&#xff09;Redis主从架构 Redis主从实…

SpringBatch

Spring Batch Job instance(作业实例) 当作业运行时&#xff0c;会创建一个Job Instance(作业实例)&#xff0c;它代表作业的一次逻辑运行&#xff0c;可通过作业名称与作业标识参数进行区分。 比如一个业务需求&#xff1a; 每天定期数据同步&#xff0c;作业名称-daily-sync-…

基于SpringBoot+Vue的考务管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的考务管理…