明火烟雾目标检测项目部署(YoloV5+Flask)

2023-05-16

明火烟雾目标检测项目部署

文章目录

  • 明火烟雾目标检测项目部署
  • 1. 拉取Docker PyToch镜像
  • 2. 配置系统环境
    • 2.1 更换软件源
    • 2.2 下载vim
    • 2.3 解决vim中文乱码问题
  • 3. 运行项目
    • 3.1 拷贝项目到容器中
    • 3.2 安装项目所需的工具包
    • 3.3 启动项目
  • 4.搭建项目镜像
    • 4.1 Docker commit搭建
    • 4.2 Dockerfile搭建
  • 5.发布项目镜像

这个项目是我去年负责的项目,当时还有一些小问题没有完全解决,同时也受限于当时的知识储备,就一直搁置到现在。在经过相关知识的学习后,这两天也是花了不少心思在完善这个项目,最终是修改成了理想的状态。

目前的效果是通过网页打开,用户通过上传图片,后端会检测图片是否存在明火或者烟雾。经过调试后该项目可以在不同设备上打开,前端会自适应不同设备。使用的框架是PyTorch,使用的算法是YoloV5算法(4.0版本),使用的模型是经过训练后的YoloV5-S模型。

同时我也是将该项目通过Docker进行封装成镜像,方便在其他系统上部署而不需要重复安装环境。

下面是项目的效果。

在这里插入图片描述

1. 拉取Docker PyToch镜像

从Docker Hub拉取PyTorch的镜像,在该镜像上进行下面的操作。

# 拉取镜像
$ docker pull pytorch/pytorch:latest
# 生成容器
$ docker run -dit --name fire -p 5001:5001 pytorch/pytorch:latest
# 进入容器
$ docker exec -it fire bash

查看容器torch的版本,进入python终端输入下面的指令,可以看到使用的torch版本是1.10.0

>>> import torch
>>> torch.__version__
'1.10.0'
>>>

2. 配置系统环境

2.1 更换软件源

先备份原有的软件源,命令如下。

cp /etc/apt/sources.list /etc/apt/sources.list.bak

因为镜像没有安装vim,故只能通过echo指令更改/etc/apt/sources.list文件内容。
清华源

# 清空文件内容
echo "">/etc/apt/sources.list
echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted">>/etc/apt/sources.list
echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted">>/etc/apt/sources.list
echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial universe">>/etc/apt/sources.list
echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates universe">>/etc/apt/sources.list
echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial multiverse">>/etc/apt/sources.list
echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates multiverse">>/etc/apt/sources.list
echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse">>/etc/apt/sources.list
echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted">>/etc/apt/sources.list
echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security universe">>/etc/apt/sources.list
echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security multiverse">>/etc/apt/sources.list

阿里源

echo "deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse">>/etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse">>/etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse">>/etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse">>/etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse">>/etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse">>/etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse">>/etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse">>/etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse">>/etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse">>/etc/apt/sources.list

更新软件源。

apt-get update
apt-get upgrade

2.2 下载vim

修改文件内容需要使用vim,所以要下载。

apt-get install vim -y

下载完成后可以通过下面的指令查看vim的版本。

vim --version

2.3 解决vim中文乱码问题

修改/etc/vim/vimrc内容,在最后面添加下面的内容:

set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8

设置后文件内的中文就可以正常显示了。

3. 运行项目

3.1 拷贝项目到容器中

将本机上的项目代码文件拷贝到容器的工作目录下。

$ docker cp "本机上项目的路径" fire:/workspace/

上面的指令实现的功能是,将项目拷贝到fire容器中的/workspace/目录下。

3.2 安装项目所需的工具包

使用pip指令下载工具包,-i后面使用的清华源,最后是工具包的名称。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple packageName

在该容器中,我需要安装的包如下:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python-headless
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple matplotlib
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scipy
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple flask
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyyaml

其中我在安装opencv-python这个包后,在执行项目的时候报错了:

ImportError: libGL.so.1: cannot open shared object file: No such file or directory

在网上搜索到的解决方法就是安装opencv-python-headless

3.3 启动项目

flask_app.py中需要检查主机号和端口号,主机号要写成0.0.0.0不然本机打不开项目,如果端口号要和创建容器时映射的端口一致(这里我设置了5001)。而且要关闭调试模式。

app.run(debug=False, host='0.0.0.0', port=5001)

在完成以上的操作后,在终端中输入如下指令启动项目:

python flask_app.py

在这里插入图片描述

这时在本机的浏览器上输入localhost:5001即可成功打开项目页面了!

在这里插入图片描述

4.搭建项目镜像

现在把项目所在的容器封装成镜像,方便不同系统上的部署。这里我采用两种方法搭建,分别是Docker commitDockerfile搭建项目镜像。

4.1 Docker commit搭建

在Docker中,镜像是多层存储,每一层是在前一层的基础上进行的修改;而容器同样也是多层存储,是在以镜像为基础层,在其基础上加一层作为容器运行时的存储层。

在该项目中,我们是在pytorch镜像的基础上创建了fire这个容器,并在该容器中进行了修改操作。可以通过 docker diff 命令看到具体的改动。

$ docker diff CONTAINER

docker commit 命令可以将容器的存储层保存下来成为镜像。换句话说,就是在原有镜像的基础上,再叠加上容器的存储层,并构成新的镜像。docker commit 的语法格式为:

$ docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]

在该项目中,我使用如下的指令构建项目镜像:

$ docker commit --author "xxxx" --message "Fire Detection Project" fire username/image:tag

其中 --author 是指定作者,而 --message 则是记录本次修改的内容。这点和 git 版本控制相似,不过这里这些信息也可以省略不写。需要注意的是仓库名必须是小写。

docker image ls指令可以查看我们新创建的镜像。

使用docker run指令可以根据项目镜像生成项目容器,该容器已经配置好环境了,在容器中直接启动服务即可。

4.2 Dockerfile搭建

Dockerfile文件内容如下:

# FROM 指定基础镜像
FROM pytorch/pytorch:1.8.1-cuda10.2-cudnn7-runtime
# 指定Docker命令的工作路径,如果路径不存在,Docker会自动创建
WORKDIR /app
# 将所有程序拷贝到Docker镜像中
# COPY <本地路径> <目标路径>
# 第一个'.'代表程序根目录下的所有文件;第二个'.'代表Docker镜像中的路径,即当前的工作路径'/app/'
COPY . .
# 创建镜像,安装环境,RUN指令是在创建镜像时使用
RUN cp /etc/apt/sources.list /etc/apt/sources.list.bak \
    && echo "">/etc/apt/sources.list \
    && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted">>/etc/apt/sources.list \
    && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted">>/etc/apt/sources.list \
    && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial universe">>/etc/apt/sources.list \
    && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates universe">>/etc/apt/sources.list \
    && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial multiverse">>/etc/apt/sources.list \
    && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates multiverse">>/etc/apt/sources.list \
    && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse">>/etc/apt/sources.list \
    && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted">>/etc/apt/sources.list \
    && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security universe">>/etc/apt/sources.list \
    && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security multiverse">>/etc/apt/sources.list \
    && apt-get update \
    && apt-get install vim -y \
    && pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
# CMD指令用来指定当Docker容器运行起来执行的命令
CMD ["python","flask_app.py"]

requirements.txt内容如下。

opencv-python-headless
matplotlib
scipy
flask
pyyaml

Dockerfile文件目录下输入下面的指令:

$ docker build -t firedemo .

-t参数是指定镜像名称,.告诉docker在该目录下寻找Dockerfile文件。

在这里插入图片描述

通过docker run指令来启动一个容器。指令如下:

$ docker run -p 5001:5001 -d --name firetest firedemo

然后在本机浏览器上输入localhost:5001即可使用服务!

5.发布项目镜像

在Docker Hub上创建一个仓库。将搭建好的项目镜像推送到远端仓库中,指令如下:

$ docker push username/image:tag

上传成功后,此时可以从远端仓库拉取部署使用。

$ docker run -dit -p 5001:5001 --name firetest username/image:tag
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

明火烟雾目标检测项目部署(YoloV5+Flask) 的相关文章

  • 无法在 Flask 后端提取 React 前端上传的图像文件

    我正在尝试将图像文件 驻留在本地 从我的反应单页前端应用程序发送到我的烧瓶后端 我尝试过但不限于捕获我的内容类型并在前端指示 encType 的一些事情 尽管如此 post请求表明它是成功的 但是 当我记录 requests files r
  • 视频背景和按钮 - 移动

    我已经建立了this app http finnfrotscher pythonanywhere com on Flask 目前没有移动支持 由于视频加载时间相当长 因此我希望在手持设备上打开页面时提供相同的视频 但具有不同的分辨率 剪辑和
  • Flask 模板中点表示法和方括号之间的区别

    在 Flask Web 框架中使用方括号或点符号有什么区别 两者似乎都有效 例如 在Python脚本中我可以设置session username Geraint 然后我可以使用模板访问它 session username or sessio
  • 提交搜索表单后无法使用 Flask 应用程序从 url 检索变量

    我想在用户提交搜索表单后呈现一个新视图 我的制作方式与处理其他视图的方式相同 但不幸的是这次没有发生任何事情 我无法从应用程序路由中检索内容 所以这个问题不是重复的this https stackoverflow com questions
  • Flask-SQLAlchemy:如何有条件地插入或更新行

    我的应用程序使用 Flask Flask SQLAlchemy Flask WTF 和 Jinja2 的组合 在当前的版本中 我有一个设置表 该表只有一条记录和一个字段 最初该表包含零条记录 我想要实现的是 鉴于数据库中不存在任何条目 则显
  • 在 Flask 中,如何在单击按钮时生成动态 URL?

    例如 现在如果我在表单元素中有两个按钮 当您单击其中任一按钮时 您将被定向到相应的配置文件
  • 使用 Flask 时在 Python 中实现持久数据库连接的最佳实践

    我的问题是关于在生产环境或其他关注性能的环境中使用 Flask 时处理数据库连接的推荐方法 在 Flask 中 g 对象可用于存储内容 并且可以将打开的数据库连接放置在那里 以允许应用程序在同一请求期间的后续数据库查询中重用它们 但是 g
  • 如何将 Jinja 与 Twisted 一起使用?

    我正在计划使用 Python 与 Twisted Storm 和 Jinja 一起开发一个讨论软件 问题是 Jinja 不是为 Twisted 或异步套接字库而设计的 并且使用 Twisted 提供的性能是我不打算使用 Flask 的原因
  • 运行迁移时出错:sqlalchemy.exc.CompileError:Postgresql ENUM 类型需要名称

    当我第一次尝试运行升级时遇到此错误 尽管我已经给了它一个 name 属性 但它似乎在性别类型枚举上失败了 有解决办法吗 有什么方法可以查看生成的 SQL 内容吗 这是我的 models py 这是我运行flask ext migrate u
  • Flask 会话不持久(Postman 有效,Javascript 无效)

    我正在开发一个 Flask 服务器 用于通过网络在一些后端 Python 功能和 Javascript 客户端之间进行通信 我正在尝试利用 Flask 的session变量来存储用户在与应用程序交互过程中的特定数据 我已经删除了下面大部分应
  • 我的本地 postgresql 数据库 url 的形式是什么?

    我正在学习 Flask sqlalchemy 教程https pythonhosted org Flask SQLAlchemy quickstart html a minimal application https pythonhoste
  • Flask 无法识别两个 URL 参数

    我正在尝试将两个参数发送到使用 Flask 路由的 URL If I do curl i http 127 0 0 1 5000 api journeys count startStationName Hansard 20Mews 20Sh
  • login_required 装饰器不起作用,flask-Login 允许匿名用户

    我装饰了一个方法login required 但令我惊讶的是它不是执行完全允许匿名用户进入 打印current user方法内返回
  • Flask:缓存静态文件(.js、.css)

    我真的找不到任何这方面的资源 那么如何将视图 函数的缓存与静态文件 即 css js 分开 我想将静态对象缓存一周 另一方面 我只需要缓存函数 视图几分钟 当我执行以下操作时 from flask ext cache import Cach
  • 使用 Flask-SQLAlchemy 进行多对多多数据库连接

    我正在尝试使这个多对多联接与 Flask SQLAlchemy 和两个 MySQL 数据库一起工作 并且它非常接近 只是它为联接表使用了错误的数据库 这是基础知识 我有main db and vendor db 表格设置为main db u
  • 从 Flask 中的 S3 返回 PDF

    我正在尝试在 Flask 应用程序的浏览器中返回 PDF 我使用 AWS S3 来存储文件 并使用 boto3 作为与 S3 交互的 SDK 到目前为止我的代码是 s3 boto3 resource s3 aws access key id
  • 如何测试send_file烧瓶

    我有一个小型烧瓶应用程序 它需要上传一些图像并将它们转换为多页 tiff 没什么特别的 但是如何测试多个文件的上传和文件下载呢 我的测试客户端 class RestTestCase unittest TestCase def setUp s
  • 用于 OAuth 身份验证的 WSGI 中间件

    我使用构建了一个非常小的网络应用程序Flask http flask pocoo org 现在我想向网站添加非常基本的身份验证 我不需要授权 由于 Flask 不支持开箱即用的 auth auth 我想插入 WSGI 中间件来完成这项工作
  • Flask 应用程序路由中的多个参数

    烧瓶怎么写app route如果我在 URL 调用中有多个参数 这是我从 AJax 调用的 URL http 0 0 0 0 8888 createcm summary VVV change Feauure 我试图写我的烧瓶app rout
  • 在 docker 中根据更改重新启动 Flask 应用程序

    我正在使用 Flask script 来运行我的应用程序 if name main manager run 在 docker 中我有以下内容 CMD python manage py runserver h 0 0 0 0 p 5000 现

随机推荐

  • 随机变量 的 分布函数 与 概率密度函数 的区别

    目录 1 分布函数 2 概率密度函数 1 分布函数 分布函数 显示了随机变量的取值落在某个区间上的概率 xff0c 是一种不减函数 设 X 是一个随机变量 xff0c x 是任意实数 xff0c 函数 成为 X 的分布函数 分布函数是一个普
  • PCL(1)搭建与工业测量应用 总结

    PCL搭建与工业测量应用 PCL Point Cloud Learning 0 摘要 windows和ROS下安装配置PCL开发环境 利用CMake等编程模式建立实例应用程序 掌握PCL开发环境搭建流程 注意事项和关键配置选项 开发自己的P
  • 创建ROS工作空间

    创建ROS工作空间
  • matlab 相机标定

    matlab 相机标定 原理链接描述 matlab 自带相机标定工具 1 教程链接描述 2 链接描述 3 链接描述
  • 大疆览沃浩界(Livox Horizon)激光雷达测评(激光相机联合标定)

    1 大疆览沃浩界 xff08 Livox Horizon xff09 激光雷达测评 测评链接 2 livox horizon激光与zed相机彩色点云地图构建 3 Autoware激光雷达与网络摄像机联合标定 四 Livox Horizon
  • ceres-slover库安装

    安装ceres slover 2 1版本
  • ZED相机+ubuntu 18.04+ros melodic

    0 l环境配置 1 安装链接描述 2 双目标定 3 zed cpu安装 guithub
  • UBUNTU 笔记常用软件

    金山文档 有道笔记 JOPLIN
  • ROS中用cv_bridge和opencv时出现cv::xxx未定义的问题

    1前景提要 xff1a cv bridge是ros中常用的消息类型转换的包 xff08 ros自带的包 xff09 xff0c 要在ros环境下利用opencv处理USB相机拍摄的视频必须用到cv bridge xff08 如下图 xff0
  • 忘记hadoop安装路径,忘记hadoop根目录怎么进入根目录启动hadoop

    有时候很久没用VMware虚拟机了 xff0c Linux操作系统如果不是刻意去用 xff0c 基本上没什么机会去使用 更别提计算机小白了 xff0c Windows系统都没弄懂 xff0c 又出来一个Linux系统 某天我打开目录 xff
  • 微服务应用之OAuth2.0的四种授权方式

    引言 OAuth 2 0 是一种授权机制 xff0c 主要用来颁发令牌 xff08 token xff09 OAuth 2 0 的标准是 RFC 6749 文件 xff0c 这个文件写出 xff08 由于互联网有多种场景 xff0c xff
  • 期望、方差、协方差、相关系数的理解

    目录 1 数学期望 xff08 均值 xff09 2 方差 D X 或 Var X 3 协方差 Cov X Y 4 相关系数 5 协方差矩阵 一句话概括 xff1a 期望 反映了平均水平 xff0c 方差 反映了数据波动程度 xff0c 协
  • Ubuntu系统通过脚本实现循环访问网页

    bin bash step 61 5 间隔的秒数 for i 61 0 i lt 60 i 61 i 43 step do curl https www baidu com crul能达到想要的效果 w3m https www csdn n
  • resource not found: roslaunch和Command ‘rosrun‘ not found的解决方法

    安装ros的时候 xff0c 历经种种困难后终于完成了前面的步骤 xff0c 却在运行roscore时再次出现了问题 xff1a Resource not found roslaunch ROS path 0 61 opt ros noet
  • vscode配置clang-tidy插件

    先拥有一个 clang tidy文件 首先确保系统已经安装clang tidy xff0c 在项目的目录下新建一个 clang tidy文件 xff0c 具体如何配置在网上搜索 xff0c 或者用已有的 也可以在vscode的文件中配置 x
  • 4、linux初级——Linux在开发板中的使用

    目录 一 用CRT连接开发板 1 安装CRT调试工具 2 连接开发板 3 开机后ctrl 43 c关闭登录程序可以进入命令行 二 开发板和电脑文件之间的传输 xff08 串口 xff09 1 rx xff08 从电脑下载文件到开发板 xff
  • FreeRtos--中断

    采用二值信号量同步 二值信号量可以在某个特殊的中断发生时 xff0c 让任务解除阻塞 xff0c 相当于让任务与中断同步 这样就可以让中断事件处理量大的工作在同步任务中完成 xff0c 中断服务例程 ISR 中只是快速处理少部份工作 如此
  • FreeRTOS--资源管理

    函数重入 如果一个函数可以安全地被多个任务调用 xff0c 或是在任务与中断中均可调用 xff0c 则这个函数是可重入的 每个任务都单独维护自己的栈空间及其自身在的内存寄存器组中的值 如果一个函数除了访问自己栈空间上分配的数据或是内核寄存器
  • vscode代码提交到gittee码云 第一次提交方法

    学习3 xff1a 今天是第一次将vscode代码提交到gittee xff0c 废话不多说 xff0c 直接上方法 xff1a 查看git仓库 gt git status 将当前项目文件初始化为仓库 如果当前文件夹不是git仓库 xff0
  • 明火烟雾目标检测项目部署(YoloV5+Flask)

    明火烟雾目标检测项目部署 文章目录 明火烟雾目标检测项目部署1 拉取Docker PyToch镜像2 配置系统环境2 1 更换软件源2 2 下载vim2 3 解决vim中文乱码问题 3 运行项目3 1 拷贝项目到容器中3 2 安装项目所需的