阿里云服务器部署yolov5和gradio图传检测网页并通过rinetd端口转发至公网

概要

在阿里云服务器上部署yolov5和图传检测网页。原本只想通过HTML和PHP来实现,但此方法PHP的exec方法始终执行不了yolo的detect.py,具体原因未知。然后想通过flask来实现,此方法可行但有更方便的方法就是本文介绍的gradiorinetd端口转发。iptables也可实现端口转发但配置实在繁琐。

成果展示

在这里插入图片描述
左侧选择图片,右侧显示检测结果
电脑浏览器和手机浏览器都可访问

环境

服务器操作系统为linux centos7 ,nginx web服务器软件

Yolo环境

一下载conda虚拟环境
1. 下载Miniconda
wget -c https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
2. 添加权限
chmod 777 Miniconda3-latest-Linux-x86_64.sh
3.运行
sh Miniconda3-latest-Linux-x86_64.sh

注意看提示和协议然后回车,最后询问是否初始化【yes|no】输入no

4.编辑.bashrc文件添加conda的路径
vim ~/.bashrc
export PATH="$PATH:/你的miniconda3路径/bin:"

在这里插入图片描述

5.重启bashrc
source ~/.bashrc
6.验证conda
conda -V

出现conda版本则安装成功
在这里插入图片描述

7.创建python3.7的虚拟环境
conda create -n 虚拟环境名字 

虚拟环境的相关命令:

进入:conda activate 虚拟环境名字
切换:conda source activate 其他虚拟环境名字
退出:conda deactivate
查看:conda env list

二yolov5安装
1.github下载yolob5项目

https://github.com/ultralytics/yolov5
code下载zip至本地(此处下载至Windows)
在这里插入图片描述

2.下载.pt文件

网上说运行download_weights.sh下载,但我始终运行报错。
也可以在网上自行下载pt文件存放至yolo主目录
或者在下面运行yolo detect.py时指定pt并保持联网可自动下载

3.上传yolo文件至服务器

此处用filezilla上传至/home/文件夹下
在这里插入图片描述

4.配置yolov5

(虚拟环境中)进入yolov5的目录,执行命令安装依赖

pip install -r requirements.txt
5.运行yolov5

未加任何参数,识别自带的两张图片,并保存在runs/detect/exp

python detect.py

检测一个自己的视频或图片,名叫Testj.JPG,权重文件用yolov5x.pt (自动从GitHub下载)

python detect.py --source Testj.JPG --weights yolov5x.pt 

在这里插入图片描述

6.detact.py的部分参数(详自行搜索)
  • source:测试集文件/文件夹

  • conf-thres:置信度的阈值

    超过这个阈值的预测框就会被预测出来。

  • iou-thres:iou阈值

  • save-txt:是否把检测结果保存成一个.txt的格式
    txt默认保存物体的类别索引和预测框坐标(YOLO格式),每张图一个txt,txt中每行表示一个物体

  • max-det:每张图最大检测数量,默认是最多检测1000个目标

  • view-img:检测的时候是否实时的把检测结果显示出来 如果输入代码python detect.py
    –view-img,在检测的时候系统要把我检测的结果实时的显示出来,假如我文件夹有5张图片,那么模型每检测出一张就会显示出一张,直到所有图片检测完成。

  • classes:指定检测某几种类别。
    比如coco128.yaml中person是第一个类别,classes指定“0”,则表示只检测图片中的person。

  • project:预测结果保存的路径

安装torch包

torch是一个科学计算框架,广泛支持机器学习算法,并以高效的方式并行处理CPU和GPU。由于使用简单快速的脚本语言LuaJIT以及底层的C / CUDA实现,因此易于使用和高效。(详见百度)

pip install torch

检测安装

pip show torch

在这里插入图片描述

Gradio环境

Gradio就是一种快速搭建web界面来演示机器学习模型的方式,任何人都可以在任何地方使用它。

1.Gradio安装

使用pip自动安装

pip install gradio
2.Gradio测试

通过vim 创建一个测试页面Test.py

vim Test.py

编写代码

import gradio as gr
#输入文本处理程序
def greet(name):
    return "Hello " + name + "!"
#接口创建函数
#fn设置处理函数,inputs设置输入接口组件,outputs设置输出接口组件
#fn,inputs,outputs都是必填函数
demo = gr.Interface(fn=greet, inputs="text", outputs="text")
demo.launch()

运行程序

python Test.py

在这里插入图片描述
网页展示左边是文本输入框,右边是结果展示框。Clear按钮用于重置网页状态,Submit按钮用于执行处理程序,Flag按钮用于保存结果到本地。

Gradio默认端口为7860
和本地127.0.0.1地址
在代码launch函数中可输入参数更改:

  • share=True 分享此网站至公网但是通过Gradio的地址,可供显目此时,时间有限。此处不用
  • server_name 内网的ip地址
  • server_port 端口号

由于没有内网浏览器访问,则直接通过命令测试

curl 127.0.0.1:7860

返回网页代码则表示成功
在这里插入图片描述

3.Gradio代码

新建一个MyYolo.py文件
引入torch包和编辑图片接口
并添加两个参数控制显示阈值和重复阈值

完整代码:

import torch
import gradio as gr

model=torch.hub.load("/yolo的主目录/","custom",path="/pt文件的地址/",source="local")

title="标题内容..."

desc="简介内容..."

base_conf,base_iou=0.25,0.30

def det_image(img,conf,iou):
        model.conf=conf
        model.iou=iou
        return model(img).render()[0]

gr.Interface(inputs=["image",gr.Slider(minimum=0,maximum=1,value=base_conf),gr.Slider(minimum=0,maximum=1,value=base_iou)],
             outputs=["image"],
             fn=det_image,
             title=title,
             description=desc).launch()
4.后台运行

关闭终端保持运行

nohup python MyYolo.py &

返回进程的PID
在这里插入图片描述

可通过命令查看进程

netstat -nptl

关闭进程则通过

kill -9 进程的PID

rinetd端口转发

rinetd是一个单进程服务器,处理与文件中指定的地址/端口对的任意数量的连接。比iptables方便和小巧。

1.rinetd安装

安装依赖

yum -y install gcc gcc-c++ make

下载rinetd

wget https://github.com/samhocevar/rinetd/releases/download/v0.70/rinetd-0.73.tar.gz

解压

tar xf rinetd-0.70.tar.gz

进入目录

cd rinetd-0.73

编译安装

./bootstrap
./configure
make && make install
Sh

检查安装

rinetd -v

在这里插入图片描述

2.配置转发

编辑rinetd配置文件

vim /usr/local/etc/rinetd.conf

填写转发地址和端口

0.0.0.0 7866  127.0.0.1 7860

参数说明

0.0.0.0:源IP就是本机监听IP
7866 :源端口
127.0.0.1:目标IP
7860:目标端口

3.启动转发
rinetd -c /data/rinetd/etc/rinetd.conf

注意是阿里云服务器不要忘记开启安全组下的相应端口(7866)

查看进程

 netstat -aptl |grep rinetd
4.配置服务

创建rinetd服务

vim /etc/systemd/system/rinetd.service

复制下面内容

[Unit]
Description=rinetd
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/sbin/rinetd -c /usr/local/etc/rinetd.conf
ExecReload=/bin/kill -SIGHUP $MAINPID
ExecStop=/bin/kill -SIGINT $MAINPID

[Install]
WantedBy=multi-user.target

重载daemon

systemctl daemon-reload

然后就可以使用下面的命令来管理rinetd了。
#启动rinetd
service rinet start
#设置开机启动
systemctl enable rinetd
#停止rinetd
service rinet stop
#重启
service rinet restart
#状态
service rinet status

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值