从环境搭建到DQN训练:AI自动打游戏的完整实战指南

让AI自己打游戏,这事儿放在几年前我还会觉得挺遥远,但当你真正把流程跑通一次,就会发现它并没有想象中那么玄乎。这篇文章写的是我亲手做的一个小项目:让AI自动操作一款开源小游戏,从环境搭建到智能决策落地的完整记录。我不会上来就堆公式,而是尽量用平时调代码的口吻,把我踩过的坑、返工过的方案、以及最终稳定跑起来的细节都摊开说清楚。

如果你正好有Python和一点深度学习基础,也想试着让AI打游戏,这篇文章可以作为一份可以直接照着做的实战笔记。哪怕你不太熟悉强化学习,前半部分的“环境搭建”和“感知层处理”也完全能上手,后面再循序渐进进入决策和训练阶段。

1. 先别急着写代码:选定一个“能学出东西”的游戏环境

很多人一开始就冲着一款3A大作去,结果折腾一个星期连画面帧都抓不到。我的建议很朴素:先从一个小而完整的环境开始,把流程跑通,再考虑换更复杂的游戏。因为AI打游戏这件事,最大的瓶颈从来不是“AI不够聪明”,而是“你连一个可复现的实验场景都没有”。

1.1 判断环境是否合适的三个标准

我选环境时只看三点。第一是状态可还原,也就是每次重置后游戏世界能回到一个确定的起点,如果一开局就带随机地形,后面就会非常难评估策略到底学得好不好;第二是动作空间小,最好一开始只有几个离散动作,比如左移、右移、跳跃、不动;第三是反馈信号清晰,得分、距离、存活时间至少要有一个能实时读取的数值。

别小看这三个标准。一个动不动就出现随机事件、视角还能360度旋转的游戏,光是“让AI理解画面”这一关就能劝退大多数新手。我见过A同学直接用某款开放世界游戏做实验,模型结构换了三轮,奖励怎么设计都不收敛,最后才发现连屏幕分辨率变化都会导致画面预处理失效。先在小环境里把链路跑通,是最高效的路径。

1.2 我的选型方案:从两个小型环境做起

我在项目里同时准备了两个环境。一个是自己用网格类逻辑写的“抓点小游戏”,场景里会随机出现目标点,AI通过上下左右移动去触碰它,触碰就能得分,操作逻辑非常直观;另一个是开源社区里流传很广的“横版跑酷小游戏”模拟器,有障碍物、有跳跃动作,画面信息也足够丰富但不算复杂。

这两个环境的共同特点是:能用屏幕截图作为唯一输入,不依赖作弊般的内存读取,这样训练出来的决策才真正贴近“视觉驱动”。如果你手头有类似的小游戏,哪怕是用几句代码临时搭出来的,也可以作为替代品。关键是环境能提供稳定的帧画面和可读取的得分信号,这就行了。

2. 搭建AI工作台:依赖、框架与运行环境的配置

环境选好之后,就是搭建运行环境和工具链。这一部分看似流水账,实际是翻车重灾区。很多问题不是算法问题,而是版本冲突、画面采集异常、GPU和CPU数据交互不畅。

2.1 环境清单与安装要点

我用的是常规的一套组合:Python作为主语言,配合一个主流深度学习框架(我用的是PyTorch),图像处理用OpenCV来完成,数据计算依赖NumPy。模拟环境本身通过一个符合通用交互接口的包装层来调用,它对外暴露了重置、执行动作、获取状态这几个标准方法。

安装时最需要注意的是版本对齐。本人遇到最典型的问题是:Python版本和深度学习框架版本不匹配,导致安装时直接报“找不到匹配发行版”。建议创建独立虚拟环境,不要一股脑装到系统Python里。我在项目里固定了一套相对稳妥的版本组合,装完一次之后再也没动过:

  • Python 3.10及以上
  • 深度学习框架选用与Python版本匹配的稳定版本
  • OpenCV只用来做图像预处理
  • NumPy负责矩阵运算和状态堆叠

如果是第一次搭建,完全可以用CPU把流程跑通,不一定非要GPU。小游戏的画面分辨率压到84x84之后,一张卷积网络的推理时间在CPU上也就是几十毫秒级别,足够做实验了。等后面模型变大、训练回合数增多,再考虑GPU实例也不迟。

2.2 容易翻车的三个环境细节

第一个坑是“窗口焦点”。游戏窗口一旦不是前台焦点,很多模拟器根本收不到外部注入的键盘或鼠标事件。AI一开局就往一个方向冲,你检查代码半天,才发现是窗口失焦导致动作根本没送进去。第二个坑是“分辨率锁定”。游戏运行时如果允许窗口拉伸,画面比例一变,你预处理阶段的裁剪参数就全废了。我在项目里干脆把模拟环境窗口固定为800x600,并在预处理阶段再次强制缩放。

第三个坑是“帧率不稳定”。游戏跑到复杂场景时帧率会掉,如果不做时序控制,训练数据里的状态和动作就会错位。解决办法是给环境执行动作时加入一个固定时间的等待,确保每一次“状态-动作-下一个状态”的采样间隔基本一致。这个点看起来不起眼,但对后续训练的稳定性影响非常大。

3. 让AI“看懂”游戏:屏幕帧处理与状态构造

环境搭好后,下一步不是直接上强化学习算法,而是解决“感知”问题。AI打游戏,第一步得让AI“看见”游戏画面。这个阶段处理得好不好,直接决定了训练能不能收敛。

3.1 从原始画面到状态张量的处理流程

我采用的是一条已经被大量验证过的处理流水线,整个过程可以拆成四步:截帧、裁剪缩放、灰度化、堆叠帧。

首先截取游戏窗口的画面,这个用图像处理库就能做到,前提是你清楚窗口的左上角坐标和尺寸。然后统一裁剪并缩放到84x84像素。这里有个容易被忽略的点:84x84这个尺寸不是随手定的,它是在保留游戏关键细节和控制计算量之间长期沉淀下来的经验值。再然后转成灰度图,颜色信息对很多小游戏不是决定性的,放弃颜色可以大幅减少计算量,同时很多环境里颜色本身也会干扰模型,尤其是那些色调花花绿绿的界面。

最后就是“帧堆叠”。这是相当关键的一步。单张静态图片看不出物体的运动趋势,而很多小游戏恰恰需要根据移动方向来做判断。我的处理方式是把最近4帧灰度图在通道维度上拼接,形成一个84x84x4的张量,这样网络就能同时看到“过去一小段时间”的画面变化,而不是只看孤立的瞬间。

3.2 状态表示的几个选择和取舍

状态表示方案通常有三种。第一种是直接用原始像素作为输入,优点是不需要人工设计特征,缺点在于计算量大、需要网络自己从大量无关背景中提取信息;第二种是手工提取特征,比如只告诉AI“玩家坐标、目标坐标、最近障碍物距离”,优点是训练极快,缺点是换个游戏基本就得重做;第三种就是我现在用的这种原始画面的简化版:灰度图加帧堆叠,牺牲一点颜色信息,换来计算效率和泛化能力之间的平衡。

这三种方案我放在一起做过对比。手工特征的方案在那个“抓点小游戏”上训练十几分钟就能出成绩,但是一旦地图稍微改一下,比如目标点从二维坐标变成一个动态跑动的目标,特征就得重新设计。直接输入原始画面训练速度慢,但成功之后换类似玩法的新地图,表现还比较稳。我的结论是:如果你是为了一次性通关一个小游戏,手工特征足够;如果希望沉淀一套以后能复用的流程,走“精简画面输入”这条路线更值。

3.3 我踩过的帧率不匹配的坑

这个问题困扰了我将近两天。现象是AI在训练时表现很好,但一到实际评估就乱跳。后来发现,问题出在训练时模拟环境跑得太快,AI每一步决策对应的服务器时间远短于它在实机上的响应时间。换言之,AI的“手速”和“眼睛刷新率”失配了。

解决方案是给环境加一个“道德”调节器,我称之为动作时间锁:每次调用执行动作之后,环境至少要睡眠一段设定的时间,让游戏的内部逻辑稳定更新几帧,然后再截取下一个状态。这样一来,虽然训练速度变慢了,但采样数据里的“动作-结果”对应关系是真实可信的。很多新手在这个环节栽跟头,因为他们的注意力全在网络结构上,根本没想过状态和动作可能不再是同步的。

4. 智能决策从哪来:从规则基线到强化学习策略

感知层处理完,才轮到重头戏:智能决策。这里我需要先说一个很容易被忽视的方案——先把“规则脚本”写好,作为基线对照。不要一上来就训练模型,因为如果不先建立基线,你根本没法判断模型到底学到了东西,还是只是把随机动作玩出了花。

4.1 先写一个“最低智能”的规则基线

以我的“抓点小游戏”为例,我写了一段最简单不过的规则逻辑:如果目标点在当前玩家位置右边,就向右移动,在左边就向左移动,基本就是“跟随目标”的低级策略。这个基线虽然蠢,但它能给出一个成绩下限值,大概可以拿到60%左右的得分。

有了这个下限,后面训练出的AI表现好不好,就有了参照物。如果训练之后得分连这个规则脚本都打不过,那多半是训练代码或奖励设计出了问题,需要回去检查,而不是继续加大训练轮数。

def rule_based_action(state): player_x, target_x = state["player_x"], state["target_x"] if player_x < target_x: return 1 # 向右移动 elif player_x > target_x: return 2 # 向左移动 else: return 0 # 不动

这个脚本虽然简单,但放在“评估体系”里价值很高。它能帮你区分出强化学习带来的提升到底是真实的学习,还是环境本身的随机波动。如果你连这个基线都没做,后面训练出一套“看起来很聪明”的模型,实际一测还不如规则脚本,那才是真的浪费时间。

4.2 决策模块的两种主流设计

决策模块方面,我用的是深度Q网络(DQN)为主。它的思路很直接:让网络学会评估“在某个状态执行某个动作之后,未来能拿到的累计奖励有多大”,然后每一轮决策时选择那个未来奖励最大的动作。这个方案对小游戏足够,而且训练过程和收敛情况都非常直观,损失值、奖励曲线都能看得很清楚。

如果你面对的是动作连续、需要精细操控的游戏,比如方向盘转向、油门踩多深,那用连续动作空间的方法,比如策略梯度一系的做法会更合适。但在动作离散的小游戏里,用DQN可以少走一半弯路。我项目里也尝试过更复杂的策略模型,最后发现那些方法在小场景里不仅没有明显优势,反而因为超参数更多而更难调试。从小处起步,把DQN吃透,再逐步过渡,是比较理智的路线。

4.3 动作空间与网络输出层的映射关系

这里有个值得展开的细节:动作空间如何映射到网络输出。我的跑酷小游戏里定义了四个动作:不动、向左、向右、跳跃。网络最后一层就输出4个神经元的Q值,分别对应当前状态下这个动作的预估价值,训练时选择一个被探索策略选中的动作执行,每步结束之后再把“执行动作后的真实奖励”回传给网络,更新对应神经元的参数。

动作定义越少,学习越容易,但游戏策略的上限也越低。比如只保留“跳跃”和“不跳跃”,AI永远学不会左右闪避。所以我倾向于在动作定义上多给一个“不动”选项,让AI学会在某些时刻按兵不动,尤其是面对需要等待时机的障碍物时。“不动”作为一个显式动作,往往被新手忽略,却是不少游戏里极有意义的决策。

5. 训练循环里的关键细节:回合、奖励与收敛证据

决策模块搭好后,就要开始写训练主循环。这个环节的代码量不大,却藏着最多“隐性Bug”。有时候模型不收敛不是因为网络容量不够,而是因为训练循环里的某个时序逻辑写错了。

5.1 回合管理与训练循环的落地写法

我把整轮训练写成了清晰的五个步骤:重置环境并获取第一帧状态;在每一步里把当前状态交给决策模块,拿到动作;执行动作,获取下一步状态和奖励;把这一段过渡数据存入经验回放池;每隔一定步数从回放池里随机抽一小批数据更新网络。

for episode in range(total_episodes): state = env.reset() state = preprocess(env.screen()) episode_reward = 0 while not done: action = agent.choose_action(state) env.step(action) next_screen = env.screen() next_state = preprocess(next_screen) reward = env.get_score_delta() agent.store(state, action, reward, next_state, done_flag) agent.update() state = next_state episode_reward += reward if episode_reward < -30: break # 超时保护,防止一个回合卡死

这段代码看起来稀松平常,但里面有两个细节很值得说说。第一个是“经验回放”。我没有用“完成一步就立刻更新网络”的方式,而是先存到一个缓冲区里,再随机抽样更新。打破样本之间的时间相关性,是让深度网络稳定学习的关键。第二个是“超时保护”。如果AI在一个状态里卡了很久,一直拿负奖励,我就强行结束这个回合。不然训练可能陷入一个永远无法走出的死循环,整个进度都会被锁死。

5.2 奖励塑造:从稀疏信号到渐进信号

奖励设计是整个项目里最考验功力的地方,我的原则是“奖励要能指路,但不能替AI作弊”。举一个具体例子:抓点游戏中,如果我只给“触碰目标得1分”这种稀疏奖励,AI前期几乎得不到正反馈,训练效率极低。所以我加了一个辅助奖励:每走一步时,如果玩家和目标点之间的距离比上一步更近,就给一点小额正向奖励。

distance_before = abs(player_x - target_x) env.step(action) distance_after = abs(player_x - target_x) reward = 0 if distance_after < distance_before: reward += 0.1

这就是所谓的“渐进奖励”,它能让原本冷冰冰的稀疏反馈变得细腻。但要注意,辅助奖励设计不当反而会带偏模型。比如过度奖励“靠近目标”,AI最后可能学会了围着目标打转却不去触碰它,因为打转也能连续拿奖励。所以我在实际使用中,触碰目标的正奖励始终是主要目标,辅助奖励数值压得很低,只起到“引导探索”的作用。

5.3 超参数表、收敛曲线与判断方法

训练能不能收敛,很大程度上取决于超参数。我把试过好几轮后比较稳的一组参数整理成了表格,方便直接照抄。

参数取值说明
学习率0.00025太小收敛慢,太大则震荡
回放池容量50000存最近5万步经验
抽样批次大小32每次更新用的样本量
探索率从1.0降到0.05前期多探索,后期多利用
目标网络更新步数1000定期冻结目标网络以稳定训练
每回合最大步数500避免单回合过长

收敛曲线的判断,我不会只看最终得分,还会同时盯“每回合平均奖励”和“损失曲线”两条线。如果平均奖励在持续上升,但损失曲线却在宽幅震荡,通常不是坏事,说明网络正在探索新策略;反之,如果奖励曲线纹丝不动,损失却一路走低,那大概率是网络陷入了一种“自我欺骗”——它找到了一个能降低损失但完全没有让任务变好的参数组合,这种情况就需要人工介入,重新审视奖励设计。

6. 落地过程中的隐藏问题与我的调参经验

训练收敛只是第一步,真正让AI“落地”,也就是稳定、可重复地跑出好成绩,还需要解决几个藏在角落里的问题。这些经验是我项目后半段几乎每天都在处理的事情。

6.1 过拟合:AI没学会技巧,只记住了路径

我在训练跑酷小游戏时,曾经出现过一种诡异现象:训练环境下AI能连续跑过十几个障碍物,一旦换个随机地图,立刻在第一二个障碍物就撞墙。这个现象的原因很明确——过度拟合。

AI不是学会了“看到障碍物就跳跃”的通用技巧,而是把这一张地图的特定像素分布背了下来。我当时的解决方案有两条路。一条是给训练环境加随机扰动:每次开局时,把障碍物的位置、间隔、颜色做一定范围的随机化,迫使网络学习到更本质的特征;另一条是主动加数据增强,在画面预处理时对亮度加上微小扰动,相当于给“眼睛”戴了一副会轻微变色的滤镜,防止它死记硬背某个固定画面。两条路同时上,泛化能力才勉强合格。

6.2 泛化能力靠什么提升:随机化环境与噪声注入

泛化能力这件事,本质上考验的是环境多样性。如果游戏每次都从完全一样的开局开始,AI很大概率会沿着固定轨迹“背题”。所以我做了两件事:第一,在模拟环境中加入随机种子机制,要求每次开局时目标点位置、障碍物排列顺序都从随机种子生成,保证训练数据覆盖多种情况;第二,在状态输入中加入极轻微的高斯噪声,让AI不能依赖某个特定像素值来做决策。

这个思路可以在抓点游戏里直接验证。我用固定地图训练出来的模型放到随机地图上,得分掉到不及格;用随机地图训练出来的模型,放进原来那张固定地图,得分几乎不受影响,说明它学到的是更接近“决策本质”的东西,而不是地图的壳。

6.3 实机运行稳定性的操作细节

模型训练完毕,进入到“实机运行”阶段。所谓实机,是指脱离训练循环,让AI在完整的游戏环境里从第一关打到最后一关。这个时候最要紧的是稳定性。我遇到过三个具体问题:窗口偶尔失去焦点导致动作中断;运行过程中游戏分辨率被系统设置强制拉伸;以及长时间运行后内存占用缓慢上涨。

针对窗口焦点,我在启动脚本里加了强制置顶的调用,每次游戏开始前自动把窗口拉回前台;分辨率问题则是提前锁定,并且每跑100个回合就做一次画面尺寸校验;内存上涨的问题排查下来出在图像截取接口没有及时释放旧对象。这些细节单独拎出来都很简单,但如果不在开发阶段就提前预防,等到“看起来一切正常却崩溃”的时候再排查,会相当耗时。

7. 最后,再分享一套自己的调试习惯

项目收尾后我沉淀了一个习惯:每调整一次奖励或网络结构,都先跑一个短周期小实验,记录下当时的奖励曲线和表现数据,再决定要不要保留这次改动。这个习惯让我避免了大量“凭感觉调参”的无效操作。强化学习项目不像普通程序,改一行代码的效果往往要在几百回合之后才能显现,没有对照数据,你很难知道是这次改动生效了还是随机波动导致的。

另一个很有用的习惯是“让AI表演给我看”。训练过程中每隔一段时间,关闭探索机制,让模型用当前学到的策略实打实打几局,并打印出每一步的决策和关键状态。很多问题不是看奖励曲线能发现出来的,比如AI为什么会突然原地打转,为什么会放着近路不走,这些都只有实际表演一遍才能看出来。

我经历过最夸张的一次,是AI在某个障碍前反复横跳了四十多回合,表面上看还在战斗,实际上它根本没看懂障碍物的位置,只是因为随机探索尝到了“原地移动不减分”的甜头。这种问题,靠打印训练日志远比看损失曲线容易定位。让AI打游戏这件事,走到最后我最大的体会是:算法只是其中一环,真正考验人的是环境工程、感知细节和调试耐心。如果你正准备从零开始,不妨就按这个顺序走一遍——先把环境搞定,再让AI看见,最后才谈智能决策。

相关新闻

OpenCV Mat 到 picture 控件:图像显示、拖拽与缩放全链路解析

OpenCV Mat 到 picture 控件:图像显示、拖拽与缩放全链路解析

简介&#xff1a;本资源面向在 Visual Studio 2017 下进行 Windows 图像界面开发的 C 学习者与工程人员&#xff0c;聚焦 OpenCV 读图、在 Picture 控件上显示&#xff0c;以及鼠标拖动与滚轮缩放这一完整交互流程。包内共 99 个文件&#xff0c;以 cpp、h 源码与 vcxproj、sln…

2026/10/20 12:34:22 阅读更多 →
Ubuntu 18.04下Mininet与RYU的SDN实验环境搭建全记录

Ubuntu 18.04下Mininet与RYU的SDN实验环境搭建全记录

前几天把工作台角落那台旧笔记本重新刷成了 Ubuntu 18.04&#xff0c;目的很纯粹&#xff1a;把它改造成一台 SDN 实验机。要装的软件也早就定好了——Mininet 负责在单机上模拟出各类网络拓扑&#xff0c;RYU 控制器负责接上这些交换机、按逻辑下发流表。这个组合在 SDN 学习和…

2026/10/20 12:33:21 阅读更多 →
ABAP 里的八仙石,给业务对象一点一点增加防御力

ABAP 里的八仙石,给业务对象一点一点增加防御力

销售订单已经保存,价格却在后续处理时被错误改写。排查这类问题时,我通常不会只盯着改写价格的那一行代码,还会追问几个更具体的问题。谁有权修改订单,修改是否经过业务规则校验,并发修改会不会相互覆盖,升级后这段扩展能否继续正常运行,问题发生后有没有记录可以还原经…

2026/10/20 12:33:21 阅读更多 →

最新新闻

iReport 3.0 绿化中文版:遗留报表维护与 JRXML 实战

iReport 3.0 绿化中文版:遗留报表维护与 JRXML 实战

简介&#xff1a;面向 Java 开发者和报表设计人员的 iReport 3.0 绿化中文版&#xff0c;是一套基于 JasperReports 的完整报表生成方案&#xff0c;覆盖模板设计、数据预览、报表导出等典型环节。压缩包共包含 191 个文件&#xff0c;整体大小约 48.81MB&#xff0c;以 90 个 …

2026/10/20 13:25:21 阅读更多 →
大模型版本更新情报解读:从API泄露到IDE提前布局

大模型版本更新情报解读:从API泄露到IDE提前布局

10月3日的AI日报&#xff0c;说实话&#xff0c;信息量有点大。不是那种例行公事的小更新&#xff0c;而是好几个重量级玩家集体“秀肌肉”的节奏。Qwen 4疑似在Cursor里被扒出踪迹&#xff0c;Gemini 4在API文档里泄露了配置参数&#xff0c;Fable 5.5悄悄占好了位置&#xff…

2026/10/20 13:25:21 阅读更多 →
商品视频批量生成实战:Kling API与Ace Data Cloud接入指南

商品视频批量生成实战:Kling API与Ace Data Cloud接入指南

最近一直在折腾商品视频自动化生产这件事。电商仓库里有几百个 SKU&#xff0c;每个商品都缺视频素材&#xff0c;外包拍摄一条短则几百&#xff0c;长则上千&#xff0c;而且一改版就要重拍。后来把目标锁定在 Kling 的商品视频生成 API 上&#xff0c;又用 Ace Data Cloud 做…

2026/10/20 13:25:21 阅读更多 →
三台路由器静态路由实验:网络工程师的底层转发逻辑必修课

三台路由器静态路由实验:网络工程师的底层转发逻辑必修课

1. 项目概述&#xff1a;为什么三台路由器的静态路由实验是网络工程师绕不开的“成人礼” 静态路由配置实验二&#xff08;途经三台路由设备&#xff09;——这个标题看起来平平无奇&#xff0c;甚至有点教科书味儿&#xff0c;但在我带过的二十多期网络实训班里&#xff0c;它…

2026/10/20 13:25:21 阅读更多 →
context-mode:大模型上下文处理策略与工程实践

context-mode:大模型上下文处理策略与工程实践

1. 从“context-mode”这个词说起&#xff1a;它到底指什么 第一次看到“context-mode”这个标题&#xff0c;很多人会愣一下——它不像“XX管理系统”“XX识别工具”那样一眼能看出用途。我最初接触这个词是在做对话系统上下文管理的时候&#xff0c;当时团队里有人提了一句“…

2026/10/20 13:25:21 阅读更多 →
RemoteSensing投稿三件套:Word+EndNote+LaTeX格式协同实战指南

RemoteSensing投稿三件套:Word+EndNote+LaTeX格式协同实战指南

简介&#xff1a;本资源是专为RemoteSensing期刊投稿设计的Word格式官方模板&#xff0c;配套EndNote参考文献管理说明&#xff0c;面向遥感领域科研人员、高校研究生及青年学者&#xff0c;解决论文格式不规范、引用格式混乱、章节结构缺失等常见投稿痛点。压缩包仅含1个DOC文…

2026/10/20 13:24:19 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →