自一致性图像拼接检测:深度学习如何识破伪造区域
最近我又被拉去当“图片裁判”群里发来一张看似平平无奇的街道照片有人说旁边那辆车是修图修上去的。以前遇到这种事我得放大看边缘、比对噪点、翻图层折腾半天还不敢下结论。后来我把图像拼接检测做成一个深度模型输入一张图直接输出篡改区域的热力图省了很多口舌。图像拼接检测简单说就是识别一张图像里是否存在从其他图像剪切粘贴过来的区域。它和复制粘贴检测还不一样拼接的素材来自另一张图没有同图里可匹配的克隆块只能靠“这块内容跟周围环境是不是一家人”来判断。这个方向里2018年有一篇让我印象很深的工作题目直译是“对抗假新闻通过学习自一致性检测图像拼接”核心就是让网络判断图像的每个局部与整体是否自洽。这个方法的价值在于它不再死磕JPEG重压缩、CFA插值这类具体伪造痕迹而是让网络自己学习什么叫“同一幅图的一部分”。这篇文章我会从思路拆解、网络设计、数据合成、训练复现讲到踩坑实录。如果你在做AI数字取证、图像安全或者正准备复现一篇计算机视觉方向的论文这篇内容可以当成一份可执行的参考笔记。1. 项目概述先搞清楚“拼接检测”在打什么怪1.1 拼接不等于复制粘贴很多人刚接触图像篡改时会把拼接检测和复制粘贴检测混在一起其实两个任务差别挺大。复制粘贴是同一个图里的区域搬来搬去检测时可以找相似块通过块匹配和特征比对就能拿到高度可疑的重复区域。拼接则是把图像A的一块抠下来贴到图像B上来源完全不同你在图B内部找不到另一个相同的块也没有办法用“找重复”的思路去解决。这就带来一个本质困难伪造者可以把拼接区域做得非常自然边缘处理得很干净甚至重新采样、调色、加噪让肉眼和人造的统计特征都看不出异常。传统算法一旦遇上这种“加工过”的拼接很容易失效。所以拼接检测需要寻找更底层、更难被抹掉的线索。那什么是难被抹掉的线索在我看来就是“不自然的自洽性缺失”。一张自然照片在光照方向、纹理颗粒、残差噪声、色彩分布上是连续平滑的哪怕两个不同物体语义不同它们由同一个成像系统拍出来底层统计也有一致性。拼接区域来自另一张图相当于强行插入了外来信号这种不一致会藏在各种统计量里只是藏得深浅而已。1.2 自一致性是一套“内审”逻辑自一致性这个说法听起来玄其实可以用一个生活场景解释。一个班里突然来了个外校学生你不需要知道外校学生的校服长什么样只要观察他和班里其他学生在口音、习惯、活动范围上的差别就会发现他“不合群”。图像自一致性也是这个思路图像里的每个局部都应该和其他局部保持某种统计上的一致性。如果有人从外面搬了一块内容进来它在和其他区域比较时就会“对不上”。2018年那篇工作把这个直觉放进了网络模型先提取每个位置的特征描述再让每个位置的描述符和图像全局描述符做比较生成一张自一致性得分图。得分越低的地方越可能属于拼接区域。这种设计有个很明显的好处它不是在认“树”“人”“汽车”这些语义而是在认“这个像素和整张图是否同源”。1.3 谁适合复现这个方向如果你正在做AI安全和内容风控相关研究或者想理解“图像内部统计一致性”怎么用深度学习建模这个项目值得上手。复现门槛属于中等偏上网络结构本身不算复杂真正卡人的地方是数据构造和训练细节。我是先把合成数据管线跑通才敢回头调网络结构否则模型再花哨也没有用。2. 核心思路与设计选择为什么是“自一致性”2.1 手工取证特征为什么越来越不灵早期图像取证主要靠手工特征。比如JPEG质量差异、噪声残差、CFA插值模式、色差边缘这些都是“有什么痕迹就找什么”的思路。这类方法在十年前很有用因为当时的修图工具会留下明显指纹。可现在已经变了AI修图、双线性重采样、类似压缩擦除的工具能把大部分痕迹抹掉单一手工特征很容易被反制。还有一个麻烦是特征之间的组合很繁琐。有些图没有噪声差异有些图没有JPEG痕迹你得先判断用哪套特征再设置阈值工程上非常脆弱。深度CNN能把这套流程统一起来但它也有自己的风险如果单纯用一个分类网络预测篡改区域网络很可能会学到“看到天空就是底图看到汽车就是拼接”因为训练数据里物体分布不均衡最终变成一个语义分割器而不是取证工具。2.2 学习式一致性不预设伪造方式这篇工作用“自一致性”来绕开上面的坑。它不直接学习“拼接区域长什么样”而是学习“一个局部和全局之间的一致程度怎么度量”。这个思路可以理解为把特征提取、距离度量、判定阈值全部丢给网络端到端训练。传统“全局一致性”也有人做过把图像分成若干块手工提取颜色、纹理、噪声特征算块与块之间的相似度再用聚类把离群块标出来。学习式自一致性的区别在于特征是通过任务自己学出来的。网络会在训练过程中发现最有效的“一致特征”可能不是颜色也不是噪声而是一种高维组合信号这比人手工设计的特征更灵活也更能对付未知处理方式。2.3 多尺度是真正拉开差距的地方拼接区域的大小差别很大。小的可能只有几十个像素大的能占半张画面。如果只在单一尺度上做一致性判断小区域容易被下采样抹掉大区域又可能因为局部上下文太窄而看不全周围关系。所以当时的方案用了多尺度输入同一张图缩放成几个分辨率分别过网络再把生成的一致性得分图拉回原图尺寸融合。我在复现时明显感觉到多尺度带来的收益。单尺度模型对128像素以下的小拼接块召回率很低换成三尺度输入之后小目标的检测分数明显提升。原因也好理解小拼接块在原始尺度上还有纹理细节网络有机会抓到它与邻居的差异而大拼接块在缩小尺度上能更高效地看到全局关系不容易被局部误导。3. 核心网络模块与数据构造纸上得来终觉浅3.1 网络结构的理解与简化实现我没有把原始网络结构一成不变地搬下来而是先画成一个通用框架骨干特征提取网络 - 局部描述子投影 - 全局一致性比较 - 掩膜预测头。局部描述子投影相当于给特征图上每个位置生成一个“身份编码”。这个编码要能够表达局部区域的纹理、噪声和语义背景一致性比较负责拿当前位置的身份编码和全局身份总结比对。最朴素的实现方式是用全局平均池化得到一个全局向量然后把它和每个位置的局部向量拼接起来再通过卷积判断是否吻合。原始论文里比较过程会更精细但对复现来说这个简化版本已经能跑出不错的效果。下面是简化版的示意代码方便理解核心流程import torch import torch.nn as nn import torch.nn.functional as F class SelfConsistencyModule(nn.Module): def __init__(self, in_dim, hidden_dim128): super().__init__() self.local_encoder nn.Sequential( nn.Conv2d(in_dim, hidden_dim, 1), nn.ReLU(inplaceTrue), nn.Conv2d(hidden_dim, hidden_dim, 1), ) self.comparator nn.Sequential( nn.Conv2d(hidden_dim * 2, hidden_dim, 1), nn.ReLU(inplaceTrue), nn.Conv2d(hidden_dim, 1, 1), ) def forward(self, feature): local self.local_encoder(feature) # B,C,H,W global_desc local.mean(dim(2, 3), keepdimTrue) # B,C,1,1 global_desc global_desc.expand_as(local) fused torch.cat([local, global_desc], dim1) score torch.sigmoid(self.comparator(fused)) return score这段代码的关键在global_desc的构造。我一开始用它做实验发现当拼接区域占画面很大比例时全局特征会被篡改区域“污染”导致误检。后来改成区域池化取图像上半部分和下半部分各算一个全局描述再分别比较效果稳了不少。你在复现时不要盲目抄这个代码最好根据你的任务特点调整全局描述符的聚合方式。3.2 合成数据的每个环节都是超参数这个项目最大的工程难点不是网络而是合成拼接数据。真实世界有标注的拼接数据集太少而且样本量撑不起深度学习训练通常只能自己合成。合成流程我总结成五步随机选一张底图再随机选一张素材图。在素材图上随机切一个区域区域形状可以是矩形但更推荐随机多边形或不规则选区。把切下来的区域贴到底图的随机位置保证不与底图来源重复。对拼接边界做羽化或者用泊松融合做颜色混合。全图随机做后处理JPEG压缩、缩放、加高斯噪声、亮度抖动、对比度抖动。每一步都有讲究。比如区域形状用随机多边形能让模型学会处理不规则边界而不是只盯着矩形缝。JPEG质量因子我一般随机取50到95因为过低会让整张图产生统一块效应反而消掉拼接痕迹过高又让伪造痕迹太明显。实际操作里我会把后处理组合当成一个随机策略每个batch都不同让网络适应“任何处理程度”。3.3 掩膜标注的软化与加权合成时生成的ground truth是一张二值mask拼接区域为1其余为0。但这个硬标签有个问题拼接边界在做羽化和泊松融合之后真实边界可能向外扩散或向内收缩了2到3个像素。如果强行用硬标签监督网络会把大量精力花在拟合那条已经被融合算法弄模糊的边缘上反而忽略大范围的一致性判断。我的做法是先把mask做一次腐蚀和一次膨胀得到边界带然后在损失函数里把边界带的权重降到正常区域的0.2。这样做等于告诉网络你把大块区域判对就行边缘附近不用太较真。实际效果是收敛速度更快最终预测的掩膜也不会出现那种“边缘亮中间暗”的撕裂感。4. 复现实操从零搭一个简易版4.1 环境和工程文件组织我用的环境是Python 3.10、PyTorch 2.x显卡至少需要12G以上显存。工程目录我习惯分成四块configs/ # 训练参数配置文件 dataset/ # 数据生成和采样逻辑 models/ # 网络结构定义 utils/ # 评估指标、可视化、后处理工具不建议把数据生成代码和训练代码堆在同一个脚本里。合成数据这个模块会经常改单独拎出来能让你调起来更顺手。4.2 合成数据管线示例下面是我常用的一段拼接样本生成逻辑代码做了简化重点展示坐标和mask的正确性import cv2 import numpy as np def random_splice(base_img, source_img, max_region0.3): h, w base_img.shape[:2] rh int(h * np.random.uniform(0.1, max_region)) rw int(w * np.random.uniform(0.1, max_region)) x1 np.random.randint(0, w - rw) y1 np.random.randint(0, h - rh) sx1 np.random.randint(0, source_img.shape[1] - rw) sy1 np.random.randint(0, source_img.shape[0] - rh) mask np.zeros((h, w), dtypenp.uint8) mask[y1:y1rh, x1:x1rw] 255 roi source_img[sy1:sy1rh, sx1:sx1rw] composite base_img.copy() blend_ratio np.random.uniform(0.6, 1.0) composite[y1:y1rh, x1:x1rw] cv2.addWeighted( base_img[y1:y1rh, x1:x1rw], 1 - blend_ratio, roi, blend_ratio, 0 ) # 随机后处理 if np.random.rand() 0.8: quality np.random.randint(50, 95) encode_param [int(cv2.IMWRITE_JPEG_QUALITY), quality] _, enc cv2.imencode(.jpg, composite, encode_param) composite cv2.imdecode(enc, 1) if np.random.rand() 0.3: composite cv2.GaussianBlur(composite, (3, 3), 0) return composite, mask这段代码我特别想提醒一个坑roi的区域尺寸必须和目标区域尺寸完全一致否则cv2.addWeighted会直接报错。很多人第一次跑数据管线时卡住大多数都是矩形坐标加一减一引起的尺寸对不齐。如果用了随机多边形还要用cv2.fillPoly生成mask同样注意坐标类型。4.3 模型与训练循环模型我用了一个预训练分类网络作为骨干只取倒数第二层和倒数第三层的特征图再接自一致性模块。这样做的好处是预训练权重能提供稳定梯度不用从零开始学底层纹理。训练拐点出现得很快差不多两三个epoch就能看到mask雏形。训练循环里我额外做了一件事对全局描述符添加轻量的梯度反转。这也是从复现里得到的教训网络如果太依赖全局平均特征会变得保守对大片区域输出很平均的分数。梯度反转能逼着局部特征去发现和全局不一致的地方而不是躺平。optimizer torch.optim.Adam(model.parameters(), lr1e-4) criterion nn.BCEWithLogitsLoss() for step, (img, mask) in enumerate(train_loader): img img.cuda() mask mask.cuda().float() pred model(img) # 输出概率图尺寸与mask一致 loss criterion(pred, mask) optimizer.zero_grad() loss.backward() optimizer.step() if step % 200 0: iou compute_iou((pred 0.5).float(), mask) print(fstep {step} | loss {loss.item():.4f} | iou {iou:.4f})训练时我用了比较小的batch size8张图。因为多尺度会把每张图变成三份实际每次前向要处理24张分辨率不同的图像显存压力不小。优化器用Adam初始学习率1e-4训练到验证集指标不再上升时再降到1e-5。4.4 验证指标的选取评估拼接检测不能只看准确率。因为一张图里通常只有很小一块区域是拼接的网络只要全预测成0准确率也能到95%以上但一点用都没有。我习惯同时看三个指标像素级IoU预测mask和真值mask的交并比。像素级F1综合精确率和召回率。图像级准确率一张图里有拼接区域且预测出的连通域与真值有重叠才算检测成功。如果IoU一直提升但F1上不去说明预测范围偏大或偏小如果图像级准确率很差说明网络还没学会“定位一块区域”这件事。我通常用这三个指标一起看单独哪一个都不能说明问题。5. 常见问题与排查技巧实录5.1 最让人头大的坐标错位问题我第一次跑合成数据模型训练了一整晚loss降得挺漂亮可视化发现预测mask跟拼接区域完全不重叠。查了两个小时最后发现是生成mask时用的坐标是浮点数直接赋给了np.zeros浮点坐标被自动截断导致mask整体偏移了一个像素。这种情况在小区域拼接上会被放大预测结果偏出目标区域训练就变成了看空气猜位置。排查办法很简单每个batch随机选一两张图把mask用半透明红色叠加到原图上存下来肉眼看一眼是否对齐。不要觉得可视化浪费时间很多诡异问题都是这样一眼看出来的。5.2 训练稳定性靠三个开关图像拼接检测训练不太稳定我自己总结出三个最关键的开关损失加权正负样本比例严重失衡给正样本更高权重或者用Dice loss辅助。数据均衡每个batch尽量保证底图风格多样不要连续几十个batch都是同一类场景。学习率不要一开始就上5e-4这种比较大的值自监督分支很容易震荡我用1e-4起步等loss下降趋势稳定后再手动提高权重。这三个开关我有一次同时调反了训练直接崩掉loss升到几十预测图全变成灰色后来只能重开。所以如果你复现时发现指标忽上忽下先别怀疑网络结构把上面三件事检查一遍。5.3 小区域拼接检测不到小拼接区域是这种方法的弱项。因为拼接区域越小它携带的“不一致信息”越少全局特征很容易把它当作正常噪声忽略掉。我试过几种策略最有效的是三招并用输入图像先上采样2倍再进入网络相当于把目标区域放大特征图上的有效分辨率更高。训练时多生成一些小区域的样本例如把区域大小下限定到32×32像素。损失函数换成Focal Loss让网络关注难分类像素。用了这三招之后小拼接块的召回率大概能提升10个点以上。当然代价是训练时间变长推理速度也受影响需要自己取舍。5.4 多尺度推理时显存不够多尺度推理最省内存的方式是不要把所有尺度一次性喂给网络。我一开始图省事把一个batch里的三张缩略图拼成大batch一起前向结果部署到小显存机器上直接OOM。后来改成逐个尺度跑再把三个概率图插值回原图大小取平均内存占用立刻下来了。def multi_scale_infer(model, img, scales(0.5, 1.0, 1.5)): probs [] for s in scales: scaled F.interpolate(img, scale_factors, modebilinear, align_cornersFalse) with torch.no_grad(): p model(scaled) p F.interpolate(p, sizeimg.shape[-2:], modebilinear, align_cornersFalse) probs.append(p) return torch.mean(torch.stack(probs), dim0)这段代码在测试时非常实用。要是你连单尺度都跑不动就先减小输入分辨率再逐步加尺度别硬撑。5.5 真实场景效果不如预期合成数据和真实篡改之间一定有domain gap。我遇到过很多次合成样本上IoU做到0.7拿到真实拼接图上就掉到0.3。问题主要出在真实篡改者会做很多“不自然但掩盖得很好”的加工比如使用局部颜色匹配、内容感知填充、多重保存。单纯靠随机后处理不一定能完全覆盖。我的做法是在训练后期加入一个微调阶段先用大量合成数据把模型训练到收敛再用少量真实拼接样本微调几个epoch。这时候学习率要调低避免破坏已经学好的自一致性特征。微调之后真实样本的IoU能回升不少。6. 自一致性思路还能用在哪这个项目给我的最大收获不是拿到一个能用的拼接检测模型而是把“一致性”这个判断逻辑深深印在了脑子里。后来我转头做生成图像检测发现Diffusion生成的图像也普遍存在局部和整体风格不一致的问题只是表现形式更多样。我把自一致性分支加进检测模型后对AI生成图片的识别能力也提升了不少。现在做这一类任务我更倾向于用Transformer把特征点之间的交互关系建模得更直接让每个局部都主动去查询其他区域的信息而不是靠池化做全局总结。这个方向从2018年到现在已经有了很多新玩法但思想源头依然是“自己与自己比较”。最后分享一个我自己的复现技巧先用256×256的输入和粗掩膜把整个流水线跑通再换大图和多尺度。这个项目的复杂度不在网络结构而在无穷多的数据处理细节先把流程跑通你才分得清楚哪些问题来自模型哪些问题来自数据。希望这份经验能让你少走一点弯路。

相关新闻

高压开关柜APD局放监测技术解析与应用

高压开关柜APD局放监测技术解析与应用

1. 项目背景与核心价值高压开关柜作为电力系统的关键设备,其绝缘状态直接关系到电网运行安全。传统巡检方式存在两大痛点:一是依赖人工定期检测,难以捕捉突发性绝缘缺陷;二是常规测温手段无法发现早期局部放电(Partial…

2026/10/14 10:52:59 阅读更多 →
REA 逆向工程刷屏一周:软件没死,只是被拆成了两半

REA 逆向工程刷屏一周:软件没死,只是被拆成了两半

这一周,一个叫 REA 的开源项目刷了屏。 它能让 AI 助手调用一整套逆向工具,去拆一个没有源码的软件。同一时间,有人用 AI 做了七款 Adobe 平替,开源放了出来;游戏圈冒出几百个用 AI 反编译、搬到浏览器里玩的老游戏。 …

2026/10/14 10:52:59 阅读更多 →
开题报告为什么总被导师说“逻辑不清”?| 书匠策AI的“导航式写作”拆解

开题报告为什么总被导师说“逻辑不清”?| 书匠策AI的“导航式写作”拆解

书匠策AI官网:www.shujiangce.com 微信公众号搜一搜:书匠策AI 一个被误解的环节 开题报告大概是整个论文写作流程中最被低估的一环。 很多学生把它当成一道“行政手续”——填几个表格,写几千字,交上去等导师签字,然…

2026/10/14 10:51:59 阅读更多 →

最新新闻

Claude账号防封实战指南:从环境搭建到使用节奏的全面解析

Claude账号防封实战指南:从环境搭建到使用节奏的全面解析

1. 从“防封”这个词说起:账号稳定性的真实含义很多人第一次看到“防封”这两个字,脑子里浮现的画面是某种神秘操作或者隐藏开关。但如果你真正在长期使用各类AI工具,尤其是像Claude这种对账号行为比较敏感的服务,就会明白所谓的“…

2026/10/14 22:30:56 阅读更多 →
最简单的出入库系统怎么选?仓库管理软件选型避坑指南

最简单的出入库系统怎么选?仓库管理软件选型避坑指南

仓库管理软件哪个好用?这恐怕是我被问次数最多的问题,没有之一。每次听到这个问题,我都会先反问一句:你说的“好用”,到底是想要什么效果?聊下去之后,绝大多数人其实并不是想要一个功能多么齐全…

2026/10/14 22:30:56 阅读更多 →
Mac 源码编译 OpenClaw 实战:从依赖管理到避坑指南

Mac 源码编译 OpenClaw 实战:从依赖管理到避坑指南

简介:这份源码包面向需要在 Mac 上部署 OpenClaw 的开发者与运维人员,提供从环境准备到配置落地的完整参考。内容围绕 Homebrew、Node.js、Git 等基础依赖的确认,以及通过 brew 安装 OpenClaw CLI、配置本地大模型与网关端口、模型 ID 等关键…

2026/10/14 22:30:56 阅读更多 →
工业AI落地实践:从边缘计算到视觉质检与预测性维护

工业AI落地实践:从边缘计算到视觉质检与预测性维护

工业AI这四个字,这两年被喊得很响,但说实话,真正蹲过产线、在机台边吃过灰、把一个模型从实验室搬到车间里还让它稳定跑上三个月的人,并没有想象中那么多。我入这行快十年,前几年做的是传统机器视觉和PLC集成&#xff…

2026/10/14 22:30:56 阅读更多 →
DSP28335步进电机控制方案:ePWM脉冲输出与梯形加减速详解

DSP28335步进电机控制方案:ePWM脉冲输出与梯形加减速详解

简介:这是一套基于TI TMS320F28335 DSP与Xilinx XC3S500E FPGA协同控制步进电机的完整工程参考,适合电机控制学习者、嵌入式软硬件开发人员,以及开展课程设计或毕业设计的学生使用。整个压缩包共248个文件,大小约25.13MB&#xff…

2026/10/14 22:30:56 阅读更多 →
SQL注入本质:输入未过滤、拼接未隔离、权限未收敛

SQL注入本质:输入未过滤、拼接未隔离、权限未收敛

1. 这不是“黑进网站”的速成课,而是你真正该懂的SQL注入本质很多人看到“SQL注入”四个字,第一反应是黑客电影里飞速滚动的代码、被攻破的数据库、管理员惊恐的脸——这种刻板印象害了不少人。我带过不少刚入门的安全学习者,他们花大量时间背…

2026/10/14 22:29:55 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/14 7:53:34 阅读更多 →