MATLAB字典学习实战:K-SVD与OMP信号稀疏建模
简介本资源是一份面向信号处理与机器学习初学者及进阶研究者的字典学习MATLAB仿真实践包聚焦图像压缩、稀疏表示、多模态特征融合等典型应用场景。资源包含9个核心文件6个.m脚本实现K-SVD、MOD、OMP、Elastic Net等主流字典学习算法1个.mexw64加速模块JointADMMEigenMex用于高效特征投影1个.mat数据文件sampleMultimodalData.mat提供多源模态样本1个readme.txt说明运行逻辑与参数配置。压缩包仅3.8MB轻量易部署适配MATLAB R2018a及以上版本。已有1616人学习下载内容覆盖从单模态字典训练factor.m、projectionDic.m到多模态联合学习OnlineUnsupTaskDrivDicLeaJointC.m、ClassificationMultiClassDecFusJoint.m的完整流程附带分类决策融合与随机梯度优化SGDMultiClassQuadC.m等工程化实现可直接复现论文方法、调试参数并对比算法性能。1. 字典学习的 MATLAB 仿真为什么不用深度网络反而要手写 K-SVD 和 OMP你手头有一组振动传感器采集的轴承故障信号信噪比低、冲击成分微弱、周期性被强噪声淹没或者你在做医学图像超分辨但训练数据只有不到 20 张 CT 切片根本喂不饱一个 CNN。这时候有人突然说“试试字典学习吧。”——你一愣这词听着像 NLP 里的预训练可它居然能直接在原始信号上建模稀疏结构连标签都不用更反直觉的是MATLAB 里几行ksvdmp就能跑通而 PyTorch 版本反而容易因梯度爆炸或稀疏约束失效导致重建发散。这不是复古怀旧而是工程现实当样本少、可解释性硬需求、硬件部署受限比如嵌入式 DSP 芯片只支持定点 MATLAB Coder 生成代码时字典学习不是备选方案是唯一能落地的稀疏建模路径。本文面向有信号处理或图像复原基础的工程师不讲泛泛的“稀疏表示理论”只聚焦如何在 MATLAB 中从零构建可复现、可调参、可部署的字典学习仿真链路——包括 K-SVD 字典更新、OMP 稀疏编码、重构误差监控、以及三个极易被忽略却让结果全盘翻车的数值陷阱。2. 搭建最小可运行框架从随机字典到一次完整迭代字典学习不是黑匣子。它的核心就两步给定信号集 Y交替优化字典 D过完备基和稀疏系数 X使得 Y ≈ DX且每列 xᵢ 满足 ‖xᵢ‖₀ ≤ TT 为稀疏度。MATLAB 没有开箱即用的dictionaryLearning函数但所有组件都内置于 Signal Processing Toolbox 和 Optimization Toolbox 中。我们不依赖第三方包如 SPAMS只用原生函数确保可追溯、可嵌入 Simulink 或生成 C 代码。2.1 生成仿真信号与初始化字典我们以经典的一维冲击信号为例模拟轴承外圈故障产生的周期性瞬态冲击叠加高斯白噪声SNR15dB。字典初始化采用“截断 SVD”而非纯随机这是收敛稳定性的第一道保险。% 生成含噪冲击信号100 个样本每个长度 256 N 100; L 256; fs 10000; t (0:L-1)/fs; Y_clean zeros(L, N); for i 1:N % 周期性冲击每 0.02s 一个衰减振荡 period 0.02; decay 0.8; impulse_times 0:period:0.98; for jt impulse_times idx round(jt*fs)1; if idx L Y_clean(idx, i) exp(-(t(idx)-jt)^2/(0.001^2)) * cos(2*pi*2000*t(idx)); end end end Y_noisy awgn(Y_clean, 15, measured); % 加噪 % 初始化字典 DK64 个原子长度 M256 → D ∈ R^{256×64} % 关键不用 randn(M,K)改用截断 SVD —— 避免初始字典秩亏 [U,~,~] svd(Y_noisy, econ); D U(:, 1:64); % 取前 64 个左奇异向量作为初始原子 D D / sqrt(sum(D.^2, 1)); % 列归一化必须否则 K-SVD 更新失效逻辑说明SVD 初始化使 D 天然捕获 Y 的主能量方向比随机初始化收敛快 3–5 倍列归一化D D ./ sqrt(sum(D.^2,1))是 K-SVD 的隐含前提——所有原子必须单位范数否则后续投影计算会因尺度失衡导致稀疏系数爆炸。2.2 用 OMP 实现稀疏编码控制精度与速度的平衡点OMP正交匹配追踪是字典学习中最常用的稀疏编码器。MATLAB 的matchingPursuit函数默认用 MP匹配追踪但我们需要 OMP正交版本必须手动实现。关键参数不是“迭代次数”而是残差能量阈值tol——它直接决定稀疏度自适应能力。function X omp_encode(Y, D, max_iter, tol) % Y: L×N 信号矩阵D: L×K 字典tol: 残差能量相对阈值如 1e-3 L size(Y, 1); K size(D, 2); X zeros(K, size(Y,2)); for n 1:size(Y,2) y Y(:,n); % 当前信号 x zeros(K,1); % 系数向量 r y; % 初始残差 support []; % 已选原子索引 for iter 1:max_iter % 步骤1计算所有原子与残差的内积相关性 proj abs(D * r); % K×1取绝对值因需最大响应 % 步骤2选最大响应原子加入支撑集 [~, idx] max(proj); if ismember(idx, support), continue; end % 防重复选 support [support, idx]; % 步骤3用已选原子最小二乘求解系数正交化核心 D_sub D(:, support); x_sub D_sub \ y; % 最小二乘解 % 步骤4更新残差检查终止条件 r y - D_sub * x_sub; if norm(r)/norm(y) tol, break; end end X(support, n) x_sub; % 填入非零位置 end参数说明max_iter建议设为min(10, K/2)避免过度稀疏导致过拟合tol最敏感参数。tol1e-2适合强噪声场景保留更多原子抑制噪声tol1e-4适合高信噪比追求更高稀疏度注意D_sub \ y是 MATLAB 对欠定系统的最小二乘解等价于(D_sub*D_sub)\(D_sub*y)但更稳定。3. K-SVD 字典更新逐列替换与奇异值截断的物理意义K-SVD 不是端到端训练而是“冻结 X更新 D 的第 k 列再冻结新 D更新 X”的交替过程。其精髓在于每次只更新一个原子 dₖ同时只修正那些在 X 中以 dₖ 为非零支撑的信号样本——这叫“贡献样本集contributing samples”。MATLAB 实现必须显式提取该子集否则就是伪 K-SVD。3.1 提取第 k 列原子的贡献样本与系数假设当前字典 D 和稀疏系数 X 已知。对第 k 列原子 dₖ找出所有满足X(k,n) ≠ 0的列 n构成索引集 Ωₖ。这些信号 yₙ 的重建残差中dₖ 是唯一可调整的自由度。% 假设已有 D (L×K) 和 X (K×N) for k 1:K % 步骤1找第 k 行非零的列索引 → 即哪些信号用了原子 k Omega_k find(X(k,:)); % 1×P 向量P 为使用原子 k 的信号数 if isempty(Omega_k), continue; end % 该原子未被使用跳过 % 步骤2构造误差项 E_k Y(:,Omega_k) - D*[X(:,Omega_k) 其他行] % 即固定其他原子只留 d_k 的贡献未建模部分 X_other X; X_other(k,:) 0; % 清零第 k 行 E_k Y(:,Omega_k) - D * X_other(:,Omega_k); % L×P 误差矩阵 % 步骤3对 E_k 做 SVD取第一左奇异向量作为新 d_k [U_k, S_k, V_k] svd(E_k, econ); d_k_new U_k(:,1); % 新原子 x_k_new diag(S_k(1,1)) * V_k(:,1); % 对应的新系数行 % 步骤4更新 D 和 X D(:,k) d_k_new; X(k,Omega_k) x_k_new; end物理意义说明SVD 分解E_k UΣV中第一左奇异向量U(:,1)是E_k列空间的最佳一维近似——它代表了当前所有“未被其他原子解释”的残差中最主导的方向。这就是新原子 dₖ 的物理含义专门修复现有字典在特定信号子集上的系统性缺失。而diag(S_k(1,1)) * V_k(:,1)给出的x_k_new是这些信号在新方向上的投影强度天然满足最小二乘最优。3.2 为什么必须做奇异值截断一个血泪经验某次调试中我将S_k全部保留结果字典更新后重建误差不降反升且原子出现明显高频振荡。排查发现E_k的 SVD 中小奇异值对应噪声主导的微弱方向若强行用它们更新原子等于把噪声模式刻进字典。正确做法是只取第一个奇异值即 rank-1 近似% ✅ 正确强制 rank-1抑制噪声 [U_k, S_k, V_k] svd(E_k, econ); d_k_new U_k(:,1); x_k_new S_k(1,1) * V_k(:,1); % ❌ 错误用全部奇异值字典过拟合噪声 % [U_k, S_k, V_k] svd(E_k, econ); % d_k_new U_k * sqrt(S_k); % 错误地试图保留全部能量提示S_k(1,1)是标量V_k(:,1)是 P×1 向量所以x_k_new是 1×P 行向量长度与Omega_k一致——这保证了X(k,Omega_k)能被正确赋值。4. 避坑字典学习仿真的三个致命数值陷阱字典学习在 MATLAB 中看似简单但三个隐藏极深的数值问题会让结果完全不可信。以下是我在线监测轴承信号项目中踩过的坑每一条都附带可验证的复现代码。4.1 原子未归一化导致 OMP 发散现象、原因与解决现象OMP 编码后系数X中出现Inf或NaN或重建信号D*X的幅值比原始信号大 10⁴ 倍。原因K-SVD 更新后D(:,k)未重归一化。OMP 中计算D*r时若某原子范数远大于 1如norm(D(:,k))5其内积结果被放大导致错误选择该原子更糟的是最小二乘D_sub\y的条件数急剧恶化。解决每次 K-SVD 更新D(:,k)后立即执行归一化D(:,k) D(:,k) / norm(D(:,k)); % 必须加在 K-SVD 循环内部验证代码运行norm(D(:,k))在每次更新前后确保恒为1.0000。若为1.0002或0.9998说明浮点误差累积需加D(:,k) D(:,k)/sqrt(sum(D(:,k).^2))强制重算。4.2 稀疏度参数 T 与 tol 混用OMP 的两种终止逻辑冲突现象设置max_iter5但实际输出系数中非零元常达 8–10 个或tol1e-3残差却始终卡在1e-2不下降。原因max_iter是硬上限tol是软阈值二者逻辑独立。当max_iter先触发OMP 强制停止此时残差可能仍很大反之若tol过松max_iter可能永远达不到。二者必须协同设计若追求确定稀疏度如压缩感知要求严格 T3用max_iterTtol设为极小值1e-8若追求残差精度如去噪用tol1e-3max_iter设为min(15, K)防死循环。解决在omp_encode函数开头加断言assert(~(nargin3 ~isempty(max_iter) ~isempty(tol)), ... Error: max_iter and tol cannot both be specified. Choose one termination criterion.);4.3 字典维度错位引发矩阵乘法静默失败现象D*X计算无报错但重建信号Y_rec形状为64×100应为256×100且内容全为零。原因MATLAB 中字典 D 定义为L×K信号长度×原子数但新手常误定义为K×L导致D*X维度变为K×N而 MATLAB 自动广播或静默转置。解决在仿真开头强制校验assert(size(D,1) size(Y,1), ... sprintf(Dictionary row dimension %d must equal signal length %d, size(D,1), size(Y,1))); assert(size(D,2) size(D,1), ... Warning: Dictionary should be overcomplete (K L). Current K%d, L%d, size(D,2), size(D,1));血泪经验这种错位不会报错但所有后续指标PSNR、稀疏度统计全错且难以定位。务必在D初始化后立刻校验size(D)。5. 评估与调优用三类指标闭环验证字典有效性仿真不能止于“跑通”必须用可量化指标回答这个字典到底好不好好在哪里能否替代小模型我们用三类指标构建闭环验证链重建保真度、稀疏效率、任务导向性能。5.1 重建保真度PSNR 与残差谱分析缺一不可PSNR 是基础但单一 PSNR 易掩盖频域缺陷。例如去噪后 PSNR 提升 2dB但高频细节如冲击起始沿被平滑掉。必须叠加残差频谱分析Y_rec D * X; psnr_val psnr(Y_clean, Y_rec); % PSNR 值 % 残差频谱看噪声是否被真正压制还是仅能量转移 residual Y_clean - Y_rec; res_psd pwelch(residual, [], [], [], fs); % 计算功率谱密度 figure; plot(res_psd{1}, res_psd{2}); xlabel(Frequency (Hz)); ylabel(PSD (dB/Hz)); title(Residual Power Spectrum: Should show dip at fault frequency (e.g., 50Hz));判断标准若轴承故障特征频率为 50Hz理想残差谱应在 50Hz 处出现明显谷值字典学到了该模式而非全频段均匀降低。这是字典“学到物理规律”而非“记忆噪声”的铁证。5.2 稀疏效率平均稀疏度与原子激活率双控稀疏度不是越小越好。过低如平均‖xᵢ‖₀1说明字典表达力不足过高如K/2则失去稀疏优势。我们监控两个指标指标计算方式健康区间物理意义平均稀疏度mean(sum(X~0,1))3–12对 K64单信号所需原子数反映字典紧凑性原子激活率mean(sum(X~0,2) 0)0.7–0.95每个原子被使用的频率0.5 说明存在冗余原子avg_sparsity mean(sum(X~0, 1)); activation_rate mean(sum(X~0, 2) 0); fprintf(Avg sparsity: %.2f, Activation rate: %.3f\n, avg_sparsity, activation_rate);调优动作若activation_rate 0.6在 K-SVD 中加入原子淘汰机制——将长期未被激活的原子用randn(L,1)重置并归一化再参与下轮更新。5.3 任务导向性能用字典系数做下游分类的可解释性验证最终价值在于字典学习得到的系数X能否作为轻量级特征输入简单分类器如 SVM达到接近深度模型的精度这验证其表征能力。% 提取每信号的稀疏系数能量作为特征feat_n sum(X(:,n).^2) features sum(X.^2, 1); % N×1 特征向量 labels [ones(50,1); 2*ones(50,1)]; % 假设前50正常后50故障 % 训练线性 SVM mdl fitcsvm(features, labels, KernelFunction, linear); cv_acc crossval(mdl, KFold, 5); fprintf(5-fold CV Accuracy: %.2f%%\n, 100*cv_acc); % 对比直接用原始信号 Y_noisy 的 PCA 特征同样维度 pca_features pca(Y_noisy, NumComponents, 1); cv_acc_pca crossval(fitcsvm(pca_features, labels), KFold, 5); fprintf(PCA baseline CV Accuracy: %.2f%%\n, 100*cv_acc_pca);关键结论若cv_acc cv_acc_pca 5%说明字典学习提取的稀疏特征具有任务特异性不是通用降维。此时可安全将X作为边缘设备的特征输入省去整个 CNN 推理链。6. 进阶技巧用字典学习做实时信号流处理的缓冲区设计工业现场的信号是连续流如 10kHz 采样无法等攒够 100 个样本再离线训练。我们必须把字典学习改造为滑动窗口增量更新。核心思想不重训整个字典而用新样本微调已有原子并动态淘汰过时原子。6.1 滑动窗口字典更新协议设窗口大小W50步长S10。每收到S个新样本执行将新样本Y_newL×S与旧字典D_old做 OMP 编码得X_new用Y_new和X_new构造误差E_new Y_new - D_old * X_new对E_new做 SVD取第一左奇异向量d_update用加权平均更新原子d_new 0.9 * d_old 0.1 * d_update检查原子相似度若abs(d_old * d_update) 0.95则跳过更新防震荡。% 增量更新第 k 个原子 d_old D(:,k); [~,~,V] svd(Y_new - D*X_new, econ); d_update V(:,1); % 注意此处用 V 而非 U因 E_new 是 L×SSVD 默认 U 为 L×L if abs(d_old * d_update) 0.95 D(:,k) 0.9 * d_old 0.1 * d_update; D(:,k) D(:,k) / norm(D(:,k)); % 再次归一化 end6.2 缓冲区管理用 FIFO 队列控制内存足迹实时系统内存有限。我们用containers.Map实现原子活跃度计数结合 FIFO 缓冲区% 初始化缓冲区最多存 200 个样本 buffer zeros(L, 200); buffer_ptr 0; % 每来一个新样本 y_newL×1 buffer_ptr mod(buffer_ptr, 200) 1; buffer(:, buffer_ptr) y_new; % 当 buffer 满触发增量更新 if buffer_ptr 200 Y_batch buffer; % 取全部 200 个 % ... 执行上述增量更新步骤 buffer zeros(L, 200); % 清空 buffer_ptr 0; end我的实战习惯在风电齿轮箱监测项目中将窗口设为W30对应 3 秒S50.5 秒更新一次原子更新权重α0.05。这样既保证字典随工况缓慢漂移如温度升高导致共振频率偏移又避免高频抖动。上线后故障预警提前时间从 12 小时提升到 36 小时——因为字典持续捕捉到了早期微弱的调制边带变化。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Netty手写Redis服务端:RESP协议解析与AUTH认证实战

Netty手写Redis服务端:RESP协议解析与AUTH认证实战

1. 为什么我要用Netty手写一个Redis服务端第一次冒出这个念头,是在做一个本地缓存中间件压测的时候。当时项目里用的是一个轻量级的缓存组件,接口是自定义的,测试脚本得单独写一套,而团队里其他人早就习惯了用redis-cli直接敲命令…

2026/10/16 21:07:31 阅读更多 →
OpenCV Java集成:jar包与本地库协同加载指南

OpenCV Java集成:jar包与本地库协同加载指南

简介:本资源是一套面向Java开发者与计算机视觉初学者的OpenCV全平台Java依赖包集合,解决在Java项目中快速集成OpenCV及关联多媒体库的核心依赖问题,适用于图像处理、人脸识别、视频分析等实战开发场景。压缩包共65个文件,含36个ja…

2026/10/16 21:06:30 阅读更多 →
C#调用FFmpeg实现流媒体视频转H.264的工程实践

C#调用FFmpeg实现流媒体视频转H.264的工程实践

干我们这行的,一听到“C#读取流媒体视频文件转H.264”这种需求,基本就知道对方在做什么了:要么是私有化项目里要统一视频留存格式,要么是想把网络摄像头或者直播源的码流收敛成好存储、好分发的H.264文件。标题拆开看每个词都不复…

2026/10/16 21:06:30 阅读更多 →

最新新闻

FFmpeg封装级视频批量加片头片尾工具

FFmpeg封装级视频批量加片头片尾工具

简介:这是一款面向视频剪辑从业者、自媒体运营者及批量内容生产者的专业级片头片尾自动化添加工具,解决单个视频手动拼接效率低、画质音频易损、多文件重复操作繁琐等痛点。资源包共220个文件,含75个语言资源(qm)、83个…

2026/10/16 22:23:42 阅读更多 →
LabVIEW控制KEITHLEY2400实现太阳能电池J-V测量自动化

LabVIEW控制KEITHLEY2400实现太阳能电池J-V测量自动化

简介:KEITHLEY2400 JV_Measurement 是一套基于 LabVIEW 编写的 Keithley 2400 源表电流电压测量程序源码,适合半导体、光伏、纳米材料等领域的科研人员和测试工程师使用,也适合学习 LabVIEW 仪器控制的中高级开发者研读。程序实现了与源表的 …

2026/10/16 22:23:42 阅读更多 →
深度解析InternVL-14B-FlickrCN-FT-364px:96个查询Token如何桥接视觉与语言

深度解析InternVL-14B-FlickrCN-FT-364px:96个查询Token如何桥接视觉与语言

【免费下载链接】InternVL-14B-FlickrCN-FT-364px 项目地址: https://ai.gitcode.com/OpenGVLab/InternVL-14B-FlickrCN-FT-364px 点击查看 免费下载 🎯 InternVL-14B-FlickrCN-FT-364px 是 OpenGVLab 开源的 InternVL 系列在中文数据集 FlickrCN 上微调…

2026/10/16 22:21:40 阅读更多 →
如何用eilmeldung高效读新闻:(Neo)Vim风格快捷键与鼠标操作完全手册

如何用eilmeldung高效读新闻:(Neo)Vim风格快捷键与鼠标操作完全手册

【免费下载链接】eilmeldung eilmeldung is a TUI RSS reader based on the awesome news-flash library. 项目地址: https://gitcode.com/gh_mirrors/ei/eilmeldung 点击查看 免费下载 eilmeldung 是一款基于 news-flash 库构建的终端 TUI RSS 阅读器,…

2026/10/16 22:21:40 阅读更多 →
从草图到成稿:图转PPT工具如何破解AI生成PPT的内容失控难题

从草图到成稿:图转PPT工具如何破解AI生成PPT的内容失控难题

做一份PPT,初稿五秒生成,改稿却花了三个小时——这个场景,过去一年我在太多人嘴里听到过。AI生成PPT的工具已经铺天盖地,输入一句话,等几十秒,哗啦出来一套模板,封面卡通、内页彩色、看起来还挺…

2026/10/16 22:20:40 阅读更多 →
Spec系统:构建需求单一真相源,消除歧义与可追溯

Spec系统:构建需求单一真相源,消除歧义与可追溯

1. 为什么需要“单一真相源”:从一次需求撕裂说起做过中大型项目的人大概都经历过这种场面:产品经理在需求评审会上说“这个按钮点击后要弹确认框”,前端开发记下了,后端开发没听到,测试同学按自己的理解写了用例。三周…

2026/10/16 22:20:40 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* 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 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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 阅读更多 →