news 2026/10/28 10:28:01

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/10/27 22:04:21

别再瞎找了!千笔AI,本科生降重首选!

在AI技术迅速发展的今天&#xff0c;越来越多的本科生开始借助AI工具辅助论文写作&#xff0c;提升效率与质量。然而&#xff0c;随之而来的AI率超标问题却让许多学生陷入困境——随着查重系统对AI生成内容的识别能力不断增强&#xff0c;论文中的AI痕迹一旦过重&#xff0c;轻…

作者头像 李华
网站建设 2026/10/25 4:05:02

红外性诱测报仪红外性诱测报灯红外靶向害虫自动测报系统

靶向测报系统的核心定位是什么&#xff1f;和传统虫情监测设备相比&#xff0c;最大的优势是什么&#xff1f;答&#xff1a;核心定位是构建虫情智慧大脑&#xff0c;主打“精准测报情报分析”&#xff0c;而非单纯的杀灭害虫——它更擅长捕捉虫情“情报”&#xff0c;为防控决…

作者头像 李华
网站建设 2026/10/27 21:29:00

云计算基础详解:容器与云原生的核心逻辑及实践价值

云计算基础详解&#xff1a;容器与云原生的核心逻辑及实践价值 在云计算飞速发展的今天&#xff0c;“容器”和“云原生”早已不是陌生的技术名词——从互联网大厂的大规模服务部署&#xff0c;到中小企业的数字化转型&#xff0c;它们正在重塑应用开发、部署与运维的全流程。但…

作者头像 李华
网站建设 2026/10/27 12:00:34

探索 6 机 30 节点电力系统的混合规划求解

基于混合规划求解6机30节点的机组启停情况以及支路与节点的功率情况&#xff0c;有说明文档&#xff0c;精品代码&#xff0c;考虑安全约束与热备用。在电力系统的研究与运行优化中&#xff0c;精确求解机组启停情况以及支路与节点的功率情况是至关重要的。今天咱们就来聊聊基于…

作者头像 李华
网站建设 2026/10/27 3:05:33

金融风控测试新范式:因果发现算法优化误报率的实战路径

2026年金融科技监管趋严背景下&#xff0c;反欺诈模型误报率每降低1%可节省千万级运营成本&#xff08;某银行实测数据&#xff09;&#xff0c;但传统特征工程面临特征混杂性难题。因果发现算法通过识别欺诈行为的真实诱因&#xff0c;为测试人员提供可解释的优化路径。 一、误…

作者头像 李华
网站建设 2026/10/28 5:58:04

我终于能够在 Debian 13 上享受 KDE 6了,桌面稳定到让人尖叫

过去一年,我几乎把所有主流发行版都试了个遍,就为了让 KDE Plasma 6 在我的机器上“正常运行”。Arch、Fedora KDE、Kubuntu、openSUSE Tumbleweed、Neon……能装的我都装了,能调的配置我都调了,但结果呢?每次都卡在同一个致命问题上——颜色渲染诡异得要命,灰色阴影深得…

作者头像 李华