栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【源码】YOLOv5云端API部署

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【源码】YOLOv5云端API部署

简介


这是一个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中的HOST和POST保持一致访问):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训练出来的权重,其他版本训练出来的权重,需要调整相应的文件,即modules和utils文件夹为对应版本即可!

将你自己训练的模型重新命名为:weights.pt,在Serving_modelcommodity文件夹下新建一个最新的数字文件夹(例如Serving_modelcommodity文件夹下有一个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模型预测该张图片的时间
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/894646.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号