基于Python卷积神经网络的红外图像非均匀性校正实战
简介这份毕业设计资源围绕红外图像非均匀性校正展开面向希望以深度学习完成毕设、课程设计或工程实训的初学者与进阶学习者提供一套可参考的完整实现方案。其核心思路是采用两个残差块级联的残差学习结构构建名为RNUC的红外图像非均匀性校正网络并配合合并式特征提取单元完成特征压缩与重建适合研究图像去噪、红外成像预处理的读者借鉴。资源包共8个文件以3个Python源码文件为主涵盖网络模型定义、训练主程序与工具函数另附说明文档、模型结构摘要文本及一张模型示意图整体约374KB体积轻便、结构清晰便于快速阅读与二次修改。目前已有165人学习下载读者可从中获取残差校正网络的搭建思路、训练流程组织方式与模型结构参考为同类课题的复现与改进提供直接帮助。1. 红外图像非均匀性校正为什么总在“条纹”上翻车做红外成像的同行大多有过这种体验同一场景可见光相机拍出来干干净净换成红外探测器画面上却横着几条固定不动的暗纹或亮带目标一动条纹纹丝不动。这就是红外焦平面阵列的非均匀性也叫固定图案噪声。它来自每个像元响应率的差异属于硬件层面的先天缺陷靠调曝光、换镜头都压不下去。基于 Python 卷积神经网络的红外图像非均匀性校正本质是拿数据驱动的方式去拟合这套空间上固定、时间上缓慢漂移的误差场把干净图像还原出来。它适合做毕业设计的学生也适合手上只有少量标定数据、想快速验证深度学习路线的一线工程师。相比传统两点校正CNN 路线不依赖黑体标定点数泛化空间更大但坑也更隐蔽。2. 先把非均匀性这件事讲透从两点校正到 CNN 建模2.1 非均匀性到底长什么样为什么传统方法会失效红外焦平面阵列里每个探测像元的响应曲线并不一致。理想情况下像元输出和入射辐射是线性关系但实际每个像元的增益和偏置都不同于是同一片均匀辐射打上去输出却参差不齐。这种差异在图像上表现为固定图案噪声典型形态是竖条纹、横条纹或棋盘格状的低频纹理。传统两点校正的思路很直接用高低温两个黑体分别照一次记录每个像元的响应解出增益和偏置做线性补偿。它在标定温度附近效果很好可一旦场景温度偏离标定点或者探测器工作一段时间后响应漂移残余非均匀性就冒出来了。更麻烦的是两点校正假设响应是线性的而实际探测器在动态范围两端往往非线性这时候线性补偿反而会引入新的误差。我一般会把非均匀性拆成两部分看一部分是空间上高频的像元间差异另一部分是随时间和温度缓慢变化的低频漂移。传统方法擅长处理前者对后者力不从心。CNN 的价值就在于它能同时建模这两类成分尤其是把漂移当成一个可学习的残差场。2.2 为什么选 CNN 而不是传统滤波或稀疏表示有人会问中值滤波、小波去噪不也能压条纹吗能压一部分但它们本质是平滑容易把真实边缘一起抹掉。稀疏表示方法需要构造过完备字典调参成本高而且对训练集外的场景泛化一般。CNN 的优势在于端到端。你给它含噪红外图它直接输出校正后的图中间不需要显式估计增益和偏置。卷积核天然适合捕捉空间上局部相关的条纹模式深层网络又能建模全局的低频漂移。更重要的是一旦训练好推理阶段不需要黑体单帧就能跑这对实际部署很关键。选型上毕业设计不建议一上来就堆很深的网络。我见过太多人直接搬 ResNet结果数据量不够训到一半就过拟合验证集条纹没去掉反而把细节糊没了。常见做法是用一个轻量级的编码解码结构或者带残差连接的浅层 CNN参数量控制在几十万到百万级别先跑通再加深。2.3 数据从哪来仿真退化与真实标定两条路做这个方向数据是第一个拦路虎。真实红外图像带非均匀性的同时你很难拿到同一场景的“干净真值”。常见做法有两条。第一条是仿真退化。拿一批干净的红外图像可以是公开数据集里质量较好的或者用可见光图转灰度模拟人为叠加非均匀性噪声。叠加模型通常写成import numpy as np def add_nuc_noise(clean_img, gain_range(0.9, 1.1), offset_range(-0.05, 0.05), stripe_ratio0.3): 给干净红外图像叠加非均匀性噪声 clean_img: 归一化到[0,1]的二维数组 gain_range: 每个像元的增益扰动范围 offset_range: 每个像元的偏置扰动范围 stripe_ratio: 条纹方向比例0.3表示约30%像元参与列条纹 h, w clean_img.shape # 逐像元增益和偏置模拟固定图案噪声 gain np.random.uniform(gain_range[0], gain_range[1], size(h, w)) offset np.random.uniform(offset_range[0], offset_range[1], size(h, w)) noisy clean_img * gain offset # 额外叠加列条纹模拟读出电路引起的竖向非均匀性 col_mask np.random.rand(w) stripe_ratio col_bias np.random.uniform(-0.03, 0.03, sizew) noisy[:, col_mask] col_bias[col_mask] return np.clip(noisy, 0, 1), gain, offset这段代码的逻辑是先给每个像元独立采样增益和偏置模拟最基础的响应差异再按列叠加一个偏置模拟读出通道带来的条纹。参数上gain_range和offset_range控制噪声强度做毕业设计时建议从窄范围开始比如增益 0.95 到 1.05训稳了再加大。stripe_ratio控制条纹密度太高会让网络学成单纯的去条纹滤波器泛化变差。第二条是真实标定。用黑体做多点标定得到每个温度点的响应再拟合出干净参考。这条路更贴近实际但设备门槛高数据量往往有限。折中方案是真实数据做验证仿真数据做训练两者结合。2.4 一个能跑通的最小网络结构下面这个结构是我在多个小数据集上验证过的参数量约 40 万单卡就能训。它借鉴了残差学习的思想网络不直接预测干净图而是预测非均匀性噪声再用输入减去噪声。import torch import torch.nn as nn class NUCNet(nn.Module): def __init__(self, base_channels32): super().__init__() # 编码三层卷积逐步提取局部条纹特征 self.encoder nn.Sequential( nn.Conv2d(1, base_channels, 3, padding1), nn.ReLU(inplaceTrue), nn.Conv2d(base_channels, base_channels * 2, 3, padding1, stride2), nn.ReLU(inplaceTrue), nn.Conv2d(base_channels * 2, base_channels * 2, 3, padding1), nn.ReLU(inplaceTrue), ) # 解码上采样回原尺寸输出单通道噪声估计 self.decoder nn.Sequential( nn.ConvTranspose2d(base_channels * 2, base_channels, 4, stride2, padding1), nn.ReLU(inplaceTrue), nn.Conv2d(base_channels, 1, 3, padding1), ) def forward(self, x): feat self.encoder(x) noise self.decoder(feat) # 残差学习输入减去预测噪声 return x - noise编码器用 stride2 降采样一次目的是扩大感受野让网络看到更大范围的条纹趋势同时降低计算量。解码器用转置卷积恢复分辨率。最后输出的是校正结果而不是噪声本身这样损失函数可以直接在图像域计算训练更稳定。参数上base_channels是最关键的旋钮。设 16 适合数据量很小的场景设 64 会明显增加过拟合风险。我一般从 32 起步看验证集损失再调。损失函数建议 L1 和 SSIM 加权组合纯 L1 容易让结果偏平滑加一点结构相似性约束能保住边缘。3. 训练流程与参数设置把条纹压下去的同时保住细节3.1 数据预处理与配对样本构造训练前要把数据整理成输入输出对。输入是含非均匀性的图输出是干净参考图。仿真路线天然有配对真实路线需要先做标定对齐。预处理有几个固定动作。第一归一化到 [0,1]别用 ImageNet 的均值方差红外图和自然图像分布差太远。第二如果原始数据是 14bit 或 16bit先做线性拉伸把有效动态范围映射到 8bit 再归一化否则网络会被大量无效高位数据干扰。第三切块训练把大图裁成 128×128 或 256×256 的 patch既能扩增样本又能控制显存。from torch.utils.data import Dataset import numpy as np class NUCDataset(Dataset): def __init__(self, clean_list, patch_size128, noise_fnNone): self.clean_list clean_list self.patch_size patch_size self.noise_fn noise_fn def __len__(self): return len(self.clean_list) def __getitem__(self, idx): clean self.clean_list[idx] h, w clean.shape # 随机裁剪 top np.random.randint(0, h - self.patch_size) left np.random.randint(0, w - self.patch_size) clean_patch clean[top:topself.patch_size, left:leftself.patch_size] # 在线加噪每个epoch看到的噪声都不同相当于数据增强 noisy_patch, _, _ self.noise_fn(clean_patch) return noisy_patch[None, :, :].astype(np.float32), clean_patch[None, :, :].astype(np.float32)在线加噪是个实用技巧。同一个干净 patch每个 epoch 叠加不同的随机噪声等于免费扩增了数据多样性能显著缓解过拟合。patch_size建议不小于 128太小的话网络看不到完整的条纹周期学出来的校正场会碎片化。3.2 损失函数与优化器参数怎么定损失函数我一般用 L1 为主SSIM 为辅import torch.nn.functional as F def nuc_loss(pred, target, ssim_weight0.2): l1 F.l1_loss(pred, target) # 简化版结构相似性用局部均值方差近似 mu_pred F.avg_pool2d(pred, 7, stride1, padding3) mu_target F.avg_pool2d(target, 7, stride1, padding3) var_pred F.avg_pool2d(pred ** 2, 7, stride1, padding3) - mu_pred ** 2 var_target F.avg_pool2d(target ** 2, 7, stride1, padding3) - mu_target ** 2 cov F.avg_pool2d(pred * target, 7, stride1, padding3) - mu_pred * mu_target c1, c2 0.01 ** 2, 0.03 ** 2 ssim ((2 * mu_pred * mu_target c1) * (2 * cov c2)) / \ ((mu_pred ** 2 mu_target ** 2 c1) * (var_pred var_target c2)) return l1 ssim_weight * (1 - ssim.mean())L1 负责把整体亮度拉回来SSIM 项负责保住结构。ssim_weight设 0.2 左右比较稳设太高会让网络过度追求结构相似反而在平坦区域留下残余条纹。优化器用 Adam学习率 1e-3 起步配合余弦退火。batch size 在显存允许下尽量大16 或 32 都行。训练轮数不用太多仿真数据一般 50 到 100 个 epoch 就收敛真实数据因为样本少可能需要 200 轮以上但要盯着验证集一旦 SSIM 不再涨就停。3.3 训练中怎么判断“校正过头”了这是最容易翻车的地方。非均匀性校正的目标是去条纹不是去所有高频信息。如果网络训过头会把真实边缘、小目标一起当成噪声抹掉画面看着干净实际信息丢了。判断方法有两个。一是看残差图把输入减去输出如果残差里能看到明显的目标轮廓说明网络把目标也当噪声了。二是看指标PSNR 涨但 SSIM 掉往往就是过度平滑的信号。我一般会在验证集上同时记录这两个指标SSIM 优先。另一个实用手段是加一个恒等映射的弱约束让网络在没把握的地方少改。具体做法是在损失里加一项惩罚输出和输入的过大差异def nuc_loss_with_identity(pred, target, inp, identity_weight0.05): base nuc_loss(pred, target) identity F.l1_loss(pred, inp) return base identity_weight * identityidentity_weight不能大0.05 到 0.1 之间作用是给网络一个“别乱改”的提醒不是让它直接复制输入。4. 避坑与排查那些让毕业设计卡住的真实问题4.1 训练损失降了但验证集条纹还在现象训练集 L1 降到很低验证集输出依然能看到明显竖条纹。原因仿真噪声和真实噪声分布不匹配。仿真用的是均匀随机增益真实探测器的非均匀性往往有空间相关性比如按列或按读出通道成组出现。网络在仿真分布上学到的校正场迁移到真实数据就失效。解决在仿真加噪时引入空间相关性。简单做法是对增益和偏置图做一次高斯模糊让相邻像元的噪声相关。或者用真实数据做微调哪怕只有几十对也能把分布拉近。4.2 输出出现网格状伪影现象校正后的图上有规律的棋盘格或网格纹理。原因转置卷积的棋盘效应。解码器用 stride2 的转置卷积时卷积核重叠不均匀会在输出上留下周期性伪影。解决把转置卷积换成最近邻上采样加普通卷积或者用双线性上采样。改动很小效果立竿见影。另一个办法是解码器最后加一层 3×3 卷积做平滑但会轻微损失细节。4.3 显存不够batch size 只能设很小现象想用 256×256 的 patch但显存只够 batch size 2训练极不稳定。原因红外图虽然单通道但 patch 一大中间特征图占用就上去了。解决用梯度累积。把 batch size 设小累积几次梯度再更新一次等效于大 batch。另外可以开混合精度训练显存能省近一半速度也快。PyTorch 里几行就能加上。4.4 真实数据没有干净真值指标没法算现象只有含噪红外图没有对应的干净参考PSNR、SSIM 都算不了。原因真实场景下干净真值本来就难获取这是这个方向的固有难点。解决用无参考指标比如粗糙度、条纹强度指标。简单做法是计算图像行均值或列均值的方差非均匀性越强这个方差越大。校正前后对比这个值能定量看出去条纹效果。另外可以请有经验的同行做主观打分毕业设计里作为辅助验证是够的。4.5 换一个场景就失效现象在室内数据集上训得很好拿到室外场景条纹又出来了。原因网络学到了训练场景的特定分布泛化不足。解决训练时做更强的数据增强除了加噪还可以加随机亮度、对比度扰动模拟不同场景的辐射差异。另外网络输入可以不止单帧把相邻几帧叠起来做输入让网络利用时间信息区分固定条纹和运动目标这也是常见做法。5. 进阶技巧用时间维度和轻量化把方案做实前面讲的都是单帧校正。单帧有个天然局限它分不清固定条纹和真实的高频结构。如果场景里恰好有一条和条纹方向一致的细线目标单帧网络很可能把它一起抹掉。要突破这个瓶颈得引入时间维度。一个实用思路是拿连续多帧做输入。固定图案噪声在时间上是稳定的而场景内容在变。把 3 到 5 帧叠成多通道输入网络就能学会“哪些成分是不随时间变的”从而更准地分离出非均匀性。实现上只需把第一层卷积的输入通道从 1 改成 N数据加载时按时间顺序取帧即可。代价是显存和计算量增加但换来的是对运动场景的鲁棒性。class NUCNetTemporal(nn.Module): def __init__(self, in_frames3, base_channels32): super().__init__() self.encoder nn.Sequential( nn.Conv2d(in_frames, base_channels, 3, padding1), nn.ReLU(inplaceTrue), nn.Conv2d(base_channels, base_channels * 2, 3, padding1, stride2), nn.ReLU(inplaceTrue), nn.Conv2d(base_channels * 2, base_channels * 2, 3, padding1), nn.ReLU(inplaceTrue), ) self.decoder nn.Sequential( nn.Upsample(scale_factor2, modebilinear, align_cornersFalse), nn.Conv2d(base_channels * 2, base_channels, 3, padding1), nn.ReLU(inplaceTrue), nn.Conv2d(base_channels, 1, 3, padding1), ) def forward(self, x): # x: [B, in_frames, H, W] feat self.encoder(x) noise self.decoder(feat) # 用最后一帧作为参考输出 return x[:, -1:, :, :] - noise这里解码器换成了双线性上采样加卷积避开了转置卷积的棋盘效应。输入是多帧输出对齐到最后一帧。训练时要注意帧间对齐如果场景有运动最好先做简单的配准否则网络会把运动当成噪声。另一个进阶方向是轻量化部署。毕业设计如果只停在训练脚本说服力有限。把模型导出成 ONNX再用 ONNX Runtime 跑推理能直观看到单帧耗时。我实测过一个 40 万参数的小网络在普通 CPU 上处理 640×512 的红外图单帧大约几十毫秒做到实时还有距离但离线批处理完全够用。量化到 INT8 还能再快一截代价是精度略降需要重新校准。验证方法上除了前面说的无参考指标我习惯做一个消融对比同一批测试图分别跑两点校正、中值滤波和训练好的 CNN把结果并排看。重点看三个地方——平坦区域的残余条纹、边缘的锐度、小目标的完整性。很多时候 CNN 在指标上只领先一点但主观质量明显更好这个对比能帮你在答辩时把价值讲清楚。最后说个我自己的教训。早期做这个方向时我迷信“网络越深越好”堆了一个二十多层的结构训练集损失漂亮得不行结果拿到真实数据上条纹没去掉反而多了一圈振铃。后来老老实实退回浅层残差结构把精力花在数据配对和损失设计上效果反而稳了。红外非均匀性校正这件事数据质量和对噪声的建模假设比网络深度重要得多。先把最小可复现的版本跑通再谈加深加宽这个顺序别反。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

MATLAB水果识别系统:HSV特征+SVM分类+GUI工程实践

MATLAB水果识别系统:HSV特征+SVM分类+GUI工程实践

简介:本资源是一套基于MATLAB实现的水果图像识别完整项目,面向图像处理初学者、计算机视觉入门者及高校课程设计学生,解决水果类别自动判别这一典型分类任务。项目涵盖图像预处理(灰度化、二值化)、多维特征提取&#…

2026/10/18 22:26:39 阅读更多 →
LSTM城市人口预测:应对政策突变与黑天鹅事件的实战指南

LSTM城市人口预测:应对政策突变与黑天鹅事件的实战指南

简介:本资源是一套基于MATLAB实现的LSTM城市人口时间序列预测完整方案,面向本科及以上层次的数据科学学习者、人工智能初学者及城市规划相关专业研究者,解决传统神经网络在长周期人口趋势建模中捕捉时序依赖性不足的问题。压缩包共38个文件&a…

2026/10/18 22:26:39 阅读更多 →
本地大模型部署:Ollama安装与WebUI-Lite网页界面配置避坑指南

本地大模型部署:Ollama安装与WebUI-Lite网页界面配置避坑指南

简介:这是一份面向需要快速搭建OLLAMA图形化管理界面的开发者与机器学习爱好者的安装资源包。内容围绕ollama-webui-lite的本地部署,涵盖npm镜像配置、Git克隆、依赖安装及开发服务器启动等完整环节,并整理了Svelte、Tailwind CSS、TypeScrip…

2026/10/18 22:25:39 阅读更多 →

最新新闻

AI协同开发STM32实战:从需求拆解到调试验证的完整流程

AI协同开发STM32实战:从需求拆解到调试验证的完整流程

/* 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 1:50:23 阅读更多 →
AI-native芯片设计:稀缺能力不是算力,而是数据、验证与三栖型判断力

AI-native芯片设计:稀缺能力不是算力,而是数据、验证与三栖型判断力

/* 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 1:50:23 阅读更多 →
硬件开发入门十讲:从原理图到量产的全流程工程思维

硬件开发入门十讲:从原理图到量产的全流程工程思维

/* 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 1:50:23 阅读更多 →
CH592蓝牙MCU深度解析:RISC-V内核、外设资源与低功耗设计实战

CH592蓝牙MCU深度解析:RISC-V内核、外设资源与低功耗设计实战

/* 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 1:50:23 阅读更多 →
Folia 音乐播放器上手指南:全屏歌词动画、三种曲库接入,一个应用全搞定

Folia 音乐播放器上手指南:全屏歌词动画、三种曲库接入,一个应用全搞定

Folia 音乐播放器上手指南:全屏歌词动画、三种曲库接入,一个应用全搞定 【免费下载链接】folia-major 专注于绚丽的歌词动画效果的本地音乐/navidrome/第三方多平台在线音乐播放器 项目地址: https://gitcode.com/GitHub_Trending/fo/folia-major …

2026/10/19 1:50:23 阅读更多 →
水果图像8分类数据集:从数据到ResNet迁移学习实战

水果图像8分类数据集:从数据到ResNet迁移学习实战

简介:面向深度学习图像识别初学者与快速验证分类模型的开发者,这是一套开箱即用的水果图像分类数据集,覆盖苹果、香蕉、樱桃、火龙果、芒果、橘子、菠萝、木瓜共8个常见类别。数据已按训练集2220张、测试集550张划分,并分别置于da…

2026/10/19 1:49:23 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 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 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于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/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 12:16:16 阅读更多 →