Matlab肌肉激活度计算:从sEMG信号到%MVC的完整实现

简介:这份资源面向运动生物力学、康复工程与人体运动分析方向的学习者和研究者,提供一套用Matlab求解肌肉激活度的完整实现方案,解决从表面肌电信号到激活度曲线这一环节缺少可运行参考代码的问题。压缩包共5个文件,约135KB,包含2个m脚本、2个mat数据文件和1个说明文档,其中脚本分别承担主流程调用与激活度计算,数据文件则覆盖普通运动状态下的sEMG信号以及最大自主收缩(MVC)时的sEMG信号,说明文档用于交代使用背景。运行后可直接得到肌肉激活度曲线,便于对照验证算法效果。目前已有3507人学习下载,适合具备一定Matlab基础、希望快速复现sEMG激活度计算流程的读者,也可作为课程实验或课题预研的起步素材。

1. 从一段“看起来像噪声”的肌电信号说起

如果你手头有一份表面肌电信号(sEMG)数据,想把它变成能写进论文或报告的“肌肉激活度”曲线,大概率会经历这样一个过程:先用采集设备拿到一堆电压值,打开一看全是毛刺和漂移,完全看不出哪块肌肉在什么时候发力。这份《肌肉激活度Matlab代码及数据.rar》解决的正是这个断层——它把原始 sEMG 信号到归一化激活度的完整处理链路,用 Matlab 脚本串了起来,附带一份可直接运行的示例数据。适合谁?做运动生物力学、康复评估、人机交互方向的学生和工程师,尤其是那些不想从零推导滤波参数、只想先把结果跑出来再回头调参的人。Matlab 在这个场景里依然是主力工具,因为它的信号处理工具箱和绘图能力,能让你在同一个环境里完成“读数据—滤波—整流—包络—归一化—出图”的全流程,不用在多个语言之间来回倒腾。

2. 项目结构拆解:从数据文件到激活度曲线的目录逻辑

拿到一个压缩包,先别急着双击 .m 文件就 run。我一般会先把目录树看清楚,因为肌肉激活度计算这类项目,脚本之间的调用关系往往比单个脚本内部的逻辑更容易让人翻车。这份资源的组织方式属于典型的“数据+脚本+输出”三段式,下面按我实际拆包后的理解来讲。

2.1 目录层级与文件职责

解压后大致会看到这样的结构(不同人整理习惯略有差异,但核心文件跑不掉):

muscle_activation_project/ ├── data/ │ ├── raw_emg_sample.mat % 原始 sEMG 数据,含时间戳和通道值 │ └── mvc_reference.mat % MVC 参考值,用于归一化 ├── src/ │ ├── main_activation.m % 主入口脚本,一键跑通 │ ├── preprocess_emg.m % 预处理:去均值、滤波 │ ├── rectify_envelope.m % 整流+包络提取 │ └── normalize_activation.m % 归一化到 %MVC ├── utils/ │ ├── butter_filter.m % 滤波器设计与应用封装 │ └── plot_activation.m % 绘图辅助 └── output/ └── activation_result.mat % 跑完后保存的激活度结果

这个结构的价值在于:main_activation.m只负责编排流程,具体每一步的计算都在独立函数里。你改滤波截止频率,只动preprocess_emg.m;换归一化方式,只动normalize_activation.m。常见做法是把所有逻辑塞进一个脚本,改一行就要通读全文,这个项目没有那样做,对二次开发友好。

2.2 数据文件的字段含义

raw_emg_sample.mat里通常包含两个变量:emg_data和fs。emg_data是 N×M 矩阵,N 是采样点数,M 是通道数(对应不同肌肉的电极)。fs是采样频率,单位 Hz,常见取值 1000 或 2000。mvc_reference.mat里存的是每块肌肉的最大自主收缩(MVC)幅值,用于把处理后的包络除以这个值,得到 %MVC 单位的激活度。

注意:如果你用自己的数据替换,务必保证emg_data的通道顺序和mvc_reference里的参考值顺序一一对应,否则归一化会张冠李戴,出来的曲线完全没法解释。

2.3 主脚本的编排逻辑

main_activation.m的骨架大致如下,我按实际运行顺序还原:

%% main_activation.m % 肌肉激活度计算主入口 clear; clc; close all; % 1. 加载数据 load('../data/raw_emg_sample.mat'); % 得到 emg_data, fs load('../data/mvc_reference.mat'); % 得到 mvc_ref % 2. 预处理:去均值 + 带通滤波 emg_filtered = preprocess_emg(emg_data, fs); % 3. 整流 + 包络提取 emg_envelope = rectify_envelope(emg_filtered, fs); % 4. 归一化到 %MVC activation = normalize_activation(emg_envelope, mvc_ref); % 5. 保存与绘图 save('../output/activation_result.mat', 'activation'); plot_activation(activation, fs);

这段代码没有花哨技巧,但每一步的输入输出边界清晰。preprocess_emg返回滤波后的信号,rectify_envelope返回包络,normalize_activation返回激活度。你可以在任意一步之间插入自己的处理,比如加一个陷波滤波去工频干扰,只要保持接口一致即可。

2.4 函数调用链与数据流

从数据流角度看,整个链路是:原始电压信号 → 去均值(消除直流偏置)→ 带通滤波(保留 20–450 Hz 有效频段)→ 全波整流(取绝对值)→ 低通滤波(提取包络)→ 除以 MVC 参考值 → 得到 0–1 或 0–100% 的激活度。每个环节的参数都会影响最终曲线的平滑度和峰值位置,第 3 章会逐个展开。

3. 核心算法逐段拆解:滤波、整流、包络与归一化

这一章是整份代码的重头戏。肌肉激活度的计算精度,八成取决于预处理和包络提取的参数选择。下面按函数逐个讲,每个都给出可运行的代码段和参数说明。

3.1 预处理:去均值与带通滤波

原始 sEMG 信号里混着直流偏置和高频噪声,直接整流会把偏置也放大。preprocess_emg.m的做法是先减去每通道均值,再用 Butterworth 带通滤波器。

function emg_filtered = preprocess_emg(emg_data, fs) % 去均值:消除电极偏置 emg_demeaned = emg_data - mean(emg_data, 1); % 带通滤波:20-450 Hz,保留sEMG主要能量 low_cut = 20; % 下限截止频率,滤掉运动伪迹 high_cut = 450; % 上限截止频率,滤掉高频噪声 order = 4; % 滤波器阶数,太高会引入振铃 [b, a] = butter(order, [low_cut high_cut]/(fs/2), 'bandpass'); emg_filtered = filtfilt(b, a, emg_demeaned); % 零相位滤波 end

逻辑说明:filtfilt做双向滤波,消除相位延迟,这对后续包络的时间对齐很重要。参数方面,low_cut设 20 Hz 是常见做法,能压掉大部分运动伪迹;high_cut设 450 Hz 或接近 Nyquist 频率的一半,取决于你的采样率。如果fs是 1000 Hz,Nyquist 是 500 Hz,450 Hz 留了余量。阶数选 4 是折中,阶数太高会在信号突变处产生振铃,反而污染包络。

提示:如果你的数据里工频干扰明显(50 Hz 或 60 Hz),在带通之后再加一个陷波滤波,用iirnotch设计,品质因数 Q 取 35 左右。

3.2 整流与包络提取

整流就是取绝对值,包络提取本质上是低通滤波。rectify_envelope.m把这两步合在一起:

function emg_envelope = rectify_envelope(emg_filtered, fs) % 全波整流 emg_rectified = abs(emg_filtered); % 低通滤波提取包络,截止频率通常 3-6 Hz envelope_cut = 5; % 包络截止频率 order = 4; [b, a] = butter(order, envelope_cut/(fs/2), 'low'); emg_envelope = filtfilt(b, a, emg_rectified); end

逻辑说明:包络截止频率的选择直接决定激活度曲线的“跟手程度”。设 3 Hz,曲线更平滑但峰值会被削低;设 6 Hz,峰值保留更好但毛刺多。我一般先用 5 Hz 跑一遍,对着原始信号看包络是否贴合发力区间,再微调。filtfilt同样是为了零相位,保证包络峰值和原始信号峰值在时间上对齐。

3.3 归一化:从电压到 %MVC

归一化是让不同受试者、不同肌肉之间的激活度可比的关键一步。normalize_activation.m把包络除以 MVC 参考值:

function activation = normalize_activation(emg_envelope, mvc_ref) % mvc_ref 是每通道的MVC幅值,行向量 % 避免除零,加一个极小值 epsilon = 1e-6; activation = emg_envelope ./ (mvc_ref + epsilon); % 可选:截断到[0,1],防止异常值 activation(activation > 1) = 1; activation(activation < 0) = 0; end

逻辑说明:mvc_ref的获取方式通常是在实验前让受试者做最大自主收缩,取该阶段的包络峰值。如果你没有 MVC 数据,也可以退而求其次用整个试次的最大包络值做归一化,但那样得到的是“相对激活度”,跨受试者比较时要谨慎。epsilon是防止某通道 MVC 为零导致除零错误,血泪经验:曾经因为一个通道电极脱落,MVC 接近零,归一化后整条曲线爆表,排查了半天才发现是硬件问题。

3.4 参数影响与调参策略

把三个函数的参数放在一起看,影响最大的是包络截止频率和带通下限。下面这张表是我在实际数据上试出来的经验范围:

参数常见取值偏大影响偏小影响
带通下限20 Hz丢失低频发力信息运动伪迹残留
带通上限450 Hz高频噪声进入丢失细节
包络截止3–6 Hz曲线毛刺多峰值被削平
滤波器阶数4振铃风险过渡带变宽

调参时我习惯先把包络截止设成 5 Hz 跑一遍,画出原始信号和包络的叠加图,肉眼判断包络是否覆盖了所有发力峰。如果某个峰被削了,就提高截止频率;如果曲线抖动厉害,就降低。这个过程没有公式能替代,只能对着数据看。

4. 跑通与验证:从加载数据到出图的完整操作

代码看懂了,下一步是让它在你机器上跑起来。这一章按实际操作顺序写,包括环境准备、路径设置、运行和结果验证。

4.1 环境准备与路径设置

Matlab 版本建议 R2018b 及以上,因为用到了filtfilt和butter这些信号处理工具箱函数。如果你没装信号处理工具箱,butter和filtfilt会报错,需要自己实现或用其他滤波方式替代。

运行前先把当前文件夹切到src/目录,或者在脚本开头用addpath把utils/加进来:

% 在 main_activation.m 开头添加 addpath('../utils'); addpath('../data');

常见翻车点:直接双击main_activation.m运行,Matlab 的当前目录可能不是src/,导致load('../data/...')找不到文件。解决办法是在脚本开头用cd(fileparts(mfilename('fullpath')))自动切到脚本所在目录。

4.2 运行主脚本与中间变量检查

在命令行输入main_activation回车,如果一切正常,会弹出激活度曲线图,并在output/下生成activation_result.mat。但“正常”的前提是数据加载成功。我建议在每一步后面加一个size检查:

disp(['emg_data size: ', num2str(size(emg_data))]); disp(['fs: ', num2str(fs)]); disp(['mvc_ref size: ', num2str(size(mvc_ref))]);

如果emg_data的列数和mvc_ref的长度不一致,归一化那一步会广播出错。这是最常见的报错来源,现象是Matrix dimensions must agree,原因就是通道数对不上,解决方法是检查两个文件的变量维度。

4.3 结果验证:激活度曲线的合理性判断

跑出图之后,怎么判断结果对不对?我一般看三点:第一,静息段激活度应该接近 0,如果静息段有 0.2 以上的基线,说明去均值或滤波不干净;第二,发力段的峰值应该和原始信号的能量爆发区间对齐,如果包络峰值滞后于原始信号,检查filtfilt是否用错成了filter;第三,激活度不应长时间饱和在 1,如果饱和,说明 MVC 参考值偏小,需要重新采集或调整。

注意:如果你用的是自己的数据,采样率fs一定要和实际采集一致。曾经有人把 2000 Hz 的数据按 1000 Hz 处理,结果包络截止频率实际变成了 2.5 Hz,曲线平滑得过分,峰值全被削平。

4.4 批量处理多个试次

单次跑通后,你大概率要处理多个试次。我一般会写一个循环,把data/下所有.mat文件遍历一遍:

files = dir('../data/raw_*.mat'); for i = 1:length(files) load(fullfile('../data', files(i).name)); emg_filtered = preprocess_emg(emg_data, fs); emg_envelope = rectify_envelope(emg_filtered, fs); activation = normalize_activation(emg_envelope, mvc_ref); save(fullfile('../output', ['act_', files(i).name]), 'activation'); end

这段代码的关键是fullfile拼接路径,避免手动拼字符串在不同系统上出问题。批量跑之前,先用一个文件确认参数没问题,再放开循环,否则错误会重复 N 次。

5. 避坑与排查:肌肉激活度计算中的常见问题

这一章记录我在用这类代码时踩过的坑,每条按“现象→原因→解决”写,希望能帮你省下几个小时的调试时间。

5.1 激活度曲线整体偏高或偏低

现象:所有试次的激活度基线都在 0.3 以上,或者发力峰值只有 0.4。原因:MVC 参考值的采集质量不一致,或者归一化前没有做去均值。解决:检查mvc_reference.mat里的值是否来自同一受试者、同一电极位置;在归一化前确认包络的静息段均值已接近零,必要时手动减去静息段均值。

5.2 包络曲线出现规律性振荡

现象:激活度曲线上叠加了一个频率固定的正弦波动。原因:带通滤波器的过渡带太窄或阶数太高,产生了振铃;也可能是工频干扰没滤干净。解决:降低滤波器阶数到 2 或 3,或者加一个陷波滤波。判断方法是对滤波后的信号做 FFT,看振荡频率是否在 50 Hz 附近。

5.3 不同通道的激活度不可比

现象:同一试次里,通道 A 的峰值是 0.8,通道 B 只有 0.3,但原始信号里两块肌肉发力程度差不多。原因:各通道的 MVC 参考值差异过大,或者电极贴片位置导致信号衰减不同。解决:确认 MVC 采集时每个通道都做到了真正的最大收缩;如果无法重采,考虑用各通道自身的最大包络值做归一化,但要在报告里注明是相对激活度。

5.4 运行报错“Undefined function 'butter'”

现象:脚本跑到滤波那一步报错,提示找不到butter。原因:Matlab 没安装信号处理工具箱,或者路径没包含工具箱目录。解决:在命令行输入ver查看已安装工具箱,如果没有 Signal Processing Toolbox,可以用designfilt替代(部分版本内置),或者手动实现一个简单的 IIR 滤波。

5.5 数据加载后变量为空

现象:load命令没报错,但emg_data是空矩阵。原因:.mat文件里的变量名和脚本里用的不一致,比如文件里叫EMG,脚本里读emg_data。解决:用whos('-file', 'raw_emg_sample.mat')查看文件内实际变量名,然后统一命名。这个坑很隐蔽,因为load不会提示变量名不匹配。

6. 二次开发:换数据、改参数与扩展多通道分析

跑通示例数据只是起点,真正要用到自己的项目里,难免要改几处。这一章讲我怎么在这份代码基础上做二次开发,包括替换数据、调整归一化策略、扩展通道数和导出结果。

6.1 替换自己的数据

最直接的需求是把示例数据换成自己的 sEMG 记录。你需要准备两个.mat文件:一个存emg_data和fs,一个存mvc_ref。emg_data的维度是采样点×通道,mvc_ref是 1×通道。如果你的数据是 CSV 格式,用readmatrix读进来再save成.mat即可。注意采样率单位是 Hz,不是 kHz,写错的话滤波截止频率会差 1000 倍,曲线直接废掉。

6.2 调整归一化策略

示例代码用的是 MVC 归一化,但如果你做的是动态任务,MVC 可能不是最佳参考。我一般会准备一个可切换的归一化函数:

function activation = normalize_activation(emg_envelope, ref, method) % method: 'mvc' 或 'peak' if strcmp(method, 'mvc') ref_value = ref; elseif strcmp(method, 'peak') ref_value = max(emg_envelope, [], 1); % 各通道峰值 end activation = emg_envelope ./ (ref_value + 1e-6); end

这样你可以在主脚本里通过一个字符串参数切换归一化方式,不用改函数内部逻辑。做跨受试者比较时用'mvc',做单试次内相对分析时用'peak'。

6.3 扩展多通道与批量导出

如果你有 8 通道甚至 16 通道的数据,绘图那一步会挤成一团。我一般会把plot_activation.m改成子图布局,每个通道一个子图,共享时间轴。导出结果时,除了.mat,还可以写一个 CSV,方便导入到统计软件:

% 导出CSV time = (0:size(activation,1)-1) / fs; csvwrite('../output/activation.csv', [time' activation]);

csvwrite虽然老,但兼容性好。如果通道多,建议用writematrix并带上表头,方便后续用 pandas 或 R 读取。

6.4 一个我常犯的错误

最后说一个我自己的教训。有一次我急着出结果,替换数据后没检查fs,直接跑了主脚本。出来的激活度曲线平滑得像一条直线,我还以为是滤波参数调得好,结果对比原始信号才发现,实际采样率是 2000 Hz,我按 1000 Hz 处理,包络截止频率等效变成了 2.5 Hz,所有快速发力都被抹平了。从那以后,我每次换数据都强制走一遍disp(fs)和size(emg_data)检查,确认这两个值和我预期一致,再往下跑。希望这个习惯也能帮到你。

本文还有配套的精品资源,点击获取

相关新闻

鄱阳湖水系shp数据在ArcGIS中的处理全流程:坐标系、属性表与出图

鄱阳湖水系shp数据在ArcGIS中的处理全流程:坐标系、属性表与出图

简介&#xff1a;长江流域鄱阳湖水系的地形图矢量资料&#xff0c;以通用的shp格式提供湖泊与河流要素&#xff0c;同时包含90米分辨率数字高程模型&#xff08;DEM&#xff09;和山体阴影栅格&#xff0c;并配有ArcGIS工程文件&#xff08;mxd&#xff09;&#xff0c;可直接用…

2026/10/20 7:59:20 阅读更多 →
Python数据分析与可视化源码包实战:从数据清洗到图表输出的完整链路拆解

Python数据分析与可视化源码包实战:从数据清洗到图表输出的完整链路拆解

简介&#xff1a;这份资源面向希望系统掌握Python数据分析与可视化的学习者&#xff0c;覆盖从编程基础到实战项目的完整技能链路&#xff0c;适合高校学生、转行者及需要处理结构化数据的从业者。压缩包共162个文件&#xff0c;约31.27MB&#xff0c;以67个ipynb实验代码、11个…

2026/10/20 7:58:20 阅读更多 →
QClaw实测:基于大模型的微信数字分身从入门到避坑

QClaw实测:基于大模型的微信数字分身从入门到避坑

1. 项目概述与产品定位拆解1.1 先说清楚&#xff1a;QClaw到底是个什么东西大概几个月前我就留意到了QClaw这个项目&#xff0c;那会儿还是内测灰度阶段&#xff0c;圈子里已经有人开始传“微信里的AI分身”这个概念。这几天全面公测一开&#xff0c;群里热闹得不行。我用了一周…

2026/10/20 7:58:20 阅读更多 →

最新新闻

告别AI工具焦虑:开发者极简工作流如何让效率提升70%

告别AI工具焦虑:开发者极简工作流如何让效率提升70%

大概从某段时间开始&#xff0c;我的信息流里全是各种AI工具的安利帖。今天有人说“用了某助手效率翻倍”&#xff0c;明天有人晒“零代码搭了一个自动化流程”&#xff0c;后天又有人整理出一份几十个工具的清单。作为一个常年写代码、带项目、改文档的人&#xff0c;我一度也…

2026/10/20 8:53:26 阅读更多 →
AI论文工具测评:开题报告写作的导师严选清单

AI论文工具测评:开题报告写作的导师严选清单

每到开题季&#xff0c;研究生宿舍里总会飘着同一个问题&#xff1a;“这东西到底该怎么写&#xff1f;”到了2026年&#xff0c;这届学生的困惑已经换了个形式&#xff1a;“哪个AI论文工具能帮我写&#xff1f;”我最近受某课题组的委托&#xff0c;把市面上能接触到的AI论文…

2026/10/20 8:53:26 阅读更多 →
机器人ESD静电整改:从失效定位到接地屏蔽滤波完整实战

机器人ESD静电整改:从失效定位到接地屏蔽滤波完整实战

简介&#xff1a;EMC系列案例10聚焦机器人静电放电&#xff08;ESD&#xff09;整改&#xff0c;是一份面向EMC工程师、硬件研发人员的实战案例文档&#xff0c;涵盖早教机器人与智能人形家庭机器人的具体整改过程。文档共1个docx文件&#xff0c;压缩包约794KB&#xff0c;内容…

2026/10/20 8:53:26 阅读更多 →
采购管理系统选型实操测评:四类产品对比与避坑指南

采购管理系统选型实操测评:四类产品对比与避坑指南

这轮我用了大概三周时间&#xff0c;集中测评了一批市面上主流的采购管理系统&#xff0c;从几十人规模的创业公司聊到上千人的制造集团&#xff0c;客户、实施方、产品经理都碰过。这个时间点冒出来做采购管理系统测评&#xff0c;其实很能说明问题——很多企业过去觉得采购就…

2026/10/20 8:53:26 阅读更多 →
SpringBoot+Vue全栈实战:二手交易系统从设计到实现

SpringBoot+Vue全栈实战:二手交易系统从设计到实现

前阵子带人做项目选型&#xff0c;二手物品交易系统又成了热门选项。这个题目的好处在于&#xff1a;需求场景清晰、功能边界明确、前后端都有足够空间施展&#xff0c;而且做出来的东西确实能跑、能演示、能答辩。最近我把一套基于SpringBootVue的二手物品交易管理系统完整跑通…

2026/10/20 8:53:26 阅读更多 →
嵌入式视觉系统用户手册深度解析:ISP、DMA与NPU配置实战指南

嵌入式视觉系统用户手册深度解析:ISP、DMA与NPU配置实战指南

简介&#xff1a;本资源为Intuitive Surgical官方发布的da Vinci Xi手术机器人系统用户手册&#xff08;PDF版&#xff09;&#xff0c;面向外科医生、手术室工程师、临床设备管理员及医学工程专业人员&#xff0c;用于系统化掌握该高端手术机器人的标准操作流程、安全规范与日…

2026/10/20 8:52:25 阅读更多 →

日新闻

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/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出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/19 2:54:50 阅读更多 →
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/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练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 阅读更多 →