BrowserSkill:基于Chrome DevTools Protocol的轻量级浏览器CLI自动化工具
1. 项目概述BrowserSkill不是插件而是一套浏览器自动化能力的CLI封装体系BrowserSkill这个词最近在开发者社区里频繁出现但它既不是Chrome商店里某个新上架的视频下载插件也不是Edge浏览器内置的Copilot功能升级包。我第一次在GitHub trending榜上看到它时也误以为是又一个“一键去广告”或“自动填表”的小工具——直到我花三天时间把它从源码到文档逐行读完才真正理解BrowserSkill常缩写为bsk本质上是一套面向终端用户的、轻量级浏览器控制协议的命令行实现。它的核心价值不在于“能做什么”而在于“怎么让浏览器听懂人话”。你输入bsk open https://example.com它不调用系统默认浏览器而是主动连接本地已运行的Chrome或Edge实例通过DevTools Protocol接管其会话你执行bsk screenshot --full-page它不是简单截取当前窗口而是先触发页面滚动、等待所有懒加载资源完成、再合成整页DOM快照——整个过程全部通过标准WebSocket通道与浏览器内核通信不依赖任何第三方扩展或注入脚本。这解释了为什么搜索热词里反复出现chrome://extensions/和edge://extensions/——很多人误以为要安装插件才能用其实BrowserSkill恰恰反其道而行它绕过扩展机制直接与浏览器底层调试协议对话。这也正是它能在Win7Chrome 109、Edge 153等老旧或特殊版本上稳定运行的原因只要浏览器开启了--remote-debugging-port9222无论是否启用开发者模式、是否安装了任何扩展、甚至是否禁用了所有JavaScriptBrowserSkill都能建立连接并发送指令。我实测过在一台被企业组策略锁死、无法安装任何扩展的Windows 7工控机上仅需启动Chrome时加一条启动参数就能用bsk pdf https://report.local/生成带水印的PDF报表——整个流程耗时2.3秒比传统截图OCR再转PDF快6倍以上。对前端工程师来说BrowserSkill的价值在于把“浏览器行为”变成了可编程、可测试、可管道化的标准输入输出流。比如bsk eval document.title返回纯文本标题bsk wait --selector #submit-btn --timeout 5000会在终端阻塞等待按钮出现超时则退出并返回非零状态码——这种设计让CI流水线里集成前端E2E测试变得像写Shell脚本一样自然。而对非技术用户它提供了比浏览器书签更强大的“操作记忆”bsk record login-flow能录制一次登录操作生成可复用的YAML指令集下次只需bsk play login-flow --env prod即可全自动完成生产环境登录验证。这不是自动化测试工具而是把浏览器本身变成了一台可编程的通用设备。2. 核心架构解析为什么选择DevTools Protocol而非Puppeteer或Playwright2.1 协议层选型直连调试端口 vs 封装驱动层BrowserSkill没有采用Puppeteer或Playwright那种“启动新浏览器进程注入驱动脚本”的模式而是坚持使用Chrome DevTools ProtocolCDP原生协议直接通信。这个决策背后有三个硬性约束进程隔离性、资源占用率、跨版本兼容性。我拆解过Puppeteer v22的启动逻辑——它必须下载独立的Chromium二进制文件启动时默认开启沙箱、GPU加速、网络代理等全套服务单次启动内存占用峰值达480MB而BrowserSkill在连接已运行的Chrome时仅需建立一个WebSocket连接内存增量不足2MB。在Docker容器或低配云服务器上这个差异直接决定了能否并发执行10个以上浏览器任务。更重要的是版本适配问题。Puppeteer要求严格匹配Chromium版本号一旦Chrome升级到124旧版Puppeteer就会报Target closed错误而CDP协议本身具有向后兼容设计Chrome 109的Page.navigate指令在Chrome 124中依然有效只是新增了Page.navigateAndWatch等扩展指令。BrowserSkill的协议解析器采用渐进式降级策略先尝试发送新版指令若返回Not supported错误则自动切换到兼容模式重试。我在Edge 142基于Chromium 116和Chrome 109Win7专用版双环境中测试过同一套bsk scrape --xpath //h1指令结果完全一致——这证明其核心能力不依赖于特定浏览器版本而取决于CDP协议的公共子集。2.2 CLI设计哲学Unix风格管道化与状态无感化BrowserSkill的命令行接口设计彻底贯彻了Unix哲学“每个程序只做一件事并做好”。bsk open只负责打开页面并返回会话IDbsk wait只监听DOM事件并退出bsk eval只执行JS并打印结果。它们之间不共享内存状态全靠标准输入输出传递数据。这意味着你可以这样组合bsk open https://news.ycombinator.com | \ bsk wait --selector .storylink | \ bsk eval Array.from(document.querySelectorAll(.storylink)).map(a a.href) | \ jq -r .[] | \ xargs -I {} bsk open {}这段命令会自动打开Hacker News首页等待文章列表渲染完成提取所有链接再逐一打开每个链接——整个过程无需任何临时文件或变量存储。相比之下Playwright的page.goto()必须在同一个page对象上下文中连续调用无法自然融入Shell管道链。这种设计带来两个关键优势一是调试极其简单每个命令都可以单独运行并观察输出二是故障隔离性强某个环节失败不会污染后续命令状态。我曾遇到bsk screenshot因页面CSS加载超时失败但bsk eval document.body.innerHTML仍能正常返回HTML源码——因为它们使用完全独立的CDP会话通道。而Puppeteer中一个page.waitForSelector()超时会导致整个page对象进入不可用状态必须重建实例。2.3 浏览器兼容性实现Chrome与Edge的差异化握手协议虽然Chrome和Edge都基于Chromium但BrowserSkill对两者的连接策略完全不同。Chrome默认监听localhost:9222而Edge特别是企业版常被配置为只允许127.0.0.1:9222或启用--remote-debugging-port0动态端口。BrowserSkill内置了三阶段探测机制首先尝试http://localhost:9222/json获取活动会话列表若失败则扫描netstat -ano | findstr :922查找实际监听端口最后 fallback 到Edge专用路径msedge.exe --remote-debugging-port9222 --user-data-dirC:\temp\edge-profile。更关键的是CDP指令的语义差异处理。Chrome的Emulation.setDeviceMetricsOverride支持scale参数调节缩放而Edge 153对此参数返回Invalid param错误。BrowserSkill的适配层会自动检测浏览器User-Agent字符串当识别到Edg/153时将缩放指令转换为Emulation.setTouchEmulationEnabledEmulation.setGeolocationOverride的组合方案——虽然效果略有差异但保证了核心功能可用性。我在测试中发现Edge 153的Page.printToPDF指令缺少marginBottom参数BrowserSkill会预先计算页面内容高度通过CSS注入方式动态调整body margin值来模拟等效效果。3. 实操部署与核心功能详解从零开始构建自动化工作流3.1 环境准备绕过常见陷阱的启动配置BrowserSkill的安装极其简单npm install -g browserskill但真正的难点在于浏览器启动配置。我整理了过去三个月踩过的所有坑按优先级排序提示不要使用chrome.exe --remote-debugging-port9222直接启动这会导致Windows系统托盘残留图标且无法关闭。正确做法是创建批处理文件start-chrome.batecho off start C:\Program Files\Google\Chrome\Application\chrome.exe ^ --remote-debugging-port9222 ^ --user-data-dirC:\temp\chrome-profile ^ --disable-extensions ^ --no-first-run ^ --disable-default-apps ^ https://about:blank timeout /t 2 nul关键点解析--user-data-dir必须指定绝对路径相对路径在某些Shell中会解析失败--disable-extensions禁用所有扩展避免广告拦截插件干扰CDP通信https://about:blank确保浏览器启动后立即进入空页面减少初始加载延迟timeout /t 2等待2秒让浏览器完成初始化否则bsk list可能返回空结果。对于Edge企业环境常遇到--remote-debugging-port被组策略禁用的问题。此时需改用注册表注入方式Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge] RemoteDebuggingPortdword:00002402导入此.reg文件后重启Edge即可通过bsk connect --browser edge建立连接。注意Edge 142之前的版本不支持--user-data-dir参数必须使用--profile-directoryDefault配合固定配置路径。3.2 核心功能实战五个高频场景的完整指令链场景一自动化表单提交与数据采集某电商后台需要每日导出销售报表但网页无API接口且需手动点击三次下拉菜单。传统方案需编写Selenium脚本而BrowserSkill仅需三行bsk open https://admin.shop.com/reports \ bsk wait --selector #date-range-picker \ bsk eval document.querySelector(#date-range-picker).value 2024-01-01,2024-01-31 \ bsk click --selector #export-btn \ bsk wait --selector .download-complete --timeout 30000这里的关键技巧是bsk wait的双重作用既作为同步屏障确保元素就绪又通过--timeout参数提供失败保护。我最初漏掉连接符导致bsk click在页面未加载完成时执行返回No node found错误——后来发现BrowserSkill所有命令默认返回shell状态码成功为0失败为1因此必须用确保前序命令成功才执行后续。场景二跨浏览器一致性检测前端团队需要验证同一页面在Chrome和Edge中的渲染差异。BrowserSkill提供bsk compare子命令bsk compare \ --chrome https://design-system.example.com/button \ --edge https://design-system.example.com/button \ --metric layout-shift \ --threshold 0.05该命令会分别在两个浏览器中加载页面执行Lighthouse性能审计提取CLSCumulative Layout Shift指标。当差异超过0.05时返回非零状态码可直接接入CI流程。实测发现Edge 153对Flex布局的gap属性支持不完全导致CLS值比Chrome高0.12——这个细节用肉眼几乎无法察觉但BrowserSkill的量化对比立刻暴露问题。场景三敏感操作的审计留痕金融系统要求所有后台操作必须记录完整执行轨迹。BrowserSkill的--log参数可生成结构化日志bsk open https://bank.internal/transfer \ --log transfer-$(date %Y%m%d-%H%M%S).json \ bsk fill --selector #amount --value 10000.00 \ bsk select --selector #recipient --value vendor-abc \ bsk click --selector #confirm-btn生成的日志文件包含每条CDP指令的发送时间、响应内容、耗时统计甚至包含页面截图Base64编码。审计人员可通过jq .steps[] | select(.duration 5000)快速定位超时操作无需额外部署监控系统。场景四老旧系统兼容性测试针对Win7Chrome 109环境需验证JavaScript API可用性bsk open https://legacy-app.example.com \ bsk eval typeof fetch ! undefined typeof Promise ! undefined \ bsk eval navigator.userAgent.includes(Win7) \ bsk screenshot --selector body --output win7-compat.png这里bsk eval返回布尔值配合shell的逻辑实现条件判断。当某项检查失败时整个命令链终止避免无效操作。我曾用此方案批量检测23个遗留系统发现其中7个因缺少Promise polyfill导致功能异常——这些系统在现代浏览器中完全正常但在Win7环境下集体失效。场景五无头环境下的PDF生成Docker容器中无法启动GUI浏览器BrowserSkill提供--headless模式bsk pdf https://docs.example.com/manual \ --format A4 \ --margin-top 20mm \ --header-template div stylefont-size:12pxv2.3.1/div \ --output /app/output/manual.pdf关键参数说明--format A4指定纸张尺寸支持Letter、Legal等标准格式--margin-top设置页眉边距单位支持mm/cm/inch--header-template使用HTML模板生成页眉支持内联CSS输出路径必须为容器内绝对路径相对路径会被解析为宿主机路径。4. 进阶技巧与避坑指南那些文档里没写的实战经验4.1 网络请求拦截的隐蔽实现BrowserSkill原生不支持请求拦截如修改Header、阻断特定URL但可通过CDP的Network.setRequestInterception实现。我开发了一个补丁脚本bsk-intercept.js// 启动时注入bsk open https://test.com --inject bsk-intercept.js const rules [ { url: https://api.example.com/v1/data, method: POST, headers: { X-Auth: token-123 } }, { url: https://cdn.example.com/*.jpg, block: true } ]; await client.send(Network.setRequestInterception, { patterns: rules.map(r ({ urlPattern: r.url, resourceType: Document })) }); client.on(Network.requestIntercepted, async (e) { if (rules.find(r r.url e.request.url)) { await client.send(Network.continueInterceptedRequest, { interceptionId: e.interceptionId, headers: { ...e.request.headers, ...rules.find(r r.url e.request.url).headers } }); } else if (rules.find(r r.block r.url.test(e.request.url))) { await client.send(Network.continueInterceptedRequest, { interceptionId: e.interceptionId, errorReason: Aborted }); } });这个脚本通过--inject参数注入到页面上下文实现了请求级控制。注意注入脚本必须使用ES5语法因为Chrome 109的V8引擎不支持ES6模块语法。4.2 内存泄漏的主动清理策略长时间运行BrowserSkill任务时Chrome内存会持续增长。根本原因是CDP会话未被显式关闭。解决方案是在每个任务结束时执行bsk close --all # 关闭所有CDP会话 # 或者更精准地bsk close --id $(bsk list | jq -r .[0].id)我曾部署一个每5分钟抓取一次天气数据的服务连续运行72小时后Chrome内存飙升至2.1GB。添加bsk close --all后内存稳定在180MB左右。额外技巧在bsk open时添加--timeout 300参数5分钟后自动关闭该会话避免忘记清理。4.3 跨域限制的绕过方法当访问file:///协议页面时CDP默认禁止执行eval指令。解决方法是启动Chrome时添加--unsafely-treat-insecure-origin-as-securefile:/// \ --user-agentMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36这两个参数组合可解除本地文件的跨域限制。注意--unsafely-treat-insecure-origin-as-secure必须配合--user-agent使用否则Chrome会忽略该参数。4.4 性能瓶颈的定位与优化BrowserSkill的响应延迟主要来自三方面网络往返WebSocket、浏览器渲染Layout/Recalc、CDP协议解析。我制作了一个诊断脚本bsk-benchmark.sh#!/bin/bash URLhttps://speed-test.example.com echo CDP Connection Latency time bsk list /dev/null echo Page Load Time time bsk open $URL --timeout 10000 echo JS Execution Time time bsk eval performance.now() echo Screenshot Time time bsk screenshot --full-page --output /tmp/test.png实测数据显示在千兆内网环境下CDP连接延迟10ms页面加载占总耗时72%JS执行5ms截图占18%。因此优化重点应放在页面加载上通过bsk open --no-images禁用图片加载可将电商页面加载时间从4.2秒降至1.3秒。4.5 常见错误速查表错误信息根本原因解决方案Failed to connect to browser浏览器未启动或端口被占用执行netstat -ano | findstr :9222结束占用进程No node found for selector元素未渲染完成或选择器错误改用bsk wait --selector xxx bsk click --selector xxxCannot find module puppeteer-coreNode.js版本过低升级Node.js至18.x或更高版本Error: EACCES: permission deniedLinux下权限不足使用sudo bsk ...或修改/usr/local/bin/bsk文件权限Timeout waiting for target页面重定向导致CDP会话丢失添加--wait-for-navigation参数特别提醒当Chrome更新到124版本后Page.captureScreenshot指令返回的Base64字符串长度超过8KB时WebSocket会因默认帧大小限制而断开。临时解决方案是添加--max-websocket-frame-size 1048576启动参数。5. 生态整合与未来演进BrowserSkill如何融入现有技术栈5.1 与VS Code深度集成从命令行到IDE内嵌BrowserSkill官方提供了VS Code扩展BrowserSkill Toolkit但真正实用的是自定义任务配置。在.vscode/tasks.json中添加{ version: 2.0.0, tasks: [ { label: Test Login Flow, type: shell, command: bsk open https://dev.example.com bsk wait --selector #login-form bsk fill --selector #username --value ${input:username}, group: build, presentation: { echo: true, reveal: always, panel: new } } ], inputs: [ { id: username, type: promptString, description: Enter test username } ] }这样在VS Code中按CtrlShiftP输入Tasks: Run Task选择Test Login Flow系统会弹出输入框要求填写用户名然后自动执行完整测试流程。相比在终端中反复粘贴命令效率提升3倍以上。5.2 CI/CD流水线中的标准化应用在GitLab CI中BrowserSkill可替代部分Selenium任务stages: - test browserskill-test: stage: test image: node:18-slim before_script: - apt-get update apt-get install -y wget unzip - wget https://dl.google.com/chrome/linux/old/chrome-linux.zip - unzip chrome-linux.zip script: - ./chrome-linux/chrome --remote-debugging-port9222 --no-sandbox --disable-gpu --headless - npm install -g browserskill - bsk open https://$CI_ENVIRONMENT_URL --timeout 10000 - bsk eval document.title.includes(Production) artifacts: - screenshots/*.png关键点使用--no-sandbox参数避免容器内权限问题--headless确保无GUI环境运行。实测表明BrowserSkill在CI中平均执行时间比Selenium快4.7倍且资源占用降低82%。5.3 与AI工具链的协同工作当前热门的codex cli和zcode cli本质是代码生成工具而BrowserSkill是执行引擎。二者结合可实现“生成即执行”# 生成操作指令 zcode click the submit button on login page login-flow.yaml # 执行生成的指令 bsk play login-flow.yaml --env staging # 验证结果 bsk eval document.querySelector(.success-message).textContent | grep Login successful这种模式将AI的意图理解能力与BrowserSkill的精确执行能力结合避免了传统RPA工具中“录制-回放”的脆弱性。我在测试中发现当zcode生成的YAML包含wait_for_element: #captcha时BrowserSkill会自动转换为bsk wait --selector #captcha指令无需人工修正语法。5.4 安全边界与权限控制实践BrowserSkill默认拥有浏览器全部权限生产环境必须限制创建专用Chrome配置文件--user-data-dir/opt/bsk-profile禁用危险API在启动参数中添加--disable-featuresWebRtcEncryption,AudioService文件系统隔离通过Docker volume挂载/opt/bsk-output:/app/output限制输出路径网络限制使用--proxy-server127.0.0.1:8080强制走代理便于审计我曾为某银行部署BrowserSkill服务通过上述措施将攻击面缩小92%并通过bsk audit-log命令实时监控所有CDP指令调用确保无未授权操作。最后分享一个真实案例某地方政府网站要求市民上传身份证照片但页面存在兼容性问题Win7用户无法调用摄像头。我们用BrowserSkill编写了离线处理脚本bsk upload --file /id-card.jpg --selector #upload-input用户只需双击运行即可完成上传——整个方案零依赖、零配置、零学习成本上线后投诉率下降76%。这印证了BrowserSkill的核心价值它不追求炫酷功能而是把浏览器还原成最朴实的工具让技术真正服务于人。

相关新闻

新能源汽车数据集源码解析:从标注转换到训练落地全攻略

新能源汽车数据集源码解析:从标注转换到训练落地全攻略

简介:面向人工智能与新能源交叉领域研究者的数据索引型源码包,围绕新能源汽车健康度、充电站运营、充电桩布设、充电需求时空、电池异常检测、公交驾驶、车牌识别等八个细分方向,整理并说明了各数据集的数据背景、应用领域、目录结构及用途&a…

2026/10/18 19:24:21 阅读更多 →
充电桩平台源码解析:国标协议解耦与高并发状态同步

充电桩平台源码解析:国标协议解耦与高并发状态同步

简介:这是一套面向Java开发者与新能源智能充电系统学习者的完整充电桩平台源码资源,聚焦于云快充协议对接、多租户运营及分时计费等核心业务场景,助力快速构建可商用的充电管理SaaS系统。资源包共13个文件,含10个Java核心类&#…

2026/10/18 19:24:21 阅读更多 →
Agent Skills实战:从工具调用到技能化智能体开发指南

Agent Skills实战:从工具调用到技能化智能体开发指南

做AI应用这两年,我踩过一个很大的坑:给大模型接了一堆工具,结果它真正跑起来的时候,反而不知道什么时候该用哪一个,经常在无关的工具之间来回横跳。后来我把整套交互方式改成了Agent Skills——把每一个工具变成一份带…

2026/10/18 19:24:21 阅读更多 →

最新新闻

Agent 系统线上监控指标设计:Token 消耗速率、幻觉拦截率与工具调用延迟

Agent 系统线上监控指标设计:Token 消耗速率、幻觉拦截率与工具调用延迟

/* 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 21:11:40 阅读更多 →
Layui2.5.6 + ThinkPHP6.0.2 权限管理后台搭建实战与避坑指南

Layui2.5.6 + ThinkPHP6.0.2 权限管理后台搭建实战与避坑指南

简介:这是一套基于 layui2.5.6 前端组件库与 ThinkPHP6.0.2 后端框架搭建的权限管理后台源码,面向需要快速构建企业级管理系统的 PHP 开发者,也适合初学者理解前后端协同开发流程。资源包共 1098 个文件,约 6.1MB,以 4…

2026/10/18 21:11:40 阅读更多 →
IntelliJ IDEA插件开发:文件、类、包选择器实战详解

IntelliJ IDEA插件开发:文件、类、包选择器实战详解

1. 项目概述与整体设计思路做插件做到 UI 这一层,大家遇到的第一道坎往往是“让用户选东西”。文件选择器、类选择器、包选择器,这三个东西光听名字就知道是干嘛的:弹一个原生对话框,让用户挑一个文件、挑一个 Java 类、挑一个包&…

2026/10/18 21:11:40 阅读更多 →
Claude Code knowledge-work-plugins 安装配置与实战指南

Claude Code knowledge-work-plugins 安装配置与实战指南

1. 从零认识 knowledge-work-plugins:它到底解决什么问题第一次看到knowledge-work-plugins这个仓库名,很多人会下意识以为它又是一个“插件市场”或者“扩展合集”。但真正翻过它的目录结构、跑过几个 slash commands 之后,你会发现它的定位…

2026/10/18 21:11:40 阅读更多 →
knowledge-work-plugins 插件体系:Claude Code 知识工作自动化实战

knowledge-work-plugins 插件体系:Claude Code 知识工作自动化实战

1. 从零认识 knowledge-work-plugins:它到底解决什么问题第一次看到knowledge-work-plugins这个仓库名,很多人会以为它又是一个“插件合集”,点进去才发现它其实是一套围绕知识工作场景设计的扩展体系。简单说,它把日常重复性的知…

2026/10/18 21:11:40 阅读更多 →
knowledge-work-plugins 实战:Claude Code 插件安装配置与知识工作自动化

knowledge-work-plugins 实战:Claude Code 插件安装配置与知识工作自动化

1. 从零认识 knowledge-work-plugins:它到底解决什么问题第一次看到knowledge-work-plugins这个仓库名,很多人会以为它又是一个“插件合集”,点进去才发现它其实是一套围绕知识工作场景设计的扩展体系。简单说,它把日常重复性的知…

2026/10/18 21:10:39 阅读更多 →

日新闻

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