智慧安防检测红外多类别无人机目标检测数据集YOLOv11n红外无人机检测、低空安防、无人机分类、红外目标检测、反无人机监测固定翼无人机检测、直升机无人机识别、夜间飞行器检测、PyQt5安防检测界面
智慧安防检测红外多类别无人机目标检测数据集6271张yolovoccoco三种标注方式图像尺寸:640*640类别数量:2类训练集图像数量:4390; 验证集图像数量:1255 测试集图像数量:626类别名称: 每一类图像数 每一类标注数aircraft‑type_uav-固定翼无人机592,592helicopter‑type_uav-直升机式无人机4162,4191image num: 6271一、数据集信息表格1.1 基础信息项目详情数据集名称红外多类别无人机目标检测数据集总图像数量6271 张图像尺寸640×640标注格式YOLO、VOC、COCO 三格式类别总数2 类训练集4390 张验证集1255 张测试集626 张训练模型YOLOv11n训练轮次80 epoch1.2 类别标注明细序号英文类别中文类别含该类别图像数标注框总数0aircraft-type_uav固定翼无人机5925921helicopter-type_uav直升机式无人机416241911.3 YOLO 类别列表names[aircraft-type_uav,helicopter-type_uav]模型代码采用 YOLOv11n 网络训练训练轮次80 个 epoch提供全部训练 测试源代码训练精度 mAP 效果如图所示PyQt5 界面功能界面使用 PyQt5 开发提供全部源码.ui、.qrc、.py 及图标文件支持图片检测、视频检测、摄像头实时检测界面实时显示目标位置、目标总数、置信度等信息支持检测结果保存导出操作简单直观无需命令行二、应用场景低空安防预警夜间、复杂能见度环境下识别两类无人机实现空域管控与反制。红外监控系统厂区、园区、边境、机场等区域全天候红外视频监测飞行器。算法研发红外图像、小目标、夜间目标检测模型训练、科研与竞赛。边防/安防设备集成至红外摄像设备离线/在线实时检测、分类无人机类型。桌面检测系统搭配PyQt界面批量解析红外影像、保存检测结果便于数据分析。三、YOLOv11n 训练 测试代码3.1 环境依赖安装pipinstallultralytics torch opencv-python PyQt5 numpy3.2 数据集配置文件ir_uav.yamlpath:./ir_uav_datasettrain:images/trainval:images/valtest:images/testnc:2names:0:aircraft-type_uav1:helicopter-type_uav3.3 数据集目录结构ir_uav_dataset/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ ├── labels/ # YOLO txt 标注 │ ├── train/ │ ├── val/ │ └── test/ ├── voc_annotations/ # VOC xml 标注 ├── coco_annotations/# COCO json 标注 └── ir_uav.yaml3.4 训练代码train_ir_uav.pyfromultralyticsimportYOLOdeftrain_uav():modelYOLO(yolov11n.yaml)model.train(datair_uav.yaml,epochs80,imgsz640,batch16,devicecpu,# 有GPU改为 device0workers4,patience15,ampTrue,mosaic1.0,projectruns/train,nameir_uav_det,exist_okTrue)print(训练完成权重路径runs/train/ir_uav_det/weights)if__name____main__:train_uav()3.5 推理测试代码test_ir_uav.pyfromultralyticsimportYOLO modelYOLO(runs/train/ir_uav_det/weights/best.pt)if__name____main__:# 单张图片检测resmodel(test.jpg,saveTrue,conf0.25)# 批量图片检测# res model(./test_imgs/, saveTrue, conf0.25)# 视频检测# res model(test.mp4, saveTrue, conf0.25)# 摄像头实时检测# res model(0, saveTrue, conf0.25)print(推理测试完成)四、PyQt5 可视化界面完整源码uav_ui.pyimportsysimportcv2importosfromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QPushButton,QLabel,QFileDialog,QTextEdit,QVBoxLayout,QWidget,QHBoxLayout)fromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQt,QThread,pyqtSignalfromultralyticsimportYOLOclassDetectThread(QThread):frame_signalpyqtSignal(object)info_signalpyqtSignal(str)def__init__(self,model,source,save_path):super().__init__()self.modelmodel self.sourcesource self.save_pathsave_path self.runningTruedefrun(self):os.makedirs(self.save_path,exist_okTrue)capcv2.VideoCapture(self.source)idx0whileself.running:ret,framecap.read()ifnotret:breakresultsself.model(frame,conf0.25)draw_frameresults[0].plot()totallen(results[0].boxes)cls_count{}conf_list[]forboxinresults[0].boxes:cidint(box.cls[0])cnameself.model.names[cid]confround(float(box.conf[0]),2)cls_count[cname]cls_count.get(cname,0)1conf_list.append(str(conf))infof目标总数{total}\n类别统计{cls_count}\n置信度{conf_list}self.frame_signal.emit(draw_frame)self.info_signal.emit(info)cv2.imwrite(f{self.save_path}/res_{idx}.jpg,draw_frame)idx1cap.release()defstop_task(self):self.runningFalseclassUavDetectUI(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle(红外无人机检测系统)self.resize(1280,800)self.modelYOLO(runs/train/ir_uav_det/weights/best.pt)self.work_threadNoneself.result_dir./detect_resultmain_widgetQWidget()self.setCentralWidget(main_widget)main_layoutQHBoxLayout(main_widget)# 图像显示区self.display_labelQLabel()self.display_label.setStyleSheet(background:#111;)self.display_label.setAlignment(Qt.AlignCenter)main_layout.addWidget(self.display_label,3)# 控制面板ctrl_widgetQWidget()ctrl_layoutQVBoxLayout(ctrl_widget)self.btn_imgQPushButton(图片检测)self.btn_videoQPushButton(视频检测)self.btn_cameraQPushButton(摄像头检测)self.btn_stopQPushButton(停止检测)self.log_editQTextEdit()self.log_edit.setReadOnly(True)self.btn_img.clicked.connect(self.detect_image)self.btn_video.clicked.connect(self.detect_video)self.btn_camera.clicked.connect(self.detect_camera)self.btn_stop.clicked.connect(self.stop_detect)ctrl_layout.addWidget(self.btn_img)ctrl_layout.addWidget(self.btn_video)ctrl_layout.addWidget(self.btn_camera)ctrl_layout.addWidget(self.btn_stop)ctrl_layout.addWidget(QLabel(检测日志))ctrl_layout.addWidget(self.log_edit)main_layout.addWidget(ctrl_widget,1)defshow_frame(self,frame):rgbcv2.cvtColor(frame,cv2.COLOR_BGR2RGB)h,w,chrgb.shape bytes_linech*w qimgQImage(rgb.data,w,h,bytes_line,QImage.Format_RGB888)self.display_label.setPixmap(QPixmap.fromImage(qimg).scaled(self.display_label.size(),Qt.KeepAspectRatio))defappend_log(self,text):self.log_edit.append(text)defstart_stream(self,source):self.stop_detect()self.work_threadDetectThread(self.model,source,self.result_dir)self.work_thread.frame_signal.connect(self.show_frame)self.work_thread.info_signal.connect(self.append_log)self.work_thread.start()defdetect_image(self):path,_QFileDialog.getOpenFileName(self,选择图片,,Image(*.jpg *.png *.jpeg))ifnotpath:returnimgcv2.imread(path)resself.model(img,conf0.25)draw_imgres[0].plot()self.show_frame(draw_img)totallen(res[0].boxes)cls_d{}confs[]forboxinres[0].boxes:cnself.model.names[int(box.cls[0])]cls_d[cn]cls_d.get(cn,0)1confs.append(f{float(box.conf[0]):.2f})logf图片检测完成\n目标总数{total}\n类别{cls_d}\n置信度{confs}self.append_log(log)os.makedirs(self.result_dir,exist_okTrue)cv2.imwrite(f{self.result_dir}/img_result.jpg,draw_img)defdetect_video(self):path,_QFileDialog.getOpenFileName(self,选择视频,,Video(*.mp4 *.avi))ifpath:self.start_stream(path)defdetect_camera(self):self.start_stream(0)defstop_detect(self):ifself.work_threadandself.work_thread.isRunning():self.work_thread.stop_task()self.work_thread.quit()self.work_thread.wait()defcloseEvent(self,event):self.stop_detect()event.accept()if__name____main__:appQApplication(sys.argv)winUavDetectUI()win.show()sys.exit(app.exec_())