Java宠物管理系统:SSM全栈课程设计源码拆解与避坑指南
简介基于Java的宠物管理系统是面向高校计算机专业课程设计场景的完整实践项目围绕宠物信息、用户信息与领养记录等核心数据采用SSM整合框架、Layui前端组件和MySQL数据库并在MyEclipse中完成编码调试适合需要掌握Java Web全链路开发流程的初学者将理论落地也可作为课程设计或毕业设计的参考原型。压缩包包含1442个文件既有93个Java源文件、92个class编译文件与111个JSP页面等后端逻辑也有大量JS、CSS、PNG、GIF等前端资源另含SQL脚本、项目配置和文档资料整体包体约136.6MB。由内容预览可见系统按Action、DAL等分层组织业务逻辑结构清晰便于阅读和二次开发。目前已有2173人学习下载。通过该项目可直观理解SSM框架协作方式、Layui后台界面构建方法、MySQL表结构设计与增删改查实现同时获得一套可运行的课设模板和配套文档对完成同类管理系统有较高参考价值。1. 基于 Java 的宠物管理系统一套把 SSM 全链路走完的课程设计源码说到 SSM 课程设计很多人的状态是框架语法都学过但真要独立拼一个完整项目就卡住了Spring 容器管哪些 Bean、SpringMVC 怎么把请求转到 Service、MyBatis 的 Mapper 文件要和接口怎么对应。这套基于 Java 的宠物管理系统就是用 SSMSpring、SpringMVC、MyBatis Layui MySQL MyEclipse 把这条链路完整走了一遍。从 Action 层的类命名能看到它拆了订单、会员、商品、信息、留言、相册、导航这些模块典型一个店铺后台管理系统该有的骨架都在。适合正在做课程设计、答辩前想把代码跑明白的学生也适合想快速补 SSM 实战细节的开发者。这篇笔记我会从架构、表结构、前后端对接、部署踩坑四个角度把它拆开。2. SSM 架构拆解Spring 容器、SpringMVC 路由与 MyBatis 映射的分工边界2.1 Spring 容器核心配置和 Bean 扫描边界SSM 项目里 Spring 是容器层负责管理 Service、DAO 这些对象。课程设计里最常见的错误是把所有类都丢给 Spring 扫描结果 Controller 被 Spring 容器也扫了一份事务代理失效。我一般习惯把扫描范围拆干净Service 和 DAO 归 Spring 管Controller 归 SpringMVC 管。下面是 applicationContext.xml 里常见做法的核心配置!-- applicationContext.xml 关键片段 -- context:component-scan base-packagecom.pet !-- 排除 Controller避免重复管理 -- context:exclude-filter typeannotation expressionorg.springframework.stereotype.Controller/ /context:component-scan bean iddataSource classorg.springframework.jdbc.datasource.DriverManagerDataSource property namedriverClassName valuecom.mysql.jdbc.Driver/ property nameurl valuejdbc:mysql://localhost:3306/pet_db?useUnicodetrueamp;characterEncodingUTF-8/ property nameusername valueroot/ property namepassword value123456/ /bean bean idsqlSessionFactory classorg.mybatis.spring.SqlSessionFactoryBean property namedataSource refdataSource/ property namemapperLocations valueclasspath*:com/pet/mapper/*.xml/ /bean这里有两个参数要注意。component-scan的base-package不要范围过大精确到业务包就可以DriverManagerDataSource是课程设计里最简单的连接池替代品实际生产会用 Druid 或 HikariCP但演示项目用它能少配一堆依赖。characterEncodingUTF-8必须写在 URL 里否则中文字段从数据库读出来大概率乱码。mapperLocations指向 Mapper XML 的路径路径写错会出现下面第五章要讲的 Mapper 绑定异常。事务这块我建议走注解方式Spring 容器里加一个事务管理器和tx:annotation-driven/然后在 Service 实现类上标Transactional。课程设计答辩时老师问你的事务怎么控制的能说出这一个注解加一个配置就够分了。2.2 SpringMVC 路由DispatcherServlet 与视图解析SpringMVC 的核心是 DispatcherServlet所有 HTTP 请求先进它再由 HandlerMapping 分发给具体 Controller。web.xml 里配置 DispatcherServlet 时url-pattern 的选择直接决定静态资源是否会被拦截。!-- web.xml 关键片段 -- servlet servlet-namespringmvc/servlet-name servlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-class init-param param-namecontextConfigLocation/param-name param-valueclasspath:springmvc.xml/param-value /init-param load-on-startup1/load-on-startup /servlet servlet-mapping servlet-namespringmvc/servlet-name url-pattern*.do/url-pattern /servlet-mapping我用*.do而不是/理由很简单课程设计项目里 Layui 的静态资源CSS、JS、图片都在 webapp 根目录下用/拦截所有请求就得额外配静态资源放行而*.do只拦截带后缀的请求静态资源完全不受影响。代价是 Controller 的 RequestMapping 路径都要以.do结尾比如RequestMapping(/petList.do)写起来没那么优雅但省掉一整个静态资源 404 的排查环节。springmvc.xml 里除了注解驱动还要配视图解析器。常见做法用InternalResourceViewResolverbean classorg.springframework.web.servlet.view.InternalResourceViewResolver property nameprefix value/WEB-INF/jsp// property namesuffix value.jsp/ /bean这意味着 Controller 里return pet/list会去/WEB-INF/jsp/pet/list.jsp找页面。这里有个意识要建立返回值是页面路径还是 JSON取决于方法上有没有ResponseBody。返回页面就走视图解析器返回对象加ResponseBody就走 Jackson 序列化。课程设计里列表页和数据接口往往是两个请求一个跳页面、一个吐 JSON这个区分要讲清楚。2.3 MyBatis 映射接口、XML 与参数传递MyBatis 的边界在于 SQL 和 Java 方法之间的绑定关系。Mapper 接口定义方法签名Mapper XML 里写 SQL两者通过 namespace 和方法 id 关联。下面是一段完整的 Mapper XML 样板对应宠物信息的列表查询。mapper namespacecom.pet.mapper.PetInfoMapper resultMap idpetInfoMap typecom.pet.entity.PetInfo id columnid propertyid/ result columnpet_name propertypetName/ result columnbreed propertybreed/ result columnage propertyage/ result columnstatus propertystatus/ /resultMap select idfindPage resultMappetInfoMap SELECT id, pet_name, breed, age, status FROM pet_info where if testpetName ! null and petName ! AND pet_name LIKE CONCAT(%, #{petName}, %) /if /where ORDER BY id DESC LIMIT #{offset}, #{pageSize} /select /mapperresultMap的作用是把数据库下划线字段pet_name映射成 Java 驼峰属性petName字段少可以省略字段多时比 resultType 更直观。#{petName}走预编译占位符防 SQL 注入。这里要特别注意LIMIT #{offset}, #{pageSize}这种写法只适用于 MySQL。课程设计里有不少同学直接用${}拼参数如果只用于表名或 order by 字段还说得过去用在 where 条件里就是安全意识问题答辩会被追问。MyBatis 还有个常见选择全部用注解写 SQL 还是用 XML。课程设计层面我建议 XML因为 SQL 多了以后注解方式的可读性下降而且 XML 里if test这种动态 SQL 能力是注解里不好替代的。这套资源里 DALBase 的存在也说明作者在数据访问层做了基类封装后续每个 Mapper 只需要继承基类再补自己独有的 SQL。3. 数据库设计从 Action 类名反推表结构把 MySQL 表拆明白3.1 模块表拆分每个 Action 对应一张核心表拿到这套源码先看类名就能反推数据库设计。DingdanAction 对应订单表HuiyuanAction 对应会员表ShangpinAction 对应商品表XinxiAction 对应信息发布表LeavewordAction 对应留言表AlbumAction 对应相册表SitenavAction 对应导航表。这是一种典型的按业务实体拆表方式。我整理一个宠物商店场景下最可能的表结构清单表名核心字段对应 Action用途pet_infoid, pet_name, breed, age, color, price, statusXinxiAction宠物基础信息memberid, username, phone, addressHuiyuanAction会员/领养人信息goodsid, goods_name, price, stockShangpinAction宠物用品商品ordersid, member_id, goods_id, total_priceDingdanAction订单记录leavewordid, member_id, content, create_timeLeavewordAction留言反馈albumid, pet_id, img_urlAlbumAction宠物相册图片其中album表是典型的从表一张宠物信息对应多张图片所以它应该带pet_id外键字段逻辑外键而不是单独存一个宠物 ID 列表。leaveword表带member_id是因为留言要有归属否则留言列表不知道是谁留的。这套资源里把相册、导航都拆成独立 Action说明作者对一个业务模块一套增删改查的理解是到位的。3.2 建表 SQL 与字段类型选择的几个注意点宠物信息表是最核心的表我给一个可以直接落库的建表语句CREATE TABLE pet_info ( id INT PRIMARY KEY AUTO_INCREMENT COMMENT 主键, pet_name VARCHAR(50) NOT NULL COMMENT 宠物名字, breed VARCHAR(30) COMMENT 品种, age INT COMMENT 年龄月, color VARCHAR(20) COMMENT 颜色, price DECIMAL(10,2) COMMENT 价格, status TINYINT DEFAULT 0 COMMENT 状态0可领养 1已领养, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT宠物信息表;字段类型选择上有几个实战细节年龄用INT存月数而不用字符串否则排序和统计都麻烦价格用DECIMAL(10,2)不用FLOAT浮点精度问题在展示金额时容易翻车状态用TINYINT标记而不用 VARCHAR 存中文因为状态是要做条件筛选的字段数字比字符串更高效。utf8mb4是必须的utf8在 MySQL 里存不了 emoji 和生僻字虽然后端用不用得上但建表时不写utf8mb4属于给自己埋雷。时间字段的DEFAULT CURRENT_TIMESTAMP是 MySQL 5.5 才有的特性如果在 MyEclipse 里配置的是老版本 MySQL 5.1这句话会报语法错。建议确认数据库版本后再决定是否保留自动填充。3.3 通用 DAO 基类DALBase 风格的数据访问封装正文里出现的 DALBase.class 是这套资源的底层设计亮点。它做的事是把通用增删改查抽到基类里子类继承后只需要写自己特有的查询。这个思路在课程设计里很好用能明显减少 Mapper 里的重复 SQL。示意代码public class DALBaseT { protected SqlSessionTemplate sqlSessionTemplate; public T getById(ClassT clazz, Integer id) { String statement clazz.getSimpleName() Mapper.getById; return sqlSessionTemplate.selectOne(statement, id); } public int insert(T entity) { String statement entity.getClass().getSimpleName() Mapper.insert; return sqlSessionTemplate.insert(statement, entity); } public int update(T entity) { String statement entity.getClass().getSimpleName() Mapper.update; return sqlSessionTemplate.update(statement, entity); } public int delete(ClassT clazz, Integer id) { String statement clazz.getSimpleName() Mapper.deleteById; return sqlSessionTemplate.delete(statement, id); } }这里的核心是 statement 的拼接规则类名 Mapper.deleteById这种约定必须和 Mapper XML 里的 namespace 与 id 严格一致。PetInfo 实体继承后getById(PetInfo.class, 1)就会去找PetInfoMapper.getById这条 statement。代价是灵活性下降但换来的是每个子模块少写几十行重复代码。实际改造时要注意如果某张表的主键不叫 id或者删除是逻辑删除update status 而不是 delete基类方法就不适用这时候应该在子类里重写而不是硬套基类。4. 前端与后端对接Layui 表格、表单弹窗与 Controller 接口约定4.1 Layui 表格的数据格式约定Layui 的 table 模块对后端接口有固定格式要求。返回的 JSON 必须是{code: 0, msg: , count: 100, data: [...]}这种结构code 为 0 表示成功、count 是总条数、data 是当前页数据列表。后端封装一个统一的 PageResult 类是值得的public class PageResultT { private Integer code; // 0成功其他失败 private String msg; // 提示信息 private Long count; // 总条数 private ListT data; // 当前页数据 }Controller 里把 MyBatis 查出来的列表塞进这个对象返回即可。前端写法如下layui.use([table], function () { var table layui.table; table.render({ elem: #petTable, url: petInfo/list.do, page: true, cols: [[ {field: id, title: ID, width: 60}, {field: petName, title: 名称, width: 120}, {field: breed, title: 品种, width: 100}, {field: status, title: 状态, templet: function (row) { return row.status 0 ? 可领养 : 已领养; }}, {field: createTime, title: 入库时间, width: 160} ]] }); });这里有两个必踩的细节。第一url返回的 JSON 里字段名是petName而不是数据库的pet_name所以 Controller 返回的实体属性名必须和前端field严格对应中间靠 MyBatis 的 resultMap 完成映射绕不开。第二templet函数里处理状态这类需要翻译的字段不要在 SQL 里先拼好中文再返回保持后端数据纯粹是数字前端负责展示逻辑改动状态文案不用动后端。4.2 表单提交与弹窗交互Layui 的 form 模块适合做新增编辑弹窗。常见套路是layer.open打开一个 iframe 页面iframe 里放表单提交时用form.on(submit(...))拦截并走 Ajax。这里的核心约定是后端接收参数后返回{code: 1}表示成功、{code: 0}表示失败前端根据 code 决定是否关闭弹窗并刷新表格。form.on(submit(saveBtn), function (data) { $.ajax({ url: petInfo/save.do, type: POST, data: data.field, dataType: json, success: function (res) { if (res.code 1) { layer.msg(保存成功, {icon: 1}); parent.layui.table.reload(petTable); var index parent.layer.getFrameIndex(window.name); parent.layer.close(index); } else { layer.msg(res.msg || 保存失败, {icon: 2}); } } }); return false; });注意data.field是 Layui 自动收集的表单数据对象序列化后传给后端。后端 Controller 接收时直接用实体对象接参即可SpringMVC 会自动做参数名到属性的绑定。return false必须写否则表单会走原生提交导致页面刷新这是很多课程设计 Demo 里弹窗一闪而过、数据却保存了两遍的根源。4.3 登录拦截与 Session 控制后台管理类系统不做登录校验等于没有访问控制。SpringMVC 用拦截器做这个事最顺手。先写一个拦截器类public class LoginInterceptor implements HandlerInterceptor { Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { Object user request.getSession().getAttribute(loginUser); if (user null) { response.sendRedirect(request.getContextPath() /login.do); return false; } return true; } }然后在 springmvc.xml 里注册拦截规则mvc:interceptors mvc:interceptor mvc:mapping path/**/ mvc:exclude-mapping path/login.do/ mvc:exclude-mapping path/css/**/ mvc:exclude-mapping path/js/**/ mvc:exclude-mapping path/layui/**/ /mvc:interceptor /mvc:interceptors这块的坑在于exclude-mapping的路径匹配规则。/css/**是放行 css 目录下所有文件如果写成/css/*就只放行一级目录的文件。另外登录成功后把用户对象放进 Session 的 key 是loginUser拦截器里取的时候必须一致这两个地方一个写loginUser、一个写user会让人排查半小时。5. MyEclipse 部署避坑6 个高频报错与排查顺序5.1 环境版本匹配JDK、Tomcat、MySQL 驱动课程设计拿到手第一步不是跑是先对齐环境。常见做法是 JDK 1.8 Tomcat 8.5 MySQL 5.7 这套组合MyEclipse 内置 Tomcat 但版本可能偏低我一般习惯外置 Tomcat 并在 MyEclipse 里指定安装路径。MySQL 驱动 jar 要放进WEB-INF/lib如果是 MySQL 8.x驱动类名要写成com.mysql.cj.jdbc.DriverURL 里还要追加serverTimezoneAsia/Shanghai否则启动时直接报时区错。这个问题在课程设计里出现频率极高本质是 MySQL 8 对连接参数更严格了不是项目代码有问题。5.2 六个高频报错的现象、原因与解决报错一Tomcat 启动时项目部署失败报 ClassNotFoundException。现象是启动日志里找不到某个类直接看到 NoClassDefFoundError。原因是WEB-INF/lib下缺 jar 或 jar 冲突。解决方法是先看具体缺哪个类再确认这个类属于哪个 jar把对应的 jar 放进 lib 并清理重复的旧版本。报错二访问页面报 404DispatcherServlet 配置没问题但找不到 Controller。现象是访问petInfo/list.do返回 404 且 Tomcat 日志无异常。原因是 springmvc.xml 里的component-scan没有扫到 Controller 所在的包。解决检查 base-package 是否覆盖com.pet.controller以及 Controller 类上有没有Controller注解。报错三Mapper 绑定异常报 Invalid bound statement。现象是调用 Mapper 方法时抛org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)。原因是 Mapper 接口的全限定名和 XML 的 namespace 不一致或者 XML 没被扫描到。解决逐项核对 namespace 是否等于接口全限定名mapperLocations 路径是否真的指向 XML 所在目录。报错四页面中文乱码数据库里也是乱码。现象是新增的数据插入数据库就是问号。原因是 JDBC URL 没加characterEncodingUTF-8或者建表时用了latin1默认字符集。解决URL 加参数建表语句指定DEFAULT CHARSETutf8mb4并把 MySQL 配置文件里默认字符集改为 utf8mb4重启服务。报错五Layui 样式或图标不显示。现象是页面结构在但按钮样式全丢控制台报 CSS 或字体文件 404。原因是 layui 目录没有被正确引用。解决确认 webapp 根目录下确实有layui目录且页面引用的路径与项目结构一致。JSP 页面建议用${pageContext.request.contextPath}拼绝对路径而不是相对路径。报错六列表接口返回 500日志显示 SQL 语句报语法错误。现象是表格区域空白Network 里看到 500。原因是 MyBatis 的 SQL 里LIMIT后面的参数在预编译时类型不匹配。解决检查 Mapper XML 里#{offset}对应的 Java 参数是否为 Integer以及是否传了pageSize为 null。5.3 一套固定的排查顺序我拿到一个跑不起来的 SSM 项目不会漫无目的地试。固定顺序是第一步看 Tomcat 启动日志搜Caused by有异常就从这里往上游跟第二步启动成功后访问首页看是页面 404 还是接口 500页面 404 多半是视图路径问题接口 500 看控制台堆栈第三步打开浏览器开发者工具的 Network 面板看每个请求的状态码和响应体这一步能区分是后端问题还是前端问题第四步如果接口正常但页面数据不对去数据库客户端直接执行 SQL确认数据源连的是不是想要的库。这套顺序走完90% 的问题能定位到具体层剩下的 10% 才是环境兼容问题。6. 让课程设计有加分感预置演示数据与答辩准备很多人的项目跑起来之后界面是空的答辩时演示效果大打折扣。我的习惯是拿到资源后第一时间写一个data.sql预置脚本把登录账号、宠物信息、会员数据、留言内容都准备好让老师打开页面就能看到数据。预置数据要贴近场景宠物名称用真实感强的比如布偶猫金毛数量控制在 8 到 15 条覆盖状态字段的每个取值。第二个加分的点是配置外置。把数据库连接信息从 spring.xml 里挪到jdbc.properties文件用context:property-placeholder locationclasspath:jdbc.properties/加载。这一小步在答辩时可以明确说数据库配置与代码分离换环境只需要改一个文件比我的项目能增删改查这个描述有力得多。第三个准备是列一个可能的答辩问题清单为什么用 SSM 不用 SSH、Spring 和 SpringMVC 的容器关系是什么、MyBatis 的 # 和 $ 什么区别、事务注解加在哪一层。这些问题答案都能在这篇笔记前五章里找到。我从那以后每次拿到源码都是先看配置、再建库、再启动这套习惯帮我避开了大部分部署阶段的坑也让我拆项目越来越快。希望这篇笔记能帮你少走一段弯路。本文还有配套的精品资源点击获取

相关新闻

Unity模型自由旋转交互:从卡顿到自然的手势控制实现

Unity模型自由旋转交互:从卡顿到自然的手势控制实现

1. 项目概述:为什么一个“模型旋转查看”功能值得花三天重做三遍Unity里放个模型、加个鼠标拖拽让它转起来——这事儿看起来像新手教程第一课。但去年我帮某高校数字博物馆做的一个文物三维展示模块,客户提的需求就一句:“要让观众像拿在手里…

2026/10/18 12:25:24 阅读更多 →
OpenClaw Docker 安装问题解决全记录:群晖 NAS 上 docker-compose 部署与 TaoToken 接入实践

OpenClaw Docker 安装问题解决全记录:群晖 NAS 上 docker-compose 部署与 TaoToken 接入实践

/* 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:25:24 阅读更多 →
知识体系可视化构建器:从笔记到知识图谱的完整解决方案

知识体系可视化构建器:从笔记到知识图谱的完整解决方案

1. 这个项目到底在解决什么问题先说结论:知识体系可视化构建器,说白了就是把大脑里零散的知识碎片,用图形化的方式组织成一张可以不断生长的网络图。它不是一个简单的笔记软件,也不是思维导图的换皮产品,而是一套从“记…

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

最新新闻

AI分析报告串味问题解析:上下文污染与缓存复用机制及工程化防御

AI分析报告串味问题解析:上下文污染与缓存复用机制及工程化防御

1. 问题现场还原:一个让人后背发凉的“偷懒”现象先说结论:这不是模型变笨了,而是上下文污染加上缓存复用共同制造的假象。我最近在一个数据分析项目里就踩了这个坑——让 AI 对一份新导出的销售数据做趋势分析,结果它输出的结论里…

2026/10/18 13:23:58 阅读更多 →
Qt5 QFtp缺失解决方案:封装库实现FTP文件管理

Qt5 QFtp缺失解决方案:封装库实现FTP文件管理

简介:这份资源面向仍在使用Qt5、却需要继续调用FTP功能的C开发者,尤其是维护旧项目或受限于历史代码、无法立即迁移到QNetworkAccessManager的技术人员。它把Qt4时代的QFTP模块重新封装为可供Qt5链接的库,让登录、上传、下载、列目录等FTP操作…

2026/10/18 13:23:58 阅读更多 →
基于单片机的热电偶测温系统:冷端补偿、线性化与校准实战

基于单片机的热电偶测温系统:冷端补偿、线性化与校准实战

简介:这是一份面向电子信息、自动化及测控专业学生的毕业论文参考资料,主题为基于单片机的热电偶测温系统设计与实现,适合正在准备毕业设计或课程设计、需要完整方案与理论支撑的读者。资源包内含1个doc文档,压缩包约553KB&#x…

2026/10/18 13:23:58 阅读更多 →
DX-BT311-10C02S蓝牙模块AT指令配置与主从切换实战指南

DX-BT311-10C02S蓝牙模块AT指令配置与主从切换实战指南

简介:本资源为DX-BT311-10C02S主从一体蓝牙模块的官方技术手册PDF,面向嵌入式开发工程师、物联网硬件工程师及电子类专业学生,用于快速掌握该模块的核心参数、接口定义与低功耗应用方法。手册内容覆盖模块概述、关键特性(如主从切…

2026/10/18 13:23:58 阅读更多 →
我用 TextIn xParse 做了个「反向押题机」

我用 TextIn xParse 做了个「反向押题机」

一、为什么说简历工具都在回答错的问题 打开任何一个简历优化工具——打分型的、诊断型的、AI 改写型的——它们全都在回答同一个问题: 「我符合吗?」 拿简历逐条对照 JD,给个匹配分,告诉你缺什么。然后呢?你知道自己…

2026/10/18 13:23:58 阅读更多 →
PyTorch从零实现Transformer机器翻译全链路

PyTorch从零实现Transformer机器翻译全链路

简介:这是一份面向深度学习初学者与NLP实践者的Transformer机器翻译项目实战资源,聚焦中译英任务,提供从模型构建、数据预处理到推理部署的完整实现链路。资源包含14个文件,涵盖6个核心Python脚本(如train_model.py、m…

2026/10/18 13:22:57 阅读更多 →

日新闻

基于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 阅读更多 →