news 2026/10/13 5:10:10

SpringBoot+Vue+MyBatis+MySQL高校科研管理系统设计与实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringBoot+Vue+MyBatis+MySQL高校科研管理系统设计与实践

1. 为什么高校科研管理需要一套独立系统

高校科研管理这事儿,看着平淡,真做起来全是坑。我接触过不少高校的信息化项目,几乎所有院系都面临同一个问题:科研数据散落在Excel表格、纸质审批单、微信聊天记录里,项目申报靠人盯,经费报销靠跑腿,成果统计靠年底突击填表。某高校的老师跟我吐槽过,年终统计科研工作量时,光是把全院的论文、专利、课题信息从各个老师手里收集齐,再手工核对格式,就得折腾两周。

所以当有人把“高校科研信息管理系统”作为选题拿出来做毕业设计或者实际项目时,我第一反应是:这选题选对了。它不是一个虚构出来的伪需求,而是真实存在于每一所高校的痛点。从技术上来说,SpringBoot + Vue + MyBatis + MySQL这套组合,也是目前中小型管理系统最成熟、最主流、最容易上手的技术栈。两者结合,既有业务价值,又有技术含量,还能在答辩或者实际部署时拿出完整可演示的成果。

这套系统核心解决的,其实就是三类问题:科研项目的全生命周期管理(申报、立项、中期、结题)、科研成果的登记与统计(论文、专利、软著、获奖)、以及科研经费的预算与使用跟踪。再把用户角色拆开,无非是管理员、教师、科研秘书(或者院系管理员)、评审专家这几个维度。权限不同,看到的数据和能做的操作就完全不同。

这篇文章我就围绕“基于SpringBoot+Vue+MyBatis+MySQL的高校科研信息管理系统”这套东西,把我做这类项目时踩过的坑、总结的经验、推荐的设计思路,全部摊开来讲。不绕弯子,直接说怎么做、为什么这么做。

2. 技术选型的底层逻辑:为什么是SpringBoot+Vue+MyBatis+MySQL

2.1 这套组合凭什么能成为主流

很多人选技术栈的时候容易犯一个毛病——追求新。看到微服务火了就想上Spring Cloud,看到前端框架出了新版本就急着迁移,结果项目做了一半发现自己根本驾驭不了分布式事务,最后痛不欲生。

高校科研管理系统这个场景,用户量撑死几千人,并发量也不会高到哪里去,核心诉求是:开发效率高、代码结构清晰、部署简单、维护方便。你用不着微服务,用不着消息队列,更用不着引入一套复杂的中间件体系。SpringBoot + Vue + MyBatis + MySQL,恰恰是满足“单体应用快速交付”的最优解。

  • SpringBoot:简化了Spring的配置地狱,内嵌Tomcat,打一个Jar包就能跑,部署成本极低。
  • Vue:响应式数据绑定、组件化开发,做后台管理界面效率比传统JSP+JQuery高太多。
  • MyBatis:半自动ORM,SQL由开发者自己掌控,复杂的多表关联查询、动态SQL处理起来非常灵活。
  • MySQL:开源免费,性能足够,生态完善,学校机房也好、云服务器也好,都能轻松跑起来。

2.2 前端Vue2还是Vue3,怎么选

这是很多人开工前纠结的第一个问题。我自己的建议是:如果你对前端不熟,选Vue2 + Element UI,因为网上的现成模板、教程、踩坑记录最多,遇到问题一搜就能解决。Vue3 + Element Plus虽然新,但在一些老版本的Node环境或者低版本浏览器上会踩到兼容性坑,对新手不太友好。

如果有一定前端基础,那直接上Vue3 + Vite + Element Plus也没问题,构建速度快,Composition API写起来更清爽。但要注意,Vite要求Node版本14.18+,环境别搞错了。

2.3 数据库设计到底有多重要

我见过太多人一上来就写代码,写到一半发现表结构不对,又回头改数据库,改完实体类、Mapper、Service、Controller全都要跟着动,白白浪费两三天的工期。数据库设计是这种管理系统的地基,地基歪了,上面怎么盖都别扭。

高校科研信息管理系统,核心表至少要覆盖这么几块:

  • 用户表:用户ID、用户名、密码、姓名、所属院系、角色(管理员/教师/秘书/专家)。密码必须加密存储,至少用MD5加盐或者BCrypt,明文存密码这种低级错误千万别犯。
  • 科研项目表:项目编号、名称、负责人ID、来源(国家级/省部级/校级/横向)、类型(自然科学/社会科学)、经费总额、起止时间、当前状态(申报中/已立项/进行中/已结题/已终止)。
  • 科研成果表:成果类型(论文/专利/软著/获奖/著作)、标题、作者列表、所属项目ID、发表/授权时间、级别(SCI/EI/核心/普刊/发明专利)。
  • 经费表:项目ID、预算科目(设备费/材料费/差旅费/劳务费/其他)、预算金额、已用金额、报销记录关联。
  • 申报审批表:项目申报的流程控制,谁提交的、当前在哪一级、审批意见、审批时间。
  • 角色权限关联表:如果不用Spring Security的注解式权限,也可以自己维护用户-角色-权限三张表,后面扩展更灵活。

顺带说一句,日期字段建议统一用datetime,金额字段用decimal(10,2),状态字段用tinyint加注释,别用varchar存状态数字再让后人猜。

3. 系统功能模块设计与业务闭环

3.1 六大核心模块怎么拆

一套合格的高校科研管理系统,绝不是把信息塞进数据库就完事了。它要形成业务闭环:从教师填报,到秘书审核,到管理员汇总,到专家评审,最后到成果和经费的持续跟踪。我按这个闭环把系统拆成六个模块:

  1. 用户管理与权限控制:系统最基础的模块,负责用户的注册、登录、角色分配。管理员可以维护教师信息、重置密码、冻结账号。
  2. 科研项目管理:教师可以在线申报项目,填写项目类别、经费预算、成员信息、研究内容;秘书进行形式审查;管理员做最终审核;立项后的项目可以填报中期进展和结题申请。
  3. 科研成果管理:教师登记个人科研成果,秘书审核真实性,管理员统一管理,支持按年度、院系、类型进行统计导出。
  4. 科研经费管理:项目立项后生成经费账户,教师填报支出明细,上传凭证,超支自动拦截。
  5. 统计报表模块:按院系、按年度、按成果类型生成统计图表,辅助学校科研管理决策。
  6. 系统公告与消息通知:发布通知公告,审批流转时通过站内消息提醒下一步处理人。

3.2 权限模型:不是所有角色都该看所有数据

权限设计是这个系统最容易出问题的地方,也是最容易被答辩老师追问的地方。很多新手做权限就是简单的“登录后判断角色,然后隐藏按钮”,这属于皮毛,根本没有进入权限设计的大门。

我的建议是引入RBAC模型(基于角色的访问控制),用三张核心表实现:用户表、角色表、用户角色关联表。然后在后端接口层面,通过Spring Boot的拦截器或者Spring Security的@PreAuthorize注解做接口级权限校验。也就是说,哪怕有人绕过前端直接调接口,后端也要拦得住。

具体到数据层面,还要区分角色可见范围:

  • 普通教师:只能看自己和参与的项目、成果、经费。
  • 院系科研秘书:能看本院系所有数据,包括本院系教师的项目、成果、经费,但改不了其他院系的数据。
  • 校级管理员:能看全校数据,能维护基础信息,但一般不改具体科研数据。
  • 评审专家:只看到分配给自己的待评审项目,评审完毕提交意见后不可再修改。

3.3 审批流程设计:把状态字段玩明白

项目管理中的审批流程,很多人一上来就想上工作流引擎(Activiti或Flowable),我劝你冷静。高校科研管理的审批链路并没有那么复杂:教师提交申报 → 秘书初审 → 管理员(或专家)终审 → 立项。这种固定链路用数据库里的一个状态字段流转就够了,没必要引入臃肿的工作流引擎。

我在项目里是这么设计的:

  • 项目表加一个status字段,用整数表示状态:0草稿、1待秘书初审、2秘书退回、3待终审、4专家评审中、5已立项、6进行中、7待结题、8已结题、9已终止。
  • 每次状态变化,往project_audit_log表里写一条记录,包含项目ID、操作人、操作时间、原状态、新状态、审批意见。
  • 前端根据状态值渲染对应的按钮,比如状态是1的时候,秘书能看到“通过/退回”按钮,教师看到的是“等待审核”的提示。

这样做的好处是:逻辑一目了然,代码实现简单,而且所有审批痕迹都在案,答辩的时候解释起来也很有说服力。

4. 关键业务功能的前后端实现思路

4.1 用户密码加密与登录态管理

用户表里的密码字段,我强烈建议直接用Spring Security自带的BCryptPasswordEncoder。BCrypt算法自带随机盐,每次加密的结果都不一样,就算两段明文密码相同,密文也不同,安全性比MD5加盐还要高一层。

登录成功后怎么维持状态?这里有两种路线。传统方式是Session,SpringBoot默认集成,简单省事;前后端分离的项目更推荐JWT(JSON Web Token)。JWT的无状态特性让后端不用存Session,前端在请求头里带Authorization: Bearer <token>即可。考虑到这个项目是Vue + SpringBoot前后端分离,JWT是更全套的做法,但需要处理好token过期和刷新机制。

Vue端我一般这样处理:

  • 登录接口返回token,存到localStorage。
  • 在axios请求拦截器里统一带上request headers中的token。
  • 在axios响应拦截器里判断HTTP 401状态码,统一跳转登录页。
  • 路由守卫beforeEach里判断未登录用户直接重定向到/login。

4.2 科研项目申报:动态表单与文件上传

项目申报页面是整个系统里交互最复杂的页面。学科分类、研究类型、经费预算、成员列表、附件材料,字段多且带有联动关系。其中最麻烦的,是成员列表和经费预算这种“一个项目里包含多条子记录”的结构。

Vue端我用的是Element UI的el-table配合动态添加行,页面上可以点“添加成员”动态产生新行,每一行绑定独立的数据对象,最后整体提交。后端接口接收的DTO结构用一个ProjectVO,里面嵌套List<MemberDTO>和List<BudgetDTO>,用@RequestBody一次性接收,事务里同时插入项目主表和子表数据。

文件上传这一块,Element UI的el-upload组件可以直接对接Spring Boot的MultipartFile接口。建议把文件统一存到一个指定目录,数据库里只存文件相对路径。有个坑是服务器重启后文件丢失,生产环境一定要把上传目录映射到非临时目录,比如Linux服务器上配置一个/data/sci-files目录,别存到/tmp下。

4.3 成果统计与导出:业务的重头戏

科研成果统计是年底科研处最头疼的活儿,也是系统最能体现价值的地方。统计维度往往很多:按院系、按人员、按年龄、按职称、按成果类型、按年度,组合起来非常灵活。

前端做筛选查询,后端用MyBatis动态SQL拼接查询条件。比如统计某年度某院系SCIE论文数,SQL大致是:

SELECT COUNT(*) FROM achievement WHERE type = '论文' AND level = 'SCI' AND YEAR(publish_time) = #{year} AND owner_id IN ( SELECT user_id FROM sys_user WHERE dept_id = #{deptId} )

如果数据量上来了,这种定时统计可以用定时任务提前跑好,存到统计表里,前端直接查结果,查询速度能快不少。对于这种体量的系统,先不急着上Redis缓存,等真遇到性能瓶颈再说。

导出Excel我就直接用Apache POI,把查询结果一行行写入Workbook,再通过HttpServletResponse输出流返回给前端。现在也有很多项目用EasyExcel(阿里巴巴开源的),底层还是POI,但对内存做了优化,导出大数据量时推荐优先用EasyExcel,代码也更好写。

4.4 前端路由与菜单的动态生成

管理后台的菜单,别写死在路由表里。更优雅的做法是:后端根据当前用户角色,返回该角色可访问的菜单列表,前端拿到后动态注册路由。比如管理员能看到“系统管理”菜单,普通教师只能看到“我的项目”“我的成果”“我的经费”。

动态路由有个坑:刷新页面时Vuex里的数据会丢失,导致路由变成空的。所以要么把菜单信息存到localStorage,要么在路由守卫里判断Store里没有菜单数据时就重新向后端请求一次。

5. 数据库表设计中的关键取舍

5.1 项目表与成果表如何关联

我的设计是成果表不直接写死项目名称,而是通过project_id字段与项目表关联。如果一篇论文既属于某项目成果,又是某老师的独立成果,怎么办?我的经验是成果表里做两个字段:project_id可以为空,owner_id必填。这样既允许成果挂在项目下面,也支持个人独立成果。查询的时候,JOIN项目表把名称带出来,前端展示用el-tag把关联状态可视化即可。

5.2 逻辑删除还是物理删除

管理系统里,数据删除一定要慎重。教师填错一条成果记录,可以让他删掉;但一旦这条数据进入了审核流程甚至被统计过,就必须保留痕迹。所以我习惯在核心业务表上加一个is_deleted字段(默认0,删除置1),所有查询默认过滤is_deleted = 0。这样做牺牲了一点查询性能,但保障了数据的完整性和可追溯性。

5.3 时间字段与状态字段的规范

我发现很多项目里,日期用着用着就变成了字符串。某学校做系统时就吃过这个亏,课题起止时间存的是"2024-03"这种格式,后面想计算项目持续了多少天,还得写一堆字符串截取逻辑。我的建议是:

  • 时间一律用java.time.LocalDateTime映射数据库的datetime类型,Java端处理方便,MyBatis也能自动转换。
  • 状态字段用tinyint存数字,配合后端常量类,比用varchar存中文要规范得多。

6. 完整实操步骤:从零搭建到跑通核心流程

6.1 环境准备

先把开发环境列清楚,避免因为环境问题卡壳:

  • JDK 1.8(或者JDK 11,新一点的SpringBoot版本也支持)
  • Maven 3.6+
  • Node.js 14+(如果选Vue3,需要16+)
  • MySQL 5.7 或 8.0(装8.0的话要注意时区和密码加密方式)
  • IDE推荐IDEA,前端开发可以在IDEA里直接写,也可以配合VS Code

6.2 初始化SpringBoot项目

用IDEA的Spring Initializr新建项目,依赖选择Spring Web、MyBatis Framework、MySQL Driver、Lombok(强烈推荐,省掉无数getter/setter代码)。如果是手动搭pom.xml,核心依赖如下:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.3.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>

6.3 application.yml配置

server: port: 8080 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/sci_manager?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai username: root password: 123456 servlet: multipart: max-file-size: 20MB max-request-size: 50MB mybatis: mapper-locations: classpath:mapper/*.xml type-aliases-package: com.example.science.entity configuration: map-underscore-to-camel-case: true

map-underscore-to-camel-case这条一定要打开,数据库里的owner_id才能自动映射成Java里的ownerId,否则字段全部为null,排查半天让你怀疑人生。

6.4 创建Vue前端项目

npm install -g @vue/cli vue create science-web cd science-web npm install element-ui axios vue-router vuex

创建完成后,main.js里注册Element UI和相关插件,然后按照模块建目录:views(页面)、router(路由)、store(Vuex)、api(axios接口封装)、utils(工具函数)。

6.5 搭建前端请求封装

在api/request.js里统一配置axios:

import axios from 'axios' const request = axios.create({ baseURL: '/api', timeout: 10000 }) request.interceptors.request.use(config => { const token = localStorage.getItem('token') if (token) { config.headers['Authorization'] = 'Bearer ' + token } return config }) export default request

这里建议在开发环境配置Vue的代理,把/api代理到后端http://localhost:8080,避免开发时跨域问题。在vue.config.js里配置:

module.exports = { devServer: { proxy: { '/api': { target: 'http://localhost:8080', changeOrigin: true } } } }

6.6 后端实现登录认证

后端写一个LoginController,接收用户名和密码,校验通过后生成JWT返回。JWT的工具类自己封装一个,用io.jsonwebtoken:jjwt这个依赖,核心代码大致是:

public String generateToken(Long userId, String username) { Date now = new Date(); Date expireDate = new Date(now.getTime() + 7 * 24 * 60 * 60 * 1000); return Jwts.builder() .setSubject(username) .claim("userId", userId) .setIssuedAt(now) .setExpiration(expireDate) .signWith(SignatureAlgorithm.HS256, secretKey) .compact(); }

我这里token有效期设置7天,你也可以根据实际情况调整。代码里的secretKey建议放到配置文件里,别硬编码在Java类中。

7. 踩坑实录与常见问题排查

7.1 MyBatis常见的“查不到数据”和“值缺失”

新手用MyBatis最容易踩的坑就是实体类字段映射不上。

场景:数据库字段叫create_time,Java实体属性叫createTime,如果你没开启map-underscore-to-camel-case,查询结果里这个字段就是null。排查办法:在application.yml里加上那行配置,或者写resultMap手动映射。优先推荐前者,省事。

还有一个坑:<if test="projectName != null and projectName != ''">这种动态SQL,如果参数是一个字符串,判断为空时要用''而不能只用!= null,否则条件判断不生效,查出来一堆不该出现的数据。

7.2 前端Vue的响应式丢失问题

在Vue2里,动态往data对象上添加新属性,页面不会更新。比如在el-table里动态添加行,如果直接row.newField = xxx,视图不会刷新。解决方法是使用this.$set(row, 'newField', xxx)。这个问题在Vue3的Proxy机制下已经不存在了,但如果你用的是Vue2,必须时刻警惕。

7.3 文件上传的时机问题

我做过一个项目,教师填报项目时把附件直接上传到了服务器,但他最后没点“提交”按钮,直接关了页面。结果数据库里没有这条项目记录,服务器上却留了一堆孤儿文件。

解决方案有两种:一是附件信息先随项目草稿一起保存,数据库里有对应草稿记录,再存文件;二是定时任务定期清理超过一定时间仍未被引用的上传文件。前者更靠谱,推荐优先做。

7.4 导出Excel乱码问题

用POI导出Excel时,如果文件名涉及到中文,需要做URL编码处理,否则前端下载时会出现乱码或者文件名异常。正确做法:

String fileName = URLEncoder.encode("科研项目统计.xlsx", "UTF-8"); response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + fileName);

7.5 时序问题:审批操作导致的并发冲突

两个管理员同时审批同一个项目,可能会出现“重复立项”的情况。经验之谈:对关键状态变更的SQL加条件,比如UPDATE project SET status = 3 WHERE id = #{id} AND status = 2,如果影响行数为0,说明状态已被其他人修改,提示“操作失败,请刷新重试”。这个做法简单有效,不用引入分布式锁。

8. 优化的方向与个人经验总结

8.1 日志与审计功能

如果系统要真正长期用起来,操作日志逃不掉。谁在什么时间改了什么数据,最好都有一条记录。可以简单用Spring AOP做一个切面,拦截Controller的修改类请求,记录操作日志到一张sys_log表。不用追求记录到字段级别的diff,能记录到“用户A修改了项目B的状态”这个程度就够用了。

8.2 基于Excel批量导入

教师目录里有几百条历史成果数据,如果让老师逐条手工填报,估计没人愿意用系统。给管理员做一个批量导入模板,老师按模板填好,点击上传就能一键导入。注意导入前先做数据校验,模板里加“导入结果报告”,哪些成功了哪些失败,失败的原因是什么,直接下载反馈给用户。

8.3 权限与安全的进一步强化

如果部署到公网,建议配置HTTPS,接口层面增加防SQL注入检验,前端和后端都要对输入做长度和格式校验。管理端密码要支持定期强制修改,避免弱口令问题。这类系统虽然不像金融系统那样高安全等级,但最基本的安全意识必须有。

另外个人感受最深的,是这类业务系统永远不要等所有功能做完再让用户用,那就晚了。最好的方式是第一版先把“用户登录、项目填报、审批流转、成果统计”这四件事跑通,让目标用户(老师)先试用起来,根据真实反馈再迭代后续的细节功能。因为很多需求,光靠想象是想不到位的,用户真正上手后才会告诉你哪一步不顺、哪几个字段明明可以联动却没联动、哪张统计表其实没人看。

9. 结尾:这套系统还能往哪个方向延伸

做完了这套高校科研信息管理系统,你会发现它背后其实是一套通用的“信息管理平台骨架”:用户体系、角色权限、审批流程、主数据管理、统计报表、文件上传。这些模块几乎是所有管理系统的公共零件。把这个骨架吃透了,后面前端换个页面、后端换张表,就能快速套出一个院系资产管理平台、工会活动报名系统、实验室设备管理系统。

我个人的体会是,这类系统最大的技术难点从来不是某个单独的框架用法,而是业务与代码之间的翻译能力:把“科研秘书要先审一遍,再交给管理员终审”这种口语化的规则,翻译成状态机、权限校验和数据库事务。这个能力,才是做这类项目最值钱的部分。

如果你正在做或者准备做这个选题,我的建议是:别贪多,先把核心业务闭环做扎实,把几个有代表性的功能点讲清楚,比堆一百个半成品功能都有说服力。后面遇到问题,欢迎随时来交流。

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

LIPD:返修率危机的72小时根因闭环机制

返修率这个指标&#xff0c;在手机整机制造里就像体温计。平时你看它0.3%、0.5%、0.8%地波动&#xff0c;觉得没什么&#xff0c;可一旦连续两批超过1.2%的红线&#xff0c;整条线都会跟着发高烧。我经历过一次红线告急&#xff0c;前三天返修率直接从0.4%飙到2.3%&#xff0c;…

作者头像 李华
网站建设 2026/10/13 5:09:48

文章同步助手 2.0.2:用 MCP 协议接入 AI,适配 Chrome 新标准

文章同步助手 2.0.2 发布了。标题里那句“作者太给力了”我特别认同——这次不是挤牙膏式的小更新&#xff0c;而是实打实啃了两块硬骨头&#xff1a;MCP 协议支持&#xff0c;以及适配 Chrome 新标准。前者让这个工具第一次能直接进入 AI 客户端的工具箱&#xff0c;后者意味着…

作者头像 李华
网站建设 2026/10/13 5:09:32

城市垃圾管理系统源码解析:数据库设计与路径规划实战

简介&#xff1a;这是一套城市垃圾管理系统完整源码与项目说明&#xff0c;面向计算机相关专业学生及开发者&#xff0c;适合用于课程设计、毕业设计或信息化项目参考。系统实现了转运位置查询、车辆路径规划、垃圾产量统计、垃圾分类查询等典型功能&#xff0c;源码采用PHP后端…

作者头像 李华
网站建设 2026/10/13 5:09:13

基于MATLAB/Simulink的单机无穷大系统暂态稳定仿真分析

搞电力系统稳定性的&#xff0c;第一个正经模型基本都是从单机无穷大系统开始的。这模型看着简单——一台发电机、一段线路、一个无穷大母线&#xff0c;但真要在 MATLAB/Simulink 里把它搭起来&#xff0c;再把不同故障下的暂态过程仿真明白&#xff0c;涉及的细节一点都不少。…

作者头像 李华
网站建设 2026/10/13 5:09:12

Cesium后处理实战:管线原理、内置效果与自定义着色器

做三维GIS项目的人应该都有这种感觉&#xff1a;模型、地形、矢量图层叠了几十层&#xff0c;业务功能也都通了&#xff0c;但画面总差一口气——标签平铺直叙&#xff0c;飞行漫游没有代入感&#xff0c;夜间场景的灯光怎么看都不像真的。这个缺口通常不是建模问题&#xff0c…

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

NGSIM轨迹平滑:Savitzky-Golay滤波实战指南

简介&#xff1a;本资源提供基于Savitzky-Golay滤波器的NGSIM US-101轨迹数据集平滑处理方案&#xff0c;面向自动驾驶、智能交通与轨迹预测方向的研究者及算法工程师&#xff0c;有效解决原始数据因视频提取导致的高频噪声、速度/加速度突变等问题。压缩包共20个文件&#xff…

作者头像 李华