微信小程序调用yolo目标检测模型

发布于:2025-04-18 ⋅ 阅读:(43) ⋅ 点赞:(0)

目录

后端

前端微信小程序

完整代码


后端

利用Flask,调用目标检测模型,后端代码如下。

# flask_yolo.py 
from flask import Flask, request, jsonify
from ultralytics import YOLO
from PIL import Image

app = Flask(__name__)
model_path = 'best.pt'
model = YOLO(model_path)  # 加载模型


@app.route("/predict", methods=["POST"])
def predict():
    file = request.files["image"]
    image = Image.open(file.stream)
    results = model(image)
    boxes = []
    for box in results[0].boxes:
        xyxy = [int(x) for x in box.xyxy[0].tolist()]
        conf = round(float(box.conf[0]), 3)
        cls = int(box.cls[0])
        name = results[0].names[cls]
        boxes.append({
            'coor': xyxy,
            'conf': conf,
            'class': name
        })
    # print(boxes)
    return jsonify(boxes)


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5005)

启动后端服务:

$ python flask_yolo.py 
 * Serving Flask app 'flask_yolo'
 * Debug mode: off
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:5005
 * Running on http://x.x.x.x:5005
Press CTRL+C to quit

前端微信小程序

调用服务的js关键代码:

  // 上传图片到后端调用服务
  uploadImage(filePath) {
    this.setData({ loading: true });
    wx.uploadFile({
      url: 'http://****/predict',  //your flask api
      filePath: filePath,
      name: 'image',
      success: (res) => {
        const detectionResult = JSON.parse(res.data);
        
        this.setData({
          detectionResult,
          loading: false
        });

        // 计算检测框位置
        if (this.data.imageInfo && this.data.originalImageSize) {
          this.updateDetectionBoxes();
        }
      },
      fail: (error) => {
        console.error('上传失败:', error);
        wx.showToast({
          title: '上传失败',
          icon: 'error'
        });
        this.setData({ loading: false });
      }
    });
  }

效果

       

完整代码

https://github.com/crystal0913/miniprogram_yolo

如需在手机上预览,需在小程序项目根目录下的project.config.json中填上你的appid。


网站公告

今日签到

点亮在社区的每一天
去签到