【源码】YOLOv5云端API部署

【源码】YOLOv5云端API部署,第1张

简介


这是一个YOLOv5的云端部署代码,其存在的主要目的是为了解决将YOLOv5训练出来的权重或者官方权重简单快速的部署上云服务或者Docker中,并且可以通过POST请求在任意代码中调用(如Java、Python、Android…)。

  • 环境要求:python3和YOLOv5官方指定环境
  • 设备要求:Windows(GPU/CPU)、Linux(GPU/CPU)
目录
.
├── Serving_model # 模型文件夹
│   └── commodity
│       └── 1     # 版本
│           └── weights.pt # 权重
├── clear.bat     # Windows环境下清理服务缓存
├── clear.sh	  # Linux环境下清理服务缓存
├── config.yaml   # 配置文件
├── detector.py   # YOLOv5的封装
├── images        # 测试图和POST案例
│   ├── bus.jpg
│   ├── post.py   # POST案例
│   └── zidane.jpg
├── models        # YOLOv5文件夹
├── server.py     # 云端部署主Server启动文件
├── static		  # 静态网页相关内容
│   ├── css
│   │   └── overall.css
│   ├── icon
│   │   └── favicon.png
│   └── js
│       ├── jquery-1.11.1.min.js
│       └── main.js
├── templates
│   └── Index.html # 静态页面
└── utils         # YOLOv5工具文件夹
使用
  1. 面包多-【源码】YOLOv5云端API部署
  2. 修改配置文件config.yaml:
# 未解释内容不要做修改!!!
HOST: localhost # 本地测试为localhost,云端部署为0.0.0.0
PORT: 8090 # 根据需求指定端口,默认8090

FOLDER: ['caches', 'results','results_json']
CACHE_FOLDER: caches
RESULTS_FOLDER: results
ALLOWED_EXTENSIONS: ['png', 'jpg', 'jpeg']

MYDEVICE: '0' # 使用的设备('0':代表使用GPU;'cpu':代表使用CPU)
IMG_SIZE: 640 # 输入图片大小640
THRESHOLD: 0.6 # 置信度
DIR_PATH: Serving_model/commodity/
  1. 修改server.py:
# 第101到114行,确定某种场景下使用后,删除另外一种方式即可
'''
方式一运行,调试情景下使用
app.run()中可以接受两个参数,分别是threaded和processes,用于开启线程支持和进程支持。
1.threaded : 多线程支持,默认为False,即不开启多线程;
2.processes:进程数量,默认为1.
'''
app.run(host=cfg['HOST'], port=cfg['PORT'], debug=False, threaded=True, processes=1)

'''
方式二运行,部署情景下使用
'''
# server = pywsgi.WSGIServer((cfg['HOST'],cfg['PORT']),app)
# server.serve_forever()
  1. 启动服务:
# 确认自己安装好python3环境,其他环境同YOLOv5官方指定环境
python server.py

输出
============================================
Model Version:1,Use Model Weight:/weights.pt
============================================
YOLOv5  2022-2-9 torch 1.10.1+cu102 CUDA:0 (NVIDIA GeForce GTX 1050, 4096MiB)

Fusing layers...
Model Summary: 213 layers, 7225885 parameters, 0 gradients, 16.5 GFLOPs
 * Serving Flask app 'server' (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://localhost:8090/ (Press CTRL+C to quit)
  1. 服务启动后,在浏览器访问(与配置文件config.yaml中的HOSTPOST保持一致访问):http://127.0.0.1:8090 即可

  2. 测试发送post请求:

# 进入images文件夹下,修改post.py即可
import requests
import json

url = 'http://127.0.0.1:8090/detect'
files = {'file': open('./bus.jpg', 'rb')}
r = requests.post(url, files=files)
print(r.text)
# 之后运行这个post.py文件
输出:
{
    "img_info": {
        "bus-04": {
            "confidence": 0.849,
            "label": "bus",
            "xmax": 810,
            "xmin": 13,
            "ymax": 789,
            "ymin": 223
        },
        "person-01": {
            "confidence": 0.896,
            "label": "person",
            "xmax": 810,
            "xmin": 672,
            "ymax": 878,
            "ymin": 395
        },
        "person-02": {
            "confidence": 0.87,
            "label": "person",
            "xmax": 346,
            "xmin": 221,
            "ymax": 867,
            "ymin": 408
        },
        "person-03": {
            "confidence": 0.852,
            "label": "person",
            "xmax": 248,
            "xmin": 49,
            "ymax": 912,
            "ymin": 390
        }
    },
    "img_url": "static\caches\ba26d4fff86a4143a00daf058ee458eb.jpg",
    "result_url": "static\results\ba26d4fff86a4143a00daf058ee458eb.jpg",
    "status": 1,
    "time": "1.6179s"
}
  1. 更换为你自己训练的模型:

请注意,我们的API服务默认支持YOLOv5 version6.1训练出来的权重,其他版本训练出来的权重,需要调整相应的文件,即modulesutils文件夹为对应版本即可!

将你自己训练的模型重新命名为:weights.pt,在Serving_model\commodity文件夹下新建一个最新的数字文件夹(例如Serving_model\commodity文件夹下有一个1文件夹,你可以新建一个2文件夹),将weights.pt放入到新建的这个数字文件夹。

这里我们的server.py里面会自动检测大数字的文件夹并且调用其权重。这里2比1大因此会优先调用2文件夹中的权重。

  1. 重复上述步骤4-6即可完成自己项目的本地部署和测试。
  2. 云端部署与本地部署无差异。
API参数解释

前面我们说到将YOLOv5做成了API服务,参数解释如下:

发送
参数解释
file二进制读取的图片
回传
参数解释
status1 - 成功检测到目标;0 - 未检测到目标
img_url上传的图片在云端存储地址
result_url模型检测绘制的图片的云端存储地址
result_json模型检测信息的云端存储地址
img_info返回多个物体的检测类别、置信度、xywh值
time模型预测该张图片的时间

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/942234.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-18
下一篇 2022-05-18

发表评论

登录后才能评论

评论列表(0条)

保存