基于yolov8的烟花识别系统 附源码➕测试数据集➕运行环境配置文件 YOLOv8 基于 PyTorch yolov8深度学习算法 烟花监控、烟花表演、烟花识别分析等场景使用
基于yolov8的烟花识别系统功能烟花检测、识别、分类、轨迹追踪等功能技术yolov8深度学习算法附源码➕测试数据集➕运行环境配置文件适合烟花监控、烟花表演、烟花识别分析等场景使用1. 项目结构与运行环境首先我们需要搭建 Python 环境。YOLOv8 基于 PyTorch因此需要安装相应的库。项目目录结构建议fireworks_detection/ ├── dataset/ │ ├── images/ │ │ ├── train/ │ │ └── val/ │ └── labels/ │ ├── train/ │ └── val/ ├── runs/ # 训练结果保存目录 ├── environment.yaml # 环境配置文件 ├── data.yaml # 数据集配置文件 └── detect_track.py # 推理与追踪主程序environment.yaml(环境配置文件):你可以使用 Conda 来管理环境确保依赖版本兼容。name:fireworks_yolochannels:-pytorch-conda-forge-defaultsdependencies:-python3.9-pytorch2.0.1-torchvision0.15.2-torchaudio2.0.2-cudatoolkit11.8-pip-pip:-ultralytics8.0.200# YOLOv8 官方库-opencv-python4.8.1.78-numpy1.24.3-matplotlib3.7.2-supervision0.14.0# 用于可视化追踪轨迹安装命令condaenvcreate-fenvironment.yaml conda activate fireworks_yolo2. 数据集配置你需要准备标注好的烟花数据集图片 YOLO 格式标签。假设你的数据集已经按照 YOLO 格式整理好。data.yaml(数据集配置文件):path:./dataset# 数据集根目录train:images/train# 训练集图片路径val:images/val# 验证集图片路径# 类别数量和名称nc:1names:[firework]3. 模型训练代码使用 YOLOv8 进行训练非常简单可以直接在 Python 脚本中调用或者使用命令行。这里提供一个 Python 脚本方式方便你调整参数。train.py:fromultralyticsimportYOLOdeftrain_fireworks_model():# 1. 加载模型# 使用预训练的 yolov8n.pt (nano版本速度快) 或 yolov8s.pt (small版本精度高)modelYOLO(yolov8n.pt)# 2. 开始训练resultsmodel.train(datadata.yaml,# 数据集配置文件路径epochs100,# 训练轮数imgsz640,# 输入图片尺寸batch16,# 每批次图片数量 (根据显存调整)namefireworks_v8,# 训练任务名称结果保存在 runs/detect/fireworks_v8projectruns/train,# 项目保存目录device0,# 使用 GPU 0如果没有 GPU 则设为 cpuworkers4,# 数据加载线程数optimizerAdamW,# 优化器lr00.001,# 初始学习率patience10# 早停机制如果10轮没有提升则停止)if__name____main__:train_fireworks_model()4. 烟花检测与轨迹追踪代码这是系统的核心部分。我们将利用 YOLOv8 内置的 ByteTrack 追踪算法来实现对烟花轨迹的追踪并绘制轨迹线。detect_track.py:importcv2importnumpyasnpfromultralyticsimportYOLOfromcollectionsimportdefaultdict# 加载训练好的模型 (或者直接使用预训练模型进行测试)# 如果你已经训练好了请替换为 runs/detect/fireworks_v8/weights/best.ptmodelYOLO(yolov8n.pt)# 存储追踪轨迹的字典track_historydefaultdict(lambda:[])defrun_detection(source0): source: 0为摄像头, video.mp4为视频文件, image.jpg为图片 capcv2.VideoCapture(source)# 获取视频宽度和高度w,hint(cap.get(3)),int(cap.get(4))# 视频保存设置 (可选)# out cv2.VideoWriter(output.mp4, cv2.VideoWriter_fourcc(*mp4v), 20, (w, h))whilecap.isOpened():success,framecap.read()ifnotsuccess:break# YOLOv8 推理开启追踪 (trackerbytetrack.yaml 是默认的高性能追踪器)resultsmodel.track(frame,persistTrue,trackerbytetrack.yaml,conf0.5)# 获取检测框和ID# results[0].boxes 包含所有检测信息ifresults[0].boxes.idisnotNone:boxesresults[0].boxes.xyxy.cpu().numpy().astype(int)# 边框坐标track_idsresults[0].boxes.id.cpu().numpy().astype(int)# 追踪IDcls_idsresults[0].boxes.cls.cpu().numpy().astype(int)# 类别ID# 遍历每一个检测到的目标forbox,track_id,cls_idinzip(boxes,track_ids,cls_ids):x1,y1,x2,y2box# 获取类别名称class_namemodel.names[cls_id]# 只处理 firework 类别 (假设类别索引为0或者根据你的模型调整)ifclass_namefirework:# 计算中心点center_xint((x1x2)/2)center_yint((y1y2)/2)# 更新轨迹历史tracktrack_history[track_id]track.append((center_x,center_y))iflen(track)50:# 限制轨迹长度防止内存溢出track.pop(0)# 绘制轨迹线pointsnp.hstack(track).astype(np.int32).reshape((-1,1,2))cv2.polylines(frame,[points],isClosedFalse,color(0,255,0),thickness2)# 绘制边框和IDcv2.rectangle(frame,(x1,y1),(x2,y2),(0,255,255),2)cv2.putText(frame,fID:{track_id},(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.9,(0,255,255),2)# 显示结果cv2.imshow(Fireworks Detection Tracking,frame)# out.write(frame) # 写入视频ifcv2.waitKey(1)0xFFord(q):breakcap.release()# out.release()cv2.destroyAllWindows()if__name____main__:# source0 代表调用摄像头也可以填入视频路径run_detection(source0)5. 系统功能说明烟花检测与分类利用 YOLOv8 的强特征提取能力能够识别夜空中不同形态如喷射状、绽放状的烟花。通过置信度阈值conf0.5过滤掉背景噪声如路灯、车灯。轨迹追踪代码中集成了ByteTrack算法。对于烟花这种快速移动且可能短暂消失的目标ByteTrack 能够保持 ID 的一致性。track_history字典记录了每个烟花 ID 的历史中心点坐标利用cv2.polylines绘制出优美的飞行轨迹。场景适应性该代码适用于实时监控摄像头输入、视频回放分析以及单张图片检测。针对夜间低光照环境如果检测效果不佳可以在推理前对frame进行直方图均衡化或伽马校正预处理。6. 运行指南训练模型运行python train.py。训练完成后权重文件会保存在runs/detect/fireworks_v8/weights/best.pt。运行检测修改detect_track.py中的model YOLO(path/to/best.pt)指向你训练好的权重。启动系统检测摄像头python detect_track.py检测视频文件修改代码中run_detection(sourcetest_video.mp4)。这套代码提供了一个完整的闭环从数据处理到模型训练再到带轨迹追踪的可视化推理。