哈密市网站建设_网站建设公司_网站制作_seo优化
2026/1/15 10:23:57 网站建设 项目流程

火焰识别,火焰检测,火灾检测,基于yolov5的火焰检测,可以检测视频和图片,也可视频实时检测,检测准确率高,帧率很高,有标注好的训练数据集可以自己重新训练。

可以将训练好的模型部署到英伟达边缘计算设备nano nx或实际场景中,如监控摄像头、无人机、消防设备等,实时检测火灾并发出警报,以提高消防安全性。

1

以下是基于 YOLOv5 的高精度、高帧率火焰检测系统的完整解决方案,包含:

  • ✅ 标注好的火焰数据集说明
  • ✅ 详细训练代码(支持自定义训练)
  • ✅ 视频/图片/摄像头实时检测
  • ✅ 模型导出与NVIDIA Jetson Nano/NX 部署脚本
  • ✅ 报警触发逻辑(声音/日志/推流)
  • ✅ UI 可选(命令行 + OpenCV 可视化)

🔥 一、火焰检测数据集说明(可直接训练)

项目内容
类别fire(火焰)、smoke(烟雾)——2 类(可扩展)
图像数量5,000+ 张(含白天/黑夜、室内/室外、不同火源)
标注格式YOLO.txt格式(LabelImg 标注)
目录结构
fire_dataset/ ├── images/train/ # ~4000 张 ├── images/val/ ├── labels/train/ ├── labels/val/ └── fire.yaml

|fire.yaml|

train:./images/trainval:./images/valnc:2names:['fire','smoke']

💡 若你已有自己的数据集,只需按此结构组织即可。


🧪 二、环境准备(训练端)

# 克隆 YOLOv5 官方仓库gitclone https://github.com/ultralytics/yolov5cdyolov5# 安装依赖(Python ≥3.8)pipinstall-r requirements.txt torch torchvision

▶️ 三、详细训练代码(YOLOv5)

1. 启动训练(命令行)

python train.py\--img640\--batch16\--epochs100\--data /path/to/fire_dataset/fire.yaml\--weights yolov5s.pt\--name fire_yolov5s\--cacheram\--workers4

2. Python 脚本训练(train_fire.py

# train_fire.pyimporttorchfromyolov5importtrainif__name__=='__main__':train.run(imgsz=640,batch_size=16,epochs=100,data='/path/to/fire_dataset/fire.yaml',weights='yolov5s.pt',name='fire_yolov5s',cache='ram',workers=4,device=0# GPU ID)

✅ 训练完成后,最佳模型保存在:runs/train/fire_yolov5s/weights/best.pt


🎥 四、火焰检测推理系统(支持图片/视频/摄像头)

将以下代码保存为fire_detection.py

# fire_detection.pyimportcv2importtorchimportnumpyasnpimportargparseimporttimeimportosfrompathlibimportPath# 报警函数(可替换为短信/邮件/声光报警)deftrigger_alarm(frame,save_dir="alarms"):os.makedirs(save_dir,exist_ok=True)timestamp=time.strftime("%Y%m%d_%H%M%S")cv2.imwrite(f"{save_dir}/alarm_{timestamp}.jpg",frame)print(f"🔥 火灾警报!已保存截图:{save_dir}/alarm_{timestamp}.jpg")# 可添加:播放警报音、发送 HTTP 请求等defdetect(source,weights,conf_thres=0.5,alarm_threshold=1):""" :param source: 图片路径 / 视频路径 / '0'(摄像头) :param weights: 模型路径(.pt) :param conf_thres: 置信度阈值 :param alarm_threshold: 触发报警的最小火焰数量 """model=torch.hub.load('ultralytics/yolov5','custom',path=weights,force_reload=True)model.conf=conf_thres# 判断输入类型is_camera=source=='0'is_video=source.endswith(('.mp4','.avi'))ifis_cameraoris_video:cap=cv2.VideoCapture(0ifis_cameraelsesource)fps=cap.get(cv2.CAP_PROP_FPS)or30frame_time=1.0/fpswhileTrue:ret,frame=cap.read()ifnotret:breakstart_time=time.time()results=model(frame)detections=results.xyxy[0].cpu().numpy()fire_count=0for*xyxy,conf,clsindetections:ifint(cls)==0:# class 0 = firefire_count+=1x1,y1,x2,y2=map(int,xyxy)cv2.rectangle(frame,(x1,y1),(x2,y2),(0,0,255),2)cv2.putText(frame,f"Fire{conf:.2f}",(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.6,(0,0,255),2)# 报警逻辑iffire_count>=alarm_threshold:trigger_alarm(frame)# 显示状态status="🔥 DANGER!"iffire_count>=alarm_thresholdelse"✅ SAFE"cv2.putText(frame,f"Status:{status}| Fire:{fire_count}",(10,30),cv2.FONT_HERSHEY_SIMPLEX,0.8,(0,255,0),2)# 控制帧率elapsed=time.time()-start_time delay=max(1,int((frame_time-elapsed)*1000))cv2.imshow("Fire Detection",frame)ifcv2.waitKey(delay)&0xFF==ord('q'):breakcap.release()cv2.destroyAllWindows()else:# 单张图片检测img=cv2.imread(source)results=model(img)results.render()cv2.imshow("Result",results.ims[0])cv2.waitKey(0)cv2.destroyAllWindows()if__name__=='__main__':parser=argparse.ArgumentParser()parser.add_argument('--source',type=str,default='0',help='image/video/camera')parser.add_argument('--weights',type=str,default='best.pt',help='model path')parser.add_argument('--conf',type=float,default=0.5,help='confidence threshold')args=parser.parse_args()detect(args.source,args.weights,args.conf)

运行示例:

# 摄像头实时检测python fire_detection.py --source0--weights runs/train/fire_yolov5s/weights/best.pt# 视频检测python fire_detection.py --source test.mp4 --weights best.pt# 图片检测python fire_detection.py --source test.jpg --weights best.pt

🚀 五、部署到 NVIDIA Jetson Nano/NX

步骤 1:在 Jetson 上安装依赖

# 安装 JetPack(含 CUDA/TensorRT)# 安装 OpenCV(通常已预装)sudoaptinstallpython3-opencv# 安装 PyTorch(Jetson 版本)wgethttps://nvidia.box.com/shared/static/...# 从 NVIDIA 官网下载 wheelpip3installtorch-*.whl

步骤 2:导出为 TensorRT(加速推理)

# export_to_trt.pyfromyolov5.models.experimentalimportattempt_loadfromyolov5.utils.torch_utilsimportselect_deviceimporttorch device=select_device('0')model=attempt_load('best.pt',map_location=device)model.eval()# 导出 ONNXdummy_input=torch.randn(1,3,640,640).to(device)torch.onnx.export(model,dummy_input,"fire.onnx",opset_version=12)# 然后使用 trtexec 转 TensorRT(Jetson 上执行):# /usr/src/tensorrt/bin/trtexec --onnx=fire.onnx --saveEngine=fire.engine

步骤 3:Jetson 上运行轻量推理(使用 TensorRT)

推荐使用 TensorRT-YOLOv5 项目加载.engine文件,实现>20 FPS @ Jetson Nano


⚙️ 六、性能优化建议

场景建议
高帧率使用yolov5nyolov5s+imgsz=416
高精度使用yolov5m+imgsz=640+ TTA(测试时增强)
夜间火焰在训练集中加入红外/低光照样本
减少误报增加smoke类别,结合火焰+烟雾联合判断

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询