YOLOv5如何部署到Web端?基于Flask的API构建教程

2025-06发布2次浏览

YOLOv5是一种高效的目标检测模型,将其部署到Web端可以实现在线目标检测功能。本文将详细介绍如何使用Flask构建一个基于YOLOv5的API,并将其部署到Web端。

1. 环境准备

首先需要确保你的开发环境已经安装了必要的依赖项。以下是所需的主要工具和库:

  • Python 3.6+
  • Flask
  • PyTorch
  • YOLOv5

安装依赖

pip install flask torch torchvision

此外,克隆YOLOv5仓库并安装其依赖:

git clone https://github.com/ultralytics/yolov5
cd yolov5
pip install -r requirements.txt

2. 构建Flask API

接下来我们将创建一个简单的Flask应用,该应用接收图像文件,使用YOLOv5进行目标检测,并返回检测结果。

创建Flask应用

创建一个新的Python脚本(例如app.py),并在其中添加以下代码:

from flask import Flask, request, jsonify
import torch
from PIL import Image
from pathlib import Path

app = Flask(__name__)

# 加载YOLOv5模型
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)

@app.route('/detect', methods=['POST'])
def detect():
    if 'file' not in request.files:
        return jsonify({'error': 'No file part'}), 400

    file = request.files['file']
    if file.filename == '':
        return jsonify({'error': 'No selected file'}), 400

    # 保存上传的文件
    filepath = Path('uploads') / file.filename
    filepath.parent.mkdir(parents=True, exist_ok=True)
    file.save(filepath)

    # 使用YOLOv5进行目标检测
    results = model(Image.open(filepath))

    # 获取检测结果
    detections = results.pandas().xyxy[0].to_json(orient="records")

    return jsonify(detections)

if __name__ == '__main__':
    app.run(debug=True)

测试API

启动Flask应用:

python app.py

然后你可以通过Postman或cURL发送一个POST请求来测试API。假设你有一个名为example.jpg的图片文件,可以通过以下命令测试:

curl -X POST http://127.0.0.1:5000/detect -F "file=@example.jpg"

你应该会收到一个包含检测结果的JSON响应。

3. 部署到Web端

为了将这个应用部署到Web端,可以选择多种方式,如使用Heroku、AWS、Google Cloud等服务。这里以Heroku为例进行简单介绍。

配置Heroku

首先,你需要在项目根目录下创建一个Procfile,内容如下:

web: gunicorn app:app

然后安装Gunicorn:

pip install gunicorn

接着创建一个requirements.txt文件,列出所有依赖项:

pip freeze > requirements.txt

最后,注册并登录Heroku,并创建一个新的应用:

heroku create your-app-name

推送代码到Heroku:

git push heroku master

现在,你的YOLOv5 Web应用应该已经上线了!