news 2026/4/22 22:20:25

基于yolov5-v11和deepsort的行人跌倒检测系统 GUI部分使用pyqt5,YOLOv5-v11 + DeepSORT + PyQt5跌倒检测识别系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于yolov5-v11和deepsort的行人跌倒检测系统 GUI部分使用pyqt5,YOLOv5-v11 + DeepSORT + PyQt5跌倒检测识别系统

智慧巡检-基于yolov5-v11和deepsort的行人跌倒检测系统

适用于大学生研究生相关项目、比赛以及界面展示

本项目GUI部分使用pyqt5制作,包括数据库、多线程、自定义组件等知识,亦可作为学习深度学习和pyqt5时的练手项目。功能以及特色如下:
1.系统带注册登录功能;
2.输入数据格式:图片、文件夹、视频以及支持摄像头的实时检测,并自动保存最终检测结果;
3.支持自定义绘制禁行区域;
4.支持语音、弹窗两种报警方式;
5.支持交并比和置信度的动态调节;
6.支持rtsp流检测;
7.提供详细的项目说明以及环境配置教程,即使是深度学习小白也能轻松跑通项目;
1

这是一套非常完整的行人跌倒检测系统设计方案。(YOLOv5-v11 + DeepSORT + PyQt5),这是一个典型的计算机视觉+GUI应用的全栈项目。

构建这个系统,其拆分为核心算法逻辑PyQt5界面架构功能模块实现三个部分,并提供详细的代码框架。


以上文字及代码仅供参考

第一部分:项目文件结构

建议按照以下结构组织代码,以便于管理和维护:

FallDetectionSystem/ ├── main.py # 程序入口 ├── ui_main.py # PyQt5 编译后的界面文件 ├── login.ui # Qt Designer设计的登录界面 ├── main_window.ui # Qt Designer设计的主界面 ├── utils/ │ ├── detector.py # YOLO + DeepSORT 核心检测逻辑 │ ├── database.py # 用户注册登录数据库操作 │ └── alarm.py # 语音播报和弹窗逻辑 ├── models/ │ ├── falldetect8.pt # YOLOv8 跌倒检测模型 │ └── deepsort_weights/ # DeepSORT 权重 └── resources/ └── icons.qrc # 图标资源

第二部分:核心算法逻辑 (YOLO + DeepSORT)

这部分是系统的“大脑”,负责视频流的读取、目标检测(YOLO)和轨迹追踪(DeepSORT)。

utils/detector.py

importcv2importtorchimportnumpyasnpfromdeep_sort_realtime.deepsort_trackerimportDeepSortclassFallDetector:def__init__(self,model_path='models/falldetect8.pt'):# 1. 加载YOLO模型self.model=torch.hub.load('ultralytics/yolov5','custom',path=model_path)# 2. 初始化DeepSORT追踪器self.tracker=DeepSort(max_age=30)# 3. 状态记录self.fall_status={}# 记录每个ID的状态 {id: is_falling}defdetect_and_track(self,frame):""" 输入: 原始视频帧 输出: 绘制了框和轨迹的帧, 统计信息 """# --- YOLO 检测 ---# model 推理results=self.model(frame)# 解析结果 (假设类别0是person/standing, 类别1是fall/down)detections=[]for*xyxy,conf,clsinresults.xyxy[0].cpu().numpy():x1,y1,x2,y2=map(int,xyxy)conf=float(conf)cls=int(cls)# 只处理人ifclsin[0,1]:# DeepSORT 需要 (left, top, width, height)detections.append(([x1,y1,x2-x1,y2-y1],conf,str(cls)))# --- DeepSORT 追踪 ---tracks=self.tracker.update_tracks(detections,frame=frame)fall_count=0# --- 绘制与逻辑判断 ---fortrackintracks:ifnottrack.is_confirmed():continuetrack_id=track.track_id ltrb=track.to_ltrb()# left, top, right, bottomx1,y1,x2,y2=map(int,ltrb)# 获取类别 (这里简化处理,实际需结合YOLO的分类结果)# 假设我们直接从YOLO结果里拿到了类别信息,这里演示绘图# 实际项目中需要将YOLO的cls传给DeepSORT或者在这里做匹配# 模拟跌倒逻辑 (实际应基于YOLO分类结果)# 这里假设 track.get_det_class() 返回类别is_fall=False# 绘制边界框color=(0,255,0)# 绿色:正常label=f'ID:{track_id}Standing'ifis_fall:color=(0,0,255)# 红色:跌倒label=f'ID:{track_id}FALLING'fall_count+=1self.fall_status[track_id]=Trueelse:self.fall_status[track_id]=Falsecv2.rectangle(frame,(x1,y1),(x2,y2),color,2)cv2.putText(frame,label,(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.9,color,2)returnframe,fall_count

第三部分:PyQt5 界面与多线程

为了防止界面卡顿,视频处理必须放在子线程中运行。

main.py

importsysimportcv2fromPyQt5.QtWidgetsimportQApplication,QMainWindow,QMessageBox,QFileDialogfromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQThread,pyqtSignal,Qtfromutils.detectorimportFallDetector# --- 工作线程 ---classVideoThread(QThread):change_pixmap_signal=pyqtSignal(QImage)alarm_signal=pyqtSignal(str)# 发送报警信号def__init__(self):super().__init__()self.running=Trueself.detector=FallDetector()self.source=0# 默认摄像头defrun(self):cap=cv2.VideoCapture(self.source)whileself.running:ret,frame=cap.read()ifret:# 检测处理processed_frame,fall_count=self.detector.detect_and_track(frame)# 格式转换 OpenCV(BGR) -> Qt(RGB)rgb_image=cv2.cvtColor(processed_frame,cv2.COLOR_BGR2RGB)h,w,ch=rgb_image.shape bytes_per_line=ch*w convert_to_Qt_format=QImage(rgb_image.data,w,h,bytes_per_line,QImage.Format_RGB888)p=convert_to_Qt_format.scaled(640,480,Qt.KeepAspectRatio)self.change_pixmap_signal.emit(p)# 报警逻辑iffall_count>0:self.alarm_signal.emit("检测到有人跌倒!")else:breakcap.release()defstop(self):self.running=Falseself.wait()# --- 主窗口 ---classMainWindow(QMainWindow):def__init__(self):super().__init__()# 这里应该加载你的 .ui 文件# self.ui = Ui_MainWindow()# self.ui.setupUi(self)self.setWindowTitle("基于深度学习的行人跌倒检测系统")self.setGeometry(100,100,1000,600)# 初始化线程self.thread=VideoThread()self.thread.change_pixmap_signal.connect(self.update_image)self.thread.alarm_signal.connect(self.show_alarm)# 模拟界面按钮连接 (需替换为实际控件名)# self.ui.start_btn.clicked.connect(self.start_video)# self.ui.stop_btn.clicked.connect(self.stop_video)self.thread.start()# 启动时自动开始defupdate_image(self,image):# 更新Label显示视频# self.ui.video_label.setPixmap(QPixmap.fromImage(image))passdefshow_alarm(self,msg):# 弹窗报警 (实际项目中建议加防抖,不要每一帧都弹)# QMessageBox.warning(self, "警告", msg)print(f"报警:{msg}")defcloseEvent(self,event):self.thread.stop()event.accept()if__name__=='__main__':app=QApplication(sys.argv)window=MainWindow()window.show()sys.exit(app.exec_())

第四部分:特色功能实现思路

1. 数据库 (注册/登录)

使用sqlite3是最轻量级的选择。

  • 表结构:CREATE TABLE users (id INTEGER PRIMARY KEY, username TEXT UNIQUE, password TEXT)
  • 逻辑: 在main.py启动前先弹出一个LoginDialog,查询数据库验证密码。
2. 绘制禁行区域 (ROI)
  • 原理: 在mousePressEvent中获取鼠标点击的坐标,保存在一个列表中。
  • 检测: 在detector.py中,计算目标中心点cx, cy是否在多边形区域内(使用cv2.pointPolygonTest)。如果在禁行区且检测到跌倒,则触发高级报警。
3. 动态调节参数 (NMS/Confidence)
  • 在 PyQt 中使用QSliderQDoubleSpinBox
  • 通过信号槽将值传递给FallDetector类。
  • 代码示例:self.detector.model.conf = self.ui.conf_slider.value()
4. 语音报警

使用PyQt5.QtMultimediapyttsx3

fromPyQt5.QtMultimediaimportQSound QSound.play("alarm.wav")

运行指南

  1. 环境安装:
    pipinstalltorch torchvision opencv-python PyQt5 ultralytics deep_sort_realtime
  2. 模型准备: 将训练好的falldetect8.pt放入models文件夹。
  3. 启动: 运行python main.py

这个框架涵盖了你描述的所有核心功能,你可以在此基础上完善 UI 细节和具体的业务逻辑。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 22:12:13

LabVIEW 强度图与强度图表

​LabVIEW 中强度图(Intensity Graph)与强度图表(Intensity Chart)均可接收二维数组作为输入,用于二维数据色彩可视化,二者核心差异体现在前面板运行行为上。强度图单次刷新、仅显示当前一组数据&#xff0…

作者头像 李华
网站建设 2026/4/22 22:03:12

计算机毕业设计:Python大盘行情与个股诊断预测系统 Flask框架 TensorFlow LSTM 数据分析 可视化 大数据 大模型(建议收藏)✅

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ > 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与…

作者头像 李华
网站建设 2026/4/22 22:03:10

备忘录:微软开源MarkItDown,万能文档转Markdown神器

MarkItDown(GitHub: microsoft/markitdown)是微软开源的 Python 万能文档→Markdown 转换引擎,专为 LLM / RAG 预处理设计。核心逻辑:统一接口 插件式转换器 流式处理 结构化 Markdown 输出。一、核心定位目标:把 P…

作者头像 李华
网站建设 2026/4/22 22:01:19

机器学习项目实战:避免十大常见陷阱的关键策略

1. 机器学习项目失败的十大隐形陷阱在过去的五年里,我参与过47个不同规模的机器学习项目,其中有12个最终没能投入生产环境。最令人沮丧的是,这些失败往往不是因为技术难题,而是源于一些看似简单却极易被忽视的错误。今天我要分享的…

作者头像 李华
网站建设 2026/4/22 21:59:32

Bili2text:当视频学习遇上文字效率的革命性解法

Bili2text:当视频学习遇上文字效率的革命性解法 【免费下载链接】bili2text Bilibili视频转文字,一步到位,输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 你是否曾在观看B站知识类视频时,为了记…

作者头像 李华