YOLOv5是一种高效的目标检测模型,将其部署到Web端可以实现在线目标检测功能。本文将详细介绍如何使用Flask构建一个基于YOLOv5的API,并将其部署到Web端。
首先需要确保你的开发环境已经安装了必要的依赖项。以下是所需的主要工具和库:
pip install flask torch torchvision
此外,克隆YOLOv5仓库并安装其依赖:
git clone https://github.com/ultralytics/yolov5
cd yolov5
pip install -r requirements.txt
接下来我们将创建一个简单的Flask应用,该应用接收图像文件,使用YOLOv5进行目标检测,并返回检测结果。
创建一个新的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)
启动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响应。
为了将这个应用部署到Web端,可以选择多种方式,如使用Heroku、AWS、Google Cloud等服务。这里以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应用应该已经上线了!