基于LogicFlow的自定义边实现发光流动动画,打造动态流程高亮
前几天在做一个合同审批流可视化面板的时候产品抛了个比较“魂牵梦绕”的需求能不能让正在执行的那条连线自己亮起来像电流一样流动当时画布上已经铺了一百多条默认折线边如果全部高亮肯定花掉但只高亮一条默认样式又撑不起这个视觉。后来我基于 LogicFlow一个流程图编辑引擎在 React 项目里做了一条带发光和流动效果的自定义折线边整个过程从查文档、看源码到反复调参踩坑前前后后折腾了将近一周。这篇文章就是这次实践的完整复盘把需求分析、机制理解、核心代码、踩坑记录和优化策略一条条写清楚给想在流程图里做类似动态边的朋友一份可以直接参考的路线图。这次的实现不涉及改任何 LogicFlow 底层源码完全用官方预留的扩展点去做。如果你最近在做流程状态高亮、链路追踪、数据流可视化或者单纯想给编辑器里的连线加点“生命力”这篇内容应该能帮你省掉不少研究时间。1. 为什么要把一条“会动”的折线边当成独立功能来做1.1 真实业务里的视觉痛点那个审批流项目里节点之间的连线大部分是默认的直角折线边。功能上没毛病拖拽节点、自动重算路径、加箭头、带文本全都正常。但问题是整张图上几十条折线长得一模一样完全没有主次之分。业务方希望在流程流转时当前正在执行的那条路径能从一堆线里脱颖而出最好连鼠标都不用悬停一眼就能看到“走到哪一步了”。这种需求听着简单落到实现上却不是什么加个颜色就能解决的事。首先你要保证这条高亮的边在任意缩放比例下都足够明显其次光高亮还不行最好有一个持续流动的光点让用户感受到“正在发生”最后效果要自然不能把整张图搞成霓虹灯否则视觉噪声反而掩盖了关键信息。于是我把目标定成默认边保持原样单独做一条支持发光、流动动画的自定义折线边只有在需要强调的链路上才使用它。1.2 默认折线边做不到的三件事为什么不能直接给 LogicFlow 内置的折线边加样式我动手试过遇到了三个绕不开的坎。第一默认边的图形结构不开放。LogicFlow 内部渲染折线边时会把路径信息合并在一个 SVG 容器里你很难单独拿到那条线去持续修改它的描边状态。想给“某一条特定边”挂动效时控制力非常弱。第二默认样式是全局的。直接改默认边的 stroke 或透明度会作用到画布上所有折线边。你可以在渲染后手动找 DOM 去改个别边的属性但那是 hack不是方案。节点一拖拽、画布一刷新改动就丢了。第三发光效果不能只靠一层线条。真正好看的发光、流动效果至少需要多层组合默认边完全没有这个结构。所以最合理的做法是重新注册一种边类型渲染结构完全由自己掌控数据层继续复用 LogicFlow 已有的计算逻辑。这也是官方文档里推荐的自定义扩展方式。1.3 自定义边的设计目标动手前我列了三项硬性指标一是发光效果必须轻量不能用一堆 SVG 滤镜糊上去否则图稍微大一点就卡二是流动动画必须由 CSS 驱动不能开一堆 JavaScript 定时器去轮询三是动画状态必须可配置某条边什么时候流动、以什么速度流动都要能从业务数据里控制而不是写死在里面。后面的所有代码和调优都是围绕这三条展开的。这也解释了标题里为什么强调“自定义”因为只有把这条边变成独立类型你才能完全控制它的图形结构和行为细节。2. 理解 LogicFlow 自定义边机制把数据层和渲染层拆开看2.1 EdgeModel 是数据中枢points 从哪里来在 LogicFlow 里一条边从来不是一个单纯的 SVG 线条而是由两个类配合工作的EdgeModel 负责数据EdgeView 负责渲染。EdgeModel 里最核心的数据是一组坐标点。当你把一条边从 A 节点拖到 B 节点LogicFlow 会根据两节点的位置、边的类型自动计算出路径的途径点。对于折线边这组点就是一系列直角拐弯的坐标保存在模型里。无论节点怎么拖动、画布怎么缩放这组点都会实时更新不需要你手动干预。做动画效果时我喜欢把 EdgeModel 比喻成“剧本”。它告诉你这条边从哪出发、经过哪里、在哪结束以及它身上带了哪些业务属性。你所有的动态样式配置都应该存进属性里而不是写死在代码中。这样边才能在节点变化时保持同步。2.2 EdgeView 是最终渲染getShape 与整个绘制流程EdgeView 负责把模型里的数据变成画布上的图形。你自定义一条边本质上就是重写它的形状生成逻辑。LogicFlow 内置了好几种边 View 基础类比如直线边、折线边、曲线边。我这次需要的是一条折线边所以直接基于折线边去扩展。关键方法就是 getShape它的返回值决定了这条边最终在画布上长什么样。你在里面可以返回单个图形元素也可以返回一个数组把发光层、流动层、主线条都拆开。理解清楚这层关系后思路就顺了数据由模型实时计算渲染由视图完全自定义。你不用关心折线的拐弯算法是怎么实现的只需要拿到 points拼成 SVG 路径然后把这段路径重复绘制几遍配上不同的透明度、宽度和动画就成了一条发光流动的边。2.3 注册新边类型的完整姿势在 LogicFlow 里注册一条新边类型大致是这个结构。我用简洁的代码把骨架列出来方便你建立心智模型import { LogicFlow, PolylineEdge, PolylineEdgeModel } from logicflow/core; class GlowEdgeModel extends PolylineEdgeModel { getDefaultProperties() { return { flowing: false, speed: 1, glowColor: #6366f1 }; } } class GlowEdgeView extends PolylineEdge { getShape() { // 核心绘制逻辑后面章节展开 } } const lf new LogicFlow({ container: document.querySelector(#graph) }); lf.register({ type: glow-flow-edge, view: GlowEdgeView, model: GlowEdgeModel });注意这里的 type 是全局唯一的。如果两个模块注册了相同的 type后注册的会覆盖前者。所以真实项目里我建议给类型名加上业务前缀别用太通用的名字。比如我这里叫 glow-flow-edge但如果以后有多个流程模块叫 contract-flow-edge、data-pipeline-edge 会更稳。2.4 一条边的生命周期从拖拽重算到视图重绘还有一个容易忽略的点是边的生命周期。每次节点移动LogicFlow 都会重新计算模型里的 points然后触发视图重绘。对于普通边这个重绘非常快但对带动画的自定义边来说重绘意味着 SVG 元素可能被重建动画状态可能被重置。这一点我后面专门用了一个章节去说这里只要先有这个意识后面踩坑时就明白问题出在哪了。3. 发光和流动动画的实现先做对原理再写代码3.1 用三层描边替代 SVG 滤镜发光效果更稳提到发光很多人第一反应是用 SVG 的 feGaussianBlur 滤镜。把一条线模糊一下再叠一层亮线确实有光晕感。但作为长期跑在流程图编辑器里的效果滤镜的问题很明显渲染开销大拖动画布时容易掉帧而且滤镜的作用域和 SVG 容器的尺寸计算在部分浏览器里比较敏感动不动就出现裁切。我后来采用的是更朴实的三层 stroke 叠加方案。原理很简单一个发光效果可以拆成三根完全重叠、但粗细和透明度不同的线最外层线宽较大比如 6px透明度很低模拟光晕扩散中间层线宽适中比如 2px透明度稍高作为光的过渡区最内层线宽最细比如 1px完全不透明模拟最亮的核心。这三层叠加起来视觉上就是从内到外逐渐衰减的光晕。相比滤镜它的计算成本要低得多而且用 CSS 控制起来非常直接。实测下来同时渲染几十条发光边时性能依然可接受远好于滤镜方案。3.2 流动动画的本质stroke-dasharray 与 stroke-dashoffset流动效果的核心可以拆解成两个 SVG 描边属性。第一个是 stroke-dasharray。它把一条实线切成“实线段 空白段”的循环模式。比如设成 6 12意思就是 6 像素实线、12 像素空白不断重复。这样线条会变成一串虚线。第二个是 stroke-dashoffset。它控制这条虚线序列的起始偏移量。当这个值持续变化时虚线就会沿着路径方向“走动”。就像一队人排着队沿着跑道前进offset 是队形起点dasharray 是每个人的间距。offset 不断减小整队虚线就向前移动。要实现流动就把 stroke-dasharray 设成适合光点的大小然后给 stroke-dashoffset 加一个循环动画。比如keyframes flowDash { from { stroke-dashoffset: 0; } to { stroke-dashoffset: -180; } } .flow-line-animation { animation: flowDash 1.2s linear infinite; }这里的 -180 表示动画结束时偏移量减少 180 像素。这个值不是随便写的它应该尽量大于路径长度。如果路径很长而偏移量终值小于路径长度虚线图案在一条长边上就会显得不连贯甚至动画循环时出现“跳变”。我一般会设置一个比较大的值比如 -2000保证所有边都不会出现跳变。速度则由 animation-duration 控制而不是改偏移终值。3.3 自定义折线边的核心代码骨架下面是一段更接近实际写法的核心代码。我隐去了一些版本相关的细节因为 LogicFlow 不同版本之间 API 命名可能有微调但整个逻辑结构是稳定的。class GlowEdgeView extends PolylineEdge { getShape() { const { model } this.props; const { flowing, speed, glowColor } model.properties; const points model.points; const d points.reduce((acc, p, i) { const cmd i 0 ? M : L; return ${acc} ${cmd} ${p.x} ${p.y}; }, ); // 这四层 path 位置完全重合模拟发光和流动 return [ // 最外层光晕 h(path, { attrs: { d, stroke: glowColor, stroke-width: 6, stroke-opacity: 0.15, fill: none } }), // 中间过渡层 h(path, { attrs: { d, stroke: glowColor, stroke-width: 2, stroke-opacity: 0.4, fill: none } }), // 内层亮线 h(path, { attrs: { d, stroke: glowColor, stroke-width: 1, stroke-opacity: 1, fill: none } }), // 流动光点层只在高亮模式才显示 flowing ? h(path, { attrs: { d, stroke: #ffffff, stroke-width: 1.2, stroke-dasharray: 4 16, stroke-dashoffset: 0, fill: none }, class: flow-line-animation flow-speed-${speed} }) : null ].filter(Boolean); } }这段代码的核心思想是叠加。前三层不带动画负责把整条边的“发光氛围”铺出来最后一层是细白虚线通过 CSS 动画让它在路径上流动。你可能会问既然前三层不动为什么不直接用一层粗线加一个模糊因为单层线的透明度无法模拟出从亮到暗的衰减只有多层叠加才能让光晕看起来有层次感。3.4 动画速度与周期怎么调流动速度不是越快越好。我最初把动画时间设成 0.4 秒效果非常浮夸像一条发光的虫子在线上乱窜看得人眼花。后来调到 1 秒到 1.5 秒观感舒服很多。关键是动画时间要和业务节奏匹配如果是状态流转提示1 秒左右比较明确如果是长期展示的数据链路追踪可以更慢比如 1.8 秒减少视觉疲劳。速度也可以通过属性来配置。我在模型里专门存了一个 speed 属性CSS 里预置了几档.flow-speed-1 { animation-duration: 1.2s; } .flow-speed-2 { animation-duration: 0.8s; } .flow-speed-3 { animation-duration: 0.5s; }这样产品需求一变不需要改代码只需要更新边的 properties动画速度就能跟着变。数据驱动在动态效果里同样适用。4. React 项目里的联动与封装4.1 用 properties 控制动画开关和样式动态效果最大的忌讳就是“全图开花”。业务上只有少数几条边需要强调所以我们把流动状态做成了边的一个属性。默认情况下这条边和普通折线边几乎一样只有一条轻微的光晕。当某个流程节点开始执行时我们调用 setProperties 把对应边的 flowing 设为 true流动光点才出现。LogicFlow 会在属性变化后自动触发视图更新不需要手动刷新画布。这个机制让动画开关变得非常干净也方便埋点统计到底哪条边、什么时候、被高亮了多少次。数据驱动动画还有一个好处就是配合接口轮询或 WebSocket 推送时后端状态一变前端边动画就跟着变完全不用去操作 DOM。4.2 监听边事件做出交互反馈除了从数据层控制我还在视图层加了一些交互反馈。比如用户点击某条边时可以让这条边短暂提速帮助用户确认“我选中了它”。LogicFlow 提供了边相关的事件机制常见思路是这样lf.on(edge:click, ({ data }) { if (data.type glow-flow-edge) { const edgeModel lf.getEdgeModelById(data.id); edgeModel?.setProperties({ speed: 2.5 }); } });但这里有个坑如果你在点击事件里永久把 speed 改成了 2.5这条边以后一直就很快了。所以我配合了鼠标离开事件把 speed 改回去。如果项目里监听的事件太多建议统一封装一个工具函数避免散落在各个组件里。4.3 把边封装成独立模块给多个流程图复用在 React 项目里我不会把自定义边直接写在组件里。更合适的做法是把模型、视图、注册配置一起封装成一个独立模块导出注册函数和类型常量。这样同一个画布页可以用多个流程图模块也可以引用。大概长这样// flow-edges/index.js export const GLOW_FLOW_EDGE glow-flow-edge; export function registerGlowEdge(lf) { lf.register({ type: GLOW_FLOW_EDGE, view: GlowEdgeView, model: GlowEdgeModel }); }使用时先调用 registerGlowEdge(lf)然后边的数据里把 type 设为 GLOW_FLOW_EDGE 就行。封装的好处是以后如果还想做更多边效果可以在这个目录下继续加不会把注册逻辑散得到处都是。我还给 properties 字段写了类型定义把 flowing、speed、glowColor 都声明清楚。团队里其他人接手时不需要读源码只看类型就知道这条边支持哪些配置。4.4 为什么 CSS 动画比 setInterval 更适合这里我见过一些动态边实现是用 JavaScript 定时器每秒改一次 stroke-dashoffset。这种方式在交互简单的 Demo 里没问题但放到真实编辑器里会出事情拖拽节点、缩放画布、切换页面时定时器依然在跑逻辑很容易乱。另一个问题是LogicFlow 重绘视图时会重建部分 SVG 节点JS 修改的 offset 可能丢。CSS 动画则不同。浏览器把动画交给渲染引擎管理是声明式的只要元素存在动画就会持续运行。LogicFlow 重绘时如果新的 SVG 节点带上了同一个 class动画会自动在新节点上工作。这也是我把流动动画做成 CSS class 而不是 JS 操作的根本原因。5. 踩坑与优化五类常见问题的完整排查链5.1 路径拼接偏移坐标和容器层级的关系第一个坑出现在最基础的路径拼接上。我一开始手动拼 d 时把模型拿到的 points 和页面上的视觉位置对不上整条线偏移了半个节点。排查之后发现问题出在容器坐标映射上。LogicFlow 的模型层拿到的坐标是画布坐标系内的绝对坐标直接拼进 SVG path 是没问题的。但如果你额外给外层 g 加了 transform比如做平移或缩放坐标就叠加了。更隐蔽的情况是自定义 view 里如果手动创建了独立的 SVG 容器有的浏览器会对带 transform 的父级元素产生额外偏移。我的建议是路径坐标只信任模型提供的 points不要手动二次处理。纹理、发光层都基于同一组坐标生成这样各层能保证完全重合。如果不确定坐标对不对可以先临时打印 points跟画布上的实际节点位置核对一下。5.2 移动节点后动画跳变重绘与 d 属性更新的冲突这个问题最折磨人。刚做完动画时静态显示一切正常但只要一拖拽节点流动光点就会突然“闪”一下然后重新开始流动。原因是 LogicFlow 在节点移动后会重算 points并把新的 d 属性写进 path。这个过程通常伴随着 SVG 节点的重建或属性更新CSS 动画从头开始跳动自然就发生了。我一开始试图彻底消除这个跳变试了各种方法也做不到完全无缝。后来换了个思路既然重绘是不可避免的那就让跳变不明显。方法有三个按效果排序一是缩短动画周期。把 duration 控制在 0.8 秒以内跳变时长占总周期的比例更小人眼不易察觉。二是降低流动光点的对比度。光点颜色不要用纯白用接近主色调的亮色跳变时不至于闪眼。三是在拖拽过程中临时暂停动画等拖拽结束再恢复。这个方案最彻底但实现成本也最高需要监听节点拖拽开始和结束的事件去动态切换 class。我最终采用了一和三的组合监听画布进入拖拽状态时给所有动画边加一个暂停 class拖拽结束后移除。这样拖拽过程中用户注意力集中在节点上边上的动画停一下反而更自然。5.3 大量动画边导致 CPU 占用高性能分析与降级策略发光边做出来后视觉没问题性能却差点翻车。我做了个压力测试在图上随机放置了 60 条发光边其中 40 条同时开启流动动画。拖动整张画布时帧率明显下降CPU 占用直接拉满。排查下来主要开销集中在两层第一层是每帧都要绘制大量半透明粗描边第二层是流动虚线不断变化触发重绘。优化措施我列成了表格问题来源优化动作效果半透明粗描边过多降低最外层描边透明度从 0.25 降到 0.12光晕视觉变化不大重绘压力明显下降流动动画边数量太多默认不流动只对当前激活链路开启流动CPU 占用下降 60% 以上动画周期过短从 0.5 秒调成 1.2 秒每帧视觉变化量减少观感更从容SVG 滤镜残留全部移除 feGaussianBlur重绘开销恢复正常我给这个方案加了降级逻辑当页面同时激活的动画边超过 10 条时只保留最内层的流动虚线关闭三层光晕超过 30 条时流动虚线也关掉改为静态高亮。这样极端场景下信息依然能看清但不会把浏览器拖垮。5.4 发光层挡住节点点击pointer-events 的必要性这个问题如果不提你大概率会踩到。绘制发光效果时最外层的 stroke 宽度可能有 8px 甚至更粗而且透明度很低视觉上它是“虚”的但点击区域却是真实存在的。这就导致一个很奇怪的交互用户想点某个节点偏偏点击落到了节点旁边一条发光的边上节点没选中边反而被选中了。排查方式很简单给所有只起装饰作用、不承担交互功能的 path 加上 pointer-events: none。只有最内层真实路径保留事件响应。在 LogicFlow 的图形配置里你可以给attrs部分加这个 CSS 属性也可以在样式表里直接写。我更推荐在代码里针对每个 path 单独控制因为不同层的事件策略可能不同写在一起容易混乱。5.5 浏览器兼容性静态降级与老环境适配最后说说兼容性。我实际测试的工作环境以 Chromium 系浏览器为主Chrome、Edge 都没问题Firefox 也稳定。但如果你要覆盖更老的环境需要注意两点。第一SVG 描边动画的属性兼容性总体很好但如果是很老的浏览器CSS animation 对 SVG 属性的支持不够完整流动虚线可能不动。第二stroke-dashoffset 动画在部分嵌入式 WebView 里会有延迟表现为虚线的移动一顿一顿的。我给的降级方案是通过 CSS 特性检测判断浏览器是否支持动画不支持时直接把流动虚线层隐藏只保留三层静态发光。虽然少了动态效果但整条边依然有明显的视觉区分。好的效果应该是可降级的不能因为没有动画就完全变得不可读。5.6 文本与光晕的关系把文字层抬高一点这个坑比较细但也值得说。发光边上有业务文本时比如审批名称、流转条件光晕可能会让文字变得模糊。解决方式我试过两种一是把文字渲染位置稍微偏移避开最亮的核心层二是给文本容器加上白色半透明背景。实测第二种更稳因为不管光晕怎么跑文字始终有底色垫着可读性不受影响。写在最后的一点经验整条自定义折线边做下来我最深的体会是动态效果的本质是“克制”。发光不要总是亮着流动不要总是跑着只有极少数的关键路径才值得被强调。把动画做成 properties 可配置后产品侧随时能调整开发侧也方便排查问题。这套方案后续还能往外扩展比如把箭头也加流动光点做成立体双色边或者把流动方向反转来表达相反的流程状态。方向都是顺的只要你理解了自定义边“模型管数据、视图管渲染、CSS 管动画”这三层关系剩下的就是叠加和调参的问题了。

相关新闻

从极简命名到工程化落地:响应式实时数据处理项目实战

从极简命名到工程化落地:响应式实时数据处理项目实战

1. 从“rea”这个标题说起:一个极简命名背后的完整项目思维第一次看到“rea”这个标题,很多人会愣一下——三个字母,没有上下文,没有说明,甚至连大小写都没区分。但恰恰是这种极简命名,在真实的项目开发中非…

2026/10/18 8:11:12 阅读更多 →
如何专业解析技术缩写REA的含义与应用场景

如何专业解析技术缩写REA的含义与应用场景

项目标题为“rea”,但提供的输入内容中,项目正文为空、关键词未列出、摘要描述缺失,且网络搜索内容部分完全为空(仅显示)。这意味着:没有任何有效信息可支撑专业拆解。作为一名从业十多年、经手过数百个真实…

2026/10/18 8:11:12 阅读更多 →
从极简命名到完整实现:响应式数据模块rea的设计与落地

从极简命名到完整实现:响应式数据模块rea的设计与落地

1. 从“rea”这个标题说起:一个极简命名背后的完整项目思维第一次看到“rea”这个标题,很多人会愣一下——三个字母,没有上下文,没有说明,甚至连大小写都没区分。但恰恰是这种极简命名,在真实的项目开发中非…

2026/10/18 8:11:12 阅读更多 →

最新新闻

深度学习水果图像识别全流程:从数据准备到模型部署

深度学习水果图像识别全流程:从数据准备到模型部署

前阵子A同学来找我,说想做一篇和“基于深度学习的水果图像识别研究”相关的课题,问这个方向是不是太简单了。我当时跟他说,做之前你先想清楚一个问题:让模型区分苹果和橙子很容易,但让模型区分青苹果和青梨&#xff0c…

2026/10/18 9:14:26 阅读更多 →
Thread Dump Analyzer(TDA)实战:用jstack线程转储定位死锁与CPU热点

Thread Dump Analyzer(TDA)实战:用jstack线程转储定位死锁与CPU热点

简介:TDA(Thread Dump Analyzer)是一款面向Java开发与运维人员的开源线程Dump分析工具,用于解析jstack等命令生成的线程快照,快速定位线程阻塞、死锁、锁竞争及CPU占用过高等性能问题,适合线上故障排查和性…

2026/10/18 9:14:26 阅读更多 →
2026年聚合API平台底层原理与实战部署教程:以词元之河为例的接入演示

2026年聚合API平台底层原理与实战部署教程:以词元之河为例的接入演示

手头项目一多,密钥就开始泛滥:GPT 一套、Claude 一套、DeepSeek 又一套,每家的控制台、账单与告警方式还都不一样。今年上半年我把团队的全部调用收拢到聚合平台上,顺手把整个部署过程记录了下来。这篇教程先讲清楚聚合平台的底层…

2026/10/18 9:14:26 阅读更多 →
Oracle SQL Developer 4.0.3.16.84 x64安装配置与常见问题排查

Oracle SQL Developer 4.0.3.16.84 x64安装配置与常见问题排查

简介:这是一份面向 Oracle 开发人员与数据库管理员的免费图形化管理工具包,对应 SQL Developer 4.0.3.16.84-x64 版本,支持在 64 位系统中快速建立数据库连接,编写与调试 SQL/PL/SQL,浏览和编辑表数据,设计…

2026/10/18 9:14:26 阅读更多 →
25个经典网站源代码:从拆解、运行到二次开发的完整练手指南

25个经典网站源代码:从拆解、运行到二次开发的完整练手指南

简介:这份合集收录了25个经典网站源代码,覆盖面较广,适合前端初学者系统学习设计趋势,也适合有经验的开发者作为组件与交互实现的参考。压缩包共1355个文件,总大小约41.56MB,包含429个jpg、288个png、228个…

2026/10/18 9:14:26 阅读更多 →
AI智能体从演示到生产:开源选型、国产算力与安全边界的工程实践

AI智能体从演示到生产:开源选型、国产算力与安全边界的工程实践

1. 从一条热搜说起:为什么今天必须聊这8个方向早上刷行业群的时候,看到有人转了一条消息,说某开源智能体框架在两天内涨了八千多颗星,底下评论区吵成一片——有人觉得这就是个套壳玩具,有人已经在拿它跑自动化测试了。…

2026/10/18 9:13:26 阅读更多 →

日新闻

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