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

目录

应用前景

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 = Truesafety_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 = Falsesafety_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, drawingif event == cv2.EVENT_LBUTTONDOWN:  # 开始绘制drawing = Truesafety_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 = Falsesafety_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:breakcv2.imshow('Draw Safety Zone', frame)if safety_zone and len(safety_zone) == 2:break  # 已绘制完成if cv2.waitKey(1) & 0xFF == ord('q'):  # 按 'q' 键退出breakcv2.destroyWindow('Draw Safety Zone')# 开始处理视频帧,进行人类检测和区域入侵检测
while True:ret, frame = cap.read()if not ret:breakheight, width, channels = frame.shapeblob = 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 // 2center_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'):breakcap.release()
cv2.destroyAllWindows()

95a36b22051e459d8005b5d1fe82e146.jpeg


 

效果展示

YOLOV3 安防警告,边界检测

 

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

 

 

 

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

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

相关文章

断点回归模型

断点回归&#xff08;Regression Discontinuity Design, RDD&#xff09;是一种准实验设计方法&#xff0c;用于评估政策或其他干预措施的效果。这种方法利用了一个清晰的阈值或“断点”&#xff0c;在这个阈值上&#xff0c;处理状态&#xff08;例如是否接受某种干预&#xf…

DevC++编译及使用Opencv

1.依赖 需要如下依赖&#xff1a; DevC11Opencv4.10.0CMake.exe 整个安装过程参考下面的文章&#xff1a;https://blog.csdn.net/weixin_41673576/article/details/108519841 这里总结一下遇到的问题。 2.问题 2.1 DevC安装路径 一定不要有空格&#xff01;&#xff01;否则…

tekton pipeline workspaces

tekton pipeline workspace是一种为执行中的管道及其任务提供可用的共享卷的方法。 在pipeline中定义worksapce作为共享卷传递给相关的task。在tekton中定义workspace的用途有以下几点: 存储输入和/或输出在task之间共享数据secret认证的挂载点ConfigMap中保存的配置的挂载点…

阿里中间件——diamond

一、前言 最近工作不忙闲来无事&#xff0c;仔细分析了公司整个项目架构&#xff0c;发现用到了很多阿里巴巴集团开源的框架&#xff0c;今天要介绍的是中间件diamond. 二、diamond学习笔记 1、diamond简介 diamond是一个管理持久配置&#xff08;持久配置是指配置数据会持久化…

全球热门剪辑软件大搜罗

如果你要为你的视频进行配音那肯定离不开音频剪辑软件&#xff0c;现在有不少音频剪辑软件免费版本就可以实现我们并不复杂的音频剪辑操作。这次我就给你分享几款能提高剪辑效率的音频剪辑工具。 1.福晰音频剪辑 链接直达>>https://www.foxitsoftware.cn/audio-clip/ …

研究生考试报名照片要求解读及被拒原因分析

全国硕士研究生考试报名近年来热度不减&#xff0c;一般在每年九月下旬开始&#xff0c;往往这个时候我们就要开始准备考研证件照了。但是有很多朋友手册考研可能会因为各种问题导致考研证件照不符合要求&#xff0c;那么今天报名电子照助手就带大家了解一下目前考研报名照片的…

参赛心得和思路分享:2021第二届云原生编程挑战赛2: 实现一个柔性集群调度机制

关联比赛: 2021第二届云原生编程挑战赛2&#xff1a;实现一个柔性集群调度机制 参赛心得 历时快两个月的第二届云原生编程挑战赛结束了&#xff0c;作为第一次参赛的萌新&#xff0c;拿下了28名的成绩&#xff0c;与第一名差了19万分&#xff0c;因为赛制时间太长&#xff0c…

计算机毕业设计选题推荐-作品分享交流平台(摄影、绘画、书法)-Java/Python项目实战(亮点:分享作品到微博、浏览历史、数据可视化)

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

局域网一套键鼠控制两台电脑(台式机和笔记本)

服务端&#xff08;有键盘和鼠标的电脑作为服务端&#xff09; 下载软件 分享文件&#xff1a;BarrierSetup-2.3.3.exe 链接&#xff1a;https://pan.xunlei.com/s/VO66rAZkzxTxVm-0QRCJ33mMA1?pwd4jde# 配置服务端 一&#xff0c; 二&#xff0c; 客户端屏幕名称一定要和…

yolo txt格式转coco json格式

yolo txt格式转coco json格式 **问题背景&#xff1a;**下载coco128数据集&#xff0c;使用yolov5模型进行推理并使用pycocotools.cocoeval 对预测结果进行精度计算。 coco128 下载地址&#xff1a;https://tianchi.aliyun.com/dataset/108650 解压缩cocozip之后可以看到如下的…

全面掌握信息架构:数字化转型的最佳实践与应用指南

在全球化和信息化高度发展的今天&#xff0c;企业正面临前所未有的挑战与机遇 数字化转型已成为各大企业保持竞争力的必由之路&#xff0c;而成功的数字化转型离不开稳健且灵活的信息架构。《信息架构&#xff1a;商业智能&分析与元数据管理参考模型》正是一本为企业提供全…

数学建模笔记—— 主成分分析(PCA)

数学建模笔记—— 主成分分析 主成分分析1. 基本原理1.1 主成分分析方法1.2 数据降维1.3 主成分分析原理1.4 主成分分析思想 2. PCA的计算步骤3. 典型例题4. 主成分分析说明5. python代码实现 主成分分析 1. 基本原理 在实际问题研究中,多变量问题是经常会遇到的。变量太多,无…

Java中的类加载与卸载机制详解

在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;类加载和类卸载机制是Java运行时环境的重要组成部分。理解类的加载与卸载不仅有助于深入掌握JVM的运行原理&#xff0c;还可以帮助开发者优化程序性能&#xff0c;特别是在内存管理和应用程序生命周期管理中起到关键作用…

《零散知识点 · Kafka 知识拓展》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

基于单片机的人脸识别的智能门禁系统设计

文章目录 前言资料获取设计介绍功能介绍设计清单核心代码具体实现截图参考文献设计获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等…

教师节特辑:AI绘制的卡通人物,致敬最可爱的人‍

【编号&#xff1a;9】教师节到了&#xff0c;今天我要分享一组由AI绘制的教师节主题卡通人物插画&#xff0c;每一幅都充满了对老师的敬意和爱戴。让我们一起用这些可爱的卡通形象&#xff0c;向辛勤的园丁们致敬&#xff01; &#x1f393;【教师形象】 这…

并发编程 - NSThread

引言 关于并发编程&#xff0c;我们在前面的博客中已经介绍过了GCD和NSOperation&NSOperationQueue。这两种方案足以覆盖大多数开发场景。然而&#xff0c;理解NSThread仍然是有必要的。虽然它在现代开发中使用较少&#xff0c;但对于理解底层线程管理和并发编程的基础&am…

量化交易backtrader实践(一)_数据获取篇(2)_tushare与akshare

上一节回顾 在上一节中&#xff0c;从股票的基本功能和主要数据进行小结&#xff0c;明确了进行backtrader回测所需要的数据&#xff0c;并且学习了backtrader的数据来源以及PandasData的格式要求&#xff0c;已经做到假设拿到.txt或.csv文件后&#xff0c;能把里面的股票基本…

赎金信--力扣383

赎金信 题目思路一方法一&#xff1a;哈希表思路二方法二 数组 题目 思路一 我们使用哈希表map的思路&#xff0c;A能不能由B组成&#xff0c;说明B包含的元素个数要大于等于A。 所以我们先利用map的key和value分别对magazine中的出现的字符以及出现的次数存储起来。 然后我们…

【射频通信电子线路基础第三讲】射频网络与阻抗匹配包括射频电路与网络、二端口射频网络参数,阻抗匹配解析法

一、射频电路与网络 1、物理等效电路与网络等效电路 &#xff08;1&#xff09;物理等效电路&#xff1a;是基于电流电压的等效电路&#xff0c;采用集总参数&#xff0c;反应电路内部的原理 &#xff08;2&#xff09;网络等效电路&#xff1a;是基于功率的等效电路&#x…