chili3d笔记11 连接yolo python http.server 跨域请求 flask

python 复制代码
from ultralytics import YOLO
from flask import Flask, request, jsonify
from flask_cors import CORS
import base64
from io import BytesIO
from PIL import Image
import json

# 加载模型
model = YOLO('./yolo_detect/best.pt')

app = Flask(__name__)
CORS(app)  # 启用跨域支持

def predict(img_data):
    image_data = base64.b64decode(img_data)
    image = Image.open(BytesIO(image_data))
    results = model.predict(source=image)

    predictions = []
    for result in results:
        boxes = result.boxes
        for box in boxes:
            predictions.append({
                "Confidence": box.conf.item(),
                "Object": model.names[int(box.cls.item())],
                "BoxCoordinate": box.xyxy.cpu().numpy().tolist()
            })
    return predictions

@app.route('/', methods=['POST'])
def handle_post():
    payload = request.get_json()
    img_data = payload.get("image_data")

    if not img_data:
        return jsonify({"error": "Missing image data"}), 400

    try:
        result = predict(img_data)
        return jsonify(result)
    except Exception as e:
        return jsonify({"error": str(e)}), 500

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

TypeScript 复制代码
 const fileInput = document.createElement("input");
        fileInput.type = "file";
        fileInput.accept = "image/*";
        fileInput.style.display = "none"; // 隐藏输入框

        // 处理文件选择事件
        fileInput.addEventListener("change", async (event) => {
            const target = event.target as HTMLInputElement;
            this.resultLabel.textContent = "正在上传并检测图像...";
            if (target.files && target.files.length > 0) {
                const file = target.files[0];
                Logger.info(`Selected file: ${file.name}`);

                try {
                    const reader = new FileReader();
                    reader.onload = async () => {
                        try {
                            const base64Data = reader.result?.toString().split(",")[1];
                            const response = await fetch("http://localhost:8737", {
                                method: "POST",
                                headers: { "Content-Type": "application/json" },
                                body: JSON.stringify({ image_data: base64Data }),
                            });

                            if (!response.ok) throw new Error("Network response was not ok");

                            const data = await response.json();

                            const formattedResult = data
                                .map((item: any, index: number) => {
                                    const objType = item.Object;
                                    const confidence = (item.Confidence * 100).toFixed(2);
                                    const [x1, y1, x2, y2] = item.BoxCoordinate[0];
                                    return `目标 ${index + 1}: ${objType}, 置信度 ${confidence}%, 坐标 [${x1.toFixed(1)}, ${y1.toFixed(1)}, ${x2.toFixed(1)}, ${y2.toFixed(1)}]`;
                                })
                                .join("\n");

                            this.resultLabel.textContent = `检测到 ${data.length} 个物体:\n${formattedResult}`;
                            Logger.info("YOLO 检测结果:", data);
                        } catch (error) {
                            Logger.error("请求失败:", error);
                        }
                    };
                    reader.readAsDataURL(file);
                } catch (err) {
                    Logger.error(`处理文件时出错: ${err}`);
                }
            }
        });

2025-05-05 20-32-07 网页端打开图片进行yolo识别,立方体圆柱体

相关推荐
茫忙然1 小时前
【WEB】Polar靶场 6-10题 详细笔记
笔记
eric*16881 小时前
尚硅谷张天禹老师课程配套笔记
前端·vue.js·笔记·vue·尚硅谷·张天禹·尚硅谷张天禹
Allen_LVyingbo1 小时前
数智读书笔记系列035《未来医疗:医疗4.0引领第四次医疗产业变革》
人工智能·经验分享·笔记·健康医疗
岑梓铭2 小时前
考研408《计算机组成原理》复习笔记,第三章(3)——多模块存储器
笔记·考研·408·计算机组成原理
菜菜why2 小时前
MSPM0G3507学习笔记(一) 重置版:适配逐飞库的ti板环境配置
笔记·学习·电赛·嵌入式软件·mspm0
c7692 小时前
【文献笔记】Automatic Chain of Thought Prompting in Large Language Models
人工智能·笔记·语言模型·论文笔记
X_StarX3 小时前
【Unity笔记01】基于单例模式的简单UI框架
笔记·ui·unity·单例模式·游戏引擎·游戏开发·大学生
智者知已应修善业5 小时前
【51单片机用数码管显示流水灯的种类是按钮控制数码管加一和流水灯】2022-6-14
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
孞㐑¥8 小时前
Linux之Socket 编程 UDP
linux·服务器·c++·经验分享·笔记·网络协议·udp
sealaugh3211 小时前
aws(学习笔记第四十八课) appsync-graphql-dynamodb
笔记·学习·aws