@toc
<font size=6 color='red' padding=5>VX:A1397852386</font >
<font size=6 color='red' padding=4>代码量:超过3000行</font >
<font size=5 color='orange' padding=4>最新代码加入本机摄像头内容识别,欢迎了解!</font >
<font size=5 color='blue' padding=4>本系统使用DeepSort对目标进行追踪,支持ROI区域告警,日志导出、加入了登录系统,欢迎了解!</font >
本次使用PyQt5+DeepSort实现了一个智能人员入侵检测系统,系统包括多个区域支持ROI感兴趣区域标注告警,支持展示区域内标签显隐控制,自动统计全部目标以及ROI区域内目标,支持数据导出、入侵人员照片查看,动态阈值调整。
PyQt5 是一套用于创建跨平台桌面应用程序的 Python GUI 工具包,它是 Qt 应用框架的 Python 绑定。通过 PyQt5,开发者可以使用 Python 编写具有现代图形界面的应用程序,支持丰富的控件、信号与槽机制、窗口管理、事件处理等功能。它兼容主流操作系统(如 Windows、macOS 和 Linux),适用于开发各种规模的桌面软件,常与 Qt Designer 配合使用以加快开发效率。
DeepSort(Deep Simple Online and Realtime Tracking)是一种基于深度学习的多目标跟踪算法,它在原始 SORT(Simple Online and Realtime Tracking)算法的基础上引入了外观特征提取器,通过结合目标的运动信息(卡尔曼滤波)和外观特征(由深度神经网络提取)来进行数据关联,从而在遮挡、目标重叠等复杂场景中实现更稳健的跟踪。DeepSort 通常与目标检测器(如 YOLO)结合使用,广泛应用于视频监控、行为识别等实际场景中。
卡尔曼滤波(Kalman Filter)是一种基于线性系统状态空间模型的递归估计算法,广泛用于对动态系统的状态进行预测和修正。它通过结合系统的预测模型和带噪声的观测数据,在每一步动态更新状态估计,从而实现对目标位置、速度等变量的高精度跟踪。卡尔曼滤波具有计算效率高、实时性强的优点,广泛应用于导航、目标跟踪、控制系统和金融预测等领域。
在这里插入图片描述
YOLOv8(You Only Look Once version 8)是由 Ultralytics 推出的最新一代实时目标检测模型,属于 YOLO 系列的改进版本。相比前代模型,YOLOv8 在精度、速度和灵活性上都有显著提升,支持目标检测、图像分割、姿态估计等多任务处理。它采用了更加高效的网络结构和训练策略,并提供开箱即用的 Python 接口和命令行工具,适用于边缘设备和云端部署,广泛应用于安防监控、自动驾驶、工业检测等场景。
在这里插入图片描述
SQLite3 是一个轻量级、嵌入式的关系型数据库管理系统,遵循ACID事务规范,使用文件作为数据库存储形式,具有零配置、无需服务器的特点。它被广泛应用于移动设备、桌面软件、嵌入式系统和小型网站等场景中,特别适合对资源占用要求较低、部署简便的本地数据存储需求。在 Python 中,sqlite3 模块作为标准库提供,允许开发者方便地在应用中进行数据库操作,如创建表、插入数据、执行查询等。
在这里插入图片描述
PyQt5 的多线程通常通过 QThread 类实现,它允许在 GUI 程序中运行耗时的操作而不阻塞主线程(即界面线程),从而保持界面响应。使用 PyQt5 的多线程方法通常有两种方式:继承 QThread 或使用 QRunnable 搭配 QThreadPool。推荐方式是将耗时任务写在一个独立的工作对象中,并通过 moveToThread() 将其移到子线程中运行,同时使用信号(pyqtSignal)与主线程通信。这种方式更加安全、结构清晰,适合复杂项目的线程管理。
在这里插入图片描述
入侵人员检测是指通过监控系统(如视频监控、红外传感器、雷达等)对特定区域进行实时监测,自动识别和判断是否有未经授权的人员进入。该技术广泛应用于安防领域,利用图像识别、行为分析等算法,在检测到异常入侵行为时,及时发出警报或联动安保措施,提高区域安全性和响应效率。
在这里插入图片描述
ROI(Region of Interest,感兴趣区域)是指在图像或视频中指定的特定区域,用于重点处理或分析。在图像处理和计算机视觉中,ROI 可以帮助算法聚焦于关键部分,提高处理效率和准确性。例如,在人脸识别中,ROI 可能仅为图像中的人脸区域,从而避免对背景进行无用计算。通过设定 ROI,可以节省计算资源,提升系统性能。
射线法是一种用于计算几何的经典算法,主要用于判断点与多边形的位置关系(如点在内部、外部或边界上)。其核心思想是:从该点引一条水平向右的无限长射线,统计射线与多边形边界的有效相交次数。若交点数为奇数,则点在多边形内部;若为偶数(包括零),则在外部。算法需处理边界重合、顶点相交等特殊情况,时间复杂度为O(n),适用于任意简单或复杂多边形。
软件启动后首先进入登录页面,用户需要输入正确的用户名和密码才能使用本系统的正式功能,登录页面整体采用了垂直布局,局部采用了水平布局,登录界面简约不简单,登录功能后端采用SQLite3本地文件型数据库存储用户信息,每次登录都是通过查库进行验证的,实现了流程标准化。
没有账号的用户需要进行注册,注册操作流程十分简单,用户点击登录界面的注册按钮就跳转到了注册窗口,用户需要输入自定义的用户名和两次匹配的密码才能完成登录,值得一提的是,成功注册的用户软件会自动填写用户名和密码到登录界面,实现了登录流程路径的简化。
成功登陆的用户直接跳转至主界面,主界面右上角会展示当前用户的用户名,单击自己的用户名会弹出二级菜单,菜单包括两个项目:退出登录、退出系统。我们软件的主界面左上角是当前日期时间以及星期、紧挨着的是当前系统的CPU、内存占用情况,这些信息都是1秒刷新一次的。
在这面板用户可以设置要检测的目标,我们系统是支持多源输入的,输入的数据类型可以是:图片、视频、视频流地址,另外数据输入下方是模型选择,用户可以选择适合当前系统的模型,我们系统内置了YOLOv8n.pt模型,模型位于data/models/目录下,大家可以将自己的模型放置到这个位置,系统会自动识别可以使用的模型,展示到界面上以供用户选择。
在这个区域用户可以实时调整当前YOLO识别引擎的重叠度(IOU)以及置信度(Conf),通过动态调整这两个值用户能找到适合目标检测的值,我们内置了两个组件分别是spinBox以及slider,用户可以点击spinBox微调或者拖动slider调整对应的数值,两个组件的数值是关联的。
在这个区域用户可以控制是否进行告警,系统的告警逻辑是:(前置条件:用户要设置ROI区域)-开启告警-ROI区域有人员侵入-发出语音告警消息提示,值得一提的是本系统支持动态调整告警内容,具体的操作流程是:在告警开启情况下,点击蓝色齿轮按钮,在弹出的对话框中输入告警内容,当满足告警条件时,就会使用用户指定的告警内容。
告警的流程图见下图:
这个区域是本系统的核心,用户可以在操作台直接与系统进行交互,交互的逻辑就是直接点击按钮进行操作,我们采用了不同颜色和不同类型的按钮实现了目标的功能,比如“导出数据”这个按钮,用户点击后可以选择导出到CSV、Excel、TXT类型的文件里,系统人性化的选择了桌面作为默认路径并且自动命名了目标文件,当用户成功导出后,系统还会询问用户是否打开,用户选择“是”系统就会调用默认的打开方式打开导出的数据文件。
值得一提的是,我们的操作控制台下方设置了多达8个开关按钮用于用户直接和系统交互,开关默认都是打开的,即默认显示所有画面标注内容。
这里我们以检测目标视频为例,给大家演示一下具体核心显示区域的作用,我们在左侧“数据输入”选择打开视频,选择好之后系统会自动进行检测,我们在画面上画下ROI区域,然后停止检测,所有的检测结果以及计数统计信息就都展示到界面上了,在ROI区域的目标被判定为入侵人员,系统自动采用红色框来标注,否则就是一般人员,系统采用蓝框标注,每个目标都会被分配ID、系统自动标注目标类别、置信度。
在这个表格区域展示了所有入侵人员的图像以及ID,用户可以比对目标图像以及实时画面检测结果,鼠标放上去会有个发光的效果,表示用户正在和目标进行交互。
另外用户可以点击图像在本地图像查看器中查看目标图像,当然目标图像是临时生成的,所以在tmp目录下,只有点击了图像才会生成图像文件,这样做的目的是避免磁盘重复读写,只操作用户感兴趣的数据。
在这个区域实时展示当前的操作以及告警信息,系统采用不同的日志级别实时展示日志,具体来说是:一般信息采用蓝色、警告信息采用橘黄色、错误信息采用红色,每次产生告警信息时,都会展示具体的入侵人员数量,每次产生新的日志内容时,都会自动展示当前时间精确到秒。
我们用一张图展示当前系统的主要核心功能
本系统是根据“人员中心点是否在ROI区域判断人员是否入侵”
博主是在Windows电脑上使用Python3.8开发的本系统,建议大家使用的Python版本别太高。
其中项目依赖为:
PyQt5==5.15.11
PyQt5_sip==12.15.0
QtAwesome==1.3.1
torch==2.4.1
torchvision==0.19.1
Pillow==9.3.0
pyqtgraph===0.13.3
PyQtWebEngine==5.15.5
opencv-python==4.10.0.82
ultralytics==8.3.98
pyttsx3==2.71
我已经整理到了requirements.txt,大家直接使用命令pip install -r requirements.txt
即可一键安装项目依赖,其中的torch和torchvision只要匹配即可,不一定非要和博主开发环境的版本一致。
很多小伙伴担心拿到代码后项目看不懂,这个大家不必担心,我们采用文件+类名对相关功能进行了模块化定义,大家见名知意。
下图博主采用tree命令生成了文件、目录树
tree "D:\projects\gitee\2025\pyqt5-intrusion-detection" /f /a
D:\PROJECTS\GITEE\2025\PYQT5-INTRUSION-DETECTION
| .gitignore
| main.py(主程序入口)
| record.txt(项目开发记录)
| requirements.txt(项目依赖)
|
|
+---data(主要数据目录)
| +---database
| | data.db(系统数据库)
| |
| +---models(目标检测模型)
| | yolov8n.pt
| | yolov8s.pt
| |
| \---output
+---script(脚本)
| create_qrc.py(资源生成脚本)
|
+---src
| | __init__.py
| |
| +---conf
| | | style_conf.py(主要样式设置)
| | | system_conf.py(系统相关配置)
| | | __init__.py
| | |
| |
| +---deep_sort(deepSort依赖)
| | +---configs
| | | deep_sort.yaml
| | |
| | +---deep_sort
| | | | deep_sort.py
| | | | README.md
| | | | __init__.py
| | | |
| | | +---deep
| | | | | evaluate.py
| | | | | feature_extractor.py
| | | | | model.py
| | | | | original_model.py
| | | | | prepare_car.py
| | | | | prepare_person.py
| | | | | test.py
| | | | | train.jpg
| | | | | train.py
| | | | | __init__.py
| | | | |
| | | | +---checkpoint
| | | | | ckpt.t7
| | | | |
| | | |
| | | +---sort
| | | | | detection.py
| | | | | iou_matching.py
| | | | | kalman_filter.py
| | | | | linear_assignment.py
| | | | | nn_matching.py
| | | | | preprocessing.py
| | | | | track.py
| | | | | tracker.py
| | | | | __init__.py
| | | | |
| | |
| | \---utils
| | asserts.py
| | draw.py
| | evaluation.py
| | io.py
| | json_logger.py
| | log.py
| | parser.py
| | tools.py
| | __init__.py
| |
| +---engine(核心引擎)
| | | db_engine.py(数据库引擎)
| | | detect_engine.py(检测引擎)
| | | tts_engine.py(文字转语音引擎)
| | | __init__.py
| | |
| |
| +---resource(资源目录)
| | | resource.qrc(资源索引文件)
| | | resource_rc.py(资源数据文件)
| | | __init__.py
| | |
| | +---imgs
| | | bg.jpg
| | | bg2.png
| | | ic_monitor.png
| | | ic_monitor_black.png
| | | top.png
| | |
| |
| +---threads(核心线程)
| | | detect_thread.py(检测线程)
| | | signal_bus.py(信号总线)
| | | __init__.py
| | |
| |
| +---utils(核心工具)
| | | custom_utils.py(工具函数)
| | | roi_manager.py(感兴趣区域管理)
| | | user_manager.py(用户管理)
| | | __init__.py
| | |
| |
| +---widgets(核心界面、组件-PyQt5)
| | | base_widgets.py(基础组件类)
| | | custom_areas.py(自定义区域类)
| | | custom_panels.py(自定义面板类)
| | | custom_widgets.py(自定义组件类)
| | | main_page.py(主界面类)
| | | unique_widgets.py(特殊组件类)
| | | __init__.py
| | |
| |
|
\---videos(测试视频)
行人检测测试视频.mp4
如果觉得上面树太抽象,可以对照着文件目录树看下图
本次由浅入深地和大家分享了我使用PyQt5+DeepSort+YOLOv8开发的智能人员入侵检测系统,系统相当智能并且包括多个功能区域,支持登录注册功能,欢迎大家前来了解!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。