基于华为atlas的烟火检测实战

news2024/11/23 16:56:40

1、下载官方yolov5的v6.1版本

git clone https://github.com/ultralytics/yolov5.git

git checkout v6.1

2、烟火数据集准备:

tree -d

Images/train/目录下图片

Labels/train/目录下标签

3、数据格式转化:

数据集采用labelimg标注,xml文件转化为txt文件的代码如下,

import os.path
import xml.etree.ElementTree as ET
 
# 类别
class_names = ["fire"]
# voc数据集路径
vocPath = './'
 
# xml文件路径
xmlPath = vocPath + r'\Annotations'
# xml转换后txt文件存放路径
txtPath = vocPath + r'\txts'
 
files = []
if not os.path.exists(txtPath):
    os.makedirs(txtPath)
 
for root, dirs, files in os.walk(xmlPath):
    None
 
number = len(files)
print(number)
i = 0
while i < number:
 
    name = files[i][0:-4]
    xml_name = name + ".xml"
    txt_name = name + ".txt"
    xml_file_name = os.path.join(xmlPath, xml_name)
    txt_file_name = os.path.join(txtPath, txt_name)
 
    xml_file = open(xml_file_name, encoding='gb18030',errors='ignore')
    tree = ET.parse(xml_file)
    root = tree.getroot()
 
    w = int(root.find('size').find('width').text)
    h = int(root.find('size').find('height').text)
 
    f_txt = open(txt_file_name, 'w+')
    content = ""
 
    first = True
 
    for obj in root.iter('object'):
 
        name = obj.find('name').text
        # 若只有一类 ,即 class_num = 0
        class_num = class_names.index(name)
 
        xmlbox = obj.find('bndbox')
 
        x1 = int(xmlbox.find('xmin').text)
        x2 = int(xmlbox.find('xmax').text)
        y1 = int(xmlbox.find('ymin').text)
        y2 = int(xmlbox.find('ymax').text)
 
        if first:
            content += str(class_num) + " " + \
                       str((x1 + x2) / 2 / w) + " " + str((y1 + y2) / 2 / h) + " " + \
                       str((x2 - x1) / w) + " " + str((y2 - y1) / h)
            first = False
        else:
            content += "\n" + \
                       str(class_num) + " " + \
                       str((x1 + x2) / 2 / w) + " " + str((y1 + y2) / 2 / h) + " " + \
                       str((x2 - x1) / w) + " " + str((y2 - y1) / h)
 
    print(content)
    f_txt.write(content)
    f_txt.close()
    xml_file.close()
    i += 1
    

4、配置yaml文件:

data/fire_smoke.yaml

5、启动训练:

python train.py --img 640 --epochs 100 --data ./data/fire_smoke.yaml --weights yolov5s.pt

6、Pt模型转化为onnx模型

python export.py --weights best.pt --simplify

7、模型转化为atlas模型:

mkdir -p models/yolov5_fire_smoke

新建insert_op.cfg

aipp_op {
aipp_mode : static
related_input_rank : 0
input_format : YUV420SP_U8
src_image_size_w : 640
src_image_size_h : 640
crop : false
csc_switch : true
rbuv_swap_switch : false
matrix_r0c0 : 256
matrix_r0c1 : 0
matrix_r0c2 : 359
matrix_r1c0 : 256
matrix_r1c1 : -88
matrix_r1c2 : -183
matrix_r2c0 : 256
matrix_r2c1 : 454
matrix_r2c2 : 0
input_bias_0 : 0
input_bias_1 : 128
input_bias_2 : 128
var_reci_chn_0 : 0.0039216
var_reci_chn_1 : 0.0039216
var_reci_chn_2 : 0.0039216
}

新建yolov5_add_bs1_fp16.cfg

CLASS_NUM=2
BIASES_NUM=18
BIASES=10,13,16,30,33,23,30,61,62,45,59,119,116,90,156,198,373,326
SCORE_THRESH=0.25
#SEPARATE_SCORE_THRESH=0.001,0.001,0.001,0.001,0.001,0.001,0.001,0.001,0.001,0.001
OBJECTNESS_THRESH=0.0
IOU_THRESH=0.5
YOLO_TYPE=3
ANCHOR_DIM=3
MODEL_TYPE=2
RESIZE_FLAG=0
YOLO_VERSION=5

新建fire_smoke.names

fire
smoke

将yolov5的best.onnx模型拷贝到当前目录,进行onnx转化为om,输出yolov5_add_bs1_fp16.om

输入npu-smi info

atc  --input_shape="images:1,3,640,640" --out_nodes="/model.24/Transpose:0;/model.24/Transpose_1:0;/model.24/Transpose_2:0" --output_type=FP32 --input_format=NCHW --output="./yolov5_add_bs1_fp16" --soc_version=Ascend310P3 --framework=5 --model="./best.onnx" --insert_op_conf=./insert_op.cfg

8、修改华为atlas推理的pipeline文件

修改pipeline/fire_smoke.pipeline文件

9、基于pipenine实现推理代码

实现简单的yolov5的推理函数yolov5.py,并运行

python3 yolov5.py

10、流媒体引擎ZLMediaKit搭建:

编译库

git clone https://github.com/ZLMediaKit/ZLMediaKit.git
cd ZLMediaKit/
git submodule update --init
mkdir build
cd build
cmake ..
make -j4

11、运行流媒体引擎库:

cd ZLMediaKit/release/linux/Debug
#通过-h可以了解启动参数
./MediaServer -h
#以守护进程模式启动
./MediaServer -d &

12、运行算法服务:

python3 server.py >&/dev/null&

13、运行视频处理业务:

python3 push_stream.py

在VLC中进行播放,

rtmp://10.100.1.1:19350/live/test

http://10.100.1.1:19350/live/test.live.flv

14、信创化容器制作:

实现信创化的docker file用于生成docker image,初始系统选择openeuler-20.09系统,docker file文件内容如下,

FROM opstool/openeuler:20.09

RUN mv /usr/bin/sh /usr/bin/sh.bak && ln -s /usr/bin/bash /usr/bin/sh

RUN sed -i 's/http:\/\/repo.openeuler.org/https:\/\/repo.huaweicloud.com\/openeuler/g' /etc/yum.repos.d/openEuler.repo

RUN yum install -y gcc cmake make
RUN yum install -y wget tar zlib-devel.aarch64
RUN yum install -y mesa-libGL.aarch64 openssl-devel
RUN yum install -y libffi-devel




RUN wget https://www.python.org/ftp/python/3.9.12/Python-3.9.12.tgz
RUN tar -xzvf Python-3.9.12.tgz
RUN cd Python-3.9.12 &&./configure --prefix=/usr/local/python3.9.12 --enable-shared && make -j8 && make install
RUN cp /usr/local/python3.9.12/lib/libpython3.9.so.1.0 /usr/lib


#RUN export LD_LIBRARY_PATH=/usr/local/python3.9.12/lib:$LD_LIBRARY_PATH
#RUN export PATH=/usr/local/python3.9.12/bin:$PATH


RUN echo "export LD_LIBRARY_PATH=/usr/local/python3.9.12/lib:$LD_LIBRARY_PATH" >> ~/.bashrc
RUN echo "export PATH=/usr/local/python3.9.12/bin:$PATH" >> ~/.bashrc

RUN source ~/.bashrc


RUN yum install -y python3-pip
RUN echo "source /data/ai_install_packages/MindX_SDK/mxVision/set_env.sh" >> ~/.bashrc
RUN echo "source /usr/local/Ascend/ascend-toolkit/set_env.sh" >> ~/.bashrc


RUN /usr/local/python3.9.12/bin/pip3 install opencv-python opencv-python-headless Pillow -i https://pypi.tuna.tsinghua.edu.cn/simple/
RUN /usr/local/python3.9.12/bin/pip3 install attrs cloudpickle  decorator psutil scipy  synr==0.5.0 tornado absl-py -i https://pypi.tuna.tsinghua.edu.cn/simple/
RUN /usr/local/python3.9.12/bin/pip3 install absl-py Flask gunicorn tqdm requests -i https://pypi.tuna.tsinghua.edu.cn/simple/

15、docker环境部署:

docker build . -t sitri/openeuler-20.09-ai:1.0.0

docker run --restart=always -itd -u root \
--network host \
--device=/dev/davinci0 \
--device=/dev/davinci_manager \
--device=/dev/devmm_svm \
--device=/dev/hisi_hdc \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /var/log/npu:/var/log/npu \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/slog:/usr/slog \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ \
-v /usr/local/Ascend/driver/tools/:/usr/local/Ascend/driver/tools/ \
-v /usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons/ \
-v /usr/local/Ascend/ascend-toolkit/:/usr/local/Ascend/ascend-toolkit/ \
-v /data:/data \
--name="firesmoke" \
-w /data/ai_install_packages/fire_smoke \
sitri/openeuler-20.09-ai:1.0.0 \
/bin/bash \
-c "source ~/.bashrc && gunicorn -c gunicorn_config.py server:app"

16、整体效果

基于flask实现烟火检测算法的http服务,然后实现视频解码-AI识别-结果绘制于视频上进行视频编码的业务代码。

最终效果如下,上边为业务代码、左下角为流媒体引擎代码、右下角为AI服务代码、中间为AI实时视频识别效果。

references:

文档:

昇腾社区-官网丨昇腾万里 让智能无所不及

案例:

昇腾社区-官网丨昇腾万里 让智能无所不及

github:

ascend_community_projects: MindX边缘开发套件社区代码仓库

samples: CANN Samples

容器镜像:

AscendHub

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1326173.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

利用prometheus+grafana进行Linux主机监控

文章目录 一.架构说明与资源准备二.部署prometheus1.上传软件包2.解压软件包并移动到指定位置3.修改配置文件4.编写启动脚本5.启动prometheus服务 三.部署node-exporter1.上传和解压软件包2.设置systemctl启动3.启动服务 四.部署grafana1.安装和启动grafana2.设置prometheus数据…

python画图【01】

前提&#xff1a;使用anaconda环境&#xff0c;且安装好&#xff0c;使用的是jupyter pandas 和 matplotlib 安装教程可以参考&#xff1a;miniconda安装与使用 import pandas as pd读取xlsx表格数据 data pd.read_excel("data1.xlsx",sheet_nameSheet1) #data p…

Ubuntu中文本编辑器和编译器

你好&#xff0c;这里是争做图书馆扫地僧的小白。 个人主页&#xff1a;争做图书馆扫地僧的小白_-CSDN博客 目标&#xff1a;希望通过学习技术&#xff0c;期待着改变世界。 目录 前言 一、vim编辑器 &#xff08;一&#xff09;打开vim编辑器 &#xff08;二&#xff09;v…

Opencv 入门三(视频滑动条窗口)

视频滑动条窗口源码如下&#xff1a; #include "opencv2\highgui\highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <iostream> #include <fstream> using namespace std; int g_slider_position 0; // 滑动条的位置 …

转行小白历险记-2023.12.19 如何解决跨域问题

讨厌突如其来的破坏计划的感觉&#xff0c;真的好烦 一、跨域以及如何解决跨域问题(反向代理) 跨域 同源&#xff1a;协议、端口、域名相同 如何解决跨域问题 jsonp:<script> 不受同源策略限制跨源域资源共享 CORS:允许 Web 应用服务器进行跨源访问控制使不同的源变成同…

CentOS6.10 卸载MySQL8.0.34升级至8.0.35

准备要更新的MySQL安装包,下载地址:MySQL :: Download MySQL Community Server 查看当前MySQL版本 备份数据库 mysqldump -uroot -p -B > /opt/backup/20231220_mysql.sql 检查备份文件 查看所有服务项: service --status-all 可以看到我们注册的MySQL服务是mysqld 停止…

【第七在线】供应链协作与商品计划:建立强大的合作关系

供应链协作在现代服装企业的商品计划中扮演着至关重要的角色。建立强大的合作关系能够提高生产效率、降低成本、减少库存和提供更好的客户服务。本文将深入探讨供应链协作的重要性&#xff0c;以及如何在服装企业中建立和维护这种关键关系。 1. 供应链协作的背景 供应链协作是…

使用Python爬取GooglePlay并从复杂的自定义数据结构中实现解析

文章目录 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a;对JS逆向感兴趣的朋友可以关注《爬虫JS逆向实战》&#xff0c;对分布…

高速视频采集卡设计方案:620-基于PCIe的高速视频采集卡

一、产品概述 基于PCIe的高速视频采集卡&#xff0c;通过PCIe3.0X8传输到存储计算服务器&#xff0c;实现信号的分析、存储。 北京太速科技 产品固化FPGA逻辑&#xff0c;适配视频连续采集&#xff0c;缓存容量2GB&#xff0c;开源的PCIe QT客户端软件&#xff0c…

Kafka--Kafka日志索引详解以及生产常见问题分析与总结

一、Kafka的Log日志梳理 ​ 这一部分数据主要包含当前Broker节点的消息数据(在Kafka中称为Log日志)。这是一部分无状态的数据&#xff0c;也就是说每个Kafka的Broker节点都是以相同的逻辑运行。这种无状态的服务设计让Kafka集群能够比较容易的进行水平扩展。比如你需要用一个新…

数据库原理及应用·数据库系统结构

2.1 数据模型的概念 2.1.1 什么是数据模型 数据模型&#xff08;Data Model&#xff09; 是对现实世界数据特征的模拟和抽象&#xff0c;用来描述数据是如何组织、存储和操作的。 数据模型应满足如下三个条件&#xff1a; 能比较真实地模拟现实世界 容易为人所理解 便于在计…

设计模式(三)-结构型模式(3)-装饰模式

一、为何需要装饰模式&#xff08;Decorator&#xff09;? 在软件设计中&#xff0c;某个对象会组合很多不同的功能&#xff0c;如果把所有功能都写在这个对象所在的类里&#xff0c;该类会包含很多复杂的代码逻辑&#xff0c;导致代码不美观且难以维护。于是就有了再定义一些…

腾讯AI Lab C++开发日常实习 一面

我们是校企联合专业&#xff08;深大腾班&#xff09;&#xff0c;所以腾讯给了我们这个实习的机会&#xff0c;据说面试比一般日常实习的面试简单&#xff0c;记录人生第一次实习面试 上来先自我介绍 我介绍了学校专业和求职意向和开发经历&#xff0c;问没了&#xff1f; …

文具品牌企业网站建设的作用是什么

文具的应用非常广泛&#xff0c;不仅是学生、有些行业也会频繁使用&#xff0c;市场中大小文具品牌也是比较多&#xff0c;对文具品牌商和大经销商而言&#xff0c;批发远比零售更好&#xff0c;但在实际经营中&#xff0c;却也面临不少痛点&#xff1a; 1、拓客难 中小品牌商…

【解刊】1个月录用,18天见刊!CCF-A类顶刊,中科院基金委主办,国人占比97%!

计算机类 • 好刊解读 今天小编带来Springer旗下计算机领域顶刊&#xff0c;高分区高影响因子&#xff0c;新晋CCF-A类推荐&#xff0c;如您有投稿需求&#xff0c;可作为重点关注&#xff01;后文有相关领域真实发表案例&#xff0c;供您投稿参考~ 01 期刊简介 Science Chi…

重生奇迹MU觉醒战士攻略

剑士连招技巧&#xff1a;生命之光&#xff1a;PK前起手式&#xff0c;增加血上限。 雷霆裂闪&#xff1a;眩晕住对手&#xff0c;剑士PK战士第一技能&#xff0c;雷霆裂闪是否使用好关系到胜负。 霹雳回旋斩&#xff1a;雷霆裂闪后可以选择用霹雳回旋斩跑出一定范围(因为对手…

springboot云HIS医院信息管理系统源码

通过云HIS平台,可以减少医院投资,无需自建机房和系统,快速实现信息化服务。系统升级及日常维护服务有云平台提供,无需配备专业IT维护人员进行系统维护。 一、his系统和云his系统的区别 His系统和云his系统是两种不同的计算平台&#xff0c;它们在技术架构上存在很大的差异。下…

【jvm从入门到实战】(九) 垃圾回收(2)-垃圾回收器

垃圾回收器是垃圾回收算法的具体实现。 由于垃圾回收器分为年轻代和老年代&#xff0c;除了G1之外其他垃圾回收器必须成对组合进行使用 垃圾回收器的组合使用关系图如下。 常用的组合如下: Serial&#xff08;新生代&#xff09; Serial Old&#xff08;老年代&#xff09; Pa…

免 费 搭 建 小程序商城,打造多商家入驻的b2b2c、o2o、直播带货商城

在数字化时代&#xff0c;电商行业正经历着前所未有的变革。鸿鹄云商的saas云平台以其独特的架构和先进的理念&#xff0c;为电商行业带来了全新的商业模式和营销策略。该平台涉及多个平台端&#xff0c;包括平台管理、商家端、买家平台、微服务平台等&#xff0c;涵盖了pc端、…