YOLO26 Flask服务封装:构建RESTful API接口
最新 YOLO26 官方版训练与推理镜像
本镜像基于YOLO26 官方代码库构建,预装了完整的深度学习开发环境,集成了训练、推理及评估所需的所有依赖,开箱即用。无论是本地部署还是云端运行,都能快速启动目标检测任务。本文将在此基础上,进一步教你如何使用 Flask 框架将 YOLO26 模型封装为一个可对外提供服务的 RESTful API 接口,实现图片上传、目标检测、结果返回的一体化流程。
1. 镜像环境说明
该镜像已为你准备好所有必要的运行时依赖和工具链,无需手动配置复杂的环境,真正实现“一键启动”。
- 核心框架:
pytorch == 1.10.0 - CUDA版本:
12.1 - Python版本:
3.9.5 - 主要依赖:
torchvision==0.11.0,torchaudio==0.10.0,cudatoolkit=11.3,numpy,opencv-python,pandas,matplotlib,tqdm,seaborn等
此外,还预装了Flask、Werkzeug、gunicorn等 Web 服务常用组件,方便你快速搭建模型服务接口。
2. 快速上手
启动完是这样的
2.1 激活环境与切换工作目录
在使用前,请先激活 Conda 环境:
conda activate yolo为了便于修改和调试代码,建议将默认路径下的代码复制到数据盘:
cp -r /root/ultralytics-8.4.2 /root/workspace/进入项目目录:
cd /root/workspace/ultralytics-8.4.23. 封装YOLO26为Flask RESTful API
现在我们来把 YOLO26 模型包装成一个可通过 HTTP 请求调用的服务。用户只需发送一张图片,就能收到检测结果(包括边界框、类别、置信度等信息)。
3.1 创建API项目结构
在项目根目录下新建文件夹用于存放API服务代码:
mkdir app && cd app创建以下文件:
app.py:主服务入口static/:保存上传或生成的图片uploads/:临时存储用户上传的图片
mkdir static uploads3.2 编写Flask服务代码
创建app.py文件,内容如下:
# -*- coding: utf-8 -*- """ @File : app.py @Desc : YOLO26 Flask RESTful API 服务 """ import os from flask import Flask, request, jsonify, send_from_directory from werkzeug.utils import secure_filename from ultralytics import YOLO import cv2 # 初始化Flask应用 app = Flask(__name__) app.config['UPLOAD_FOLDER'] = '../uploads' app.config['RESULT_FOLDER'] = '../static' app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 # 最大上传16MB # 加载YOLO26模型(确保权重文件存在) model = YOLO('yolo26n.pt') # 允许的文件类型 ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'bmp', 'webp'} def allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS @app.route('/') def index(): return ''' <h2>YOLO26 目标检测API服务</h2> <p>使用方法:POST /detect 图片文件</p> <form method="post" action="/detect" enctype="multipart/form-data"> <input type="file" name="image" required> <input type="submit" value="上传并检测"> </form> ''' @app.route('/detect', methods=['POST']) def detect(): if 'image' not in request.files: return jsonify({'error': '未上传图片'}), 400 file = request.files['image'] if file.filename == '': return jsonify({'error': '文件名为空'}), 400 if file and allowed_file(file.filename): filename = secure_filename(file.filename) filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename) result_path = os.path.join(app.config['RESULT_FOLDER'], 'result_' + filename) try: file.save(filepath) # 使用YOLO进行推理 results = model.predict(source=filepath, save=False, imgsz=640) # 提取检测结果 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]) label = model.names[cls] detections.append({ 'class': label, 'confidence': float(conf), 'bbox': [float(x1), float(y1), float(x2), float(y2)] }) # 保存带标注的结果图 annotated_frame = results[0].plot() cv2.imwrite(result_path, annotated_frame) return jsonify({ 'success': True, 'detections': detections, 'result_image_url': f'/static/result_{filename}' }) except Exception as e: return jsonify({'error': str(e)}), 500 else: return jsonify({'error': '不支持的文件格式'}), 400 @app.route('/static/<filename>') def serve_image(filename): return send_from_directory(app.config['RESULT_FOLDER'], filename) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000, debug=False)3.3 代码说明
- 模型加载:启动时加载
yolo26n.pt权重,若需更换模型,修改文件名即可。 - 文件上传限制:只允许常见图像格式,最大16MB。
- 检测逻辑:
- 接收上传图片 → 保存 → 调用
model.predict()→ 解析结果 → 返回JSON数据 + 标注图链接。
- 接收上传图片 → 保存 → 调用
- 结果可视化:使用
.plot()方法绘制边界框,并保存至static/目录供浏览器访问。
4. 启动API服务
确保当前位于app/目录下,执行:
python app.py服务将在http://0.0.0.0:5000启动。你可以通过浏览器访问首页查看上传表单,或使用curl测试接口:
curl -X POST http://localhost:5000/detect \ -F "image=@./test.jpg" \ | python -m json.tool成功响应示例:
{ "success": true, "detections": [ { "class": "person", "confidence": 0.92, "bbox": [120.5, 89.3, 240.1, 300.7] } ], "result_image_url": "/static/result_test.jpg" }5. 进阶优化建议
虽然基础功能已经可用,但在生产环境中还需考虑以下几点:
5.1 性能优化
- 异步处理:对于高并发场景,可结合
Celery或asyncio实现异步推理。 - 批量推理:支持一次上传多张图片,提升吞吐量。
- GPU加速设置:确认
device='0'正确指向GPU,避免CPU推理拖慢速度。
5.2 安全性增强
- 输入校验:增加对恶意文件头的检查,防止上传非图像文件。
- 限流机制:使用
Flask-Limiter限制单位时间内请求次数。 - HTTPS支持:部署时配合 Nginx + SSL 证书启用加密传输。
5.3 部署扩展
- Gunicorn + Gevent:替代内置服务器,提升稳定性和并发能力。
安装:
pip install gunicorn gevent启动命令:
gunicorn -w 4 -b 0.0.0.0:5000 -k gevent app:app- Docker容器化:将整个服务打包为镜像,便于迁移和集群部署。
6. 常见问题与解决方案
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 模型加载失败 | 权重文件缺失或路径错误 | 确认yolo26n.pt存在于项目根目录 |
| 上传图片无响应 | 文件过大或格式不支持 | 检查是否超过16MB,或尝试.jpg格式 |
| GPU不可用 | CUDA环境异常 | 执行nvidia-smi查看驱动状态,确认PyTorch识别到GPU |
| 接口返回500错误 | Python依赖缺失 | 运行pip install flask werkzeug opencv-python补全依赖 |
7. 已包含权重文件
镜像内已预下载常用权重文件,位于项目根目录:
yolo26n.ptyolo26s.ptyolo26m.ptyolo26l.ptyolo26x.ptyolo26n-pose.pt(姿态估计)
可根据需求自由切换模型大小,在精度与速度之间权衡选择。
8. 总结
本文详细介绍了如何在 YOLO26 官方训练与推理镜像的基础上,利用 Flask 框架将其封装为一个功能完整的 RESTful API 服务。从环境准备、代码编写、接口测试到性能优化,每一步都力求简洁实用,帮助开发者快速将模型能力开放给前端、移动端或其他系统调用。
通过这种方式,你可以轻松实现:
- 图片上传自动检测
- 结构化结果返回(JSON)
- 可视化结果展示(URL链接)
- 支持多种部署方式(本地、云服务器、容器)
无论你是做智能安防、工业质检,还是开发AI小程序,这套方案都能作为你的起点。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。