news 2026/3/5 2:14:21

YOLO11如何对接API?Flask服务封装实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLO11如何对接API?Flask服务封装实战

YOLO11如何对接API?Flask服务封装实战

1. 技术背景与应用场景

随着计算机视觉技术的快速发展,目标检测在智能监控、自动驾驶、工业质检等领域的应用日益广泛。YOLO(You Only Look Once)系列作为实时目标检测的标杆算法,其最新版本YOLO11在精度和推理速度之间实现了更优平衡。然而,模型训练只是第一步,如何将训练好的模型部署为可被外部系统调用的服务,是工程落地的关键环节。

本文聚焦于YOLO11模型的服务化封装,通过使用 Flask 框架构建 RESTful API 接口,实现图像上传→目标检测→结果返回的完整流程。结合提供的深度学习镜像环境,读者可以快速搭建一个可运行、可扩展的视觉服务原型,适用于各类需要集成目标检测能力的应用场景。

2. 环境准备与项目结构

2.1 完整可运行环境说明

本文基于预置的 YOLO11 深度学习镜像进行开发,该镜像已集成以下核心组件:

  • Python 3.9+
  • PyTorch 2.0+
  • Ultralytics 8.3.9(YOLO11 所属框架)
  • Flask 2.3+
  • OpenCV-Python
  • Jupyter Notebook 支持
  • SSH 远程访问支持

此环境可通过 CSDN 星图镜像广场一键部署,支持本地或云端运行,极大简化了依赖配置过程。

2.2 开发方式选择:Jupyter 与 SSH

Jupyter 使用方式

适合快速验证模型效果和调试代码逻辑。启动后可通过浏览器访问交互式 Notebook 界面,逐步执行训练、推理和服务测试任务。

SSH 使用方式

适用于长期运行服务或自动化脚本部署。通过终端连接实例后,可直接操作文件系统、运行后台服务并监控日志输出。

推荐组合使用:前期在 Jupyter 中调试模型,后期通过 SSH 部署 Flask 服务。

3. YOLO11 模型训练与加载

3.1 进入项目目录

首先确保进入 Ultralytics 主目录:

cd ultralytics-8.3.9/

该目录包含train.pydetect.py等核心脚本,以及配置文件和数据集管理模块。

3.2 模型训练命令

运行默认训练脚本以生成自定义模型:

python train.py

该命令将使用 COCO 数据集或用户指定的数据路径开始训练,并自动保存权重至runs/train/exp/weights/best.pt

提示:可通过参数指定数据集、图像尺寸、批量大小等,例如:

python train.py --data custom.yaml --imgsz 640 --batch 16 --epochs 100

3.3 加载训练好的模型

在 Flask 服务中,我们需加载.pt格式的权重文件。使用如下代码初始化模型:

from ultralytics import YOLO # 加载本地训练好的模型 model = YOLO('runs/train/exp/weights/best.pt') # 或使用预训练模型 'yolo11s.pt'

4. 基于 Flask 的 API 封装实现

4.1 Flask 服务基本架构

我们将构建一个轻量级 Web 服务,提供/detect接口,接收上传的图像文件,返回 JSON 格式的检测结果(包括类别、置信度、边界框坐标)。

项目结构建议如下:

flask_yolo_api/ ├── app.py # Flask 主程序 ├── models/ │ └── best.pt # 训练好的权重文件 ├── static/uploads/ # 临时存储上传图片 └── requirements.txt # 依赖列表

4.2 核心代码实现

完整app.py实现
from flask import Flask, request, jsonify from PIL import Image import io import os import uuid # 导入 YOLO11 模型 from ultralytics import YOLO # 初始化 Flask 应用 app = Flask(__name__) app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 # 最大上传 16MB # 加载模型(全局加载一次) model = YOLO('models/best.pt') # 允许的文件类型 ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg'} def allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS @app.route('/detect', methods=['POST']) def detect_objects(): if 'image' not in request.files: return jsonify({'error': 'No image provided'}), 400 file = request.files['image'] if file.filename == '': return jsonify({'error': 'Empty filename'}), 400 if not allowed_file(file.filename): return jsonify({'error': 'File type not allowed'}), 400 try: # 读取图像数据 img_bytes = file.read() img = Image.open(io.BytesIO(img_bytes)).convert('RGB') # 使用 YOLO11 进行推理 results = model(img) # 提取检测结果 detections = [] for result in results: boxes = result.boxes.cpu().numpy() for box in boxes: x1, y1, x2, y2 = box.xyxy[0] conf = box.conf[0] cls = int(box.cls[0]) detections.append({ 'class_id': cls, 'class_name': model.names[cls], 'confidence': float(conf), 'bbox': [float(x1), float(y1), float(x2), float(y2)] }) return jsonify({ 'success': True, 'detections': detections, 'count': len(detections) }) except Exception as e: return jsonify({'error': str(e)}), 500 @app.route('/health', methods=['GET']) def health_check(): return jsonify({'status': 'healthy', 'model_loaded': True}) if __name__ == '__main__': # 创建上传目录 os.makedirs('static/uploads', exist_ok=True) app.run(host='0.0.0.0', port=5000, debug=False)

4.3 依赖管理文件

创建requirements.txt以保证环境一致性:

Flask==2.3.3 ultralytics==8.3.9 Pillow==9.5.0 torch==2.0.1 torchvision==0.15.2

安装命令:

pip install -r requirements.txt

5. 服务启动与接口测试

5.1 启动 Flask 服务

在 SSH 终端中运行:

python app.py

服务将在http://0.0.0.0:5000监听请求。

生产建议:使用 Gunicorn + Nginx 部署以提升并发性能和安全性。

5.2 使用 curl 测试接口

上传一张测试图像并获取结果:

curl -X POST http://localhost:5000/detect \ -F "image=@test_car.jpg" \ | python -m json.tool

预期返回示例:

{ "success": true, "detections": [ { "class_id": 2, "class_name": "car", "confidence": 0.93, "bbox": [120.5, 89.2, 450.1, 200.8] } ], "count": 1 }

5.3 健康检查接口

用于服务状态监控:

curl http://localhost:5000/health

6. 性能优化与工程建议

6.1 模型推理加速技巧

  • 启用半精度(FP16):减少显存占用,提升推理速度
    model = YOLO('best.pt').to('cuda').half()
  • 使用 TensorRT 或 ONNX Runtime:进一步提升部署效率
  • 批处理(Batch Inference):对多图同时推理提高 GPU 利用率

6.2 安全性增强措施

  • 添加 API 认证(如 JWT 或 API Key)
  • 限制请求频率(Rate Limiting)
  • 图像内容过滤防止恶意输入
  • 日志记录与异常追踪

6.3 可维护性设计

  • 使用配置文件分离环境变量
  • 添加 Prometheus 指标暴露端点用于监控
  • 结构化日志输出便于排查问题
  • Docker 化打包便于跨平台部署

7. 总结

7.1 核心价值回顾

本文详细介绍了如何将 YOLO11 模型封装为 RESTful API 服务,涵盖从环境准备、模型训练到 Flask 接口开发的全流程。通过预置镜像的便捷性与 Flask 的灵活性结合,开发者可在短时间内完成从实验到部署的跨越。

7.2 实践建议总结

  1. 优先使用预建镜像:避免复杂的依赖冲突问题。
  2. 分阶段验证:先在 Jupyter 中测试模型输出,再封装为服务。
  3. 接口设计标准化:统一错误码、响应格式,便于前端集成。
  4. 关注资源消耗:长时间运行需监控内存与显存使用情况。

获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/3 18:22:17

揭秘PDF-Extract-Kit:如何用4090D单卡实现高效PDF解析

揭秘PDF-Extract-Kit:如何用4090D单卡实现高效PDF解析 在当前AI与文档智能处理深度融合的背景下,PDF文档的结构化信息提取已成为大模型应用、知识库构建和自动化办公中的关键环节。传统PDF解析工具往往面临格式错乱、表格识别不准、公式丢失等问题&…

作者头像 李华
网站建设 2026/3/1 23:53:50

Campus-iMaoTai:智能茅台预约系统的终极使用指南

Campus-iMaoTai:智能茅台预约系统的终极使用指南 【免费下载链接】campus-imaotai i茅台app自动预约,每日自动预约,支持docker一键部署 项目地址: https://gitcode.com/GitHub_Trending/ca/campus-imaotai 还在为每天抢购茅台而焦虑不…

作者头像 李华
网站建设 2026/3/3 23:37:48

Sambert中文TTS部署教程:解决SciPy兼容性问题的完整指南

Sambert中文TTS部署教程:解决SciPy兼容性问题的完整指南 1. 引言与学习目标 随着语音合成技术在智能客服、有声读物、虚拟主播等场景中的广泛应用,高质量、低延迟的中文TTS(Text-to-Speech)系统成为开发者关注的重点。Sambert-H…

作者头像 李华
网站建设 2026/3/3 7:36:45

UI-TARS桌面版:智能GUI助手的完整部署与应用指南

UI-TARS桌面版:智能GUI助手的完整部署与应用指南 【免费下载链接】UI-TARS-desktop A GUI Agent application based on UI-TARS(Vision-Lanuage Model) that allows you to control your computer using natural language. 项目地址: https://gitcode.com/GitHub_…

作者头像 李华
网站建设 2026/3/4 8:10:36

NX12.0捕获C++异常的操作指南:从零实现

如何在 NX12.0 中安全捕获 C 异常?一份来自实战的深度指南你有没有遇到过这样的场景:辛辛苦苦写完一个 NX 插件,测试时一切正常,结果用户一运行就弹出“NX 已停止工作”——而日志里只留下一句模糊的崩溃提示?更糟的是…

作者头像 李华
网站建设 2026/3/4 10:51:46

Whisper Large v3实战:教育视频自动字幕生成

Whisper Large v3实战:教育视频自动字幕生成 1. 引言 1.1 业务场景描述 在现代在线教育平台中,高质量的字幕是提升学习体验的关键因素。尤其面对多语言学习者、听力障碍用户以及非母语观众时,自动生成准确、同步的字幕不仅能提高内容可访问…

作者头像 李华