yolov5的flask部署python调用

yolov5 github:https://github.com/ultralytics/yolov5
跟踪:https://github.com/mikel-brostrom/Yolov5_DeepSort_Pytorch
TensorRT:https://github.com/TrojanXu/yolov5-tensorrt
NCNN:https://github.com/WZTENG/YOLOv5_NCNN

detect:

from torchvision import transforms
import torch
from PIL import Image,ImageDraw
from models import yolo
from utils.general import non_max_suppression
from models.experimental import attempt_load

# model = yolo.Model(r"D:\GoogleEarthProPortable\yolov5-master\models\yolov5s.yaml")
# model.load_state_dict(torch.load(r"D:\GoogleEarthProPortable\yolov5-master\weights\yolov5s.pt"))
model = attempt_load("weights/yolov5s.pt")  # load FP32 model
model.eval()

img = Image.open("inference/images/bus.jpg")

tf = transforms.Compose([
    transforms.Resize((512,640)),
    transforms.ToTensor()
])

print(img.size) # w,h
scale_w = img.size[0] /640
scale_h = img.size[1] /512
im = img.resize((640,512))

img_tensor = tf(img)

pred = model(img_tensor[None])[0]
pred = non_max_suppression(pred,0.3,0.5)

imgDraw = ImageDraw.Draw(img)
for box in pred[0]:
    b = box.cpu().detach().long().numpy()
    print(b)
    imgDraw.rectangle((b[0]*scale_w,b[1]*scale_h,b[2]*scale_w,b[3]*scale_h))
    # imgDraw.rectangle((b[0],b[1],b[2],b[3]))
img.show()

serving:

import io
import json

from torchvision import models
import torchvision.transforms as transforms
from PIL import Image,ImageDraw

from utils.general import non_max_suppression
from models.experimental import attempt_load

from flask import Flask, jsonify, request
app = Flask(__name__)

model = attempt_load("weights/yolov5s.pt")  # load FP32 model
model.eval()

names= ['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light',
        'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow',
        'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',
        'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard',
        'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple',
        'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',
        'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone',
        'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear',
        'hair drier', 'toothbrush']

def transform_image(image_bytes):
    my_transforms = transforms.Compose([transforms.Resize((512,640)),
                                        transforms.ToTensor(),
                                        ])
    image = Image.open(io.BytesIO(image_bytes))
    return my_transforms(image)

def get_prediction(image_bytes):
    tensor = transform_image(image_bytes=image_bytes)
    outputs = model(tensor[None])[0]
    print(outputs)
    outputs = non_max_suppression(outputs,0.3,0.5)
    boxs = outputs[0]
    print(boxs[0])
    print(int(boxs[0][-1].item()))
    class_name = names[int(boxs[0][5].item())]
    print(boxs.shape)
    boxes = []
    for i in range(boxs.shape[0]):
        boxes.append([boxs[i][0].item(),boxs[i][1].item(),boxs[i][2].item(),boxs[i][3].item(),boxs[i][4].item(),boxs[i][5].item()])

    return boxes

@app.route('/predict', methods=['POST'])
def predict():
    if request.method == 'POST':
        file = request.files['file']
        img_bytes = file.read()
        boxes = get_prediction(image_bytes=img_bytes)
        return ({'boxes': boxes})


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

client:

import requests
import os

for i in os.listdir("inference/images"):
    image = open("inference/images/"+i,'rb')
    payload = {'file':image}
    r = requests.post(" http://localhost:5000/predict", files=payload).json()
    print(r)

git bash控制台:
启动flask服务器:FLASK_ENV=development FLASK_APP=app.py flask run
测试命令:curl -X POST -F file=@test_img/dog.jpg http://localhost:5000/predict

  • 3
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: YOLOv5 是一个目标检测模型,Flask 是一个 Python 的 Web 框架。 要在 Flask部署 YOLOv5,需要以下步骤: 1. 安装 Flask 和相关依赖 2. 加载 YOLOv5 模型 3. 创建一个 Flask 应用程序 4. 定义路由,处理图像上传请求 5. 使用 YOLOv5 模型处理图像并返回结果 6. 部署 Flask 应用程序 有关详细信息,请参考 Flask 官方文档和 YOLOv5 文档。 ### 回答2: YoloV5是一种非常流行的目标检测框架,它能够在实时物体检测任务中取得非常出色的表现。在实际部署中,常常需要将YoloV5模型进行封装,并将其制作成Web服务,以便能够对外提供接口。 其中,Flask是一种非常常用的Python Web框架,它可以用于快速构建Web应用程序。因此,使用FlaskYoloV5模型制作成Web服务,是一种常见而且非常有效的方式。 具体来说,Flask可以帮助我们实现如下功能: 1. 构建基础的Web服务框架,提供HTTP请求的解析、路由分发、错误统一处理等功能。 2. 将YoloV5模型嵌入到Flask中,并提供对外接口,以便于客户端进行调用。 3. 提供静态文件和模板管理功能,方便Web应用程序的开发和管理。 4. 支持插件扩展、中间件管理、Session管理等高级功能,提供更灵活、更强大的Web服务能力。 在具体实现中,我们可以参考一些可用的代码库,例如GitHub上提供的yolov5-flask代码示例。该示例包含了完整的YoloV5模型封装、Flask服务构建、路由分发、图像预处理和结果返回等所有必要功能,可以直接用于实际环境中。同时,该示例也提供了多种配置选项、调试信息和日志记录等辅助功能,方便开发者进行自定义修改和优化。 总之,使用FlaskYoloV5模型封装成Web服务,是一种非常有效和流行的做法。它可以帮助我们快速构建出高可用、高性能的Web服务,实现物体检测任务的端到端处理。对于需要实现物体检测的应用场景,这种方法是一种非常值得尝试的技术方案。 ### 回答3: YOLOv5 是近年来最为热门的目标检测模型之一,其能够快速、准确地检测图像或视频中的物体,被广泛应用于智能监控、自动驾驶、人脸识别等领域。而 Flask 是一个轻量级的 Python Web 开发框架,可以方便地构建 Web 服务器应用。这里将介绍如何将 YOLOv5 模型与 Flask 框架结合起来进行部署。 步骤一:准备工作 首先,我们需要确保已经安装好了 Python 环境、Flask 框架和 YOLOv5 模型。可以在终端中输入以下命令检查: ``` python --version # 检查Python是否安装成功 pip install flask # 安装Flask ``` 步骤二:导入模型 在 Flask 应用程序中,我们需要将 YOLOv5 模型载入内存中,以便进行目标检测。我们可以使用 PyTorch 框架进行模型的导入操作。 ``` import torch MODEL_PATH = 'path/to/your/yolov5_model.pt' model = torch.hub.load('ultralytics/yolov5', 'custom', path=MODEL_PATH, force_reload=True) ``` 注意,这里的 `path` 参数应该填写你训练好的 YOLOv5 模型的路径。 步骤三:定义 Flask 应用程序 我们可以在 Flask 应用程序中定义一个路由,直接将图片文件作为参数传入目标检测模型中,返回检测结果。代码如下: ``` from flask import Flask, jsonify, request from PIL import Image app = Flask(__name__) @app.route('/detect', methods=['POST']) def detect(): file = request.files['image_file'] im = Image.open(file) result = model(im) # 处理检测结果,生成JSON格式返回 ... return jsonify(result) ``` 在代码中,我们定义了一个 `/detect` 路由,用于接收 POST 请求并传入图片文件,进行目标检测并返回 JSON 格式的检测结果。 步骤四:启动 Flask 应用程序 最后,我们只需要在终端中执行以下代码即可启动 Web 服务器: ``` if __name__ == '__main__': app.run() ``` 此时,我们访问 `http://localhost:5000/detect` 即可进行目标检测操作。 以上就是 YOLOv5 模型和 Flask 框架进行部署的简要流程。总的来说,如果熟悉 Python 和深度学习知识,使用 Flask 部署 YOLOv5 并不难。当然,如果需要更加深入的了解和优化,还需要花费更多的时间和精力。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值