非侵入式负荷分解实战:FHMM模型Python实现与避坑指南
简介基于因子隐马尔可夫模型的非侵入式负荷分解资源面向智能用电、能源管理与模式识别领域的研究者与开发者旨在通过FHMM从家庭总用电数据中分离各电器负荷解决非侵入式负荷监测中的关键难题。FHMM在传统隐马尔可夫模型基础上扩展多个状态变量能够同时刻画不同电器的开关状态与功率消耗从而在混合时序中区分各电器活动。资源共26个文件以8个Python脚本、6个Jupyter notebook为载体覆盖数据预处理、特征提取、模型训练、负荷分解与结果评估等完整流程另含配置文件、示例CSV数据及说明文档压缩包仅628KB轻量易用。目前已有582人次学习浏览适合初学者快速上手也为进一步科研扩展提供了可修改的代码基础。配套目录结构清晰可直接运行实验便于对照理解FHMM在NILM中的实际应用节省从零编写算法的时间。1. 非侵入式负荷分解与FHMM一段总功率劈开五种电器的技术方案非侵入式负荷分解NILMNon-Intrusive Load Monitoring这两年又被重新翻了出来不少做智能家居和能效管理的团队都在试。核心就一句话在入户电表那一个点装监测拿到的是全家总功率不进屋、不加传感器却要把冰箱、空调、微波炉各自的用电从这一条混合曲线上一条条拆出来。拆得越准越能支撑设备级节能建议。这个压缩包把NILM里最经典的因子隐马尔可夫模型Factorial Hidden Markov Model, FHMM从理论变成了可跑的Python代码。包里不是一份PPT式的教学稿而是完整的算法实现加上测试脚本极大似然估计训练参数、维特比解码做状态推断、聚类做特征检测甚至带了一份日级用电数据用于演练。适合想快速搭一套FHMM分解原型、或者准备在学术项目里对比baseline的开发者——跑通它能让你直接理解状态转移矩阵、观测概率这些抽象概念在负荷分解里到底长什么样。2. 数据预处理与特征工程从CSV到FHMM能吃的观测序列2.1 压缩包里的文件是怎么分工的拿到压缩包之后先别急着跑模型先把文件按功能分个类。这个项目的主干是Python模块加上若干个测试脚本实话说代码组织不是那种一键pip install的工程化结构更接近研究原型。我按自己在NILM项目上的工作习惯把包里的文件归成了三组核心算法、测试驱动、数据特征理清楚之后再动代码会顺手很多。核心算法集中在disaggregate目录下fhmm_exact.py是FHMM的参数定义和计算主体maximum_likelihood_estimation.py负责用极大似然估计拟合模型参数。测试脚本fhmm_test.py和finaltest.py放的是端到端验证逻辑——读数据、训模型、做分解都串在里头。feature_detectors/cluster.py做的是特征聚类很多FHMM实现里会把这一步当成预处理子模块用于自动识别电器大概有几个功率等级。challkere_day.csv是典型的日级聚合用电数据你在研究里复现时可以把它当成基准数据集来跑通流程。graphs.py和.ipynb文件则是可视化辅助画分解效果图和调试曲线用的。2.2 原始负荷数据的清洗与重采样FHMM的训练对观测序列的规整程度非常敏感。家庭电表给的原始数据常见问题是采集间隔不均匀比如某些时刻掉点、某些时刻重复采样这些情况在日级数据里比分钟级数据少一些但仍然存在。我处理challkere_day.csv这类数据时第一步永远是先检查索引的连续性再统一时间分辨率。import pandas as pd # 读取日级用电数据假设时间列名为timestamp功率列名为power df pd.read_csv(challkere_day.csv, parse_dates[timestamp]) df df.set_index(timestamp).sort_index() # 重采样成均匀的日间隔用前向填充补缺失天 df_resampled df[power].resample(1D).ffill().dropna() # 剔除物理上不可能出现的异常值比如功率为负或超过电表上限 df_clean df_resampled[(df_resampled 0) (df_resampled 20000)] print(f清洗后样本数: {len(df_clean)}时间范围: {df_clean.index.min()} 至 {df_clean.index.max()})这段代码做的事情很直接先把时间列解析成索引并按时间排序这是后续所有序列操作的前提然后重采样到1D间隔用ffill把缺失天用前一天的值补上。注意ffill在这里是权宜之计如果连续缺失超过三天我会改成插值或者直接截断否则会给模型训练注入大量伪平稳片段让转移矩阵学习到不存在的“长持续状态”。最后过滤异常功率极值这一步在真实电表数据里几乎必做。2.3 观测序列的缩放策略先归一化再入模FHMM的观测概率通常假设为高斯分布而不同电器的功率范围差异巨大——空调动辄上千瓦路由器可能只有十瓦。直接拿原始功率进模型数值范围大的电器会主导似然计算小功率电器在维特比解码时基本被淹没。常见做法是全局缩放把所有观测值压到0到1之间让模型参数初始化更容易命中合理区域。import numpy as np # 用训练集的最大/最小值做归一化而不是全量数据 power_values df_clean.values.reshape(-1, 1) p_min, p_max power_values.min(), power_values.max() power_norm (power_values - p_min) / (p_max - p_min 1e-8) # 归一化后的序列转成模型需要的形状time_steps x 1 observations power_norm.reshape(-1, 1) print(f归一化范围: [{power_norm.min():.3f}, {power_norm.max():.3f}])这里的1e-8是防止分母为零的兜底。实践里有个血泪经验归一化的p_min和p_max必须只从训练集计算测试集直接用同一组参数变换否则会造成信息泄漏评估指标虚高。后面避坑章节我会专门说这个因为这几乎是我见过NILM复现里最普遍的错误。3. 构建并训练因子隐马尔可夫模型状态数、转移矩阵与EM收敛3.1 为什么单个HMM不够用从HMM到FHMM的动机传统HMM用一个离散状态变量来刻画整个系统的内部状态。在负荷分解里如果把这个状态理解成“家庭的整体用电模式”它确实能描述总功率的宏观波动但没法拆解“冰箱在制冷空调在待机”这种多设备组合。原因很简单一个状态变量表达不了多设备的组合空间——三台两状态电器就需要至少2的3次方等于8个联合状态单HMM硬建模会让状态含义变得不可解释。FHMM的改进思路是把隐状态从一维拆成多维每个电器对应一条独立的马尔可夫链所有链在同一时刻联合生成一个观测。这样每台电器的开关状态、功率水平都是独立建模的转移矩阵也从一张大矩阵降级为每台电器单独一张小矩阵。从训练数据的角度看FHMM的参数总量并没有比联合HMM膨胀太多但状态的语义清晰了。代码里的fhmm_exact.py实现的正是这种多个独立链的联合推断这也是它精确但计算量偏大的原因——所有隐状态的组合空间在解码时仍然要遍历。3.2 FHMM的参数结构和初始化细节FHMM的参数有三块每台电器的初始状态分布pi、状态转移矩阵A、以及观测概率的参数。观测概率在负荷分解场景里绝大多数实现都用高斯分布也就是要给每个设备的每个状态配一个均值mu和一个方差sigma。初始化直接决定了EM算法最后收敛到哪个局部最优点所以不能随手填。# fhmm_exact.py 中相关参数的初始化逻辑示意 import numpy as np num_appliances 3 # 假设同时分解3类电器 num_states 2 # 每类电器建模为2个状态关/开 # 每台电器的状态转移矩阵行和为1 transition_matrices [] for i in range(num_appliances): A_i np.array([[0.95, 0.05], [0.30, 0.70]]) transition_matrices.append(A_i) # 初始状态分布默认优先落在“关”状态 init_distributions [np.array([0.8, 0.2]) for _ in range(num_appliances)] # 观测均值初始化用聚类中心代替随机数稳定性高很多 # 这里从feature_detectors/cluster.py拿到预聚类结果后填入 means_init np.array([[50.0, 1500.0], # 电器1待机/工作 [10.0, 400.0], # 电器2待机/工作 [5.0, 120.0]]) # 电器3待机/工作初始化转移矩阵时对角线数值给大一点是合理经验——真实电器一旦开启通常会持续一段时间转移概率里“留在原状态”应该显著高于“切换状态”否则模型会把总功率的抖动当成状态切换分解结果碎得像噪音。观测均值我推荐用聚类结果初始化比随机初始化更稳。feature_detectors/cluster.py里跑的聚类本质上就是在替你做这件事找到总功率序列里几个典型的功率簇中心作为每个电器“工作”状态的均值初值。3.3 训练极大似然估计与EM迭代FHMM的训练用EM算法迭代完成。E步负责在给定当前参数和整段观测序列的条件下推断每个时刻每个隐状态的后验概率M步用这些后验概率更新转移矩阵和观测分布的均值、方差。maximum_likelihood_estimation.py里实现的正是这个迭代循环。实际跑的时候你真正需要盯的是收敛判据——它决定了你是多跑二十轮干等还是太早停掉拿了个半成品模型。# maximum_likelihood_estimation.py 的核心迭代逻辑示意 import numpy as np from scipy.special import logsumexp def em_train(observations, transition_matrices, init_distributions, means, variances, max_iter50, tol1e-4): prev_log_likelihood -np.inf for iteration in range(max_iter): # E步计算对数似然和状态后验简化示意实际需要前向-后向算法 log_likelihood compute_log_likelihood( observations, transition_matrices, init_distributions, means, variances) # M步用后验更新转移矩阵和观测参数 transition_matrices, means, variances update_parameters( observations, transition_matrices, init_distributions, means, variances) # 收敛判定相邻两轮似然增益小于阈值即停止 if log_likelihood - prev_log_likelihood tol: print(f第{iteration}轮收敛似然增益低于阈值{tol}) break prev_log_likelihood log_likelihood return transition_matrices, means, variances这里最值得盯的参数是max_iter和tol。tol设成1e-4是常规做法再小到1e-6会让训练时间翻几倍但精度提升有限max_iter也不要过大FHMM的EM迭代在真实负荷数据上通常30轮以内就能稳定超过50轮还在缓慢爬升基本说明数据或初始化有毛病而不是多跑几轮能解决的。3.4 状态数选择两状态还是多状态每台电器建模成几个状态这个问题直接决定模型的表达能力和可解释性。多数情况下每台电器两个状态就够用关、开。但冰箱是个例外——它的压缩机运行功率本身有波动实测中冰箱用三状态建模(强冷、正常、待机)的分解效果往往好于两状态。fhmm_test.py里默认配置走的是统一的num_states参数这就带来一个很实际的问题不同电器共用同一个状态数会让低功率电器被迫多分一个无意义的状态。我处理这类问题时会改成“按电器分别指定状态数”的结构化配置宁可让代码多维护一个列表也不要让冰箱和路由器共用同一个状态数。状态数选错的代价不在训练阶段而在解码阶段——多余的隐状态会把维特比路径带偏出现“空调关着但模型硬说它在制冷”这类荒唐结果。4. 负荷分解与结果评估维特比解码、误差度量与结果检验4.1 解码给定总功率序列如何判定每个电器的状态训练好FHMM参数之后分解阶段的任务是对一整段总功率观测序列推断每一时刻每个电器各自处于什么状态。这一步用维特比算法完成目标是找到一条最优的联合隐状态序列让整段观测的似然最大。由于FHMM的联合状态空间是所有电器状态的笛卡尔积精确维特比解码的计算量随电器数量和状态数指数增长——两台三状态电器就是9个联合状态五台设备直接破百这就是为什么不建议把FHMM的设备数量开到太多。fhmm_exact.py中相关方法就是做联合解码的它算的是精确解所以在小规模设备集合上很可靠。如果你要解码的设备数超过六台多考虑两种手段一是把设备按功率大小分组每次只解码一组二是牺牲精度换速度改用近似推断。做研究时先用精确解码打好基线再谈近似方案别一上来就追求大规模并行。4.2 从状态序列还原成电器功率曲线解码得到的是每条马尔可夫链在每个时刻的状态编号这一步还不是最终成果。要把它还原成每个电器的功率曲线需要把状态编号映射回观测均值。这个映射用训练好的means数组做一次查表就行但要注意如果同一电器有两个状态的均值很接近比如待机模式5瓦和关机模式0瓦这两者在分解结果里几乎没有功耗层面的区分意义评估时把它们合并计算更符合直觉。# 假设解码结果 decoded_states: shape (num_appliances, time_steps) # means: shape (num_appliances, num_states) appliance_power np.empty_like(decoded_states, dtypefloat) for app_id in range(decoded_states.shape[0]): appliance_power[app_id] means[app_id][decoded_states[app_id]] # 得到每台电器的功率序列后和总功率做个对比校验 total_power_reconstructed appliance_power.sum(axis0)4.3 评估指标别只盯着一个准确率NILM的常用评估指标有几个各自视角不同。分解结果的“开关状态”判断常用精确率、召回率和F1分数功率还原质量用平均绝对误差(MAE)和归一化信号聚合误差(SAE)评估整体分解效果用能量误差衡量。只用某一个指标会掩盖明显问题——比如模型把所有设备都预测成“关”能耗误差可能不大但F1分数会低得难看。我自己在复现这套项目时最习惯先看单台电器的MAE。MAE的单位是瓦直观反映功率曲线追得好不好。如果某台小功率电器的MAE一直居高不下先别急着调EM参数回头看训练数据里它的出现频次——在一个月的数据里冰箱可能每天跑十几次而榨汁机可能只出现两次数据量不足时的参数估计本身就不稳定。就先用频率加权对全局误差做调参依据等分解结果的波动规律稳定了再逐台算精确率和召回率。5. 避坑FHMM负荷分解常见的五个坑与排查顺序5.1 归一化参数泄漏到测试集评估虚高现象训练集误差正常测试集指标好得反常可换一段新数据就崩。原因代码里用全量数据的最大最小值做了归一化或者测试时重新拟合了缩放器让模型间接“看”到了测试集的统计量。解决归一化参数只从训练集计算测试集沿用同一组p_min、p_max并把这一步封装成独立函数防止在Notebook里重复计算时不小心混入新数据。5.2 观测方差初始化过大会导致模型退化现象EM迭代很快收敛但分解结果中所有电器的功率曲线几乎一样和随机猜测没什么区别。原因方差初值设得过大时高斯观测分布的区分度消失不同状态产生的观测似然高度重叠模型学不到状态间的功率差异。解决把方差初值设为对应状态功率均值的0.1到0.2倍量级让不同状态的分布先分开再让EM去微调。5.3 时间分辨率不匹配导致状态切换滞后现象解码出的电器“开启”时刻比实际情况晚了整整一个采样周期每天固定偏差。原因训练数据是分钟级测试数据被重采样成小时级转移矩阵里的状态持续概率不再匹配时间尺度。解决训练和测试使用完全相同的重采样间隔。日级数据就全部用日级重采样不要混用实在要混合转移矩阵要按时间间隔做幂次折算这一步在代码里专门写注释说明。5.4 持续运行的低功率电器被模型“漏掉”现象路由器、智能音箱这类全天开机的设备分解结果里长期预测为关闭状态因为它们的功率贡献在总功率里占比太小EM优化时无关紧要。原因似然函数由所有电器的贡献叠加而成小功率电器对总似然的边际影响低参数估计随机会漂移。解决训练时对低功率电器的观测误差项加一个权重系数强制模型多花拟合能力在上面或者干脆把它们从FHMM里拿掉单独作为恒定基底负荷处理反而更干净。5.5 EM迭代“假收敛”后没有复查似然曲线现象训练过程连续多次迭代似然几乎不动代码判定收敛退出换一组初值后又出现完全不同的分解结果。原因收敛判据只看了相邻两轮差值没确认Kullback-Leibler散度或参数梯度是否真正归零模型停在了鞍点或局部最优。解决把每一轮的log likelihood打印出来确认曲线是先快速上升再平缓同时跑两到三组不同随机种子对比分解结果和最终似然值——如果差异极大说明模型陷入局部最优的嫌疑很大要回头检查初始化策略。6. 进阶验证跨数据集复现时的三步检查与调参习惯模型在challkere_day.csv上跑通只是第一步我的做法是把这套代码拿到第二个不相关数据集上做复现验证检验它的泛化能力。通用流程分三步第一步检查数据口径是否一致确认两个数据集的采样间隔、功率单位、时间戳时区都对得上。第二步做基线对比用第二个数据集训练一次模型记录训练集和测试集的分解误差如果两者差距过大建议先怀疑过拟合而不是急着调参。第三步检查功耗层级用聚类工具预先探测数据集里的功率簇数量再反推FHMM的状态数设置——数据里明明只有两档功率的电器强行分成四个状态只会徒增解码噪声。这套项目本身也比较适合做合成数据验证。我一般会先用已知参数生成一段合成总功率序列比如手动设定三台电器的开关时间、状态功率和噪音幅度然后跑FHMM训练再解码看能不能还原出预设的开关状态。合成数据的优势在于答案已知可以精确判定代码逻辑通不通避免在真实数据上把“模型问题”和“数据问题”混在一起排查成本会低很多。fhmm_test.py跑完一遍之后我会再叠加一个简单的自检脚本用合成数据测试fhmm_exact.py的解码结果是否与预期状态序列完全一致。从那以后我每次拿到新的NILM数据集都强制走一遍这个流程先定时间分辨率和归一化边界再查功率簇数量最后跑合成数据自检全部通过才敢把模型当真结果引用。这套步骤替我挡掉了不少“模型看起来很好但实际不可复现”的尴尬希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Windows SDK v6.0A 安装与 VS2008 老工程编译避坑指南

Windows SDK v6.0A 安装与 VS2008 老工程编译避坑指南

简介:Microsoft Windows SDK v6.0A 是微软面向Windows平台开发者的经典工具集,主要适用于C/C、C#等语言的Win32与.NET应用程序开发,涵盖系统API接口、编译调试工具、文档示例及安装包制作组件,帮助程序员完成从编码构建到部署兼容…

2026/10/13 18:21:50 阅读更多 →
朴素贝叶斯实现垃圾邮件过滤:从贝叶斯定理到工程落地

朴素贝叶斯实现垃圾邮件过滤:从贝叶斯定理到工程落地

简介:这套基于朴素贝叶斯算法的垃圾邮件过滤系统,以 Python 编写,面向计算机、软件、数据科学、人工智能等专业的在校生或开发者,可直接用于毕业设计、课程设计或入门项目演示。系统支持选择训练集进行训练、查看分类精确度、自定…

2026/10/13 18:22:51 阅读更多 →
open-code-review:一种跨职能协同的代码审查新范式

open-code-review:一种跨职能协同的代码审查新范式

1. 这不是代码审查工具,而是一套可落地的开源协作范式“open-code-review”这个标题乍看像某个新出的 GitHub Action 或 CLI 工具,但实际翻遍主流包管理器、GitHub Trending 和技术社区讨论,根本找不到一个叫这个名字的成熟项目。它没有 READ…

2026/10/12 17:58:27 阅读更多 →

最新新闻

线上复试全流程复盘:电子信息专硕面试准备与避坑指南

线上复试全流程复盘:电子信息专硕面试准备与避坑指南

2020年的复试,对很多考研人来说都是一个特殊的节点。那年我报考了某所985高校的电子信息专硕,初试成绩出来后,一边担心复试线,一边第一次面对“线上复试”这个几乎没有先例可循的新玩法。整个复试从通知到正式进行只有不到两周的准…

2026/10/13 21:13:03 阅读更多 →
均匀分布与Wasserstein距离:40行MATLAB代码实现1D与2D计算

均匀分布与Wasserstein距离:40行MATLAB代码实现1D与2D计算

简介:这份资源是一套面向概率统计、机器学习与最优传输方向学习者的紧凑MATLAB代码,用于计算一维离散均匀概率分布之间的1-Wasserstein距离与2-Wasserstein距离。代码基于累积分布函数及其伪逆的阶跃函数表达实现,假定输入样本已按升序排列&a…

2026/10/13 21:13:03 阅读更多 →
阿里云ACP认证备考全攻略:从报名到拿证避坑指南

阿里云ACP认证备考全攻略:从报名到拿证避坑指南

进入正文。杭城某个周五晚上,我在某互联网公司做运维,群里忽然有个同事甩来一条消息:“要不要一起考个阿里云ACP?公司能报销考试费。”当时我第一反应是“考这玩意儿干啥?又不可能靠它涨工资”。后来真香了——不是因为…

2026/10/13 21:13:03 阅读更多 →
Spring Boot+Vue高校教师科研管理系统:从设计到部署全流程解析

Spring Boot+Vue高校教师科研管理系统:从设计到部署全流程解析

简介:基于 Spring Boot 与 Vue 构建的高校教师科研管理系统,是一套面向管理员、教师、学院三级用户的毕业设计源码案例,覆盖科研课题、软件著作权、论文、专利及科研成果的提交、校审与归档全流程,适合计算机相关专业学生做课设/毕…

2026/10/13 21:13:03 阅读更多 →
健身博主从零到一:定位、内容运营与变现的完整指南

健身博主从零到一:定位、内容运营与变现的完整指南

1. 健身博主从零起步的真实困境:缺的不只是内容能力这几年做博主孵化,我见过太多健身领域的内容创作者,在最初的三到六个月里就选择了放弃。他们中很多人本身练得不错,专业知识也能聊,甚至有些人已经在线下带过不少学员…

2026/10/13 21:13:03 阅读更多 →
R语言回归实战:首尔自行车需求预测与Cubist模型调优

R语言回归实战:首尔自行车需求预测与Cubist模型调优

简介:这份资源面向具备一定R语言基础、希望上手真实回归建模的数据分析学习者与从业者,围绕首尔自行车共享系统的每小时租赁需求预测展开。数据源自首尔自行车共享计划,核心目标是借助温度、时间、假期、季节等变量,预测每小时所需…

2026/10/13 21:12:02 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →