6 Star 54 Fork 76

Ascend/ascend_community_projects

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

火灾识别

1 介绍

1.1 概要描述

火灾识别项目是基于昇腾Vision SDK,将火灾识别DenseNet模型部署到Atlas 200I DK A2上,实现对图像中是否有火灾进行识别的功能。

1.2 模型介绍

项目中用于火灾识别的是DenseNet模型,DenseNet 是一种灵活的架构,适用于各种计算机视觉应用,包括图片分类、对象识别和语义分割。

1.3 特性及适用场景

本项目能够能够针对火灾场景进行识别,并输出是否为火灾的结果。对于大多数火灾场景都能达到较好的识别效果,如在大型火灾、汽车失火、房屋失火以及较多烟雾的火灾场景都能够达到预期效果。对于较高分辨率的图像识别时,解码插件对图像处理会有较多耗时,最终整体能够满足25fps的性能需求。

以下为可能存在错误识别的情况: 1.当图像只拍摄到小部分火苗和少量烟雾时,会误将火灾场景错误地识别为没有火灾的场景。 2.当图像场景与火灾和烟雾相似时会被错误地识别为火灾场景。例如部分夕阳场景。

总的来说,该项目在大多数火灾场景下识别的准确度较高,但受限于原始模型的功能和性能,对于一些场景会出现识别错误。

1.4 实现流程

火灾识别SDK流程图如图1-3所示:


图1-3 火灾检测SDK流程图

2 软件方案介绍

2.1 项目方案架构介绍

本项目架构主要流程为:图片进入流中,将图片解码之后放缩到特定尺寸,再利用densenet模型对图像中是否为火灾场景进行推理,最后输出结果。

表2.1 项目方案架构中各模块功能:

表2.1 火灾检测SDK流程图
序号 子系统 功能描述
1 图像输入 调用Vision SDK的appsrc输入图片
2 图像解码 调用Vision SDK的mxpi_imagedecoder用于图像解码,当前只支持JPG/JPEG/BMP格式
3 图像放缩 调用Vision SDK的mxpi_imageresize,放缩到224*224大小
4 火灾识别 调用Vision SDK的mxpi_tensorinfer,选取torch框架下densenet模型对图像进行火灾预测
5 结果输出 调用Vision SDK的appsink,提供端口从流中获取数据,用于输出结果

2.2 代码目录结构与说明

本工程名称为fire_detection,工程目录如下所示:

.
|-- README.md
|-- data
|   |-- other
|   `-- test
|-- envs
|   `-- atc_env.txt
|-- figures
|   `-- 火灾检测SDK流程图.png
|-- main.py
|-- models
|   `-- pth2onnx_310.py
|-- pipeline
|   `-- fire.pipeline
|-- run.sh
`-- test.py

其中,

  • data目录用于存放测试数据集
  • envs目录为环境变量配置说明文件
  • models目录用于存放模型文件
  • main.py为实现代码
  • pipeline目录存放Vision SDK的流程编排文件fire.pipeline
  • run.sh为推理启动脚本
  • test.py为测试脚本

3 设置开发环境

步骤1 按照表1下载并安装配套版本的CANN软件包和Vision SDK软件包,并source对应的环境变量(安装成功后会打印设置环境变量的命令)。

表1 运行环境依赖
依赖软件 版本 说明
CANN 8.0.RC2.alpha003 社区版 用于提供模型转换ATC工具
Vision SDK 6.0.RC1 社区版 用于提供pipeline插件等工具
Python(推荐) 3.9.2 用于运行*.py文件

步骤2 安装python依赖

pip install -r requirements.txt

步骤3 登录开发者套件,创建工作空间文件夹;登录开发者套件后,执行下面命令:

cd /home/HwHiAiUser/samples
mkdir gitee && cd gitee

步骤4 拉取Gitee昇腾社区样例代码仓

git clone https://gitee.com/ascend/ascend_community_projects.git

步骤5 进入火灾识别样例目录,并切换代码分支

cd ascend_community_projects/fire_detection
git checkout 310B

步骤6 下载模型文件和测试数据集 下载模型文件:

wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Atlas%20200I%20DK%20A2/DevKit/models/24.0.RC1/models.zip --no-check-certificate

解压模型文件夹压缩包,得到模型文件:

unzip models.zip

下载测试数据集:

wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Atlas%20200I%20DK%20A2/DevKit/models/24.0.RC1/data.zip --no-check-certificate

解压测试数据集夹压缩包,得到测试数据:

unzip data.zip

数据集举例,有火灾的图片如下:

没有火灾的图片:

步骤6 运行模型推理脚本,查看推理过程,得到火灾识别数据集上模型检测精度结果

python main.py

结果如下:

耗时时间: 8.572492999519454 ms
-----------------Destroy All Streams-----------------
精度: 94.15041782729804 %
总耗时: 3293.4406139929706 ms   总图片数: 359
平均单张耗时: 9.173929286888498 ms

一共测试了359张图片,耗时3.29秒,平均单张图片耗时9.17毫秒,火灾识别精度94.15%。

马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/ascend/ascend_community_projects.git
git@gitee.com:ascend/ascend_community_projects.git
ascend
ascend_community_projects
ascend_community_projects
310B

搜索帮助