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

无人机红外数据集 深度学习框架 无人机高空红外检测系统pyqt5界面 无人机高空红外数据集 无人机高空红外行人车辆检测数据集

智慧巡检-无人机高空红外检测系统pyqt5界面

pyqt5可视化界面

数据集:无人机高空红外数据集】 2866张 5类
names:
0: Person
1: Car
2: Bicycle
3: OtherVehicle
4: DontCare

共2866张,(train:2008张,val:287张,test:571张标注文件为YOLO适用的txt格式或xml格式。可以直接用于模型训练。

该数据集包含从43470帧中提取的2898幅红外热图像,这些图像由无人机从不同场景(学校、停车场、道路、操场等)捕捉到,涵盖范围广泛,包括物体(人、自行车、汽车、其他车辆)、飞行高度数据(60至130米)、相机透视数据(30至90度)和日光强度(白天和晚上)

系统:
软件:Pycharm+Anaconda
环境:python=3.9 opencv PyQt5 torch1.9
文件:更换系统背景图说明 环境文件 UI文件 数据集yaml种类文件 模型训练文件 环境配置文档 测试图片、视频 训练脚本代码 测试代码 界面代码
功能:基于深度学习的行人与车辆识别检测系统 pygt界面,可检测图像、视频以及保存检测结果,可显示目标位置、置信度、检测时间目标数目。检测图片、视频等图像中的各目标数目;摄像头监控实时检测,便携展示、记录和保存;支持切换目标,各目标位置切换查看;提供数据集和训练代码可重新训练。

无人机高空红外目标检测系统(完整项目|含数据集+训练+PyQt5界面)


一、项目核心信息表

项目详情
项目名称无人机高空红外行人车辆检测系统
数据集规模2866张红外图像(train:2008/val:287/test:571)
检测类别5类:Person(人)、Car(汽车)、Bicycle(自行车)、OtherVehicle(其他车辆)、DontCare(忽略区域)
标注格式YOLO TXT 格式(兼容XML)
采集场景学校、停车场、道路、操场等,覆盖不同高度(60-130m)、角度(30-90°)、昼夜场景
开发环境Python 3.9 + PyTorch 1.9 + PyQt5 + OpenCV + Ultralytics YOLOv8
交付内容完整UI界面源码 + 训练/测试代码 + 数据集yaml配置 + 运行教程
核心功能图片/视频/摄像头检测、结果保存、目标信息可视化、数据集训练

二、项目文件结构

drone_infrared_detection/ ├── datasets/ # 无人机红外数据集 │ ├── images/ │ │ ├── train/ │ │ ├── val/ │ │ └── test/ │ ├── labels/ # YOLO格式标注 │ │ ├── train/ │ │ ├── val/ │ │ └── test/ │ └── drone.yaml # 数据集配置文件 ├── models/ # 训练好的权重(best.pt) ├── runs/ # 训练日志与结果 ├── save_data/ # 检测结果保存目录 ├── TestFiles/ # 测试图片/视频 ├── UIProgram/ # PyQt5界面文件(.ui/.qrc/背景图) ├── app_settings.json # 界面配置文件 ├── CameraTest.py # 摄像头测试脚本 ├── Config.py # 类别配置脚本 ├── detect_tools.py # 核心检测工具 ├── imgTest.py # 图片测试脚本 ├── installPackages.py # 环境安装脚本 ├── MainProgram.py # PyQt5主界面入口 ├── requirements.txt # 依赖列表 ├── train.py # 模型训练脚本 └── VideoTest.py # 视频测试脚本

三、环境配置

# 创建虚拟环境conda create-ndrone_infraredpython=3.9conda activate drone_infrared# 安装依赖pipinstalltorch==1.9.0torchvision==0.10.0torchaudio==0.10.0 pipinstallultralytics opencv-python pyqt5 numpy pillow

四、数据集配置文件drone.yaml

train:./datasets/images/trainval:./datasets/images/valtest:./datasets/images/testnc:5names:0:Person1:Car2:Bicycle3:OtherVehicle4:DontCare

五、模型训练代码train.py

fromultralyticsimportYOLOdefmain():# 加载YOLOv8预训练模型model=YOLO("yolov8n.pt")# 训练参数配置model.train(data="./datasets/drone.yaml",epochs=100,imgsz=640,batch=16,device=0,# CPU训练改为 device="cpu"workers=4,patience=15,project="drone_result",name="yolov8_drone",save=True,save_period=10)# 模型评估metrics=model.val()print("训练完成,模型评估指标:",metrics)if__name__=="__main__":main()

六、核心检测工具detect_tools.py

fromultralyticsimportYOLOimportcv2importnumpyasnpclassDroneInfraredDetector:def__init__(self,model_path,conf=0.25,iou=0.45):self.model=YOLO(model_path)self.conf=conf self.iou=iou self.classes=self.model.namesdefdetect_image(self,img_path):results=self.model.predict(source=img_path,conf=self.conf,iou=self.iou,save=False)result_img=results[0].plot()boxes_info=[]forboxinresults[0].boxes:cls_id=int(box.cls)cls_name=self.classes[cls_id]conf=float(box.conf)xmin,ymin,xmax,ymax=map(int,box.xyxy[0])boxes_info.append({"类别":cls_name,"置信度":round(conf*100,2),"坐标":[xmin,ymin,xmax,ymax]})returnresult_img,boxes_infodefdetect_video(self,video_path,save_path=None):cap=cv2.VideoCapture(video_path)fps=int(cap.get(cv2.CAP_PROP_FPS))w,h=int(cap.get(3)),int(cap.get(4))writer=cv2.VideoWriter(save_path,cv2.VideoWriter_fourcc(*'mp4v'),fps,(w,h))ifsave_pathelseNonewhilecap.isOpened():ret,frame=cap.read()ifnotret:breakresults=self.model(frame,conf=self.conf,iou=self.iou)frame=results[0].plot()ifwriter:writer.write(frame)cv2.imshow("无人机红外检测",frame)ifcv2.waitKey(1)&0xFF==ord('q'):breakcap.release()ifwriter:writer.release()cv2.destroyAllWindows()

七、PyQt5主界面MainProgram.py

importsysimportcv2importnumpyasnpfromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QWidget,QVBoxLayout,QHBoxLayout,QPushButton,QLabel,QFileDialog,QDoubleSpinBox,QTableWidget,QTableWidgetItem,QHeaderView,QComboBox)fromPyQt5.QtGuiimportQPixmap,QImagefromPyQt5.QtCoreimportQt,QThread,pyqtSignalfromdetect_toolsimportDroneInfraredDetectorclassDetectThread(QThread):result_signal=pyqtSignal(np.ndarray,list)def__init__(self,detector,img_path):super().__init__()self.detector=detector self.img_path=img_pathdefrun(self):result_img,boxes_info=self.detector.detect_image(self.img_path)self.result_signal.emit(result_img,boxes_info)classDroneInfraredUI(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle("无人机高空红外目标检测系统")self.setGeometry(100,100,1300,800)self.detector=Noneself.initUI()definitUI(self):central_widget=QWidget()self.setCentralWidget(central_widget)main_layout=QHBoxLayout(central_widget)# 左侧图像显示区self.img_label=QLabel("请选择红外图片/视频进行检测")self.img_label.setAlignment(Qt.AlignCenter)self.img_label.setStyleSheet("border:1px solid #ccc;")main_layout.addWidget(self.img_label,2)# 右侧控制面板right_widget=QWidget()right_layout=QVBoxLayout(right_widget)# 参数设置param_group=QWidget()param_layout=QVBoxLayout(param_group)self.model_btn=QPushButton("选择模型")self.model_btn.clicked.connect(self.select_model)param_layout.addWidget(self.model_btn)# 置信度、IOU调节conf_layout=QHBoxLayout()conf_layout.addWidget(QLabel("置信度阈值:"))self.conf_spin=QDoubleSpinBox()self.conf_spin.setRange(0,1)self.conf_spin.setValue(0.25)conf_layout.addWidget(self.conf_spin)param_layout.addLayout(conf_layout)iou_layout=QHBoxLayout()iou_layout.addWidget(QLabel("交并比阈值:"))self.iou_spin=QDoubleSpinBox()self.iou_spin.setRange(0,1)self.iou_spin.setValue(0.45)iou_layout.addWidget(self.iou_spin)param_layout.addLayout(iou_layout)# 设备选择device_layout=QHBoxLayout()device_layout.addWidget(QLabel("检测设备:"))self.device_combo=QComboBox()self.device_combo.addItems(["CPU","GPU"])device_layout.addWidget(self.device_combo)param_layout.addLayout(device_layout)right_layout.addWidget(param_group)# 检测结果区result_group=QWidget()result_layout=QVBoxLayout(result_group)self.time_label=QLabel("用时:0.000s")self.count_label=QLabel("目标数目:0")self.conf_label=QLabel("置信度:0.00%")self.pos_label=QLabel("目标位置:\nxmin: 0 ymin: 0\nxmax: 0 ymax: 0")result_layout.addWidget(self.time_label)result_layout.addWidget(self.count_label)result_layout.addWidget(self.conf_label)result_layout.addWidget(self.pos_label)right_layout.addWidget(result_group)# 操作按钮btn_layout=QHBoxLayout()self.open_img_btn=QPushButton("打开图片")self.open_img_btn.clicked.connect(self.open_image)self.open_folder_btn=QPushButton("打开文件夹")self.open_video_btn=QPushButton("打开视频")self.open_cam_btn=QPushButton("打开摄像头")self.save_btn=QPushButton("保存")self.exit_btn=QPushButton("退出")btn_layout.addWidget(self.open_img_btn)btn_layout.addWidget(self.open_folder_btn)btn_layout.addWidget(self.open_video_btn)btn_layout.addWidget(self.open_cam_btn)btn_layout.addWidget(self.save_btn)btn_layout.addWidget(self.exit_btn)right_layout.addLayout(btn_layout)# 结果表格self.result_table=QTableWidget()self.result_table.setColumnCount(5)self.result_table.setHorizontalHeaderLabels(["序号","文件路径","类别","置信度","坐标位置"])self.result_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)right_layout.addWidget(self.result_table)main_layout.addWidget(right_widget,1)defselect_model(self):path,_=QFileDialog.getOpenFileName(self,"选择模型","","*.pt")ifpath:self.detector=DroneInfraredDetector(path,self.conf_spin.value(),self.iou_spin.value())defopen_image(self):path,_=QFileDialog.getOpenFileName(self,"选择红外图片","","*.jpg;*.png;*.jpeg")ifpath:ifnotself.detector:self.detector=DroneInfraredDetector("drone_result/yolov8_drone/weights/best.pt")self.thread=DetectThread(self.detector,path)self.thread.result_signal.connect(self.update_result)self.thread.start()defupdate_result(self,img,boxes_info):# 更新图像显示img_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)h,w,c=img_rgb.shape bytes_per_line=c*w qimg=QImage(img_rgb.data,w,h,bytes_per_line,QImage.Format_RGB888)self.img_label.setPixmap(QPixmap.fromImage(qimg).scaled(self.img_label.size(),Qt.KeepAspectRatio))# 更新结果信息self.count_label.setText(f"目标数目:{len(boxes_info)}")ifboxes_info:self.conf_label.setText(f"置信度:{boxes_info[0]['置信度']}%")self.pos_label.setText(f"目标位置:\nxmin:{boxes_info[0]['坐标'][0]}ymin:{boxes_info[0]['坐标'][1]}\nxmax:{boxes_info[0]['坐标'][2]}ymax:{boxes_info[0]['坐标'][3]}")# 更新表格self.result_table.setRowCount(len(boxes_info))fori,infoinenumerate(boxes_info):self.result_table.setItem(i,0,QTableWidgetItem(str(i+1)))self.result_table.setItem(i,1,QTableWidgetItem("..."))self.result_table.setItem(i,2,QTableWidgetItem(info["类别"]))self.result_table.setItem(i,3,QTableWidgetItem(f"{info['置信度']}%"))self.result_table.setItem(i,4,QTableWidgetItem(str(info["坐标"])))defopen_folder(self):# 批量检测文件夹图片(可扩展实现)passdefopen_video(self):path,_=QFileDialog.getOpenFileName(self,"选择视频","","*.mp4;*.avi")ifpathandself.detector:self.detector.detect_video(path)defopen_camera(self):ifself.detector:self.detector.detect_video(0)if__name__=="__main__":app=QApplication(sys.argv)window=DroneInfraredUI()window.show()sys.exit(app.exec_())

八、系统功能清单

多源检测:图片、视频、本地摄像头实时检测
参数可调:置信度、IOU阈值自由设置,支持CPU/GPU设备切换
目标可视化:界面实时显示目标位置、类别、置信度、总数、检测用时
结果保存:支持保存检测后的图片/视频,便于后续分析
批量处理:可对文件夹内图片进行批量检测并查看结果
目标切换:支持查看不同类别的目标位置与信息
模型训练:提供完整训练代码,可基于数据集重新训练模型


九、项目亮点

✅ 专业无人机红外数据集:2866张多场景、多高度、多昼夜红外图像,覆盖5类目标
✅ 场景稀缺性:高空红外、远距离目标检测数据,适合安防、巡检等特殊场景
✅ 开箱即用:已训练好模型,配置环境后可直接运行PyQt5界面
✅ 功能完整:支持图片/视频/摄像头/批量检测,结果可视化与保存
✅ 代码清晰:模块化设计,便于二次开发与功能扩展

http://www.cnnetsun.cn/news/2686585.html

相关文章:

  • VSCode配置QT环境
  • 车载AI Agent Harness:行车安全与交互管控
  • 【AI问答】GO代码循环返值
  • 为什么在线视频工具能做到“无损裁剪”?技术原理与工具推荐
  • Socket、Servlet、Tomcat
  • 10. JavaArrayList 核心笔记
  • 鲁班猫4 5寸触摸屏映射修复
  • 800万条浏览器日志,如何加工成用户画像分析数据?看我教你用助睿ETL做浏览器行为分析
  • 用Python和OpenCV手把手教你从卫星图生成NDVI植被指数图(附完整代码)
  • 量子退火救星:subQUBO算法如何让经典计算机和量子机器协同工作?
  • 面试官:既然你用了原子类,那你知道CAS的工作原理是啥吗?
  • 从零到通话:Freepbx+SIP话机实战配置全记录(6001/6002分机互拨保姆级教程)
  • C语言多线程编程入门:用C11的<threads.h>和原子操作告别pthread的繁琐
  • 神经机器翻译核心原理与工程实践:从Transformer到领域自适应
  • 别再只用应变片了!手把手教你用DIC三维全场应变测量系统做材料力学测试(附精度对比数据)
  • 基于粒子群(PSO)优化LQR+前馈(FF)、LQR+前馈、LQR的车辆路径跟踪控制Matlab仿真
  • 赞噢校园集市数据采集工具包:Scrapy驱动的二手商品全链路信息抓取与热度情感分析
  • 别再瞎调了!Unity 2021.3 Quality设置保姆级指南:从手游优化到PC高画质
  • 用ESP32和2.13寸墨水屏DIY一个能传书的阅读器(开源项目复现指南)
  • 3分钟解锁百度网盘资源:智能提取码工具完全指南
  • 差分放大电路设计避坑指南:从“虚短虚断”到PCB布局,我的Multisim仿真与实战心得
  • 别再死记硬背UML了!用StarUML手把手教你画对象图(附航空购票系统实例)
  • C#跨平台上位机实战:.NET Core下Modbus协议全场景适配方案,从RTU到TCP一网打尽
  • 从光模块到FPGA:手把手教你用Xilinx GTP/GTX收发器搭建高速通信链路
  • 别再只会点灯了!用ESP-01s做个桌面天气时钟,手把手教你从联网到显示(附完整代码)
  • 别再只画云图了!Fluent Report Definitions 实战:一键获取流场关键区域的体积与面积数据
  • 图思维与图数据库:破解AI规模化困境,构建智能决策系统
  • 产品经理也能懂的模型评估:用RMSE、MAE、MAPE跟算法团队高效沟通
  • 保姆级教程:在Ubuntu 22.04上用V4L2从摄像头抓取一张JPEG图片(附完整代码)
  • 神经网络似然估计加速引力波数据分析