前言
中草药检测分析系统是结合深度学习图像识别和大语言模型的AI应用,能够实现中药材图像识别、功效分析和处方建议功能。 本系统采用Vue3+Flask的前后端分离架构,集成YOLOv8-12模型进行图像识别,结合DeepSeek大语言模型提供专业分析,实现一个完整的中草药智能检测平台。该系统具有高可扩展性、企业级安全性和高效的AI推理能力,适合作为医疗健康领域的研究和开发参考。
一、系统架构与技术栈
系统采用前后端分离架构,前端使用Vue3,后端使用Flask+Flask-RESTX构建RESTful API。这种架构设计使前后端可以独立开发、部署和维护,同时通过标准化接口实现高效通信。
前端架构:基于Vue3的工程化架构,采用src/features目录结构划分功能模块,src/api目录封装HTTP请求,src/store目录使用Pinia管理状态。通过动态路由加载策略和资源预加载配置提升性能,使用虚拟列表和计算缓存优化用户体验。
后端架构:基于Flask-RESTX的模块化架构,通过蓝图划分功能模块,每个模块独立处理特定功能。采用版本控制(如url_prefix=/api/v1)和Swagger文档化,实现高内聚低耦合的代码组织。数据库使用SQLAlchemy或直接PostgreSQL,配置文件分离(如config.py),权限管理基于JWT令牌。
技术栈组合:YOLOv8-12模型用于图像识别,DeepSeek大语言模型用于生成分析建议,两者通过Flask API协同工作。这种技术组合既利用了深度学习在图像识别领域的优势,又充分发挥了大语言模型在自然语言处理方面的能力,实现了中草药检测分析的完整功能。
二、用户模块开发
用户模块是系统的基础,实现注册、登录和权限管理功能。以下是用户模块的具体开发步骤:
- 数据库模型设计:使用SQLAlchemy定义用户表和角色表,建立多对多关系。
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(50), unique=True, nullable=False)
password_hash = db.Column(db.String(255), nullable=False)
roles = db.relationship('Role', secondary='user_roles', backref='users')
class Role(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), unique=True)
user_roles = db.Table('user_roles',
db.Column('user_id', db.ForeignKey('user.id')),
db.Column('role_id', db.ForeignKey('role.id'))
)
- JWT令牌生成:使用Flask-JWT-Extended库生成访问令牌和刷新令牌。
from flask_jwt_extended import create_access_token, create_refresh_token
@user_ns.route('/login')
class LoginResource(Resource):
def post(self):
data = request.get_json()
user = User.query.filter_by(username=data['username']).first()
if user and user.check_password(data['password']):
access_token = create_access_token(
identity=user.id,
additional_claims={"roles": [role.name for role in user.roles]}
)
refresh_token = create_refresh_token(identity=user.id)
return {
"code": 200,
"message": "登录成功",
"data": {
"user_id": user.id,
"username": user.username,
"access_token": access_token,
"refresh_token": refresh_token
}
}, 200
- 前端状态管理:使用Pinia存储用户信息和令牌,通过Axios请求拦截器自动携带令牌。
// stores/auth.js
import { defineStore } from 'pinia'
export const useAuthStore = defineStore('auth', {
state: () => ({
user: null,
access_token: null,
refresh_token: null
}),
actions: {
login(data) {
return axios.post('/api/v1/users/login', data)
.then(response => {
this.user = response.data.data.user
this.access_token = response.data.data.access_token
this.refresh_token = response.data.data.refresh_token
})
}
}
})
- 路由权限控制:使用Vue Router的beforeEach钩子检查Pinia中的令牌状态,拦截未授权访问。
-
// router/index.js router.beforeEach((to, from, next) => { const authStore = useAuthStore() if (to.matched.some(record => record.meta.requiresAuth)) { if (authStore.access_token) { next() } else { next('/login') } } else { next() } })
三、YOLOv8-12图像识别模块
YOLOv8-12模型是系统的核心图像识别组件,能够高效识别中药材种类。以下是图像识别模块的实现细节:
- 模型准备与加载:使用Ultralytics库加载YOLOv8模型(选择yolov8n.pt等检测模型)。
-
from ultralytics import YOLO model = YOLO('yolov8n.pt')