这是一个面向项目展示、课程设计和二次开发的完整代码骨架。工程以 Ultralytics YOLOv8 完成目标检测,再通过连续帧、目标关联和固定区域规则识别火情、吸烟、违规动火、消防通道占用及灭火器缺失。
本仓库不包含真实训练数据、训练好的模型权重、摄像头凭据或生产告警密钥,因此不承诺下载后直接运行。源码模块、配置、调用入口和模拟测试均保持相互对应。
| 编号 | 英文名称 | 中文含义 |
|---|---|---|
| 0 | flame | 明火 |
| 1 | smoke | 烟雾 |
| 2 | cigarette | 香烟 |
| 3 | welding | 焊接 |
| 4 | spark | 火花 |
| 5 | person | 人员 |
| 6 | vehicle | 车辆 |
| 7 | material_stack | 物料堆 |
| 8 | fire_extinguisher | 灭火器 |
| 9 | exit_sign | 安全出口标志 |
- YOLOv8 模型加载和统一 Detection 输出。
- 通过 Ultralytics 官方
model.track接入 ByteTrack 目标轨迹编号。 - 数据集结构、标签字段、类别编号和归一化坐标检查。
- 训练、验证、断点续训配置和 ONNX 等格式导出。
- 图片、视频、本地摄像头及 RTSP 流推理入口。
- 火焰/烟雾持续检测、人员/香烟关联、禁火区和时段判断。
- 消防通道与安全出口占用、固定灭火器点位缺失判断。
- 告警冷却、事件截图、JSONL、CSV 和模拟 Webhook。
- 模型类别、规则阈值、摄像头区域和视频参数的严格校验。
- 不依赖模型权重的五场景 Mock 演示、规则测试和端到端测试。
- D-Fire 两类预训练配置和 Pyronear 时序烟雾 AI 可选适配器。
.
├─ configs/ YAML 配置
├─ data/ YOLO 数据占位目录
├─ docs/ 中文专项说明
├─ outputs/ 训练、推理和告警输出
├─ scripts/ 命令行入口
├─ src/factory_fire_ai/
│ ├─ alerts.py 告警冷却、日志、截图和 Webhook
│ ├─ config.py 配置加载
│ ├─ dataset.py 数据集检查
│ ├─ detector.py YOLOv8 检测器
│ ├─ external_temporal.py 外部时序 AI 模型适配器
│ ├─ demo.py 无权重五场景演示
│ ├─ geometry.py 区域与关联判断
│ ├─ media.py 图片/视频输入输出
│ ├─ models.py 公共数据类型
│ ├─ pipeline.py 主处理流水线
│ ├─ rules.py 业务规则引擎
│ ├─ training.py 训练、验证、导出
│ └─ visualization.py 画框和区域绘制
├─ tests/ 模拟测试
└─ weights/ 模型权重占位目录
如需实际尝试代码,应先准备 Python 3.10+,然后在项目根目录安装:
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -e ".[test]"不准备模型和数据时,优先运行完整 Mock 演示:
python scripts/demo_mock.py命令会在 outputs/mock_demo 下建立独立会话目录,生成带框视频、五类事件截图、JSONL、CSV 和 summary.json。添加 --no-video 可以只检查业务链路。
检查数据集:
python scripts/check_dataset.py --data configs/dataset.yaml训练和验证:
python scripts/train.py --config configs/train.yaml
python scripts/validate.py --weights weights/best.pt
python scripts/export.py --weights weights/best.pt --format onnx使用 D-Fire 公开数据进行火焰/烟雾第一阶段预训练:
python scripts/train.py --config configs/train_dfire.yaml图片、视频和摄像头识别:
python scripts/infer_image.py --source samples/factory.jpg
python scripts/infer_video.py --source samples/factory.mp4
python scripts/infer_camera.py --source 0 --display- outputs/image_result.jpg:图片识别结果。
- outputs/video_result.mp4:视频识别结果。
- outputs/camera_result.mp4:摄像头录像结果。
- outputs/alerts/incidents.jsonl:完整结构化事件。
- outputs/alerts/incidents.csv:便于表格查看的事件清单。
- outputs/alerts/snapshots/:通过冷却检查的告警截图。
- outputs/mock_demo/:无需权重的五场景模拟演示。
本工程属于视觉识别示例,不能替代消防报警主机、烟感探测器、人工巡检或依法要求的消防设施。生产使用前必须重新采集本厂数据、评估误报漏报、配置权限和网络安全,并由消防安全责任人确认告警处置流程。
详细内容参见 docs 目录,外部参考仓库及许可证注意事项见 docs/reference-projects.md。
本工程没有声称自行实现 YOLO 神经网络。训练、推理、验证和导出调用 Ultralytics 官方代码;图像与视频处理调用 OpenCV。D-Fire 数据集、火灾时序研究代码、ByteTrack 和 Pyronear 时序模型作为数据或算法依据。各部分的来源、许可证以及本仓库自行实现范围见 THIRD_PARTY_NOTICES.md 和 docs/reference-projects.md。
为便于课程审查和复现实验,configs/upstream_sources.yaml 进一步记录了核对过的上游版本、Git 提交哈希及许可证;Python 依赖固定为对应的 Ultralytics 版本。