news 2026/6/10 16:38:42

YOLO + Flask + Vue 前后端分离 Web 检测系统 yolo Flask web端图片视频检测系统 使用Flask作为后端和vue作为前端,前后端分离 可以替换自己的模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLO + Flask + Vue 前后端分离 Web 检测系统 yolo Flask web端图片视频检测系统 使用Flask作为后端和vue作为前端,前后端分离 可以替换自己的模型

yolo Flask web端图片视频检测系统

可以替换自己的模型
使用Flask作为后端和vue作为前端,前后端分离。

有注册,登录,用户管理,图片检测,视频检测,历史检测图片管理,历史检测视频管理功能

支持mysql数据库或sqlite数据库,可随时切换。

默认使用yolov8默认模型 可以替换为你自己的模型 实现不同的检测功能。

支持yolov5到12等版本的模型【目标检测模型】

YOLO + Flask + Vue 前后端分离 Web 检测系统,支持多版本 YOLO 模型、用户系统、MySQL/SQLite 切换。


📊 系统功能与技术栈总览表

模块功能说明技术实现
前端用户界面Vue3 + Element Plus + Axios
后端API 服务Flask + Flask-SQLAlchemy + Flask-JWT
数据库用户 & 检测记录存储默认 SQLite,可一键切换为MySQL(修改配置即可)
模型支持目标检测支持yolov5/yolov8/yolov9/yolov10/yolo11/yolov12(通过ultralytics或自定义加载)
默认模型开箱即用yolov8n.pt(COCO 80 类)
模型替换自定义检测任务替换model/best.pt并修改类别名称即可
用户系统安全访问注册、登录、JWT 鉴权、用户管理
检测功能多模态输入图片上传检测、视频上传检测(逐帧分析)
历史记录结果追溯自动保存检测图片/视频缩略图 + 元数据到数据库
部署轻量灵活单机运行 or Docker 容器化

🔧 数据库配置切换示例(config.py

# config.pyimportosclassConfig:SECRET_KEY='your-secret-key'# 默认使用 SQLiteSQLALCHEMY_DATABASE_URI='sqlite:///app.db'# 若需 MySQL,取消注释以下行(并安装 pymysql)# SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://user:password@localhost/yolo_db'SQLALCHEMY_TRACK_MODIFICATIONS=False

✅ 切换数据库只需修改一行,无需改业务代码。


🧠 后端核心代码(Flask 极简版)

1.app.py—— 主程序
# app.pyfromflaskimportFlask,request,jsonify,send_filefromflask_sqlalchemyimportSQLAlchemyfromflask_jwt_extendedimportJWTManager,create_access_token,jwt_requiredimportcv2importosfromultralyticsimportYOLO# 支持 yolov8/v9/v10/v11/v12# 若用 yolov5,改用 from models.common import DetectMultiBackendapp=Flask(__name__)app.config.from_object('config.Config')db=SQLAlchemy(app)jwt=JWTManager(app)# === 模型加载(支持替换)===MODEL_PATH="model/best.pt"# 替换为你自己的 .pt 文件model=YOLO(MODEL_PATH)# === 用户模型 ===classUser(db.Model):id=db.Column(db.Integer,primary_key=True)username=db.Column(db.String(80),unique=True,nullable=False)password=db.Column(db.String(120),nullable=False)# === 注册 ===@app.route('/register',methods=['POST'])defregister():data=request.json user=User(username=data['username'],password=data['password'])db.session.add(user)db.session.commit()returnjsonify({"msg":"注册成功"})# === 登录 ===@app.route('/login',methods=['POST'])deflogin():data=request.json user=User.query.filter_by(username=data['username']).first()ifuseranduser.password==data['password']:token=create_access_token(identity=user.id)returnjsonify(access_token=token)returnjsonify({"msg":"用户名或密码错误"}),401# === 图片检测(需登录)===@app.route('/detect/image',methods=['POST'])@jwt_required()defdetect_image():file=request.files['image']img_path="uploads/"+file.filenamefile.save(img_path)results=model(img_path)output_path="results/"+file.filename results[0].save(filename=output_path)# 保存记录到数据库(略)returnsend_file(output_path,mimetype='image/jpeg')# === 视频检测(简化版)===@app.route('/detect/video',methods=['POST'])@jwt_required()defdetect_video():file=request.files['video']input_path="uploads/"+file.filename output_path="results/"+file.filenamefile.save(input_path)cap=cv2.VideoCapture(input_path)fourcc=cv2.VideoWriter_fourcc(*'mp4v')out=cv2.VideoWriter(output_path,fourcc,30.0,(640,640))whilecap.isOpened():ret,frame=cap.read()ifnotret:breakresults=model(frame)annotated_frame=results[0].plot()out.write(annotated_frame)cap.release()out.release()returnsend_file(output_path,as_attachment=True)if__name__=='__main__':withapp.app_context():db.create_all()app.run(debug=True)

🌐 前端核心代码(Vue3 极简调用)

1.DetectImage.vue
<template> <input type="file" @change="uploadImage" accept="image/*" /> <img v-if="resultUrl" :src="resultUrl" style="max-width:600px" /> </template> <script setup> import axios from 'axios' const uploadImage = async (e) => { const file = e.target.files[0] const formData = new FormData() formData.append('image', file) const res = await axios.post('/detect/image', formData, { headers: { Authorization: `Bearer ${localStorage.token}` } }) // 假设后端返回图片 URL 或 blob const blob = await res.data.blob() resultUrl.value = URL.createObjectURL(blob) } </script>

📁 项目目录结构建议

yolo-web-system/ ├── backend/ │ ├── app.py │ ├── config.py │ ├── model/ # ← 放你的 best.pt │ ├── uploads/ # 上传文件 │ └── results/ # 检测结果 ├── frontend/ │ ├── src/ │ │ ├── views/Login.vue │ │ ├── views/DetectImage.vue │ │ └── ... │ └── package.json └── requirements.txt

✅ 如何替换为自己的模型?

  1. 将你的训练好的.pt文件放入backend/model/best.pt
  2. (可选)修改前端类别名称显示(如从 COCO 的person改为tea_pest
  3. 重启 Flask 服务即可生效

💡 支持所有 Ultralytics 官方模型(YOLOv8~v12),YOLOv5 需额外加载逻辑。


⚙️ 依赖安装(requirements.txt

flask flask-sqlalchemy flask-jwt-extended opencv-python ultralytics>=8.3.0 numpy pymysql # 仅当使用 MySQL 时需要

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

太流批,桌面图标管理神器

今天给大家推荐两款软件&#xff0c;一款桌面图标管理工具&#xff0c;一款是文件/文件夹时间修改工具&#xff0c;有需要的小伙伴可以下载收藏。 第一款&#xff1a;DesktopOK 大家有没有这样的习惯&#xff1a;桌面的东西要在一个固定的地方你才能找得到&#xff0c;如果你要…

作者头像 李华
网站建设 2026/6/10 10:52:48

Excel时间差计算技巧解析

公式解析MID(B2,{1,7,13,19},5) 从B2单元格的指定位置提取时间片段。假设B2内容为"12:30-18:45,09:00-12:15"&#xff0c;该部分会分别提取&#xff1a;第1字符开始的5位&#xff1a;"12:30"第7字符开始的5位&#xff1a;"18:45"第13字符开始的5…

作者头像 李华
网站建设 2026/6/10 10:59:18

java+vue基于springboot的旅游攻略分享系统的设计与实现_e7z2r88l

目录 系统概述技术架构核心功能模块系统设计要点部署与优化 开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 系统概述 基于SpringBoot和Vue的旅游攻略分享系统是一个前后端分离的Web应用&#xff0c;旨在为用户提供旅游目的地…

作者头像 李华
网站建设 2026/6/10 10:49:25

5秒开服,你的应用部署还卡在“加载中”吗?

“测试环境又崩了&#xff01;”“扩容申请走流程要两天&#xff01;”“运维成本快赶超开发了&#xff01;”这些刺耳的抱怨&#xff0c;是否每天都在消耗你的团队精力&#xff1f;传统容器运维的沉重负担&#xff0c;正在一点点拖慢业务创新的步伐&#xff0c;让本该快速落地…

作者头像 李华
网站建设 2026/6/10 11:25:19

软件架构设计:从理论到实践的深度指南

软件架构设计&#xff1a;从理论到实践的深度指南 在数字时代&#xff0c;架构设计已不再是简单的“画框图”&#xff0c;而是在复杂约束下寻找平衡的艺术。本文旨在为你提供一套从认知、原则到前沿模式的完整知识体系。 一、 架构设计的核心认知 1.1 什么是软件架构&#xff1…

作者头像 李华
网站建设 2026/6/10 13:16:41

智能进化的范式:从静态规划到动态演进的架构重塑

智能进化的范式&#xff1a;从静态规划到动态演进的架构重塑 在数字化浪潮的深水区&#xff0c;系统架构正经历从“工业文明的蓝图式规划”向“数字文明的有机体演进”的历史性跳跃。传统的静态架构设计因其滞后性&#xff0c;已难以应对业务复杂度的爆炸式增长。 一、 认知升维…

作者头像 李华