基于心电信号的睡眠呼吸暂停检测算法复现与工程实践
简介这份资源是河北大学硕士学位论文《基于心电信号的睡眠呼吸暂停综合征检测算法研究》面向生物医学工程、信号处理与人工智能方向的研究生及科研人员帮助解决传统多导睡眠仪诊断费时昂贵、基于心电信号的检测算法特征不全面或可解释性差等问题。压缩包内仅含1个PDF文件约2.56MB即论文全文涵盖摘要、绪论、算法原理、实验验证与结论等完整章节。论文提出基于单导联心电信号HRV时域、频域、非线性共17个特征的检测算法在Apnea-ECG数据库上五折交叉验证平均准确率达95.79%进一步采用判别典型相关分析融合统计学特征与卷积神经网络深层特征准确率提升至97.33%逐条记录检测准确率、敏感度、特异性均达100%。目前已有224人学习适合需要复现算法、撰写同类课题或搭建便携式SAS检测方案的读者参考。1. 从一份心电信号毕业论文说起为什么睡眠呼吸暂停检测值得死磕半夜三点你被自己的呼噜憋醒白天困得睁不开眼去医院做睡眠监测却要排队三个月、身上贴满电极睡一宿——这是睡眠呼吸暂停综合征SAHS患者的典型处境。而一份基于心电信号的检测算法毕业论文恰恰切中了这个痛点用单导联心电就能筛查呼吸暂停事件不用贴一脑袋电极也不用在睡眠实验室过夜。这份《基于心电信号的睡眠呼吸暂停综合征检测算法研究》毕业论文核心价值在于把「心电信号采集 → 预处理 → 特征提取 → 事件分类」整条链路讲透了适合做生物医学工程、信号处理方向毕业设计的学生也适合想快速复现一个可用的 SAHS 检测原型的工程师。它解决的不是发论文的问题而是让你拿到一份能跑通、能改参数、能换数据集的工程底稿。2. 心电信号里藏着呼吸信息从 ECG 到呼吸暂停的物理链路2.1 为什么心电信号能反映呼吸暂停心电信号本身记录的是心脏电活动但呼吸运动会通过三种机制调制心电波形一是电极阻抗变化导致基线漂移二是胸腔压力变化影响心脏位置和电轴三是自主神经系统对心率的调节。呼吸暂停发生时迷走神经张力升高、交感神经激活直接表现为心率变异性HRV的特定频段能量变化。论文里通常用 RR 间期序列相邻 R 波峰值的时间差作为呼吸暂停检测的核心输入因为 RR 间期同时携带了心率调节和呼吸调制的双重信息。常见做法是从单导联 ECG 中提取 RR 间期序列然后计算时域、频域和非线性特征。时域特征包括 SDNNRR 间期标准差、RMSSD相邻 RR 间期差值的均方根、pNN50相邻 RR 间期差值超过 50ms 的比例频域特征包括 LF低频功率0.04-0.15Hz、HF高频功率0.15-0.4Hz以及 LF/HF 比值非线性特征包括样本熵、近似熵、去趋势波动分析DFA的标度指数。这些特征在呼吸暂停事件前后会有显著变化分类器就是靠捕捉这些变化来判别的。2.2 论文里的算法框架拆解这份毕业论文的算法框架通常分四层第一层是信号预处理用带通滤波器0.5-40Hz去除基线漂移和工频干扰然后用 Pan-Tompkins 算法或小波变换检测 R 波峰值第二层是 RR 间期序列提取与校正剔除异常间期比如早搏导致的短间期并做插值第三层是特征提取按 30 秒或 60 秒窗口滑动计算上述特征第四层是分类器常用 SVM、随机森林或 LSTM 做二分类呼吸暂停事件 vs 正常呼吸。我一般会建议先跑通 Pan-Tompkins 的 R 波检测因为这一步的准确率直接决定后续所有特征的质量。如果 R 波漏检或误检超过 5%后面的分类器再调也白搭。论文里如果有给出 R 波检测的敏感度和阳性预测值优先看这两个指标别只看分类准确率。2.3 复现前必须确认的三个参数拿到论文后先翻到实验设置部分确认三个关键参数采样率常见 100Hz、250Hz、360Hz、窗口长度30 秒是 AASM 标准但有些论文用 60 秒、以及呼吸暂停事件的判定标准通常以胸腹运动停止 ≥10 秒为准。这三个参数决定了你复现时能不能对齐论文结果。如果论文用的是 250Hz 采样率而你手头数据是 100Hz需要先做重采样否则 RR 间期的时间分辨率不够高频特征会失真。提示如果论文没有明确写采样率看数据集来源。MIT-BIH Polysomnographic Database 是 250HzApnea-ECG Database 是 100HzPhysioNet 上都有公开下载。3. 动手复现从 ECG 数据到呼吸暂停分类的完整代码链路3.1 环境准备与数据集加载先装依赖。Python 环境下需要 wfdb读 PhysioNet 数据、neurokit2信号处理、scikit-learn分类器、numpy 和 scipy。如果你用 MATLAB论文里大概率用的是 WFDB Toolbox 加 Signal Processing Toolbox但 Python 生态更开放调试也方便。pip install wfdb neurokit2 scikit-learn numpy scipy matplotlib数据集建议用 Apnea-ECG Database70 条记录每条 8 小时左右含专家标注的呼吸暂停事件。下载后每条记录有 .dat 和 .hea 文件用 wfdb 直接读。import wfdb import numpy as np # 读取 Apnea-ECG 记录 a01 record wfdb.rdrecord(a01, pn_dirapnea-ecg) ecg_signal record.p_signal[:, 0] # 单导联 ECG fs record.fs # 采样率Apnea-ECG 是 100Hz print(f采样率: {fs}Hz, 信号长度: {len(ecg_signal)}点)这段代码做了两件事从 PhysioNet 远程加载 a01 记录提取第一导联 ECG 信号和采样率。pn_dir 参数指定数据库名称wfdb 会自动处理下载和缓存。如果你已经手动下载了数据把 pn_dir 换成本地路径即可。3.2 R 波检测与 RR 间期序列提取R 波检测是整条链路里最玄学的一步。Pan-Tompkins 在干净信号上表现很好但睡眠数据里常有体动伪迹和电极脱落漏检率会飙升。我一般用 neurokit2 的 ecg_peaks 函数它内部集成了多种检测算法还能返回信号质量指标。import neurokit2 as nk # R 波检测 signals, info nk.ecg_peaks(ecg_signal, sampling_ratefs, methodneurokit) r_peaks info[ECG_R_Peaks] # 计算 RR 间期单位秒 rr_intervals np.diff(r_peaks) / fs print(f检测到 {len(r_peaks)} 个 R 波平均 RR 间期: {np.mean(rr_intervals):.3f}s)ecg_peaks 的 method 参数可选 neurokit、pantompkins1985、hamilton2002 等。如果论文明确用了 Pan-Tompkins就选 pantompkins1985 对齐。返回的 info 字典里还有 ECG_R_Peaks 的索引位置直接用来算 RR 间期。注意 rr_intervals 的单位是秒后面算频域特征时要用到。3.3 特征提取时域、频域、非线性一起上特征提取按 60 秒窗口滑动步长 30 秒论文里常见设置。每个窗口内计算以下特征from scipy import signal as scipy_signal import antropy as ant # 需要 pip install antropy def extract_features(rr_intervals, fs4): 输入 RR 间期序列秒输出特征向量 features {} # 时域特征 features[sdnn] np.std(rr_intervals) features[rmssd] np.sqrt(np.mean(np.diff(rr_intervals)**2)) features[pnn50] np.mean(np.abs(np.diff(rr_intervals)) 0.05) # 频域特征先插值成均匀采样序列 t np.cumsum(rr_intervals) t_uniform np.arange(t[0], t[-1], 1/fs) rr_uniform np.interp(t_uniform, t[:-1], rr_intervals) freqs, psd scipy_signal.welch(rr_uniform, fsfs, npersegmin(256, len(rr_uniform))) lf_band (freqs 0.04) (freqs 0.15) hf_band (freqs 0.15) (freqs 0.4) features[lf] np.trapz(psd[lf_band], freqs[lf_band]) features[hf] np.trapz(psd[hf_band], freqs[hf_band]) features[lf_hf_ratio] features[lf] / (features[hf] 1e-6) # 非线性特征 features[sample_entropy] ant.sample_entropy(rr_intervals) return features这段代码里频域特征的计算有个关键点RR 间期序列本身是不均匀采样的必须先插值成均匀序列才能做 Welch 功率谱估计。fs4 是插值后的采样率对应 0.25 秒的时间分辨率足够覆盖 0.4Hz 以下的频段。lf_hf_ratio 加了一个极小值防止除零。样本熵用 antropy 库算比自己写快得多。3.4 分类器训练与交叉验证特征提取完后按论文的标注文件生成标签呼吸暂停事件标 1正常标 0然后用 SVM 或随机森林做分类。论文里常用留一法交叉验证LOSO因为不同受试者之间的生理差异很大随机划分会导致数据泄漏。from sklearn.svm import SVC from sklearn.preprocessing import StandardScaler from sklearn.pipeline import make_pipeline from sklearn.model_selection import LeaveOneGroupOut from sklearn.metrics import accuracy_score, f1_score # 假设 X 是特征矩阵y 是标签groups 是受试者编号 logo LeaveOneGroupOut() pipeline make_pipeline(StandardScaler(), SVC(kernelrbf, C1.0, gammascale)) accuracies, f1_scores [], [] for train_idx, test_idx in logo.split(X, y, groups): pipeline.fit(X[train_idx], y[train_idx]) y_pred pipeline.predict(X[test_idx]) accuracies.append(accuracy_score(y[test_idx], y_pred)) f1_scores.append(f1_score(y[test_idx], y_pred)) print(fLOSO 准确率: {np.mean(accuracies):.3f} ± {np.std(accuracies):.3f}) print(fLOSO F1: {np.mean(f1_scores):.3f} ± {np.std(f1_scores):.3f})LeaveOneGroupOut 按受试者分组每次留一个受试者的数据做测试其余做训练。StandardScaler 必须放在 pipeline 里否则标准化时会用到测试集的信息导致结果虚高。SVM 的 C 和 gamma 用默认值先跑通再根据论文里的参数调。如果论文用的是随机森林把 SVC 换成 RandomForestClassifier(n_estimators100) 即可。注意如果 LOSO 准确率比论文低 10% 以上先检查 R 波检测的准确率再检查特征窗口是否对齐了标注文件的时间戳。这两个地方最容易翻车。4. 避坑与排查复现论文时最容易翻车的五个地方4.1 现象R 波检测在体动段大量漏检RR 间期出现异常长间隔原因睡眠数据里体动伪迹的频段和 QRS 波群重叠Pan-Tompkins 的自适应阈值会被拉高导致后续 R 波被跳过。解决在 R 波检测前加一个信号质量评估用 neurokit2 的 ecg_quality 函数计算每个 5 秒窗口的质量指数质量低于阈值的段直接标记为无效不参与特征提取。或者用 wfdb 的 xqrs 检测器它对噪声的鲁棒性比 Pan-Tompkins 好。4.2 现象频域特征 LF/HF 比值异常高分类器把所有样本都判为呼吸暂停原因RR 间期插值时用了错误的采样率导致功率谱的频率轴偏移。比如实际插值采样率是 4Hz但 welch 函数里 fs 参数写成了 100HzLF 和 HF 的频段就完全错位了。解决插值后的采样率必须和 welch 的 fs 参数一致且要确保插值后的序列长度足够做 nperseg256 的谱估计。如果窗口内 RR 间期数量太少把 nperseg 调小到 128 或 64。4.3 现象LOSO 交叉验证准确率只有 60%但论文里写了 85%原因特征提取窗口和标注文件的时间戳没有对齐。Apnea-ECG 的标注文件里呼吸暂停事件的起止时间是以秒为单位的但 RR 间期序列的起始时间取决于第一个 R 波的位置。如果直接按索引对齐会引入几秒到几十秒的偏移。解决先把标注文件的事件时间转换成相对于记录起始的秒数再把 RR 间期序列的时间轴对齐到同一个起点用 np.searchsorted 做时间戳匹配。4.4 现象样本熵计算耗时极长跑完 70 条记录要几个小时原因antropy 的 sample_entropy 默认参数 m2, r0.2*std在长序列上计算复杂度是 O(N²)。如果每个窗口都算一次70 条记录 × 8 小时 × 每分钟一个窗口计算量爆炸。解决把样本熵的计算窗口限制在 500 个 RR 间期以内或者改用近似熵approximate_entropy速度快一个数量级。如果论文里明确用了样本熵先在小样本上验证结果一致性再决定是否换算法。4.5 现象换用自己的数据集后分类器完全失效原因不同数据集的 ECG 采集设备、滤波设置、电极位置都不同导致 RR 间期的分布偏移。论文里在 Apnea-ECG 上训练的分类器直接用到自己的数据上特征分布不匹配。解决在自己的数据上重新做标准化或者用域自适应方法比如 CORAL 对齐协方差矩阵。更简单的做法是在自己的数据上重新训练一个分类器只把论文的特征提取流程搬过来分类器参数重新调。5. 进阶技巧把论文算法变成可复用的检测工具5.1 用滑动窗口做实时检测论文里的离线分类改成实时检测核心是把 60 秒窗口改成 30 秒窗口、步长 5 秒然后用一个环形缓冲区存最近的 RR 间期。每来一个新的 R 波更新缓冲区重新算特征分类器输出当前窗口的呼吸暂停概率。如果连续三个窗口的概率超过 0.7就触发一次事件报警。from collections import deque class RealTimeApneaDetector: def __init__(self, model, window_sec30, step_sec5): self.model model self.window_sec window_sec self.step_sec step_sec self.rr_buffer deque(maxlen500) # 存最近的 RR 间期 self.last_check_time 0 def update(self, rr_interval, current_time): 每检测到一个 R 波调用一次 self.rr_buffer.append(rr_interval) if current_time - self.last_check_time self.step_sec: self.last_check_time current_time if len(self.rr_buffer) 20: # 至少 20 个间期才做判断 features extract_features(np.array(self.rr_buffer)) prob self.model.predict_proba([list(features.values())])[0][1] return prob return None这个类的设计要点rr_buffer 用 deque 限制最大长度防止内存无限增长每 step_sec 秒才做一次特征提取和分类避免每个 R 波都算一遍至少 20 个 RR 间期才做判断保证频域特征有足够的频率分辨率。实际部署时把 update 方法挂在 R 波检测的回调里就行。5.2 用 SHAP 解释分类器的决策依据论文里通常只报告准确率和 F1但临床医生更关心「为什么这个片段被判为呼吸暂停」。用 SHAP 库可以算出每个特征对单次预测的贡献值把黑匣子变成可解释的模型。import shap # 假设 model 是训练好的 SVMX_train 是训练集特征 explainer shap.KernelExplainer(model.predict_proba, X_train[:100]) shap_values explainer.shap_values(X_test[:10]) # 可视化单个样本的特征贡献 shap.force_plot(explainer.expected_value[1], shap_values[1][0], X_test[0])KernelExplainer 对 SVM 这种非树模型也适用但计算量比 TreeExplainer 大。如果分类器是随机森林或 XGBoost直接用 TreeExplainer 快得多。SHAP 值算出来后可以看哪些特征在呼吸暂停事件中贡献最大——通常 LF/HF 比值和样本熵排前两位这和生理机制一致。5.3 验证方法用 Bland-Altman 图对比算法和专家标注分类准确率只告诉你「判对了多少」但临床更关心「算法判的事件数和专家判的事件数差多少」。用 Bland-Altman 图可以直观看出两种方法的一致性横轴是两种方法事件数的均值纵轴是差值如果差值都在 ±1.96 标准差以内说明一致性可接受。import matplotlib.pyplot as plt # expert_events 和 algo_events 分别是专家和算法检测到的事件数每小时 mean_events (expert_events algo_events) / 2 diff_events algo_events - expert_events mean_diff np.mean(diff_events) std_diff np.std(diff_events) plt.scatter(mean_events, diff_events, alpha0.6) plt.axhline(mean_diff, colorblue, linestyle--, labelf均值: {mean_diff:.2f}) plt.axhline(mean_diff 1.96*std_diff, colorred, linestyle--, label1.96 SD) plt.axhline(mean_diff - 1.96*std_diff, colorred, linestyle--, label-1.96 SD) plt.xlabel(两种方法事件数均值 (次/小时)) plt.ylabel(算法 - 专家 (次/小时)) plt.legend() plt.show()如果大部分点落在 ±1.96 SD 以内且均值差接近 0说明算法和专家标注的一致性够用。如果均值差明显偏离 0说明算法有系统性偏差——要么阈值设得太松要么特征提取有偏。这个图比单纯报准确率更有说服力答辩时放一张评委基本不会再追问「你怎么证明算法有效」。从那以后我每次复现论文算法都强制走一遍「R 波检测质量评估 → 特征分布可视化 → LOSO 交叉验证 → Bland-Altman 一致性分析」这四步少一步都不敢说结果可信。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

基于心电信号的睡眠呼吸暂停检测:从QRS检测到HRV特征工程与模型实战

基于心电信号的睡眠呼吸暂停检测:从QRS检测到HRV特征工程与模型实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 3:40:46 阅读更多 →
工业机器人专业课程标准解析:学时分配与实训落地指南

工业机器人专业课程标准解析:学时分配与实训落地指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 3:40:46 阅读更多 →
Rust学习C0总目录:从所有权到综合实战的系统化学习路线

Rust学习C0总目录:从所有权到综合实战的系统化学习路线

最近整理自己的Rust学习记录时,我发现一个特别反直觉的事:学得越多,反而越不敢说自己“会Rust”。收藏夹里躺着几十篇教程和示例代码,真要动手写点什么的时候,却常常卡在最基础的问题上。更麻烦的是,很多当…

2026/10/11 3:40:46 阅读更多 →

最新新闻

3 渗透测试工具——phpstudy2018安装使用

3 渗透测试工具——phpstudy2018安装使用

目录phpstudy安装介绍注意操作结尾phpstudy安装 软件下载(新人推荐2018 版本phpstudy ) 官网下载 https://www.xp.cn/download.html 介绍 系统服务------开机自启非服务模式------开机不自启 搭建好环境, 此时服务器与客户端同时存在 服务器: phpstudy…

2026/10/11 4:32:15 阅读更多 →
JQuick-Excel 多字段 TRANSFORM:让当前行字段、JContext 与展示列各归其位

JQuick-Excel 多字段 TRANSFORM:让当前行字段、JContext 与展示列各归其位

JQuick-Excel 多字段 TRANSFORM:让当前行字段、JContext 与展示列各归其位 tags: #Java #JQuickExcel #Excel导出 #TRANSFORM #SPI 简介 Excel 导出中的字段转换,难点通常不在于把一个字符串改成大写,而在于一张报表同时有当前行字段、公共字…

2026/10/11 4:32:15 阅读更多 →
JavaScript 闭包

JavaScript 闭包

文章目录JavaScript 闭包定义三大特性用法数据私有化函数工厂防抖节流内存泄露问题场景一:长期缓存场景二:未解绑DOM事件监听场景三:未清理定时器JavaScript 闭包 定义 闭包 内部函数 持有外部函数作用域的引用 函数嵌套内层函数引用外层…

2026/10/11 4:32:15 阅读更多 →
同一辆车为什么被算几百次?我给 YOLO 加了 ByteTrack 目标跟踪

同一辆车为什么被算几百次?我给 YOLO 加了 ByteTrack 目标跟踪

项目地址: yolo-object-detection-lab:基于 FastAPI 与 Ultralytics YOLO 的图像目标检测实验项目 - AtomGit 上一篇我已经把 YOLO 从图片检测扩展到了视频检测。 当时视频检测已经可以完成: Video Upload → YOLO Detection → Video Progress → De…

2026/10/11 4:32:15 阅读更多 →
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 8 章 机器码与汇编语言 阅读笔记 8

《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 8 章 机器码与汇编语言 阅读笔记 8

《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 8 章 机器码与汇编语言 阅读笔记 8 我们已经介绍了计算机的物理部分:内存、CPU和 I/O 设备。 理解计算机的硬件部分很重要,但是硬件只起一半作用。 计算机的魔力在于软件。 软件把…

2026/10/11 4:32:15 阅读更多 →
游戏化编程学习:CodeCombat如何用即时反馈重塑编程入门体验

游戏化编程学习:CodeCombat如何用即时反馈重塑编程入门体验

编程这个事儿,一开始最吓人的不是语法,而是那种“写完代码却不知道自己到底在干嘛”的虚无感。刷题平台把知识点切成碎片,刷完几十道题,感觉自己是熟练工,但真要写一个活着的东西,立刻抓瞎。后来我接触了 C…

2026/10/11 4:31:15 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 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/10 5:23: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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/10 10:38:42 阅读更多 →