SSM+Vue仓库管理系统毕设源码解析:从环境搭建到二次开发实战
简介毕业设计java仓库管理信息系统是一套面向软件工程、计算机相关专业学生及初学者的完整源码与教程包。系统后台采用SSM框架管理页面基于Vue前端页面使用HTML数据库为MySQL兼容JDK1.8并支持Eclipse、MyEclipse、STS、IDEA等主流开发工具。功能覆盖个人中心、员工管理、仓库公告、供应商管理、客户信息管理、仓库信息管理、货物信息管理、货物入库与出库管理等环节适合用于毕设选题、课程设计或项目练手。资源包共464个文件包含162个SVG图标、112个Java源码、45个Vue组件以及SQL脚本、MP4教程、BAT脚本、DOCX说明文档等压缩后约44.07MB结构清晰便于直接导入和学习。已有82人学习下载随包附带数据库脚本、环境工具包及同框架项目的安装教程可帮助快速搭建并理解仓库管理业务流程。1. 仓库管理信息系统一套能直接跑起来的SSMVue毕设源码仓库管理信息系统听起来是个老掉牙的课题但真拿到一份带完整源码的毕业设计项目时你会发现跑起来这件事本身就够折腾。这份资源不是那种只有几个类的demo而是一套后台用SSM、后台管理页面用Vue、前台页面用HTML的完整系统功能覆盖了仓库业务里最常用的人员、供应商、客户、货物、入库、出库这些模块。数据库脚本、环境工具包、同框架项目的安装教程都一起打包了开发工具用Eclipse、MyEclipse、STS或者IDEA都行JDK版本要求1.8。如果你正愁毕设没底或者想基于一套完整的SSM项目做二次开发这份代码值得先跑通再动刀。2. 项目全景与技术选型SSMMySQLVue混搭架构是怎么搭起来的2.1 后台SSM、后台页面Vue、前台HTML这套混搭的边界在哪这个项目的技术栈组合乍一看有点混搭但拆开看其实各管各的边界很清楚。后台API层用的是SSM也就是Spring SpringMVC MyBatis三件套负责处理业务逻辑和数据读写后台管理页面用的是Vue也就是说像员工管理、仓库公告、货物管理这些操作界面是Vue写的单页应用通过Ajax请求后台接口拿数据而前台页面则是普通HTML也就是对外展示的部分不需要框架管理直接用模板渲染或静态页面就行。这种结构的实际好处是分层明显。SSM的Controller层只暴露JSON接口Vue页面只管渲染和交互两者通过HTTP协议通信互不干扰。你在二次开发的时候哪怕把Vue页面重写成其他前端框架比如Vue3或者React后台几乎不用动。反过来说如果只想改业务逻辑比如调整出库时的库存扣减策略也只需要动Service层和Mapper层前端的HTML和Vue文件可以完全不管。2.2 数据库设计核心表和它们的关系这套系统里涉及的数据表基本围绕两个核心对象转人和货。人包括员工、供应商、客户货包括仓库、货物、入库记录、出库记录。再加上一个仓库公告表把日常通知也纳入系统管理。表与表之间有明显的归属关系比如员工可以发布公告货物入库单要关联供应商和仓库出库单要关联客户和仓库。从表结构来看典型的关联关系是这样的货物信息表是主数据入库和出库都围绕货物ID展开供应商表和客户表分别是入库和出库的外键来源仓库表记录仓库名称、地址、管理员等信息员工表则维护登录账号和权限。这种设计不算复杂但应付毕设答辩绰绰有余而且后续加字段、加表都比较容易。如果你打算在二次开发时加一个“盘点管理”模块完全可以在现有表结构上新增一张盘点记录表再挂到货物表下面不用大改动。2.3 源码包里的目录结构与关键文件拿到源码包你会看到根目录下有一批.bat脚本和一批.vue.bak文件。批处理脚本分别是1-install.bat、2-run.bat、3-build.bat从命名就能看出执行顺序。.bak后缀的文件是备份文件比如IndexMain.vue.bak、IndexAsideStatic.vue.bak、BreadCrumbs.vue.bak、IndexHeader.vue.bak这些并不是项目必需的文件真正的Vue源文件是去掉.bak后缀的那些。我第一次打开目录时也差点被搞晕以为项目里怎么全是备份文件后来仔细一对比才发现源文件就在旁边躺着。项目本身是一个标准的Maven Web工程包含src/main/java、src/main/resources、src/main/webapp这几个标准目录。Java代码按包名分包Controller、Service、Mapper三层分明resources目录下放着Spring和MyBatis的配置文件webapp目录下则是静态资源和Vue页面。整体结构对SSM老手来说没什么门槛对新手也不至于迷路。3. 核心模块拆解入库出库这条主链路的前后端实现3.1 货物入库从Vue页面到Mapper的四层调用货物入库是这个系统里最有代表性的功能它把SSM的四层调用完整走了一遍。Vue页面上填写入库单包括货物、数量、供应商、仓库、操作人等字段提交时通过Ajax发送POST请求到ControllerController接收参数后调用ServiceService里先查货物信息、再写入库记录、同时更新库存落到MyBatis的Mapper层执行SQL。下面这段是Service层接口的实现入参是一个入库对象Service public class GoodsInServiceImpl implements GoodsInService { Autowired private GoodsInMapper goodsInMapper; Autowired private GoodsMapper goodsMapper; Transactional(rollbackFor Exception.class) public int addGoodsIn(GoodsIn goodsIn, Integer goodsId, int quantity) { // 先查询货物当前库存 Goods goods goodsMapper.selectByPrimaryKey(goodsId); if (goods null) { throw new RuntimeException(货物不存在); } // 写入入库记录 goodsIn.setGoodsId(goodsId); goodsIn.setCreateTime(new Date()); int insert goodsInMapper.insertSelective(goodsIn); // 更新货物库存数量 int newStock goods.getStock() quantity; goods.setStock(newStock); int update goodsMapper.updateByPrimaryKeySelective(goods); return (insert 0 update 0) ? 1 : 0; } }这段代码的逻辑理解起来不难。方法上标注了Transactional意思是整个入库操作要么全部成功、要么全部回滚不会出现“入库单写了但库存没加”这种脏数据。先查询货物查不到直接抛异常再插入入库记录最后更新库存。这里的insertSelective是MyBatis通用Mapper生成的方法只会更新非空字段适合这种部分字段更新的场景。rollbackFor Exception.class是个容易忽略的细节它保证了任何异常都会触发回滚包括运行期异常。3.2 货物出库反向扣减库存时的数据一致性出库的逻辑和入库对称但有个关键差异出库前必须校验库存是否充足。如果库存不够还要执行出库那就会产生负数库存这在真实的仓库系统里是非常严重的脏数据。所以出库的Service层会先检查当前库存数量不够就直接拒绝。public int outGoods(GoodsOut goodsOut, Integer goodsId, int quantity) { Goods goods goodsMapper.selectByPrimaryKey(goodsId); if (goods null) { throw new RuntimeException(货物不存在); } if (goods.getStock() quantity) { throw new RuntimeException(库存不足当前库存为 goods.getStock()); } goodsOut.setGoodsId(goodsId); goodsOut.setCreateTime(new Date()); int insert goodsOutMapper.insertSelective(goodsOut); int newStock goods.getStock() - quantity; goods.setStock(newStock); int update goodsMapper.updateByPrimaryKeySelective(goods); return (insert 0 update 0) ? 1 : 0; }出库方法比入库多了一个库存校验分支抛出的异常信息里带了当前库存数值方便前端做提示。这里的扣减逻辑是简单的同步扣减适合毕设这种单机并发量不高的场景。如果哪天要应对高并发就需要引入乐观锁比如在货物表加一个version字段更新时带上where version #{version}否则两个请求同时读到库存10各自扣5再写回去最后库存还是10这就是经典的丢失更新问题。3.3 Vue后台页面对接SSM接口的写法后台管理页面是Vue页面通过axios或者jQuery的ajax请求后台接口。这里的核心是接口路径必须和Controller的RequestMapping对应上。比如入库页面的数据列表请求地址是/goodsIn/list接收一个JSON数组然后渲染到表格中。loadGoodsInList() { let url /goodsIn/list?page this.currentPage rows this.pageSize; this.$http.get(url).then(res { this.list res.data.rows; this.total res.data.total; }).catch(err { this.$message.error(加载入库列表失败 err.message); }); }这段是典型的Vue2写法this.$http是封装的axios实例currentPage和pageSize是分页参数后端Controller用PageHelper插件做分页查询时这两个参数直接透传进去。后端返回的rows是当前页的数据数组total是总记录数前端拿到后更新表格和分页组件。如果你想把Vue2的$http换成fetch也是可以的但要注意路径不能变后端接口对调用方式是无感的只要请求头带上了JSON格式就行。3.4 Controller层接收参数、校验、转发、包装返回Controller层是整个前后端之间的桥。一个合格的Controller方法通常会做三件事接收前端传来的参数并做基础校验调用Service处理业务把结果包装成统一格式返回。Controller RequestMapping(/goodsIn) public class GoodsInController { Autowired private GoodsInService goodsInService; RequestMapping(/add) ResponseBody public Result add(GoodsIn goodsIn, Integer goodsId, Integer quantity) { if (goodsId null || quantity null || quantity 0) { return Result.error(参数不合法); } try { int result goodsInService.addGoodsIn(goodsIn, goodsId, quantity); return result 0 ? Result.ok() : Result.error(入库失败); } catch (RuntimeException e) { return Result.error(e.getMessage()); } } }这里有个细节Controller方法用了ResponseBody表示返回的对象会被SpringMVC自动转成JSON字符串写回响应体。Result是一个统一返回类型一般包含code、msg、data三个字段ok()和error()是静态工厂方法。这种包装方式前后端对接时非常省事前端只需要判断code的值不需要解析一堆乱七八糟的响应结构。4. 从零到跑通环境准备、数据库导入和启动步骤4.1 环境版本怎么配JDK1.8、MySQL、开发工具三者的配合这个项目的运行环境不算新但胜在稳定。JDK必须用1.8用太高版本可能会遇到Tomcat和Spring版本不兼容的报错MySQL建议5.7因为MySQL 8.0之后改了认证方式需要用mysql-connector-java8.x驱动而项目里的配置可能是老驱动不换就会报Communications link failure开发工具Eclipse、MyEclipse、STS或者IDEA都行但导入方式有区别Eclipse和STS可以直接导入Maven项目IDEA则需要选择pom.xml作为根文件导入。我个人习惯用STS因为它是Spring官方基于Eclipse定制的导入Maven项目时对Spring配置文件的识别更友好。IDEA也完全可以设置好本地的Maven仓库路径和JDK路径就能跑。如果你电脑里已经装了IDEA 2021之后的版本直接导入Maven工程也不会有什么问题只是启动Tomcat的配置方式要选择“Maven Tomcat插件”或者“外部Tomcat”二选一即可。4.2 数据库脚本导入先建库再导数据数据库这块是新手翻车重灾区核心问题是MySQL的字符集和脚本执行顺序。拿到项目后先打开数据库脚本文件看一眼通常会有CREATE DATABASE语句。如果没有你需要手动在MySQL里创建一个同名数据库并设置字符集CREATE DATABASE IF NOT EXISTS warehouse DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE warehouse; SOURCE C:/path/warehouse.sql;执行完这三行后检查一下表的数量是否和项目说明一致。如果表的数量对不上多半是脚本执行过程中出了问题。另外要注意脚本文件的编码必须是UTF-8如果脚本里包含中文注释而文件本身是GBK编码导入时MySQL会把中文显示成乱码后续查数据内容时看不出问题但会在页面上暴露。4.3 导入项目到IDE并修改配置文件在IDE里导入项目后第一件事不是启动而是改两个配置文件数据库连接配置和Redis配置如果项目用了Redis。数据库配置一般在jdbc.properties里字段不多但每个都要细看jdbc.drivercom.mysql.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/warehouse?useUnicodetruecharacterEncodingutf-8useSSLfalseserverTimezoneAsia/Shanghai jdbc.usernameroot jdbc.password123456第二行特别注意。useUnicodetrue和characterEncodingutf-8解决中文乱码serverTimezoneAsia/Shanghai解决MySQL 8.0的时区问题useSSLfalse避免SSL握手警告。如果你的MySQL是5.7serverTimezone可以不加如果是8.0必须加否则会报The server time zone value ???ú±ê׼ʱ¼ä is unrecognized这个乱码样子的报错我第一次看到时还以为是编码出了问题其实是时区。4.4 启动的几种方式批量脚本和IDE启动怎么选源码包里给了三个bat脚本分别是安装依赖、运行、构建。如果你的电脑上已经配好了Java和Maven环境变量这三个脚本可以直接用。如果没配建议还是在IDE里启动因为IDE能更直观地看到启动日志和报错信息。脚本方式适合部署到服务器或者演示时快速拉起环境日常改代码还是用IDE里的Tomcat调试。启动成功后浏览器访问后台管理地址能看到登录页面默认账号密码在说明文档里有。前台页面则是另一个端口或路径具体看启动日志中Tomcat打印的地址。验证跑通的标准很简单登录后台、添加一条货物信息、做一次入库操作然后去货物列表看库存是不是增加了。这三步走通说明项目环境没问题。5. 避坑指南换环境重跑SSM项目最容易翻车的五个点5.1 数据库连接报错 Communications link failure现象启动项目后后台日志抛Communications link failure有时还带着Connection refused。原因有两个方向一是MySQL服务没启动二是驱动和MySQL版本不匹配。解决方法是先用telnet 127.0.0.1 3306确认端口通不通通的话再检查jdbc.properties里驱动的版本。如果MySQL是8.0以上驱动必须是com.mysql.cj.jdbc.Driver而不是旧的com.mysql.jdbc.Driver否则连接后执行SQL时会报驱动类不存在。5.2 导入项目后Java文件大面积报红现象项目导入Eclipse或IDEA后src下几十个.java文件全部报红Autowired、Service这些注解全部无法解析。原因基本上是Maven依赖没有下载或者JDK版本和项目pom.xml中配置的版本不一致。解决方法是先确认本机Maven配置了国内镜像源然后右键项目执行Maven的Update Project让它把依赖拉下来。如果拉完之后还有个别类报红检查一下项目构建路径里JRE System Library是不是1.8有时候IDE默认选了11以上Spring相关注解识别不出来。5.3 乱码问题页面显示问号或中文变成英文现象页面上的中文菜单和提示全是问号或者数据库表里的中文显示成一堆???。原因是字符集链路上某一环断了。解决方法是按顺序检查三个地方jdbc.properties的URL里有没有characterEncodingutf-8数据库脚本导入时CREATE DATABASE语句有没有指定utf8mb4前端HTML页面meta charset有没有设置UTF-8。缺一环就会乱码这是Java Web项目里最经典的玄学问题之一排查完这三个点通常就能恢复正常。5.4 .bak文件误以为是源码导致修改无效现象改了某个页面但刷新浏览器后没有任何变化。原因是你改的可能是.bak备份文件而不是真正的源文件。比如IndexMain.vue.bak和IndexMain.vue长得几乎一样新手容易打开备份文件修改改完发现不生效。解决方法是打开文件前先看路径和后缀.bak文件可以直接忽略它们只是保留的旧版本。如果不想要了可以把它们删除不影响项目运行。5.5 Tomcat端口被占用导致启动失败现象启动Tomcat时报Port 8080 required by Tomcat v8.5 Server at localhost is already in use。原因是本机已经有其他进程占用了8080端口。解决方法有两种一是找到占用进程并结束它比如在命令行执行netstat -ano | findstr 8080再用taskkill /PID 进程号 /F二是直接在IDE里改Tomcat的HTTP端口为8081或9090改完之后访问路径也要跟着变。如果想省事我更推荐第二种方法反正毕设项目不对外提供服务用什么端口都一样。6. 二次开发实战在现有仓库系统上新增一个盘点模块6.1 从表设计开始盘点表怎么挂到货物信息下面如果你想把这个仓库系统改装成自己的毕设最稳妥的做法是顺着现有结构加功能而不是推翻重写。我拿“货物盘点”举例这个功能在很多仓库系统里都有加完之后答辩也有话讲。第一步是新增一张盘点记录表字段包括盘点单号、货物ID、实盘数量、账面数量、差异数量、盘点人、盘点时间外加一个备注字段。CREATE TABLE t_check_record ( id INT PRIMARY KEY AUTO_INCREMENT, check_no VARCHAR(32) NOT NULL COMMENT 盘点单号, goods_id INT NOT NULL COMMENT 货物ID, actual_qty INT NOT NULL COMMENT 实盘数量, book_qty INT NOT NULL COMMENT 账面数量, diff_qty INT NULL COMMENT 差异数量, checker VARCHAR(32) NULL COMMENT 盘点人, check_time DATETIME NULL COMMENT 盘点时间, remark VARCHAR(255) NULL COMMENT 备注 ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;diff_qty建议在Service层计算不要由前端传值这样可以避免前端篡改数据。这张表挂到货物信息下面后不影响原有的入库出库流程改动范围控制在新增代码和新增页面内这是二次开发最理想的局面。6.2 后端新增接口从实体类到Controller一条龙有了表之后按SSM的标准流程补代码。写实体类、写Mapper接口、写Mapper XML里的SQL语句、写Service和ServiceImpl、写Controller最后在Vue菜单里增加一个页面入口。Mapper里最核心的SQL是插入盘点记录其余查询可以走通用Mapper的selectByExample。Controller RequestMapping(/check) public class CheckController { Autowired private CheckRecordService checkRecordService; RequestMapping(/add) ResponseBody public Result add(Integer goodsId, Integer actualQty, String remark) { if (goodsId null || actualQty null) { return Result.error(货物ID和实盘数量不能为空); } try { int result checkRecordService.addCheckRecord(goodsId, actualQty, remark); return result 0 ? Result.ok() : Result.error(盘点登记失败); } catch (RuntimeException e) { return Result.error(e.getMessage()); } } }代码本身没有新东西但胜在模式和现有模块保持一致。新增功能最怕的是“写法风格和旧代码不一致”比如原来都用Result.error()返回错误新接口却返回一个裸字符串后面接手的开发者就会很痛苦。保持风格统一也是二次开发里容易被忽略但很重要的习惯。6.3 验证盘点功能你需要测哪几条链路功能写完之后验证不能只看“页面能打开”。我一般会按下面三条链路走一遍先手工在数据库里执行一条INSERT确认表的字段约束没问题再通过Vue页面正常提交一条盘点记录看差异数量算得对不对最后故意填一个超过账面数量的实盘数看系统会不会出现负数差异以及前端能否拿到正常提示。第三步很多人会跳过但恰恰是这一步能暴露Service层的校验漏洞。从那以后我每次动手改一个老项目都会强制把异常路径的用例先想好再写代码这条习惯帮我挽回了不少翻车现场。希望这次的源码解析和改造思路能帮到你跑通之后你会觉得SSM这套老組み合わせ其实挺顺手的。本文还有配套的精品资源点击获取

相关新闻

assimp 3.3.1 模型加载全解析:CMake构建、顶点提取与内存导入实践

assimp 3.3.1 模型加载全解析:CMake构建、顶点提取与内存导入实践

简介:assimp-3.3.1.zip 是面向游戏开发、虚拟现实与通用图形应用的三维模型导入库,提供统一接口以处理多种3D格式,适合需要加载复杂模型资源的引擎与工具链项目。压缩包针对 Visual Studio 2015(vc140)构建&#xff0c…

2026/10/18 10:31:44 阅读更多 →
MFC集成SQLite实战:编码转换、事务处理与踩坑记录

MFC集成SQLite实战:编码转换、事务处理与踩坑记录

简介:一份面向MFC初学者的SQLite3集成示例工程,演示在Visual Studio 2010对话框应用中实现数据库添加、删除、修改、查询,并特别展示标准查询与基于回调函数的异步查询,适合需要轻量级嵌入式数据库的Windows桌面项目参考。压缩包共…

2026/10/18 10:30:44 阅读更多 →
ComfyUI v0.11.0实操:新模型接入与性能调优指南

ComfyUI v0.11.0实操:新模型接入与性能调优指南

玩 ComfyUI 的朋友应该都有同感:这工具就像一套乐高积木,模型、采样器、VAE、LORA 全是独立零件,怎么拼全看自己,但零件换得也快。每隔几周就要追一次新版本,这次 v0.11.0 的更新名单确实有点长——Zimage Omni、Anima…

2026/10/18 10:30:44 阅读更多 →

最新新闻

AirLLM:单张显卡也能跑70B大模型的分层推理显存优化方案

AirLLM:单张显卡也能跑70B大模型的分层推理显存优化方案

1. AirLLM 到底是什么:一个把“大模型塞进小显存”的暴力优雅方案QLoRA、GPTQ、GGUF,这些名字想必大家都不陌生。这几年为了在消费级显卡上跑大模型,各路方案层出不穷,核心思路无非两种:量化压缩模型权重,或…

2026/10/18 16:45:42 阅读更多 →
Playnite 主题定制 10 分钟上手:把游戏库界面改成自己的样子

Playnite 主题定制 10 分钟上手:把游戏库界面改成自己的样子

Playnite 主题定制 10 分钟上手:把游戏库界面改成自己的样子 【免费下载链接】Playnite Video game library manager with support for wide range of 3rd party libraries and game emulation support, providing one unified interface for your games. 项目地址…

2026/10/18 16:45:42 阅读更多 →
AI教材生成全流程:低查重高质量编写实战指南

AI教材生成全流程:低查重高质量编写实战指南

最近一年我接了好几本教材编写的活儿,从高校专业课讲义到企业内训手册都有。绕不开的两件事:一是写不完的量,二是躲不掉的查重率。身边不少同行开始把AI教材生成工具纳入工作流,确实能把初稿周期从一两个月压缩到一两周&#xff0…

2026/10/18 16:45:42 阅读更多 →
视觉目标跟踪丢失后重定位:丢失检测与搜索策略工程实践

视觉目标跟踪丢失后重定位:丢失检测与搜索策略工程实践

1. 从“跟丢”说起:为什么重定位是视觉跟踪的必修课做过视觉目标跟踪的人都有一个共识:跟踪算法在视频前几十帧跑得再漂亮,都不算数,真正的考验出现在目标被遮挡、快速运动、出画再入画、或者画面剧烈抖动的那一刻。我见过太多Dem…

2026/10/18 16:45:42 阅读更多 →
PHP轻量级代理分销系统:三级分佣+订单穿透+自动结算

PHP轻量级代理分销系统:三级分佣+订单穿透+自动结算

简介:这是一套基于PHP开发的代理分销型商城系统源码,面向中小型电商创业者、PHP初中级开发者及二次开发学习者,解决多级代理管理、佣金自动结算与分销渠道拓展等核心运营需求。资源包为RAR格式,大小11.5MB,虽未提供具体…

2026/10/18 16:45:42 阅读更多 →
深度学习实战:食物分类从数据准备到部署完整指南

深度学习实战:食物分类从数据准备到部署完整指南

先说实话,做了几年图像分类的活儿,我越来越觉得“食物分类”这个题目被低估了。它不像猫狗识别那样简单到几轮就收敛封顶,也不像人名识别那样需要极其苛刻的数据条件。食材种类上百、同一种食材换个切法和熟度就完全变了样、摆盘和背景还在添…

2026/10/18 16:44:42 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →