红外弱小飞机目标检测数据集,可用于目标检测
红外弱小飞机目标检测数据集可用于目标检测926张图像bmp和xml一一对应类别bird好的下面是一个完整的基于红外弱小飞机目标检测的数据集的实现。我们将涵盖以下内容项目结构依赖项安装数据准备模型训练评估模型推理界面项目介绍数据集介绍名称: 红外弱小飞机目标检测数据集数量: 926张图像标注格式: XMLPascal VOC格式类别:bird (假设这里是指小型无人机或其他弱小飞行器)完整项目结构ir_drone_detection/ ├── main.py ├── train.py ├── evaluate.py ├── infer.py ├── ui_files/ │ ├── infer_ui.ui │ ├── infer_ui.qrc │ └── infer_ui_rc.py ├── datasets/ │ ├── ir_drone/ │ │ ├── images/ │ │ ├── annotations/ │ │ ├── train.txt │ │ └── val.txt ├── best_ir_drone.pt ├── requirements.txt └── data.yaml文件内容requirements.txtopencv-python4.5.3.56 torch1.9.0cu111 PyQt55.15.4 labelme shutil matplotlib scikit-image numpy pandas xml.etree.ElementTree albumentationsdata.yamltrain:./datasets/ir_drone/images/trainval:./datasets/ir_drone/images/valnc:1names:[bird]train.pyimporttorchfromyolov7importtrain# 设置随机种子以保证可重复性torch.manual_seed(42)# 定义数据集路径dataset_configdata.yaml# 训练模型resultstrain.run(imgsz640,batch16,epochs50,datadataset_config,weightsyolov7.pt,nameir_drone,projectruns/train)# 打印训练结果print(results)evaluate.pyfromyolov7importval# 初始化YOLOv7模型model_pathruns/train/ir_drone/weights/best.pt# 评估模型resultsval.run(datadata.yaml,weightsmodel_path,imgsz640,taskval)# 打印评估结果print(results)infer.pyimportsysimportcv2importnumpyasnpimportrandomfromPyQt5.QtWidgetsimportQApplication,QMainWindow,QFileDialog,QMessageBox,QLabel,QPushButton,QVBoxLayout,QWidget,QProgressBarfromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQTimerimporttorchfrompathlibimportPathfromyolov7.utils.generalimportnon_max_suppression,scale_coordsfromyolov7.models.experimentalimportattempt_loadfromyolov7.utils.torch_utilsimportselect_deviceclassMainWindow(QMainWindow):def__init__(self):super(MainWindow,self).__init__()self.setWindowTitle(红外弱小飞机目标检测)self.setGeometry(100,100,800,600)# 初始化YOLOv7模型self.deviceselect_device()self.modelattempt_load(runs/train/ir_drone/weights/best.pt,map_locationself.device)self.strideint(self.model.stride.max())# model strideself.imgsz640# 创建界面元素self.label_displayQLabel(self)self.label_display.setAlignment(Qt.AlignCenter)self.button_select_imageQPushButton(选择图片,self)self.button_select_folderQPushButton(选择文件夹,self)self.button_select_videoQPushButton(选择视频,self)self.button_start_cameraQPushButton(开始摄像头,self)self.button_stop_cameraQPushButton(停止摄像头,self)self.progress_barQProgressBar(self)self.progress_bar.setVisible(False)layoutQVBoxLayout()layout.addWidget(self.label_display)layout.addWidget(self.button_select_image)layout.addWidget(self.button_select_folder)layout.addWidget(self.button_select_video)layout.addWidget(self.button_start_camera)layout.addWidget(self.button_stop_camera)layout.addWidget(self.progress_bar)containerQWidget()container.setLayout(layout)self.setCentralWidget(container)self.button_select_image.clicked.connect(self.select_image)self.button_select_folder.clicked.connect(self.select_folder)self.button_select_video.clicked.connect(self.select_video)self.button_start_camera.clicked.connect(self.start_camera)self.button_stop_camera.clicked.connect(self.stop_camera)self.timerQTimer()self.timer.timeout.connect(self.update_frame)self.capNonedefload_image(self,image_path):framecv2.imread(image_path)resultsself.detect(frame)annotated_frameself.draw_annotations(frame,results)returnannotated_framedefdetect(self,img0):imgletterbox(img0,new_shapeself.imgsz,strideself.stride)[0]imgimg[:,:,::-1].transpose(2,0,1)# BGR to RGB, to 3x416x416imgnp.ascontiguousarray(img)imgtorch.from_numpy(img).to(self.device)imgimg.float()# uint8 to fp16/32img/255.0# 0 - 255 to 0.0 - 1.0ifimg.ndimension()3:imgimg.unsqueeze(0)predself.model(img,augmentFalse)[0]prednon_max_suppression(pred,0.25,0.45,classesNone,agnosticFalse)returnpreddefdraw_annotations(self,frame,results):colors[(random.randint(0,255),random.randint(0,255),random.randint(0,255))for_inrange(len(self.model.names))]fordetinresults:iflen(det):det[:,:4]scale_coords(frame.shape[2:],det[:,:4],frame.shape).round()for*xyxy,conf,clsinreversed(det):labelf{self.model.names[int(cls)]}{conf:.2f}plot_one_box(xyxy,frame,labellabel,colorcolors[int(cls)],line_thickness3)returnframedefdisplay_image(self,frame):rgb_imagecv2.cvtColor(frame,cv2.COLOR_BGR2RGB)h,w,chrgb_image.shape bytes_per_linech*w qt_imageQImage(rgb_image.data,w,h,bytes_per_line,QImage.Format_RGB888)pixmapQPixmap.fromImage(qt_image)self.label_display.setPixmap(pixmap.scaled(self.label_display.width(),self.label_display.height()))defselect_image(self):optionsQFileDialog.Options()file_path,_QFileDialog.getOpenFileName(self,选择图片,,图片 (*.bmp *.jpg *.jpeg *.png);;所有文件 (*),optionsoptions)iffile_path:annotated_frameself.load_image(file_path)self.display_image(annotated_frame)defselect_folder(self):folder_pathQFileDialog.getExistingDirectory(self,选择文件夹)iffolder_path:files[os.path.join(folder_path,f)forfinos.listdir(folder_path)iff.endswith((.bmp,.jpg,.jpeg,.png))]total_fileslen(files)self.progress_bar.setMaximum(total_files)self.progress_bar.setValue(0)self.progress_bar.setVisible(True)fori,file_pathinenumerate(files):annotated_frameself.load_image(file_path)self.display_image(annotated_frame)self.progress_bar.setValue(i1)self.progress_bar.setVisible(False)defselect_video(self):optionsQFileDialog.Options()file_path,_QFileDialog.getOpenFileName(self,选择视频,,视频 (*.mp4 *.avi);;所有文件 (*),optionsoptions)iffile_path:self.process_video(file_path)defprocess_video(self,video_path):self.capcv2.VideoCapture(video_path)whileself.cap.isOpened():ret,frameself.cap.read()ifnotret:breakresultsself.detect(frame)annotated_frameself.draw_annotations(frame,results)self.display_image(annotated_frame)ifcv2.waitKey(1)0xFFord(q):breakself.cap.release()defstart_camera(self):self.capcv2.VideoCapture(0)self.timer.start(30)defstop_camera(self):self.timer.stop()ifself.capisnotNone:self.cap.release()self.label_display.clear()defupdate_frame(self):ret,frameself.cap.read()ifnotret:returnresultsself.detect(frame)annotated_frameself.draw_annotations(frame,results)self.display_image(annotated_frame)defletterbox(img,new_shape(640,640),color(114,114,114),autoTrue,scaleFillFalse,scaleupTrue,stride32):shapeimg.shape[:2]# current shape [height, width]rmin(new_shape[0]/shape[0],new_shape[1]/shape[1])ifnotscaleup:# only scale down, do not scale up (for better test mAP)rmin(r,1.0)ratior,r# width, height ratiosnew_unpadint(round(shape[1]*r)),int(round(shape[0]*r))dw,dhnew_shape[1]-new_unpad[0],new_shape[0]-new_unpad[1]# wh paddingifauto:# minimum rectangledw,dhnp.mod(dw,stride),np.mod(dh,stride)# wh paddingelifscaleFill:# stretchdw,dh0.0,0.0new_unpad(new_shape[1],new_shape[0])rationew_shape[1]/shape[1],new_shape[0]/shape[0]# width, height ratiosdw/2# divide padding into 2 sidesdh/2ifshape[::-1]!new_unpad:# resizeimgcv2.resize(img,new_unpad,interpolationcv2.INTER_LINEAR)top,bottomint(round(dh-0.1)),int(round(dh0.1))left,rightint(round(dw-0.1)),int(round(dw0.1))imgcv2.copyMakeBorder(img,top,bottom,left,right,cv2.BORDER_CONSTANT,valuecolor)# add borderreturnimg,ratio,(dw,dh)defplot_one_box(x,img,colorNone,labelNone,line_thicknessNone):tlline_thicknessorround(0.002*(img.shape[0]img.shape[1])/2)1# line/font thicknessc1,c2(int(x[0]),int(x[1])),(int(x[2]),int(x[3]))cv2.rectangle(img,c1,c2,color,thicknesstl,lineTypecv2.LINE_AA)iflabel:tfmax(tl-1,1)# font thicknesst_sizecv2.getTextSize(label,0,fontScaletl/3,thicknesstf)[0]c2c1[0]t_size[0],c1[1]-t_size[1]-3cv2.rectangle(img,c1,c2,color,-1,cv2.LINE_AA)# filledcv2.putText(img,label,(c1[0],c1[1]-2),0,tl/3,[225,255,255],thicknesstf,lineTypecv2.LINE_AA)if__name____main__:appQApplication(sys.argv)windowMainWindow()window.show()sys.exit(app.exec_())运行步骤总结克隆项目仓库如果有的话gitclone https://github.com/yourusername/ir_drone_detection.gitcdir_drone_detection安装依赖项conda create--namedrone_envpython3.8conda activate drone_env pipinstall-rrequirements.txt下载YOLOv7代码gitclone https://github.com/WongKinYiu/yolov7.gitcdyolov7 pipinstall-rrequirements.txtcd..准备数据集将你的红外弱小飞机图像放入datasets/ir_drone/images目录。将对应的XML标注文件放入datasets/ir_drone/annotations目录。使用脚本划分数据集为训练集和验证集并生成train.txt和val.txt文件。示例脚本split_dataset.pyimportosimportrandomdefsplit_dataset(image_dir,annotation_dir,output_dir,train_ratio0.8):images[fforfinos.listdir(image_dir)iff.endswith((.bmp,.jpg,.jpeg,.png))]num_trainint(len(images)*train_ratio)train_imagesimages[:num_train]val_imagesimages[num_train:]withopen(os.path.join(output_dir,train.txt),w)asf:forimg_nameintrain_images:f.write(f{os.path.join(image_dir,img_name)}\n)f.write(f{os.path.join(annotation_dir,img_name.replace(.bmp,.xml).replace(.jpg,.xml).replace(.jpeg,.xml).replace(.png,.xml))}\n)withopen(os.path.join(output_dir,val.txt),w)asf:forimg_nameinval_images:f.write(f{os.path.join(image_dir,img_name)}\n)f.write(f{os.path.join(annotation_dir,img_name.replace(.bmp,.xml).replace(.jpg,.xml).replace(.jpeg,.xml).replace(.png,.xml))}\n)# 示例用法split_dataset(./datasets/ir_drone/images,./datasets/ir_drone/annotations,./datasets/ir_drone)训练模型python train.py评估模型python evaluate.py运行推理界面python infer.py操作界面选择图片进行检测点击“选择图片”按钮选择一张图片进行检测。选择文件夹批量检测点击“选择文件夹”按钮选择一个包含多张图片的文件夹进行批量检测。选择视频进行检测点击“选择视频”按钮选择一个视频文件进行检测。摄像头检测点击“开始摄像头”按钮使用摄像头进行实时检测点击“停止摄像头”按钮停止检测。详细解释requirements.txt列出项目所需的所有Python包及其版本。data.yaml配置数据集路径和类别信息用于YOLOv7模型训练。train.py加载预训练的YOLOv7模型并使用自定义数据集进行训练。训练完成后打印训练结果。evaluate.py加载训练好的YOLOv7模型并对验证集进行评估打印评估结果。infer.py创建一个GUI应用程序支持选择图片、文件夹、视频或使用摄像头进行实时检测并显示检测结果。的信息和代码能够帮助你顺利实施和优化你的红外弱小飞机目标检测系统。

相关新闻

AI落地为什么失败?—95%的企业AI项目死在workflow上

AI落地为什么失败?—95%的企业AI项目死在workflow上

来源: BG2 Pod / YouTube 嘉宾: Ali Ghodsi(Databricks CEO)、Arvind Jain(Glean CEO) 主持人: Apoorv Agrawal(Altimeter合伙人) 总时长: 45分00秒 博客日期…

2026/7/27 20:46:04阅读更多 →
TikTok加密参数逆向实战:从SSL Pinning绕过到算法黑盒调用

TikTok加密参数逆向实战:从SSL Pinning绕过到算法黑盒调用

1. 项目概述与核心价值最近在移动安全与数据采集领域,TikTok的加密参数逆向一直是个热门且颇具挑战性的话题。无论是出于安全研究、竞品分析,还是构建合规的数据处理管道,理解其客户端与服务器之间复杂的通信加密机制都至关重要。这个项目标题…

2026/7/27 22:45:19阅读更多 →
TradingView股票筛选器Python包终极指南:三步实现自动化交易分析

TradingView股票筛选器Python包终极指南:三步实现自动化交易分析

TradingView股票筛选器Python包终极指南:三步实现自动化交易分析 【免费下载链接】TradingView-Screener A package that lets you create TradingView screeners in Python 项目地址: https://gitcode.com/gh_mirrors/tr/TradingView-Screener TradingView-…

2026/7/27 18:49:04阅读更多 →
企业安全意识培训实战:CanIPhish与KnowBe4模拟钓鱼平台深度对比与实施指南

企业安全意识培训实战:CanIPhish与KnowBe4模拟钓鱼平台深度对比与实施指南

1. 项目概述:为什么企业安全培训需要“钓鱼”自己人?干了十多年信息安全,我见过太多企业把防火墙、入侵检测系统堆得跟铁桶一样,结果一封伪装成“财务部紧急通知”的钓鱼邮件,就能让整个防线瞬间破防。问题的核心往往不…

2026/7/28 14:08:47阅读更多 →
物联网安全方案:SE050与PIC18F97J94硬件集成指南

物联网安全方案:SE050与PIC18F97J94硬件集成指南

1. 物联网安全现状与SE050的定位当前物联网设备面临的安全威胁正呈现指数级增长态势。根据行业统计,2023年全球物联网设备遭受的网络攻击次数较前一年增长了近300%。传统基于软件的安全方案在资源受限的嵌入式环境中往往力不从心,这正是硬件安全元件&…

2026/7/28 14:08:47阅读更多 →
物联网设备超低功耗电源管理方案设计与优化

物联网设备超低功耗电源管理方案设计与优化

1. 项目背景与核心挑战在物联网传感器和便携式医疗设备领域,不可充电初级电池(如锂亚硫酰氯电池)的寿命优化一直是个关键课题。这类设备通常部署在难以维护的偏远位置,更换电池的成本可能远超设备本身。我曾参与过一个农业环境监测…

2026/7/28 14:08:47阅读更多 →
SinaL2:如何快速构建专业的Level2行情数据接口

SinaL2:如何快速构建专业的Level2行情数据接口

SinaL2:如何快速构建专业的Level2行情数据接口 【免费下载链接】SinaL2 Level2 from dHydra 项目地址: https://gitcode.com/gh_mirrors/si/SinaL2 想要获取实时股票Level2行情数据却苦于技术门槛?SinaL2为你提供了一个简单直接的Python解决方案。…

2026/7/28 14:08:47阅读更多 →
TegraRcmGUI技术深度解析:基于Fusée Gelée漏洞的Switch注入架构揭秘

TegraRcmGUI技术深度解析:基于Fusée Gelée漏洞的Switch注入架构揭秘

TegraRcmGUI技术深度解析:基于Fuse Gele漏洞的Switch注入架构揭秘 【免费下载链接】TegraRcmGUI C GUI for TegraRcmSmash (Fuse Gele exploit for Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/te/TegraRcmGUI TegraRcmGUI作为一款专业的C图…

2026/7/28 14:08:47阅读更多 →
MySQL优化基础技巧

MySQL优化基础技巧

文章目录SQL优化基础识别性能问题寻找运行缓慢的SQL语句生成查询执行计划(QEP,query execution plan)不应该做的事正确的方式基本的分析命令EXPLAIN 命令EXPLAIN PARTITIONS 命令EXPLAIN EXTENDED 命令SHOW CREATE TABLE 命令SHOW INDEXES 命令SHOW TABLE STATUS 命令SHOW STAT…

2026/7/28 14:06:47阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/28 4:06:39阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/28 2:08:06阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/28 1:38:28阅读更多 →
告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:29阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:29阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:29阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/27 16:57:54阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/28 3:17:03阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/28 2:35:58阅读更多 →