当前位置: 首页 > news >正文

基于yolov5-v11和deepsort的行人入侵检测系统 GUI部分使用pyqt5制作,包括数据库、多线程、自定义组件等 计算机视觉项目**,结合了**目标检测(YOLO)**、**目标跟踪(De

区域入侵- 基于yolov5-v11和deepsort的行人入侵检测系统

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

1

这是一个非常实用且功能完备的计算机视觉项目,结合了目标检测(YOLO)目标跟踪(DeepSort)以及桌面应用开发(PyQt5)

由于完整的项目代码量较大,我将为你提供构建该系统的核心代码框架,重点解决你最关心的DeepSort跟踪多边形区域入侵判断以及PyQt5界面交互这三个部分。

1. 核心逻辑:入侵检测与DeepSort集成

这部分代码负责处理视频帧,进行目标检测、跟踪,并判断目标是否进入禁行区域。

# core_detector.pyimporttorchimportcv2importnumpyasnpfromdeep_sort_realtime.deepsort_trackerimportDeepSort# 需安装 deep-sort-realtimefromutils.generalimportnon_max_suppression,scale_coordsfromutils.torch_utilsimportselect_deviceclassIntrusionDetector:def__init__(self,weights='yolov5s.pt',device='cpu'):self.device=select_device(device)self.model=torch.load(weights,map_location=self.device)['model'].float().fuse().eval()self.tracker=DeepSort(max_age=30)self.polygon_points=[]# 存储禁行区域的多边形点 [(x1,y1), (x2,y2)...]defset_roi(self,points):"""设置禁行区域"""self.polygon_points=pointsdefdetect_and_track(self,frame):img=frame.copy()# 1. 预处理与推理 (简化版)img=img[:,:,::-1].transpose(2,0,1)# BGR to RGB, to 3x416x416img=np.ascontiguousarray(img)img=torch.from_numpy(img).to(self.device)img=img.float()/255.0# 归一化ifimg.ndimension()==3:img=img.unsqueeze(0)# 推理pred=self.model(img)[0]pred=non_max_suppression(pred,conf_thres=0.4,iou_thres=0.5,classes=[0])# 只检测人(class 0)detections=[]im0=frame.copy()# 2. 处理检测结果fori,detinenumerate(pred):iflen(det):det[:,:4]=scale_coords(img.shape[2:],det[:,:4],im0.shape).round()for*xyxy,conf,clsindet:# 转换为 DeepSort 所需的格式detections.append(([xyxy[0].item(),xyxy[1].item(),xyxy[2].item()-xyxy[0].item(),xyxy[2].item()-xyxy[1].item()],conf.item(),'person'))# 3. 更新 DeepSort 跟踪器outputs=self.tracker.update_tracks(detections,frame=im0)intrude_count=0results=[]# 4. 遍历跟踪结果并判断入侵fortrackinoutputs:ifnottrack.is_confirmed():continuetrack_id=track.track_id ltrb=track.to_ltrb()# 左上右下坐标x1,y1,x2,y2=int(ltrb[0]),int(ltrb[1]),int(ltrb[2]),int(ltrb[3])center_x,center_y=int((x1+x2)/2),int((y1+y2)/2)# 使用中心点判断# 绘制边框cv2.rectangle(im0,(x1,y1),(x2,y2),(0,255,0),2)cv2.putText(im0,f'ID-{track_id}',(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,255,0),2)# 判断是否在多边形内is_inside=Falseiflen(self.polygon_points)>2:# cv2.pointPolygonTest 返回 >0 表示在内部dist=cv2.pointPolygonTest(np.array(self.polygon_points,np.int32),(center_x,center_y),False)ifdist>=0:is_inside=Trueintrude_count+=1# 绘制红色框表示入侵cv2.rectangle(im0,(x1,y1),(x2,y2),(0,0,255),3)results.append({"id":track_id,"bbox":(x1,y1,x2,y2),"is_intruding":is_inside})# 5. 绘制多边形区域iflen(self.polygon_points)>2:cv2.polylines(im0,[np.array(self.polygon_points,np.int32)],True,(0,0,255),2)returnim0,results,intrude_count

2. PyQt5 界面与交互 (main_window.py)

这部分负责显示视频、处理鼠标绘制多边形以及报警逻辑。

# main_window.pyimportsysimportcv2fromPyQt5.QtWidgetsimportQMainWindow,QApplication,QLabel,QMessageBox,QPushButtonfromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQTimer,Qt,pyqtSignal,QThreadfromcore_detectorimportIntrusionDetectorclassVideoThread(QThread):change_pixmap_signal=pyqtSignal(np.ndarray,int)# 发送图像和入侵人数def__init__(self):super().__init__()self.running=Trueself.detector=IntrusionDetector(weights='yolov5s.pt')self.cap=cv2.VideoCapture(0)# 打开摄像头defrun(self):whileself.running:ret,frame=self.cap.read()ifret:# 进行入侵检测processed_frame,_,count=self.detector.detect_and_track(frame)self.change_pixmap_signal.emit(processed_frame,count)else:breakdefstop(self):self.running=Falseself.cap.release()classMainWindow(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle("行人入侵智能检测系统")self.setGeometry(100,100,1000,600)# UI 组件self.image_label=QLabel(self)self.image_label.resize(800,600)self.alert_btn=QPushButton("报警设置",self)# 鼠标绘制变量self.drawing=Falseself.polygon_points=[]# 线程self.thread=VideoThread()self.thread.change_pixmap_signal.connect(self.update_image)self.thread.start()defupdate_image(self,cv_img,intrude_count):"""更新界面图像"""qt_img=self.convert_cv_qt(cv_img)self.image_label.setPixmap(qt_img)# 简单的弹窗报警逻辑(实际项目中应增加防抖动/定时器限制)ifintrude_count>0:self.image_label.setStyleSheet("border: 3px solid red;")else:self.image_label.setStyleSheet("border: none;")defconvert_cv_qt(self,cv_img):"""将 OpenCV 图像转换为 QPixmap"""rgb_image=cv2.cvtColor(cv_img,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)returnQPixmap.fromImage(convert_to_Qt_format)defmousePressEvent(self,event):"""鼠标点击绘制多边形"""ifevent.button()==Qt.LeftButton:x,y=event.x(),event.y()# 假设左侧是控制面板,右侧是视频区,需做坐标转换ifx>200:self.polygon_points.append((x,y))# 这里需要调用 detector.set_roi 更新区域# self.thread.detector.set_roi(self.polygon_points)defcloseEvent(self,event):self.thread.stop()event.accept()if__name__=="__main__":app=QApplication(sys.argv)window=MainWindow()window.show()sys.exit(app.exec_())

3. 项目构建步骤

  1. 环境配置:按照图2所示,先安装 Miniconda,创建虚拟环境,然后安装 PyTorch(推荐 GPU 版本)和 PyQt5。
  2. 模型准备:下载预训练的yolov5s.pt或自行训练针对行人的模型。
  3. DeepSort 集成:安装deep-sort-realtime库,它能更方便地与 NumPy 数组配合使用。
  4. UI 设计:使用 Qt Designer 设计左侧菜单栏和右侧视频显示区域。
  5. 逻辑连接:将上述core_detector.py的逻辑嵌入到 PyQt 的线程中,确保视频流流畅播放不卡顿。

这套代码框架涵盖了检测、跟踪、区域判断、UI 显示的核心流程,非常适合作为大学生或研究生的毕设/比赛项目基础。

http://www.jsqmd.com/news/688112/

相关文章:

  • 从‘同源策略’到CORS:用故事和漫画看懂浏览器安全的前世今生
  • 国产PCB软件选型指南:2026设计仿真一体化解决方案推荐 - 品牌2026
  • 理光喷头16H组合的隐藏玩法:一个喷车板如何实现双面打印、专色和PRN切换?
  • 保姆级教程:手把手教你用OpenCV模板匹配,打造高精度硬币分类器
  • 2026最新成像亮色度计生产商推荐!广东优质权威榜单发布,实力靠谱东莞成像亮色度计生产商值得选 - 十大品牌榜
  • 别再为ModuleNotFoundError发愁了!手把手教你搞定Python模块导入的5个核心问题
  • 北京国际学校2026年4月综合实力排名:师资、课程、升学三维对标 - 速递信息
  • 南昌拓拆建筑拆除工程:专业的微挖机拆除哪家好 - LYL仔仔
  • 打工人要求的小程序怎么制作?(品牌展示、教育、实体店、商城类通用教程) - 维双云小凡
  • Windows系统优化神器WinUtil:新手也能玩转的终极管理工具
  • 2026年日本九州再生医疗机构选择指南:技术实力与服务适配性全景解析 - 商业小白条
  • 长沙假发定制哪家最好:长沙假发定制十大品牌典范——发魔丝假发
  • 如何从Word文档中找回丢失的文献引用?Reference Extractor拯救你的学术研究
  • 2026年滨海新区装修公司推荐TOP10出炉,本地业主避坑必看 - 品牌智鉴榜
  • 2026年镭雕母粒厂家深度测评:如何为你的塑料加工匹配最佳方案? - 速递信息
  • SCMP总证书怎么拿?3+3模式详解 - 众智商学院官方
  • 深耕锡业回收 践行绿色使命——亿万万锡业以诚信专业赋能循环经济发展 - 速递信息
  • [ABAP]MIRO屏幕增强实战:适配金税发票字段扩展
  • 2026最新干锅美食店/供应商/商家推荐!贵州优质权威榜单发布,口碑绝佳贵阳息烽等地餐饮选购指南 - 十大品牌榜
  • 掌握高效应用管理:深度探索雹(Hail)的Android应用冻结技术
  • 2026最新起重机/集装箱起重机/门式起重机/无人起重机/非标起重机企业推荐!国内优质权威榜单发布,口碑出众河南等地企业值得信赖 - 十大品牌榜
  • VideoDownloadHelper:智能网页视频解析与下载的Chrome扩展解决方案
  • 别再纠结两个点了!UWB三球定位实战:用DW1000和第四个基站搞定无人机精准定位
  • 别再让扫描仪乱开Photoshop了!手把手教你用佳能MF Scan Utility搞定按钮绑定
  • 一键下载网页视频:Video Download Helper 高效实用指南
  • 2026年工业机器人稳增长,隐形潜力股挖掘 - 品牌2026
  • 2026年安阳搬家公司与长途搬家服务深度横评:如何避开价格陷阱找到专业团队 - 优质企业观察收录
  • 本地知识库:本地大语言模型+本地embedding模型
  • 缠论分析新利器:如何用开源插件让复杂走势一目了然?
  • 2026年柔性手指夹爪供应商推荐:适配多场景的靠谱厂商 - 品牌2026