yolov5项目部署+微信小程序前端展示的全过程

yizhihongxing

下面我将详细讲解 "yolov5 项目部署+微信小程序前端展示的全过程",该过程主要包括以下几个步骤:

  1. 数据准备
  2. 模型训练
  3. 模型转换
  4. 模型部署
  5. 小程序展示

下面我将逐一介绍每个步骤所需的具体操作。

数据准备

首先需要准备训练数据,yolov5 支持的数据格式有图片和标签文件,其中标签文件可以是 .txt.json 格式。我们需要至少准备两个文件夹,一个是存放图片,一个是存放标签文件。

示例:

/images_folder
├── 1.jpg
├── 2.jpg
├── ...
├── 100.jpg
/labels_folder
├── 1.txt
├── 2.txt
├── ...
├── 100.txt

其中标签文件的格式为:

<class_index> <x_center> <y_center> <width> <height>

各字段含义:

  • class_index: 物体类别索引,从0开始。注意:要与训练时配置的类别一一对应。
  • x_center,y_center: 中心点坐标,相对于图片的宽高。
  • width,height:框的宽高,基于图片的宽高比例。

模型训练

接下来要进行模型训练,这里我们选择使用 yolov5 中的 train.py 文件训练模型。训练命令如下所示:

python train.py --data data.yaml --cfg ./models/yolov5s.yaml --weights '' --batch-size 4 --epochs 100

其中,

  • data.yaml: 数据的配置文件路径。
  • yolov5s.yaml: 模型配置文件路径。
  • weights: 预训练模型的路径。如果没有则置空。
  • batch-size: 训练批大小。
  • epochs: 训练的轮数。

模型训练完成后,会得到一个 .pt 文件,可以用于后续转换和部署。

模型转换

为了在前端部署时使用,我们需要将训练好的 .pt 模型转化为 .ptl 格式的模型,并且使用 export.py 文件转换成 onnx 模型。转换命令如下所示:

python export.py --weights xxx.pt --img-size 640 --batch-size 1 --dynamic

其中,

  • --weights:指定训练好的模型权重路径。
  • --img-size:指定模型收缩后的图像分辨率。
  • --batch-size:推理时的批次大小。
  • --dynamic:指定是否使用动态图计算图。

转换完成后,会得到一个 yolov5s.onnx 文件,可以用于后续的部署。

模型部署

在部署前,需要先搭建好模型服务环境,一般选择使用 torchserve 进行模型服务。这里我将使用 fastapi + torchserve 的方式进行部署。

首先,需要在 torchserve 上注册模型,并设定输入和输出格式。可以使用以下命令进行注册:

curl -X POST http://localhost:8081/models -H 'Content-Type: application/json' -d '{"model_name":"yolov5s", "url":"yolov5s.mar", "batch_size": 1, "max_batch_delay": 1000, "initial_workers": 1, "synchronous": true}'

其中,

  • model_name :模型名称。
  • url :模型文件名。
  • synchronous :是否使用同步模式,即批量大小为1。

然后将模型 .onnx 文件打包为 .mar 文件,可以使用以下命令:

torch-model-archiver --model-name yolov5s --version 1.0 --model-file yolov5s.onnx --handler image_classifier --extra-files ./models/yolov5s.yaml,./models/data.yaml

其中,

  • model_file :转换的模型文件路径。
  • handler :模型的处理方式,此处使用的是 image_classifier
  • extra-files :额外需要的文件。

最后将生成的 .mar 文件上传到 torchserve 上,也可以通过命令行进行上传:

curl -v -X POST "http://localhost:8081/models/yolov5s/1.0?initialWorkers=1&synchronous=true" -T yolov5s.mar

模型部署完成后,可以通过访问 http://localhost:8080/models 查看已经部署的模型。

小程序展示

最后,使用微信小程序作为前端,进行推理结果展示。这里需要将前面步骤中的文件和服务部署到服务器上,并且与小程序进行交互。

示例中使用的是 Python FastAPI 框架作为服务器,下面代码给出了一个示例:

from fastapi import FastAPI, File, UploadFile
from typing import List
import requests
import json

app = FastAPI()
url = 'http://localhost:8080/predictions/yolov5s'
headers = {'Content-Type': 'application/json'}
labels = ["person", "car", "bike", "trunk"]

@app.post("/predict")
async def predict(upload_file: UploadFile):
    with open(upload_file.filename, "wb") as buffer:
        buffer.write(await upload_file.read())
    files = {'file': (upload_file.filename, open(upload_file.filename, 'rb'), 'image/jpeg')}
    response = requests.post(url, files=files)
    results = response.json()[0]['predictions']
    ret = []
    for result in results:
        x1, y1, x2, y2 = result['bbox']
        x_center = (x1 + x2) / 2
        y_center = (y1 + y2) / 2
        width = x2 - x1
        height = y2 - y1
        category = labels[result['class_index']]
        ret.append({
            'x_center': x_center,
            'y_center': y_center,
            'width': width,
            'height': height,
            'category': category
        })
    return {'status': 'ok', 'predict_result': ret}

其中,

  • upload_file :上传的文件,可以通过 Postman 进行测试。
  • headers :把图片转成指定格式,并发送给 TorchServe。

具体实现可以参考官方文档和示例代码。这样,我们就可以在小程序上访问该接口,进行推理并展示结果。

以上就是 yolov5 项目部署+微信小程序前端展示的全过程,其中包含了数据准备、模型训练、模型转换、模型部署和小程序展示等多个步骤。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:yolov5项目部署+微信小程序前端展示的全过程 - Python技术站

(1)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法

    欢迎来到本站的 Python Tricks 分享区。在这个话题中,我们将详细讲解如何使用 pywinrm 远程控制 Windows 主机的方法。 什么是 pywinrm pywinrm 是微软 Windows Remote Management 的 Python 实现,它可以帮助开发者通过远程方式运行 PowerShell 脚本、查询 WMI 和修改 Win…

    python 2023年5月23日
    00
  • Python Django 封装分页成通用的模块详解

    在Django中,我们可以使用分页功能来处理大量数据。为了方便重复使用,我们可以将分页功能封装成通用的模块。以下是一个详细的攻略,包含了封装分页功能的步骤和示例。 1. 安装Django 在开始之前,我们需要安装Django。可以使用以下命令安装Django: pip install Django 2. 创建分页模块 我们可以创建一个名为pagination…

    python 2023年5月15日
    00
  • 学习Python爬虫前必掌握知识点

    学习Python爬虫前必掌握知识点,包括以下几个方面: 1. Python基础知识 Python是一门高级编程语言,支持多种编程范式。在学习Python爬虫前,需要掌握Python的基础语法,包括但不限于: 变量的定义与使用 数据类型(数字、字符串、列表、字典、元组等) 条件语句与控制结构(if-else、for、while等) 函数的定义与调用 模块的导入…

    python 2023年5月14日
    00
  • 10 分钟快速入门 Python3的教程

    下面是“10分钟快速入门Python3的教程”的完整攻略: 1. 安装Python3 在入门前,需要先安装Python3,在官方网站上下载对应操作系统的安装包,安装完成后,可以在命令行窗口中输入以下命令,确认Python版本是否正确: python3 –version 2. 学习Python基础语法 Python基础语法非常简洁易懂,它是一种通用编程语言,…

    python 2023年5月13日
    00
  • 如何利用Python将字典转为成员变量

    将字典转为成员变量是Python中常见的一个操作,可以提高代码的可读性和易用性。以下是将字典转为成员变量的完整攻略。 1. 使用setattr()函数 Python内置的setattr()函数可以动态地将一个对象的属性设置为指定的值。因此,可以遍历字典中的键值对,通过setattr()函数把它们转换为该对象的成员变量。 示例代码: # 定义一个类 class…

    python 2023年5月13日
    00
  • 详解Python PIL tobytes()方法

    Python PIL (Python Imaging Library)是Python语言下的图像处理标准库,提供了丰富的图像处理和格式转换功能。其中tobytes()方法用于将PIL Image对象中的图像数据转换成bytes类型的数据。以下是该方法的完整攻略。 1. tobytes()方法的语法 def tobytes(self, encoder_name…

    python-answer 2023年3月25日
    00
  • 利用python爬取有道词典的方法

    下面是利用Python爬取有道词典的完整攻略: 1. 安装必要的库 首先,我们需要安装两个必要的Python库:requests和Beautiful Soup 4。打开终端或命令行界面,输入以下命令: pip install requests pip install beautifulsoup4 2. 网页分析 在正式编写爬虫之前,我们需要先分析一下有道词典…

    python 2023年5月13日
    00
  • Python如何把不同类型数据的json序列化

    当我们使用Python提供的json模块进行JSON序列化时,我们会发现对于每个数据类型,都会有不同的方法来进行序列化。 以下是一些常见的Python数据类型,及其对应的JSON序列化方法。 字符串(String)序列化 字符串序列化是非常简单的,它只需要将字符串用双引号包裹起来即可。例如: import json data = { "name&q…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部