pyautogui图像识别驱动的桌面GUI自动化测试实战

做自动化测试这些年,我一直习惯拿到新工具先找个能“看得见摸得着”的场景去练手。上次把 Python 的 pyautogui 重新捡起来,顺手拿 4399 小游戏当靶场,写了一套完全靠图像识别驱动的自动化脚本。整个过程中不抓包、不改内存、不碰游戏协议,只模拟鼠标键盘的移动和点击,最后脚本能自己打开游戏、识别界面元素、自动重复操作并跑完整套流程。这个项目对做 GUI 自动化测试的人来说,是一个很典型的“黑盒+图像驱动”实战样本,尤其适合想理解图像识别原理、熟悉桌面级自动化操作的朋友参考。


1. 项目概述与思路拆解

1.1 为什么选 pyautogui 做游戏自动化测试

一说到自动化测试,很多人第一反应是 Selenium 或 Appium。Selenium 专攻 Web 页面,Appium 专攻移动端,它们都依赖应用内部暴露出来的控件结构。但游戏不一样,页面上没有 DOM、没有控件树、没有 accessibility id,就是一个纯像素的渲染画面。想验证“点这个按钮后会不会弹出对应界面”,常规 Web/App 自动化工具根本无从下手。

这时候最实际的办法就是回到最原始的操作层:模拟人的鼠标移动、点击和键盘输入。pyautogui 正好干这件事,它是 Python 生态里最轻量、最常用的 GUI 自动化库,跨平台支持 Windows/macOS/Linux,安装简单,API 直观,能直接读取屏幕像素、截取屏幕、定位图片,然后执行鼠标键盘操作。

我选择 pyautogui 而不是直接上 OpenCV,是因为这个项目的识别对象是小游戏里比较固定的图标和按钮,画面简单、色彩鲜明、位置相对固定,自带的图像定位接口就够用。如果一上来就用特征匹配或者目标检测模型,反而增加了复杂度,收益不大。先跑通流程,再考虑升级识别层,这才是务实的路径。

1.2 项目价值边界:这到底是在测什么

有人一听“自动化玩小游戏”,第一反应就是外挂。这里得把边界划清楚:这个小项目的核心是 GUI 自动化测试的落地演练,不是做外挂,不改游戏数值、不刷金币、不破坏游戏平衡,只是用自动化手段模拟用户的正常点击操作,验证界面响应是否正常、流程是否稳定。

在真实的测试场景里,这种图像识别自动化能解决三类问题:

  • 回归测试:游戏改了版本后,验证开始按钮、技能按钮、结算弹窗等关键 UI 还正不正常。
  • 稳定性验证:让同一套流程反复跑几十上百次,看会不会出现卡死、错位、点击无响应。
  • 玩家行为模拟:用脚本模拟不同操作节奏,观察游戏在不同频率下的表现。

做这个项目时我一直在提醒自己,自动化是替人干重复劳动,不是替人破坏规则。在这个前提下,拿小游戏练手反而是很安全的实验环境:不怕把页面点坏,也不会影响真实业务数据。

2. 环境搭建与工具选型

2.1 环境准备与依赖安装

项目用到的东西很轻,一个 Python 环境加几个第三方库就够。我用的 Python 3.10,Windows 11 系统,这几样是必需的:

pip install pyautogui pip install opencv-python pip install pillow pip install numpy pip install pygetwindow pyautogui 是核心库,负责屏幕截图、找图、鼠标键盘控制。 opencv-python 是推荐的图像匹配后端,pyautogui 在 locateOnScreen 时依赖它做模板匹配,装了之后识别速度会明显提升。 pillow 用来裁剪和处理素材图。 numpy 主要给 OpenCV 做底层运算,很多图像操作间接依赖它。 pygetwindow 负责获取窗口信息,用于把游戏窗口移动到固定位置。

有些系统需要额外授权,这点容易踩坑。macOS 需要在“系统设置-隐私与安全性-辅助功能”里给 Python 解释器授权,否则鼠标键盘控制会失效;Linux 如果用的 X11 环境,可能要装 xdotool 或者 xorg 相关扩展;Windows 则要注意系统缩放比例和 DPI 设置。

装完之后先跑一个快速验证脚本,确认库可以正常调用:

import pyautogui, cv2, PIL, numpy print(pyautogui.size()) # 输出屏幕分辨率,例如 Size(width=1920, height=1080)

能正常输出屏幕尺寸,说明环境基本就绪。

2.2 pyautogui 核心 API 速览

pyautogui 的接口看起来很简单,但有几个点需要提前吃透。先把最常用的几个 API 和参数整理出来:

API作用常用参数
pyautogui.moveTo(x, y, duration)移动鼠标到指定坐标duration 控制移动耗时,模拟真人操作
pyautogui.click(x, y)在指定位置点击支持双击、右键、指定按键
pyautogui.locateOnScreen(image)在全屏范围内查找图片位置confidence 匹配置信度、region 搜索区域、grayscale 灰度模式
pyautogui.locateCenterOnScreen(image)查找图片并返回中心坐标同 locateOnScreen
pyautogui.locateAllOnScreen(image)返回所有匹配位置常用于处理多个相同图标
pyautogui.screenshot(region)截取屏幕或指定区域region 可选,返回 PIL Image 对象
pyautogui.FAILSAFE紧急停止开关设为 True 后鼠标移到屏幕左上角会强制中断

locateOnScreen 是这次项目的核心接口,它返回的是一个 Box 对象,包含(left, top, width, height),而 locateCenterOnScreen 会直接帮你换算成点击坐标 (x, y),用起来更顺手。

有一个使用习惯我想强调:每次点击前最好都确认图标确实存在,不要盲目 click。识别不到的图片返回 None,如果你直接拿 None 去算坐标,程序马上会报 TypeError。所以我在主流程里写了一个统一封装函数,见后面实操部分。

2.3 图像素材的准备工具

图像识别自动化最容易被忽视的,就是素材图的准备。素材质量直接决定识别成功率和误判率。

我准备素材的流程是:先手动跑一遍游戏截图,然后用 PIL 把关键按钮区域裁出来。Windows 可以用自带的截图工具,也可以用 pyautogui.screenshot 直接把当前屏幕截下来,再用 PIL 切割:

from PIL import Image img = Image.open('full_screen.png') btn_img = img.crop((120, 300, 180, 360)) # 左、上、右、下 btn_img.save('btn_start.png')

裁图时有几个细节很关键。第一,素材图不要太大,一个按钮保留 30x30 到 80x80 像素就很好,太大会让模板匹配计算量上升,也更容易受到背景干扰。第二,要把元素的边界裁干净,不要刚好卡在半根边缘线上,最好保留一圈完整轮廓。第三,如果按钮有动态光效或者闪烁动画,尽量截取颜色最稳定的区域,或者把按钮文字部分作为匹配对象。

这些素材图建议统一放在一个素材目录里,命名规范一点,比如 btn_start.png、btn_confirm.png、btn_next.png,后面写脚本会轻松很多。

3. 图像识别核心原理与策略设计

3.1 三种识别方案的对比与选型

做屏幕级图像定位,可选的方案大致有三类,我在这里统一对比一下:

方案原理适合场景优点缺点
pyautogui 自带模板匹配截图滑动窗口计算像素相关性图标固定、界面风格稳定简单、上手快、速度可接受对缩放、旋转、色差敏感
OpenCV 特征匹配提取 SIFT/ORB 特征点再匹配有旋转缩放变化的图片鲁棒性更好代码复杂度高,需转换数据结构
深度学习目标检测训练模型识别物体复杂场景、多目标、不规则形状泛化能力强需要训练样本和算力

这次项目选的是第一类,原因很直接:小游戏平台的 UI 元素基本是固定的,开始按钮永远是开始按钮,图标不会随意旋转缩放,模板匹配的精度已经足够。而且 pyautogui 内部调用的就是 OpenCV 的 matchTemplate,配合 confidence 参数,其实已经能满足大部分桌面小游戏场景。

模板匹配的原理可以理解成这样:我有一个很小的模板图,比如一颗星星图标,然后在当前屏幕截图里从左上角开始,一格一格地滑动这个模板,每到一个位置就计算模板和当前区域的相似程度,相似度超过我设定的阈值,就认为找到了。用生活里的话说,就像在拼图堆里找一张缺失的碎片,形状颜色对上才算数。

3.2 confidence 与灰度模式:识别参数调优的核心

用 pyautogui 找图,最需要调的就是 confidence 参数,它表示匹配的置信度,取值范围 0 到 1。这个值设得越高,匹配就越严格,越不容易误判,但也很容易因为素材和屏幕上的实际图像有细微差别而找不到;设得太低,虽然容易找到,但很可能找到一个颜色相近、形状相似的错误位置。

我调参数的经验是分场景看:

  • 按钮是纯色、边界清晰、背景干净:confidence 设 0.8 以上,识别很稳定。
  • 按钮带有半透明效果、渐变底色或动态背景:建议先降到 0.7 左右试,不行再更低。
  • 阈值的底线尽量不要低于 0.6,低于这个值基本就是在猜,很容易点错按钮。

如果遇到颜色偏差问题,还有一招是把 grayscale 参数打开,让图像先转成灰度再匹配。灰度模式好处是对偏色、色差更宽容,而且匹配计算量小、速度更快;坏处是会丢掉颜色信息,比如红色按钮和绿色按钮在灰度图里可能看起来差不多,这时候就不适合开灰度。

另外 region 参数非常实用,可以强制只在某个区域内搜索:

center = pyautogui.locateCenterOnScreen( 'btn_start.png', confidence=0.8, region=(200, 150, 600, 500) )

region 用 (left, top, width, height) 四个值指定搜索范围。限定区域后,误匹配率大幅下降,因为搜索范围小了,相似干扰项自然变少,速度也快不少。

3.3 坐标系、分辨率和缩放问题

屏幕坐标系是图像识别自动化的另一个陷阱。pyautogui 的坐标原点在屏幕左上角,向右 x 增大,向下 y 增大。但是问题在于,你的屏幕分辨率、系统缩放比例、甚至浏览器窗口大小,都会影响实际坐标。

Windows 系统如果设置了 125% 或 150% 的显示缩放,程序拿到的逻辑坐标和物理像素坐标可能不一致,非常容易导致点击错位。可以先全屏截图,用 screenshot() 里图像的尺寸对比一下 pyautogui.size(),看看两者是否一致,不一致就说明有缩放问题。

更稳妥的做法是固定环境:在脚本开始前,先把游戏窗口重置到一个固定位置和固定大小,这样所有识别和点击坐标都在一个可控的范围内。窗口缩放这事如果处理不好,前面调好的参数全白费。

4. 实操:玩转小游戏的完整流程

4.1 第一阶段:启动游戏与窗口定位

整个自动化的起点是先把游戏打开,并确保窗口处于一个稳定的位置。我的做法是先用 webbrowser 模块打开游戏页面,然后通过 pygetwindow 找到窗口句柄,再把窗口移动和缩放到固定尺寸。

import webbrowser import time import pygetwindow as gw game_url = 'https://某小游戏页面' webbrowser.open(game_url) time.sleep(6) # 等待页面加载 windows = gw.getWindowsWithTitle('游戏名') if windows: game_win = windows[0] game_win.moveTo(0, 0) game_win.resizeTo(960, 720)

这里有几个细节。等待时间不能太短,页面加载慢的话,后面找按钮肯定找不到。窗口标题如果包含中文,直接用字符串匹配容易出问题,可以先打印所有窗口标题,确认实际名称再写进代码。

窗口位置定下来之后,可以做一次全屏截图保存下来,作为后续确认坐标的基准。这一步看似多此一举,但对调试帮助很大,遇到找不到图的时候可以把实际截图和素材图放在一起对比,一眼就能看出是背景变了还是按钮位置变了。

4.2 第二阶段:准备图像素材

这一步本质上是把游戏界面里的“关键节点”提取成独立的图片文件。我习惯先手动跑一遍游戏,把出现过的关键元素都截下来,包括开始按钮、技能按钮、确认按钮、下一关提示、结束弹窗等,存成小图。

截图时会遇到一个常见问题:按钮有动画效果,每隔几帧就变换颜色或位置。比如“开始游戏”按钮会有一个从左到右扫过的光效,那直接截取整块按钮可能不稳定。我的解法是避开动态区域,把匹配目标锁定在按钮文字或者按钮底部阴影这种相对静止的部分。

如果元素实在没法稳定截取,还有一招:准备多张素材图,匹配时按顺序轮询查找:

def find_any_image(img_list, confidence=0.8): for img in img_list: try: pos = pyautogui.locateCenterOnScreen( img, confidence=confidence) if pos: return pos except pyautogui.ImageNotFoundException: continue return None

这套方案在处理动态图标时特别有效,比如一个按钮有三种形态,就把三种形态都截下来,只要命中其中一种就执行点击。

4.3 第三阶段:核心操作循环与状态流转

真正进入自动操作阶段后,我就不用线性写代码的方式了,而是把游戏理解成一个状态机,每个状态对应一个画面特征,每个行为对应一次点击,流程像这样:

启动页面 → 点击开始按钮 → 游戏画面 → 点击技能按钮 → 结算弹窗 → 点击下一关 → 回到开始页面。

用代码表达就是一个轮询加超时控制的结构:

import pyautogui import time pyautogui.FAILSAFE = True pyautogui.PAUSE = 0.5 def click_image(img_path, timeout=10, confidence=0.8): start = time.time() while time.time() - start < timeout: try: center = pyautogui.locateCenterOnScreen( img_path, confidence=confidence, grayscale=True) if center: pyautogui.click(center.x, center.y) return True except pyautogui.ImageNotFoundException: pass time.sleep(0.2) return False # 主流程 click_image('btn_start.png', timeout=15) time.sleep(2) for round_num in range(10): click_image('btn_skill.png', timeout=2) time.sleep(0.5) if click_image('btn_next.png', timeout=2): time.sleep(1) click_image('btn_start.png', timeout=5)

这套模式有几个核心设计。第一是轮询,因为游戏在加载过程中可能有几秒的延迟,轮询可以保证一旦元素出现就马上响应;第二是超时,每个步骤最多等多久要有明确上限,不然卡在某一步就把整个脚本拖死;第三是二次确认,点击按钮之后不要急着点下一个,先 sleep 一下,让游戏界面发生变化。

记录日志这步很重要,我会在每次点击后把时间、点击坐标、识别耗时保存到 CSV 文件里。一次运行可能看不出什么,但跑一百次之后,从日志里能清晰看出哪一步最容易超时,哪个按钮识别率最低,这就从“写了个脚本”升级成“做了一套自动化测试”。

5. 常见问题与排查技巧实录

5.1 识别不到或识错元素

这是整个项目最常见的问题,表现有两种:要么 locateOnScreen 一直返回空,要么明明识别到了,位置却不对。

识别不到的第一个排查方向,就是素材和实际画面不一致。可能是颜色偏差、字体变化、背景干扰,也可能是窗口被缩放后按钮尺寸改变了。先把当前屏幕截图保存下来,用 PIL 把目标区域裁出来和素材图对比,基本能立刻发现问题。

如果图像看起来一样但还是识别不到,就逐步做三件事:一是把 confidence 从 0.8 降到 0.7,二是打开 grayscale=True,三是用 region 把搜索范围缩小。这三招按顺序来,大多数识别不到的问题都能解决。

误识别又是另一个痛点。游戏里如果有两个相似图标,比如金币和宝石,还可能误点。这时可以用 locateAllOnScreen 把所有匹配位置都列出来,再根据位置关系或颜色特征做二次筛选。

提示:识别不到时不要一个劲把 confidence 往下调,0.6 以下基本就是在碰运气,调出来的参数跑一次两次没问题,换个背景就全乱了,稳定性才是自动化的生命线。

5.2 坐标漂移、窗口缩放与多屏问题

有时前一天脚本跑得好好的,第二天换个屏幕分辨率就全乱了,这是坐标体系没锁死。我的办法是在主流程的最开始做一个“环境标准化”步骤:把窗口移到左上角、缩放到固定大小、确认屏幕分辨率符合预期,如果不符合就提前报错。

多显示器场景也要注意。在 Windows 双屏环境下,pyautogui 的坐标可能是从主屏左上角开始算,扩展屏在左边时坐标会出现负值。如果鼠标被控制到负坐标区域,很多操作会表现得异常。最简单的做法就是在多屏环境下指定副屏时,把相关坐标转换逻辑单独抽出来,或者干脆先在主屏上跑通。

DPI 缩放导致的漂移最隐蔽。如果系统设了 125% 缩放,pyautogui.size() 返回的虚拟分辨率可能和实际像素不一致,截图和点击坐标就会对不上。遇到这种情况,可以手动把 Python 运行环境的兼容性设置改成“替代高 DPI 缩放行为”,也可以把系统缩放临时调到 100% 再跑脚本。

5.3 运行稳定性与误操作防护

脚本能跑通和能稳定跑一百次是两回事。自动化测试的关键指标是重复运行成功率,一旦中途卡住或者点错,整个流程就废了。

误操作防护是第一优先级。pyautogui.FAILSAFE = True 必须设,运行过程中鼠标一旦被移动到屏幕左上角,程序会立刻抛出异常停下来,这个设计能在手指够不到键盘时快速中断脚本。

点击节奏也很关键。我习惯在 pyautogui.PAUSE = 0.5 设置一个全局停顿,让每个操作之间至少间隔半秒。这既是为了避免游戏还没反应过来就执行下一步,也是为了防止点击速度过快被游戏判定为异常操作。

脚本长时间运行时,还要考虑锁屏、弹窗、输入法状态等干扰因素。我会在关键步骤外包裹 try/finally,确保脚本异常退出后鼠标能移回安全位置,避免鼠标悬停在屏幕边缘或误触其他程序。

5.4 常见问题速查表

问题现象可能原因处理方案
locateOnScreen 一直返回 None素材与实际画面不一致、背景变化、参数过严截图对比;调低 confidence;开启 grayscale;缩小 region
找到图但点错位置窗口缩放、分辨率变化、坐标映射错误标准化窗口位置和大小;关闭系统缩放或统一缩放比例
识别速度很慢搜索范围过大、素材图过大用 region 限定搜索区域;素材裁剪到适当大小
点击按钮后没反应游戏加载延迟、按钮有动态动画轮询加超时;准备多张动态素材轮询匹配
脚本中途报 ImageNotFoundException某个步骤的图标没在超时时间内出现增加超时时间;确认窗口是否存在;检查素材命名
鼠标不受控制FAILSAFE 未开启、权限不足设置 FAILSAFE=True;macOS 检查辅助功能权限
多屏下坐标错乱扩展屏坐标为负、主副屏逻辑混乱固定使用主屏;打印监控当前鼠标坐标确认

6. 实操心得与后续扩展方向

6.1 从项目中学到的自动化测试思维

做这个项目的过程中,最深的体会是:图像识别自动化的本质是“用工程手段处理不确定的视觉环境”,这和传统 API 自动化完全不一样。API 测试里你发请求就能拿响应,比较稳定;但图像识别自动化里,每一步都受画面影响,识别率、延迟、误匹配随时都在波动。

所以真正有价值的不是“我写了一个能玩的脚本”,而是“我沉淀了一套能复用的识别策略”。素材怎么截、参数怎么调、日志怎么记、异常怎么拦,这些才是可以迁移到真实测试项目里的东西。

我现在做类似项目时,基本固定三步走:先锁定环境,把所有变量(窗口位置、分辨率、缩放)固定下来;再建素材库,用规范命名管理所有需要用到的图片;最后写状态机式的主流程,把每一步独立封装,方便单独调试。这套思路用在任何桌面端图像自动化项目上都成立。

6.2 后续可以怎么升级

这个项目如果继续往下走,我能想到几个明确的升级方向:

第一,把识别层从 pyautogui 内置模板匹配升级为 OpenCV 特征匹配,可以抗缩放和旋转干扰。尤其当你想把脚本适配不同屏幕尺寸的游戏窗口时,特征匹配的鲁棒性优势会很明显。

第二,接入 pytest 测试框架,把每一轮游戏行为定义成一个用例,自动统计通过率、失败次数和耗时数据,再用测试报告汇总结果。这就真正进入自动化测试的轨道了。

第三,引入 AI 视觉模型。如果游戏里存在大量手绘风格、形态多变的元素,模板匹配和特征匹配都会吃力。这时候可以收集一批标注好的图标样本,训练一个小型目标检测模型,让识别层具备泛化能力。

我个人在实际操作中的体会是,这些升级方向里最优先做的其实是日志和素材的规范化。没有一份完整、清晰的运行日志,后面做数据分析和问题定位都会寸步难行。先把这三件事做好——环境统一、素材规范、日志完整,这个项目就已经超越“玩具”级别,成为一套很扎实的自动化测试基础设施了。

相关新闻

杰理方案I2S时钟配置详解:从频率换算到故障排查

杰理方案I2S时钟配置详解:从频率换算到故障排查

上个月帮一个朋友调杰理方案的蓝牙音箱&#xff0c;板子外挂了一颗I2S接口的DAC&#xff0c;音质指标看着很漂亮。结果上电放歌第一秒我就知道要熬夜了——声音忽快忽慢&#xff0c;像磁带被手指捏着卷&#xff0c;里面还垫着一层细细的“滋滋”声。我没有急着翻代码&#xff0…

2026/10/22 12:29:41 阅读更多 →
基于Spring AI和RAG构建带引用溯源的知识库问答助手

基于Spring AI和RAG构建带引用溯源的知识库问答助手

1. AI 总是自己编答案&#xff1f;先把幻觉的病根说清楚做知识库问答助手的时候&#xff0c;我最大的痛点是 AI 一本正经地胡说八道。明明知识库里没有这个数据&#xff0c;它也能给你编出个一二三四来&#xff0c;语气还特别笃定。为了解决这个毛病&#xff0c;我把 Spring AI…

2026/10/22 13:17:55 阅读更多 →
SpringBoot+Vue构建旅游管理系统:架构设计、关键代码与答辩指南

SpringBoot+Vue构建旅游管理系统:架构设计、关键代码与答辩指南

先说结论&#xff1a;这是一个非常适合作为毕业设计的选题&#xff0c;技术栈主流、业务场景完整、工作量适中&#xff0c;而且旅游管理系统天然自带"前后端分离 数据可视化 业务状态流转"这些评审老师爱看的东西。我帮几个学弟学妹审过类似项目的代码&#xff0c;…

2026/10/22 13:17:55 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年&#xff0c;我大部分时间都在跟浏览器标签页打交道&#xff0c;直到第一次把桌面应用跑起来&#xff0c;才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词&#xff0c;最开始是在某段时间频繁出现在同事的讨论里&#xff0c;一个用HTML…

2026/10/22 10:18:38 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介&#xff1a;亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档&#xff0c;主要面向智能锁安装人员、终端用户及售后维护者&#xff0c;帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件&#xff0c;大小4.37MB&#xff0c;内容结构清晰&#xff…

2026/10/22 11:01:53 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统&#xff0c;整车要求空载跑到8m/s&#xff0c;电机转速已经拉到额定点&#xff0c;驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令&#xff0c;转速纹丝不动&#xff0c;三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/22 9:44:47 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年&#xff0c;用它写过嵌入式驱动、做过游戏服务端&#xff0c;也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词&#xff0c;我其实挺感慨的——这门语言的难点从来不是语法多&#xff0c;而是知识点之间的耦合太深…

2026/10/22 10:42:00 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介&#xff1a;亚太天能T109滑盖智能锁产品说明书以PDF格式发布&#xff0c;适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开&#xff0c;先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能&#xff0c;再给出完整安装步骤&…

2026/10/22 10:40:08 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历&#xff1a;翻开源码注释、论文摘要或者一份专业报告&#xff0c;每个字都认识&#xff0c;连在一起却像天书。想找人聊聊&#xff0c;身边要么没人懂&#xff0c;要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型&#xff0c;几秒钟之后&a…

2026/10/22 10:56:37 阅读更多 →

日新闻

周新闻

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

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

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

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

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

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

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

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

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

2026/10/22 5:12:39 阅读更多 →

月新闻

我发现了一个新思路:用 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/21 21:50:56 阅读更多 →
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/21 21:51:55 阅读更多 →
黑夜航拍船只数据集训练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/21 16:24:48 阅读更多 →