行业资讯
📅 2026/8/18 22:07:25
落石检测,危岩落石,YOLOv11,地质灾害,道路边坡落石,PyQt 可视化,山区道路灾害检测落石检测数据集
自然灾害类-落石检测数据集447张yolovoccoco标注方式图像尺寸:512*512类别数量:1类训练集图像数量:357; 验证集图像数量:67 测试集图像数量:23类别名称: 每一类图像数 每一类标注数fall_stone: 447,965image num: 447模型代码采用 YOLOv11n 网络训练训练轮次80 个 epoch全部训练 测试源代码训练精度 mAP 效果如图所示PyQt5 界面功能界面使用 PyQt5 开发提供全部源码.ui、.qrc、.py 及图标文件支持图片检测、视频检测、摄像头实时检测界面实时显示目标位置、目标总数、置信度等信息支持检测结果保存导出操作简单直观无需命令行附、配套文件全套完整完整数据集含原始图像、YOLO 格式 txt 标注、VOC 格式 xml 标注、yaml 配置文件模型程序文件训练代码 .py、训练好的模型权重 .ptQt 界面源码.ui、.qrc、.py 源码及配套图标资源程序运行说明文档程序运行步骤说明指导文档importcv2importnumpyasnpimportosdefremove_watermark_keep_box(img_path,out_path):imgcv2.imread(img_path)ifimgisNone:returnh,wimg.shape[:2]masknp.full((h,w),255,np.uint8)#保护黄绿色检测框不被抹除lower_greennp.array([0,160,0])upper_greennp.array([120,255,120])green_maskcv2.inRange(img,lower_green,upper_green)mask[green_mask0]0#保护蓝色检测框lower_bluenp.array([80,0,0])upper_bluenp.array([255,110,110])blue_maskcv2.inRange(img,lower_blue,upper_blue)mask[blue_mask0]0rescv2.inpaint(img,mask,3,cv2.INPAINT_TELEA)cv2.imwrite(out_path,res)if__name____main__:input_folder./source_imgoutput_folder./output_no_wmos.makedirs(output_folder,exist_okTrue)forfilenameinos.listdir(input_folder):iffilename.lower().endswith((.jpg,.png)):in_fileos.path.join(input_folder,filename)out_fileos.path.join(output_folder,filename)remove_watermark_keep_box(in_file,out_file)依赖pipinstallopencv-python numpy功能完整保留绿色、蓝色检测框与标签文字清除全屏半透明“闲鱼店铺深度学习master”水印。使用图片放入source_img文件夹运行代码无水印图片输出至output_no_wm。落石检测系统完整代码数据集yaml fallstone.yamlpath:./fall_stone_datasettrain:images/trainval:images/valtest:images/testnames:0:fall_stone训练脚本 train_fallstone.pyfromultralyticsimportYOLOif__name____main__:modelYOLO(yolo11n.pt)model.train(datafallstone.yaml,epochs80,imgsz640,batch8,workers2,project./runs/train,namefall_stone_yolo11n)PyQt5界面 fallstone_gui.py系统名称基于YOLOv11的落石检测系统importsysimportcv2importosfromultralyticsimportYOLOfromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QWidget,QPushButton,QFileDialog,QLabel,QTableWidget,QTableWidgetItem,QVBoxLayout,QHBoxLayout,QGroupBox,QMessageBox)fromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQt,QTimerclassFallStoneDetectWindow(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle(基于YOLOv11的落石检测系统)self.resize(1200,800)self.modelYOLO(./runs/train/fall_stone_yolo11n/weights/best.pt)self.camera_timerQTimer()self.camera_timer.timeout.connect(self.camera_frame)self.capNoneself.current_imgNoneself.ui_setup()defui_setup(self):centralQWidget()self.setCentralWidget(central)main_layoutQHBoxLayout(central)self.label_imgQLabel()self.label_img.setFixedSize(700,600)self.label_img.setStyleSheet(border:1px solid #999;)right_widgetQWidget()right_layoutQVBoxLayout(right_widget)group_fileQGroupBox(文件导入)file_layoutQVBoxLayout(group_file)self.btn_imgQPushButton(选择图片)self.btn_img.clicked.connect(self.detect_image)self.btn_videoQPushButton(选择视频)self.btn_video.clicked.connect(self.detect_video)self.btn_camQPushButton(打开摄像头)self.btn_cam.clicked.connect(self.open_camera)file_layout.addWidget(self.btn_img)file_layout.addWidget(self.btn_video)file_layout.addWidget(self.btn_cam)group_resultQGroupBox(检测结果)res_layoutQVBoxLayout(group_result)self.label_timeQLabel(用时0 s | 目标数目0)self.label_confQLabel(置信度0%)self.label_posQLabel(xmin:0 ymin:0 xmax:0 ymax:0)res_layout.addWidget(self.label_time)res_layout.addWidget(self.label_conf)res_layout.addWidget(self.label_pos)self.tableQTableWidget()self.table.setColumnCount(5)self.table.setHorizontalHeaderLabels([序号,文件路径,类别,置信度,坐标位置])btn_layoutQHBoxLayout()self.btn_saveQPushButton(保存结果)self.btn_save.clicked.connect(self.save_result)self.btn_exitQPushButton(退出)self.btn_exit.clicked.connect(self.close)btn_layout.addWidget(self.btn_save)btn_layout.addWidget(self.btn_exit)right_layout.addWidget(group_file)right_layout.addWidget(group_result)right_layout.addWidget(self.table)right_layout.addLayout(btn_layout)main_layout.addWidget(self.label_img)main_layout.addWidget(right_widget)defcv2qt(self,cv_img):rgbcv2.cvtColor(cv_img,cv2.COLOR_BGR2RGB)h,w,chrgb.shape bytes_per_linech*w qt_imgQImage(rgb.data,w,h,bytes_per_line,QImage.Format_RGB888)returnQPixmap.fromImage(qt_img)defdetect_image(self):filePath,_QFileDialog.getOpenFileName(filter图片(*.jpg *.png *.jpeg))ifnotfilePath:returnresself.model(filePath)[0]self.current_imgres.plot()pixself.cv2qt(self.current_img)self.label_img.setPixmap(pix.scaled(self.label_img.size(),Qt.KeepAspectRatio))boxesres.boxes numlen(boxes)self.label_time.setText(f用时{res.speed[inference]/1000:.3f}s | 目标数目{num})self.table.setRowCount(0)foridx,boxinenumerate(boxes):conffloat(box.conf[0])x1,y1,x2,y2map(int,box.xyxy[0])cls_nameself.model.names[int(box.cls[0])]self.table.insertRow(idx)self.table.setItem(idx,0,QTableWidgetItem(str(idx1)))self.table.setItem(idx,1,QTableWidgetItem(filePath))self.table.setItem(idx,2,QTableWidgetItem(cls_name))self.table.setItem(idx,3,QTableWidgetItem(f{conf*100:.2f}%))self.table.setItem(idx,4,QTableWidgetItem(f[{x1},{y1},{x2},{y2}]))self.label_conf.setText(f置信度{conf*100:.2f}%)self.label_pos.setText(fxmin:{x1}ymin:{y1}xmax:{x2}ymax:{y2})defdetect_video(self):filePath,_QFileDialog.getOpenFileName(filter视频(*.mp4 *.avi))ifnotfilePath:returnself.capcv2.VideoCapture(filePath)self.camera_timer.start(30)defopen_camera(self):self.capcv2.VideoCapture(0)self.camera_timer.start(30)defcamera_frame(self):ret,frameself.cap.read()ifnotret:self.camera_timer.stop()returnresself.model(frame)[0]out_frameres.plot()self.current_imgout_frame pixself.cv2qt(out_frame)self.label_img.setPixmap(pix.scaled(self.label_img.size(),Qt.KeepAspectRatio))defsave_result(self):ifself.current_imgisNone:QMessageBox.warning(self,提示,无检测图片)returnsave_path,_QFileDialog.getSaveFileName(filterjpg(*.jpg))ifsave_path:cv2.imwrite(save_path,self.current_img)QMessageBox.information(self,完成,保存成功)defcloseEvent(self,event):ifself.cap:self.cap.release()self.camera_timer.stop()if__name____main__:appQApplication(sys.argv)winFallStoneDetectWindow()win.show()sys.exit(app.exec_())关键词落石检测危岩落石YOLOv11地质灾害道路边坡落石PyQt可视化山区道路灾害检测应用场景1.山区公路、铁路边坡落石隐患识别2.无人机航拍地质灾害巡检3.汛期边坡危石灾害应急监测4.交通道路地质灾害预警科研5.山区道路安全防护检测实验