Python微信小程序电影院购票系统:从建表到并发锁座的完整实现
1. 先从需求拆起一套能用的影院购票系统不只是“电影列表 一张订单表”这几天又有人拿着“python微信小程序的电影院购票售票系统”这个题目来找我说网上模板很多但要么是纯前端摆了个样子要么后端只有一张订单表根本回答不了“两个用户同时选同一个座位怎么办”这类问题。与其继续一份份解释我干脆把这类项目从0到1的完整思路写出来。先说结论一个电影院购票小程序核心业务流其实只有一条线——用户浏览影片 → 选择场次 → 查看影厅座位图 → 选座提交订单 → 支付 → 支付成功出票/锁定座位。但这条线落到实际开发里牵扯出的是用户身份、影片内容管理、影厅与场次的关系、座位状态机、订单状态机、支付回调、超时释放、并发一致性这一连串问题。任何一个环节只做表面功夫项目上线后都会以各种姿势爆炸。我通常把这个系统拆成四个模块来理解模块核心职责复杂度来源用户模块微信登录、token管理、个人订单查询登录态与openid对应关系内容模块影片、影厅、场次、座位图的维护与查询场次与影厅的时间冲突校验票务模块选座、锁座、订单创建、支付、超时释放并发、状态机、幂等管理后台排片、座位图编辑、订单处理可简化如果做学生项目可以先用Django Admin或自建简易页面技术选型方面后端用 Python 做是没问题的。框架我建议 Flask 或 Django 二选一接口少、依赖轻用 Flask PyMySQL/SQLAlchemy 足够如果你需要现成的 Admin 后台来维护影片和排片Django 的 admin 模块确实省事。数据库用 MySQL缓存和锁座预占用 Redis小程序端就用原生语言开发不需要引入 uni-app/Taro 之类的跨端框架——这个项目页面数量少、逻辑集中原生反而更稳。记住一点这个题目真正的技术难点不在“购票”两个字上而在“座位”两个字上。后面的数据库设计和接口设计都是围绕座位状态的一致性展开的。2. 数据建模的关键决定座位状态不该和影厅绑定2.1 最容易犯的建模错误给座位表直接加 status 字段很多初版设计是这样的一张 hall影厅表一张 seat座位表seat 表里放 row_num、column_num、status 三个字段。看着没什么问题但稍微想深一步就崩了——同一个物理座位在上午10点和下午3点两场电影里应该分别卖。如果你把状态放在 seat 表上意味着上午场的用户锁定了 E12 座位下午场的用户看到的 E12 也是锁定状态这显然不符合真实业务。正确的思路是物理座位是静态资源某一时刻的售卖状态必须绑定到“场次 座位”这个组合。所以我建表的时候会引入一张 schedule_seat场次座位表每一行代表“某场次下的某个座位”state 字段才有意义。2.2 核心表结构到底怎么设计下面是这套系统里我实际用到的核心表设计字段做了精简直接复制去改即可movie 影片表id、title、poster_url、cover_url、duration_minutes时长分钟、release_date、director、actors、category、synopsis、rating、status0即将上映 / 1热映 / 2下映hall 影厅表id、name、row_num、column_num、layout_json这里的 layout_json 是重点。真实影厅不是完整矩形前面几排可能只有6个座位中间有过道最后一排可能是情侣座。我建议用 JSON 数组保存整个厅的二维布局每个元素标记是座位还是过道。这样前端渲染座位图的时候根本不关心影厅是什么形状直接按这个数组画就行。schedule 场次表id、movie_id、hall_id、start_time、end_time、sale_price单位分、version2D/3D/IMAX、status这个表必须加一个唯一约束同一影厅在同一时间只能排一场一般是 UNIQUE(hall_id, start_time)。schedule_seat 场次座位表id、schedule_id、seat_code比如“E12”、row_num、column_num、state0可选 / 1已锁定待支付 / 2已售出、lock_order_id、lock_expire_at这张表的记录不是一开始就生成的而是在排片成功后根据 hall 表的 layout_json 批量生成。state1 表示该座位被某个未支付订单暂时锁住lock_order_id 用来记录锁这个座位的订单号lock_expire_at 是锁的过期时间。order 订单表id、order_no业务订单号对外展示用、user_id、schedule_id、seat_codes冗余字段存“A10,A11”方便列表展示、total_fee单位分、state0待支付 / 1已支付 / 2已取消 / 3已退款 / 4已完成、created_at、paid_at、closed_at、pay_trade_no第三方支付流水号order_seat 订单座位关联表id、order_id、schedule_seat_id这里我特意把金额全部用“分”存储避免浮点数精度问题。Java 里有 BigDecimalPython 里 Decimal 也能处理但最省事的方案就是从源头用整数。这样后面做微信支付的金额参数时直接传整数分不用做单位换算。2.3 为什么订单号不能暴露自增 id订单表主键无所谓但对外展示的 order_no 我建议用“时间戳 随机数 用户id后几位”拼一个 18~20 位的字符串。原因有两个第一买票入场的验票码如果直接用自增 id用户一眼能看出你一天出票量存在业务信息泄露风险。第二自增 id 顺序性强做支付回调时如果有人猜到别人订单号虽然还需要登录态但尽量别给自己埋雷。3. 后端接口设计登录、片单、锁座、超时释放一条龙3.1 微信登录接口用 code 换 openid然后自己发 token小程序端调用wx.login()拿到临时 code传给后端后端拿这个 code 去微信的开放接口换 openid 和 session_key。流程很短但有两个细节容易忽略。第一session_key千万不要返回给前端。这是平台会话密钥一旦泄露别人可以伪造用户身份。正确做法是后端根据 openid 找到或创建用户记录然后自己生成一个 token比如 uuid把 token 存到 Redis 或数据库并设置有效期前端以后所有请求都带这个 token。第二用户表的主键不该是 openid 字符串。虽然 openid 本身是唯一的但用户可能同一个手机号换小程序重新登录字段和索引管理都不方便。我一般用自增 id 做逻辑主键openid 加唯一索引。3.2 影片列表和场次接口注意 N1 查询影片列表接口很简单查 status1 的热映电影按上映时间或热度排序分页返回。真正的坑在“场次列表”前端进入影片详情页后要显示该影片在哪些影厅、哪些时间有排片。如果直接写嵌套循环——先查影片再用 movie_id 查场次再拿 hall_id 查影厅名影厅查询和场次查询 N1数据量大了接口会很慢。最简单的方式是一次性 JOIN 查出场次和影厅信息或者先查场次列表再用一条 IN 查询把涉及的影厅一次性查出来装进 dict 里做映射。3.3 下单锁座一条条件 UPDATE 比事务更稳这是全项目最核心的一段逻辑直接决定系统会不会出现“一张票卖两次”。先说反面教材。很多人写的下单逻辑是SELECT 查所有要选的座位的 state全部是 0 才继续。创建订单记录。UPDATE 把这些座位 state 改成 1。这个流程在并发场景下必炸。两个用户同时发起请求都执行了第1步发现座位是空的然后各自创建订单、各自更新结果两个订单都成功但座位只有一个。正确做法是用一条带条件限制的 UPDATE 去抢座位让数据库来保证原子性。因为 UPDATE 语句本身是原子操作多个请求同时执行的时候MySQL 会真正串行化地对符合条件的行加锁更新。UPDATE schedule_seat SET state 1, lock_order_id %s, lock_expire_at DATE_ADD(NOW(), INTERVAL 15 MINUTE) WHERE schedule_id %s AND id IN (seat_id_1, seat_id_2) AND state 0;Python 后端里对应的逻辑是affected db.execute( UPDATE schedule_seat SET state 1, lock_order_id %s, lock_expire_at DATE_ADD(NOW(), INTERVAL 15 MINUTE) WHERE schedule_id %s AND id IN %s AND state 0 , (order_no, schedule_id, seat_ids), ) if affected ! len(seat_ids): # 说明至少有一个座位已经被别人锁定或售出 return error(有座位刚刚被锁定请刷新后重新选择)affected返回的是实际更新成功的行数。如果用户选了3个座位但只更新了2行说明第3个座位已经被别人抢走此时要做的不是让用户成功下单而是立即把已经锁定的另外2个座位释放掉然后返回友好提示让用户重新选座。这里有个容易被忽略的细节state 1意味着座位被“锁住待支付”这不是最终状态。锁住之后订单创建失败怎么办比如用户选的座位跨了两个场次、或者订单插入时数据库报错这些都是事务边界要处理的事。我建议把锁座和订单创建放在同一个数据库事务里锁座成功是事务的第一步后续订单表和订单座位表插入失败直接 rollback 回滚锁座自然失效。3.4 订单超时释放定时任务别写成“无差别释放”锁座不能永久锁着。用户选了座但不支付座位至少要在一个合理时间后释放一般是 10~15 分钟。实现上最常用的方式是后台定时任务每1分钟扫描一次超时订单。但这里有一个经典的 bug如果你只按“锁座时间超过15分钟”来释放座位而不去看这个座位对应的订单状态会出现非常严重的误释放。我见过一个项目用户在第14分钟完成支付但定时任务在第15分钟扫到这个座位 lock_expire_at 已过期直接把它释放成 state0结果订单显示已支付用户入场时查不到座位投诉直接炸锅。正确释放条件是座位锁定时间超过阈值且该座位关联的订单状态仍为待支付。SQL 大概长这样UPDATE schedule_seat s JOIN order o ON s.lock_order_id o.order_no SET s.state 0, s.lock_order_id NULL, s.lock_expire_at NULL WHERE s.state 1 AND o.state 0 AND s.lock_expire_at NOW();还需要考虑一个特殊情况如果锁座成功但订单创建失败事务回滚后没有 order 记录上面的 JOIN 就释放不掉这些孤儿座位。所以我一般再加一条清理 SQL专门处理lock_order_id在 order 表中找不到记录的任务。4. 小程序端页面交互座位选择器才是工作量的大头4.1 页面结构别贪多五条跳转就能覆盖核心流程小程序端我通常这样组织页面pages/index/index热映影片列表触底加载更多pages/movie/detail影片详情 场次列表pages/seat/select座位选择器 底部提交栏pages/order/confirm订单确认页可选也可并入座位页pages/order/list用户订单列表pages/user/index个人中心核心跳转链路是 首页 → 详情 → 座位页 → 订单确认/支付 → 订单列表。页面之间传输数据除了影片 id、场次 id 这类少量参数可以通过 URL query 传递像“已选座位列表”这种结构数据建议通过全局 store 或本地缓存传递避免 URL 过长被截断。4.2 座位选择器直接用 view 绘制别动不动就上 canvas这个问题我纠结过好几次。座位图本身就是个二维网格Canvas 也好、SVG 也好都能画。但考虑到选座要支持点击交互、高亮、状态区分、滚动我最终都用view CSS 网格来实现性能完全足够而且开发调试心智负担小很多。后端接口返回给前端的数据分两部分影厅的 layout_json —— 标记哪些位置是座位哪些是过道。该场次所有座位的状态列表 —— 按 seat_code 为 key 的字典。前端渲染时两层数据一比就能确定每个座位格子的状态。样式规则如下可选座位浅色底点击后变成红色高亮已锁定state1中灰色不可点击已售出state2深灰色或打叉不可点击过道不渲染格子占位显示空隙座位格子的尺寸不能写死因为不同机型宽度不一样。我用flex: 0 0 6%之类的比例方式布局一屏12列每列约 5% 宽度再加上间距剩余空间自然分配。选座数量也有限制一般单笔订单不能超过6张前端在下拉框里就限制住后端下单接口也要再校验一次防止有人绕过前端刷接口。座位选择器里最容易被忽视的交互细节是点击选座和页面滚动的冲突。用户选座时通常是在一个长页面上上下滑动找座位如果点击座位的 touch 事件拦截了手指移动用户滑到一半就被卡住。我的做法是给座位的bindtap处理点击不给容器加catchtouchmove滚动交给页面本身处理实测下来流畅度没问题。4.3 支付流程模拟支付和真实支付要能一键切换个人开发者或者没有申请到微信支付商户号的时候项目里得有一个模拟支付按钮。这个按钮在后端实际上就是直接把订单状态从“待支付”改成“已支付”。但我要提醒一点模拟支付的逻辑要封装成一个独立模块这样后面申请到真实支付资质后只需要替换掉支付验证那一层不用动订单主体逻辑。真实微信支付的流程是前端调wx.requestPayment发起支付用户输密码然后微信服务器异步给后端支付回调接口发通知。后端收到回调后要做的不是直接改订单状态而是先验签 查单——调用支付平台的查询接口确认这笔订单确实支付成功再更新订单状态和锁定座位。支付回调有个天然的幂等问题同一笔订单微信可能通知你好几次第一次处理成功第二次第三次如果再去改订单状态就会把“已支付”改成“退款”之类乱七八糟的状态。做法很简单所有支付结果处理的开头先查一次订单当前状态只有当前状态是“待支付”才继续往后处理否则直接返回成功。4.4 列表页和结果页的体验细节影院购票小程序里图片加载体验直接决定用户第一印象。电影海报动不动就几十张如果全部同步加载首页首屏会非常慢。我一般用小程序原生image组件的 lazy-load 属性配合分页加载每次只加载当前屏和后一屏的数据。订单支付成功页面别做得太简陋给用户一个明显的“查看电子票”按钮电子票上放大座位号和场次时间减少入场时找订单的操作成本。5. 惊魂排查两个用户同时锁到了同一个座位5.1 现象内测当天同时有人买到了同一个座位这是我做某次影院购票 Demo 时真实踩过的坑。当时系统已经上线到测试环境配合推广活动做了个内测结果运营反馈A 和 B 两个用户反馈都显示购票成功但坐在同一个位置 E12 上。听起来很魔幻但恰恰是这类系统最经典的并发 bug。5.2 排查链路从日志到数据库一步步还原第一步看接口日志。我发现两个下单请求前后相差不到 200 毫秒都返回了“下单成功”。也就是后端代码里没有任何一处拒绝了其中一个请求。第二步查数据库。两个订单都存在状态都是“待支付”订单座位关联表里都有 E12。说明两笔订单都认为自己是合法的。第三步看代码。原下单逻辑确实就是典型的非原子操作SELECT 查询 E12 的 state等于 0。创建订单。UPDATE 把 E12 设成 state1。两个并发请求都走到了第3步之前都查到了 state0于是都创建了订单。这就是经典的 check-then-act 竞态条件——检查和操作之间不是一个原子单元。5.3 修复方案用条件 UPDATE 彻底替代“先查后改”我把第3步提前用一条带WHERE state 0的 UPDATE 去抢座就像第3.3节写的那样。两个并发请求同时执行这条 UPDATE数据库层面会给符合条件的行加锁第一个请求更新成功第二个请求因为状态已经不是 0更新影响行数为 0直接返回“座位已被锁定”。修复后我还写了个简单的并发测试脚本用 20 个协程同时抢同一个座位最终只有 1 个拿到锁座成功其余 19 个全部返回“座位已被人抢先一步”。数据一致性验证通过。5.4 这个 bug 牵出的第二个陷阱释放任务的误伤修复主问题后不久我又发现一个“支付成功但座位变成可选状态”的反馈。查日志发现用户在支付完成那一刻定时任务刚好把 E12 释放成了可选。原因就是我前面提到的——释放任务只看了 lock_expire_at没看订单状态。我的最终修复方案是双保险释放任务只处理“待支付且已超时”的订单关联座位。支付回调里更新座位状态时额外加一条带订单号的匹配条件只有当前座位的lock_order_id等于这笔订单的order_no才允许把 state 从 1 改成 2。不匹配就是异常情况订单自动进入退款流程。这样即使释放任务发生误释放用户支付后看到的是“订单异常已自动退款”而不是拿着票但入场无效起码不会造成现场纠纷。6. 上线前必须过一遍的清单域名、HTTPS、支付资质、审核小程序不是写好代码跑起来就能发布的。几个硬门槛我先列出来每个都会卡住一堆人服务器与域名小程序要求所有网络请求必须是 HTTPS且请求的域名必须在小程序后台配置为合法域名。这意味着你要有自己的域名而且要备案。没有备案域名开发工具里能开“不校验合法域名”来调试但真机预览和线上发布都会直接失败。后端服务部署我习惯用 Nginx 做反向代理 Gunicorn 跑 Python 服务 MySQL 负责存储。进程管理用 systemd 或者 supervisor 都行。Nginx 配置里挂 HTTPS 证书然后把/api/路径转发到本机的 Gunicorn 端口。部署完成后用 curl 直接测服务器上的 HTTPS 接口没问题再连小程序调试。支付资质个人主体的小程序基本无法开通微信支付能力需要个体户或企业资质。学生项目建议直接用模拟支付或者把支付环节做成可插拔的适配层验收时演示模拟支付简历里写明已了解真实支付回调逻辑即可。隐私与审核现在小程序上线审核对隐私协议要求很严尤其是涉及用户手机号、身份信息的场景。如果只是购票尽量只拿微信昵称和头像不轻易收集手机号。项目里涉及到的隐私接口在小程序后台的“用户隐私保护指引”里要如实声明。7. 杂项坑集中营时间、金额、按钮、重复请求最后把这类项目里最容易出现的几个小问题集中说一遍很多都是开发到后期才意识到。时间字段统一用时间戳或 datetime时区。场次时间如果直接存字符串“2024-06-01 19:30”小程序端和服务端时区不一致时就会显示错乱。我一般存 int 时间戳前端拿到后自己用formatTime转成当地字符串不会出现“日期对不上”这种玄学问题。订单金额千万不能直接用浮点数运算。Python 的 float 在做小数比较时可能出现不可预期的结果。我前面强调过用“分”存储前端展示时再除以100转成字符串显示计算逻辑全部走整数彻底避开浮点陷阱。下单按钮的防重复提交。用户选好座位点“提交订单”如果网络慢他的第一反应是再点一下。这时候如果前端不防抖后端就会收到两次带同一批座位的请求。第一次成功锁座返回订单号第二次因为座位 state 已变成 1返回“座位已被锁定”用户会以为自己买失败了体验很差。前端在发起请求后立刻给按钮加 loading 和 disabled后端同时用锁座幂等做兜底基本就能杜绝重复订单。票务系统的“数字排”行业惯例。影院座位一般没有 I 排因为 I 和 1 容易看混很多影厅直接从 A 排到 H 再跳 J 排。如果你的影厅布局是自己定义的这个细节可以在后台配置里留给运营人员不要硬编码。图片资源走 CDN 或至少用独立域名。小程序对并发请求数量有限制如果几十张海报都从后端服务器拉首屏会被网络瓶颈拖死。把海报、封面这类静态资源放到对象存储/CDN 上小程序里填 CDN 域名后端接口只返回 URL 字符串就行了。这些东西看着零碎但在真实项目中几乎每次都会遇到。把这套逻辑吃透换个演唱会票务、景区门票、课程预约项目核心思路完全能复用——你真正掌握的其实是“资源 时间窗口 状态机”这三样东西怎么组合成一套可靠系统而不仅仅是做了一个购票页面。

相关新闻

从配置到远程开发:这款免费跨平台编辑器的高效使用指南

从配置到远程开发:这款免费跨平台编辑器的高效使用指南

简介:Microsoft Visual Studio Code 的完整 zip 安装资源,面向开发者与编程学习者。该编辑器免费开源,跨 Windows、macOS、Linux 使用,内置 Git 版本控制、IntelliSense 智能补全、调试器、集成终端与扩展市场,原生支持…

2026/10/18 7:28:03 阅读更多 →
C++ Lambda捕获机制:生命周期、悬空引用与闭包原理详解

C++ Lambda捕获机制:生命周期、悬空引用与闭包原理详解

“这段代码要传到后台异步执行,你确定它捕获的变量还活着吗?”——这是我做代码评审时最常抛给写代码的人的一个问题。C的lambda捕获机制,表面上就是中括号里写几个名字的事儿,但几乎每个经历过大型C项目的开发者,都被…

2026/10/18 7:28:03 阅读更多 →
VS Code 高效配置指南:从插件管理到远程开发避坑

VS Code 高效配置指南:从插件管理到远程开发避坑

简介:微软 VS Code 代码编辑器程序目录资源包,适合需要在离线环境安装、定制或研究其内部结构的前后端开发者与运维人员。资源共有七千零九十四份文件,以 JavaScript 脚本、JSON 配置、Markdown 文档、TypeScript 类型定义和 CSS 样式为主&am…

2026/10/18 7:28:03 阅读更多 →

最新新闻

从私钥到Web3入口:钱包技术演进与实现原理

从私钥到Web3入口:钱包技术演进与实现原理

1. 钱包到底是什么:先搞懂“币”其实不在钱包里很多刚接触区块链的朋友都会问我一个问题:我钱包里的币到底存在哪里?是不是像银行一样,有个中央服务器帮我记账?答案可能和直觉相反——你的币从来不在“钱包”里&#x…

2026/10/18 8:36:17 阅读更多 →
FastColoredTextBox中文修正版:彻底解决光标错位与样式渲染

FastColoredTextBox中文修正版:彻底解决光标错位与样式渲染

简介:FastColoredTextBox 是一款广受欢迎的开源高亮代码文本框控件,支持自定义显示模式,并默认内置 C#、HTML 等多种语言的高亮规则;原版在处理中文双字节字符时经常出现显示异常、光标位置偏移,多个 Style 同时使用时…

2026/10/18 8:36:17 阅读更多 →
用Flask自研研学预约系统:数据模型、支付回调与防超卖实战

用Flask自研研学预约系统:数据模型、支付回调与防超卖实战

1. 项目缘起:为什么我一头扎进了自研研学预约系统先说清楚我做的这套东西是什么:一个面向中小型营地/研学机构的在线课程预约系统,用Python的Flask框架从零搭起,涵盖了课程排期、名额管理、在线支付确认、后台订单管理这些核心环节…

2026/10/18 8:36:17 阅读更多 →
拆解开源Agent框架:插件化的核心机制、实战与避坑指南

拆解开源Agent框架:插件化的核心机制、实战与避坑指南

先把话说在前面:我拆的是最近热度很高的一个开源 Agent 框架,拆法比较粗暴,直接把源码拉下来,从入口一路跟到插件装载、工具调用、上下文组装、退出清理,一条线走完。拆完之后我对“插件化”这三个字的理解&#xff0c…

2026/10/18 8:36:17 阅读更多 →
Spring Event事件机制:从同步耦合到异步解耦的完整实践与避坑指南

Spring Event事件机制:从同步耦合到异步解耦的完整实践与避坑指南

简介:面向 Spring 开发者的 Event 事件机制示例工程,以可运行代码演示事件定义、发布、监听、顺序控制与异步处理等核心用法,适合正在系统学习 Spring 事件模型,或希望在业务模块间实现低耦合通信的读者。资源共 75 个文件&#x…

2026/10/18 8:36:17 阅读更多 →
阵列天线方向图对比:均匀阵、切比雪夫、泰勒与稀疏阵选型指南

阵列天线方向图对比:均匀阵、切比雪夫、泰勒与稀疏阵选型指南

简介:阵列天线方向图比较是阵列天线设计中的重要基础,单元个数、阵元间距与波长三者共同决定波束宽度、旁瓣电平与零点位置。这套MATLAB源码包面向无线通信、雷达与天线工程学习者,可帮助读者快速仿真不同参数组合下的方向图差异,…

2026/10/18 8:35:17 阅读更多 →

日新闻

基于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/16 14:23:36 阅读更多 →