☰
gemini-watermark-remover 图片水印流水线分层重构实录:decisionPath 四层候选路径架构的完整落地
2026/10/12 1:41:29 网站建设 项目流程

【免费下载链接】gemini-watermark-remover

A high-performance, 100% client-side tool for removing Gemini AI image & video watermarks. Built with pure JavaScript using mathematically precise Reverse Alpha Blending. / 基于 JavaScript 的纯浏览器端 Gemini AI 图像和视频无损去水印工具,使用数学精确的反向 Alpha 混合算法

项目地址:https://gitcode.com/gh_mirrors/ge/gemini-watermark-remover
点击查看免费下载

本文以开源仓库 gemini-watermark-remover 的活文档 docs/image-watermark-pipeline-refactor-live.zh.md 为主体,完整还原该项目将"样本特例链"升级为"候选路径评估系统(detection → alpha → repair → evaluation)"的全过程。读者可以从中掌握一套可复用的行为等价重构方法论:如何在不改变像素输出与newlyFailing=0的前提下,把一个千行级单函数执行壳逐步拆成带契约、可测试、可归因的分层流水线,以及如何用 1000 张线上样本 benchmark 与质量监控体系守住每次重构的质量底线。

一、重构背景与基线冻结(Phase 0)

该文档定位为"图片水印去除分层重构活文档"(更新时间 2026-06-25),其前提是 Phase 0 完成的基线冻结:

  • 线上样本集:sample-files/gemini-watermark/online-sample-2026-06-23-to-2026-06-24-max500(本地可用GWR_ONLINE_SAMPLE_ROOT指向实际下载目录)。
  • 固化基线:978/1000 = 97.80%,相对更早基线newlyPassing=29、newlyFailing=0。
  • 固化的门禁命令:
rtk pnpm benchmark:online-sample:gate -- --min-newly-passing 29

该命令对应的 package script 是benchmark:online-sample:gate(见 package.json),由scripts/gate-online-gemini-watermark-sample-benchmark.js实现。文档反复强调一个关键判断:剩余 missed-detection 不应直接用于放宽检测阈值——skipped 专用审计显示productionEvidenceSafeTotal=0,即没有样本同时满足"原图生产级水印证据强"和"去除后安全",因此不能靠放大检测范围换取通过率。

重构的总目标在文档中表述得很明确:"这次重构值得做,但不做一次性推倒重写。目标是把当前'样本特例链'升级成'候选路径评估系统',先保持行为等价,再逐步迁移策略。"这奠定了后续所有 Phase 的基调:结构优先、行为等价、每刀验证。

二、目标架构:四层候选路径流水线

文档给出了重构后的目标流水线:

DetectionCandidate[] -> AlphaTrial[] -> RepairTrial[] -> CandidateEvaluation[] -> SelectedPlan | RejectedDecision -> executor

并配套了分层职责表,这是理解整个重构的核心:

层只回答的问题不应该做的事
水印检测层哪里可能有水印、规格是什么、原图证据强不强不改图,不决定 alphaGain,不根据去除后结果反推水印存在
Alpha 逼近层哪个 alpha map / alphaGain / alpha shape 最能解释检测候选不做纹理修复,不越过检测证据门槛
纹理重建/修复层在可信 alpha 反解基础上,局部残留、边缘、halo、纹理断裂能否安全修复不替代检测,不掩盖错误 alpha,不扩大到非 ROI
评估仲裁层哪条完整路径最优,或是否拒绝处理不直接生成候选,不执行最终改图
执行壳应用最终 plan,返回 imageData 和 meta不临时插入策略分支

这套职责划分最终在 Phase 5 被固化为可测试的代码契约:src/core/pipelineLayerContracts.js 中的PIPELINE_LAYER_ORDER固定了规范顺序detection -> alpha -> repair -> evaluation,每层 contract 记录owns / inputFields / outputFields / moduleAnchors / testAnchors。例如:

  • detection 层owns: 'candidate-localization-and-evidence',输出selectedTrial / source / decisionTier / adaptiveConfidence / standardSpatialScore / standardGradientScore;
  • alpha 层owns: 'alpha-map-selection-and-alpha-fit',输出alphaTrialEvents / alphaAdjustmentStages / alphaGain / alphaMap / subpixelShift / pipelineState;
  • repair 层owns: 'texture-repair-and-artifact-gated-cleanup',输出repairTrial / passState / passes / source / finalImageData;
  • evaluation 层owns: 'decision-path-and-risk-gated-arbitration',输出decisionPath / evaluationDecision / blockedGate / riskFlags / selectionDebug / meta。

这些契约的输入输出字段与文档"核心对象草案"一一对应,并被 tests/core/pipelineLayerContracts.test.js 锁定(canonical layer order、contracts key 顺序、关键输出锚点selectedTrial / alphaTrialEvents / repairTrial / decisionPath存在、unknown layer 返回null、summary 只暴露 counts 与 anchors)。

三、核心对象草案与真实实现对应

文档给出了六个核心对象的 JS 草案,重构后这些对象全部在仓库中真实落地(从candidateEvaluation.js迁出为独立契约模块):

DetectionCandidate:id / source / config / position / alphaMapHint / polarityHint / evidence / provenance,对应 src/core/pipelineDetectionCandidate.js 的createDetectionCandidateFromSelectedTrial(...)与createRejectedDetectionCandidate(...)。

AlphaTrial:id / detectionId / source / alphaMap / alphaMapSource / alphaGain / alphaShape{variant,exponent,subpixelShift,scale} / imageData / scores / damage / gates / provenance,对应 src/core/pipelineAlphaTrial.js 的createAlphaTrialFromSelectedTrial(...)。

RepairTrial:id / alphaTrialId / source / repairType / params / imageData / scores / artifacts / gates / provenance,对应 src/core/pipelineRepairTrial.js 的createRepairTrialFromStages(...)。源码中用ALPHA_STAGE_PATTERNS(/alpha/、/recalibration/、/over-subtraction/、/subpixel/、/new-margin-96-variant/、/power-profile/、/residual-rebalance/、/anti-template/)与REPAIR_STAGE_PATTERNS(/cleanup/、/edge/、/repair/、/flat.*fill/、/prior/、/halo/、/boundary/、/quantized/、/mid-core/、/background/)做 stage 分类,并由inferRepairStrategy(stageName)完成 repairStrategy 推断(如known-48-flat-fill、dark-halo-repair、canonical-96-positive-halo-repair、boundary-repair、quantized-body-correction、mid-core-bias-correction等)。

CandidateEvaluation:pathId / detectionId / alphaTrialId / repairTrialId / eligible / decision / blockedGate / riskFlags / evidenceClass / residualClass / damageClass / rankingKey / explanation,落在 src/core/candidateEvaluation.js(保留 new-margin 风险 gate 与 default-alpha vs alpha-variant 仲裁)与 src/core/pipelineDecisionPath.js 的evaluation字段中。

SelectedPlan / RejectedDecision:对应createAcceptedDecisionPath(...)与createRejectedDecisionPath(...)(见 src/core/pipelineDecisionPath.js)。accepted 路径实际输出的 decisionPath 顶层形状为:

{ version: 1, decision: 'accept', detectionSource, alphaSource, repairSource, // 未应用 repair 时为 null evaluationDecision: 'accepted', blockedGate: null, riskFlags, detectionCandidate, alphaTrial, repairTrial, evaluation // 含 pathId: `${detectionId}->${alphaTrialId}->${repairTrialId}` }

rejected 路径输出decision: 'reject'、evaluationDecision: 'rejected'、blockedGate: reason(默认no-watermark-detected),alphaTrial / repairTrial均为null。createDecisionPathContractSummary(...)进一步提供 version/decision/三源/blockedGate/各子对象存在性的摘要字段。

四、Phase 1:评估层中枢与类型外壳

Phase 1 状态为已完成,核心产出:

  1. 在 src/core/candidateEvaluation.js 中新增轻量候选路径结构与 adapter:DetectionCandidate、AlphaTrial、RepairTrial、CandidateEvaluation、createAcceptedDecisionPath(...)、createRejectedDecisionPath(...)。
  2. 在 src/core/watermarkProcessor.js 的 meta 中新增decisionPath。
  3. skipped 路径现在输出decisionPath.decision = "reject",并记录blockedGate = "no-watermark-detected"。
  4. accepted 路径从现有selectedTrial包装出 detection / alpha / repair / evaluation 结构。
  5. scripts/run-external-gemini-watermark-sample-benchmark.js 与 scripts/sample-benchmark.js 会把meta.decisionPath写入 JSON report。

验证证据(文档记录):核心测试pass=93 / fail=0 / skipped=3、pnpm build通过、1000 张 online sample benchmark978/1000 = 97.80%、newlyPassing=29、newlyFailing=0、decisionPath覆盖1000/1000,gate 以--min-newly-passing 29通过。

Phase 1 之后新增的最低 report 字段被固化:

{ decisionPath: { detectionSource, alphaSource, repairSource, evaluationDecision, blockedGate, riskFlags } }

五、Phase 2:Alpha trial 迁移(结构化记录先行,像素不变)

Phase 2 状态为"已完成主体迁移",核心理念是每步只改变结构化记录,不改变像素处理顺序。五步迁移逐一落地:

  1. new-margin-96-variant标记为独立 AlphaTrial strategy:alphaTrial.strategy = "new-margin-96-variant"、migrationStage = "phase2-alpha-trial"、alphaShape.variant = "20260520",stages包含new-margin-96-variant-rescue。
  2. known-48-power-profile/known-48-positive-residual-rebalance标记为 Phase2 strategy,profileStages逐条记录stage / alphaStrategy / fromAlphaGain / toAlphaGain / beforeSpatialScore / beforeGradientScore / afterSpatialScore / afterGradientScore / suppressionGain / profileExponent / cost。线上样本2069367634989682688输出profileExponent = 0.88。
  3. located-aggressive-alpha从隐式后续强清理迁移为可解释 AlphaTrial event:接受事件写入acceptedStrategies、拒绝事件写入rejectedStrategies并记录blockedGate(如passable-spatial-drift、insufficient-balanced-gain),事件记录 alphaGain、repeatCount、edgeCleanup、before/after 分数、spatialDrift、cost。文档明确"这一步的重点不是让 located-aggressive 成为主策略,而是让评估层能看见它为什么被采用或被挡住"。
  4. over-subtraction-fine-alpha从宽泛fine-alpha归类中拆出,覆盖over-subtraction-recalibration与weak-positive-residual-fine-alpha;dark-catalog-fine-alpha先单独识别、下一步再迁移。
  5. dark-catalog-fine-alpha迁移为独立 Phase2 AlphaTrial strategy,暗底 catalog 样本src/assets/samples/20260608-4.png输出processedSpatialScore ≈ -0.0902、processedGradientScore ≈ 0.0535。

Phase 2 全量 benchmark 的 strategy 分布极具参考价值(反映真实生产中的策略使用频率):

  • selected-alpha=513、located-aggressive-alpha=326、over-subtraction-fine-alpha=107、alpha-variant=21、known-48-positive-residual-rebalance=9、known-48-power-profile=3、dark-catalog-fine-alpha=3、new-margin-96-variant=2。

其中alphaTrial的 accepted event504、rejected event26,decisionPath覆盖1000/1000,相对after-rebalance基线newlyPassing=0 / newlyFailing=0,gate 用--min-newly-passing 0通过(因为这是行为等价结构迁移,不以新增通过数为目标)。

六、Phase 3:Repair trial 迁移(纹理修复与评估层解耦)

Phase 3 同样保持"像素处理顺序不变、只增强结构化记录",五步把 repair 层逐步独立:

  1. edge-cleanup/luma-edge进入decisionPath.repairTrial:known-48-edge-cleanup写入 repair stage,known-48-luma-edge-correction标记repairStrategy = "luma-edge"。repairTrial.params[*]记录stage / repairStrategy / fromAlphaGain / toAlphaGain / beforeSpatialScore / beforeGradientScore / afterSpatialScore / afterGradientScore / suppressionGain / cost,repairTrial.gates.stages记录参与 repair 的 stage 名单。这一步修复了一个观测缺口:普通 edge cleanup 以前只体现在source字符串里,没有独立 stage 记录。
  2. flat-fill拆为明确 strategy:known-48-flat-fill与new-margin-96-flat-fill。
  3. estimated-prior拆为三个明确 strategy:smooth-located-prior、small-margin-prior、small-located-prior。
  4. halo-repair/quantized-body-correction进一步结构化:dark-halo-low-logo-rescue→dark-halo-repair,canonical-96-positive-halo-rescue→canonical-96-positive-halo-repair,quantized-body-correction保持同名;fixture tests/fixtures/issue93-canonical96-positive-halo.png 验证了canonical-96-positive-halo-repair输出。
  5. Phase 3 收口:known-48-boundary-repair-rescue→boundary-repair、known-48-mid-core-bias-correction补显式repairStrategy,全量 report 中genericCount=0,未发现repair / halo-repair / estimated-prior / flat-fill / missing strategy泛化残留。

Phase 3 收口 benchmark 的 repair strategy 计数(全量 1000 样本,repairApplied=175):

edge-cleanup=132, luma-edge=70, known-48-flat-fill=19, quantized-body-correction=4, new-margin-96-flat-fill=4, small-located-prior=3, dark-halo-repair=3, small-margin-prior=2, mid-core-bias-correction=1

值得注意的一个工程细节:文档记录了本机 pnpm 为11.7.0时不再读取package.json#pnpm.onlyBuiltDependencies,为恢复非交互 build scripts approval,本轮新增 pnpm-workspace.yaml,其中allowBuilds允许esbuild、protobufjs、sharp。

七、Phase 4:执行壳瘦身(行为等价迁移的方法论样板)

Phase 4 是文档中篇幅最大、步骤最细的部分(状态:进行中,至文档记录时已完成 66 步),核心目标是把processWatermarkImageData从"千行策略分支容器"瘦身为 thin adapter。其方法完全可复用:每刀只移动一种边界(trace / meta / state / timing / specs / runtime / executor),不做任何策略改动,每刀都跑node --check+ 单测 +pnpm build+ full benchmark + gate 五件套。

按照迁移顺序,Phase 4 逐层外提的模块如下(全部可在仓库中确认存在):

边界类型模块关键导出
Trace 记录pipelineTrace.jscreatePipelineTraceRecorder()、recordAlphaAdjustmentStage(...)、recordAlphaTrialEvent(...),统一管理alphaAdjustmentStages / alphaTrialEvents
Meta 汇总pipelineMeta.jscreateWatermarkMeta(...)、createAcceptedWatermarkMeta(...)、createRejectedWatermarkMeta(...)
初始选择pipelineInitialSelection.jsselectInitialWatermarkCandidate(...),仍复用candidateSelector.js#selectInitialCandidate(...)
首轮指标pipelineMetrics.jsshouldStopAfterFirstPass(...)、createFirstPassMetrics(...)、createRegionCorrelationMetrics(...)
状态提交pipelineState.jscreatePipelineStateCommit(...)、createAcceptedPipelineState(...)、createInitialPipelineRuntimeState(...)、createPipelineStateAccessors(...)
Repair 门pipelineRepairGates.jsshouldUsePreviewAnchorFastCleanup(...)、shouldUseKnown48EdgeCleanup(...)、shouldUseV2SmallEdgeCleanup(...)、createRepairCleanupFlags(...)
尾段计时pipelineTimings.jscreateTailDebugTimings(...),覆盖 15 项*Mstiming
结果封装pipelineResult.jscreateAcceptedPipelineResult(...)、createRejectedPipelineResult(...)、createAcceptedPipelineResultFromState(...)
运行时胶水pipelineRuntime.jscreateAlphaRepairPipelineRuntime(...)、acceptAlphaTrialResult(...)、acceptRepairTrialResult(...)、acceptAlphaStageResult(...)、acceptLocatedAggressiveResult(...)、acceptPreviewBackgroundCleanupResult(...)、runCurrentAlphaTrialStage(...)、runCurrentAlphaStage(...)、runCurrentRepairStage(...)、runRepeatedCurrentRepairStage(...)、runCurrentAlphaTrialSequence(...)、runCurrentAlphaStageSequence(...)、runCurrentRepairStageSequence(...)、runCurrentAlphaTrialSpecPhase(...)等
Pass 状态pipelinePassState.jscreateEmptyPipelinePassState()、createFirstPassPipelinePassState(...)、applyPipelinePassOutcome(...)
Repair specspipelineRepairStageSpecs.jscreateTailRepairStageSequenceSpecs(...)、createRepairCleanupPhaseSpecs(...)、createPostLocatedRepairStageSequenceSpecs(...)、createPreviewBackgroundCleanupStageSpec(...)
Alpha specspipelineAlphaStageSpecs.jscreateFineAlphaTrialSequenceSpecs(...)、createAlphaRescueStageSequenceSpecs(...)、createSmallAnchorAlphaStageSequenceSpecs(...)、createSubpixelOutlineAlphaStageSpecs(...)、createLocatedAggressiveStageSpec(...)、createRecalibrationStageSpec(...)
BootstrappipelineRuntimeBootstrap.jscreateAcceptedPipelineRuntimeBootstrap(...)
ExecutorpipelineAcceptedExecutor.jsrunAcceptedAlphaRepairPipeline(...)
Request 层pipelineAcceptedExecutorRequest.js、pipelineAcceptedFinalizationRequest.jscreateAcceptedPipelineExecutorRequest(...)、createAcceptedPipelineFinalizationRequest(...)
初始上下文pipelineInitialContext.jscreateInitialPipelineContext(...),归一adaptiveMode -> allowAdaptiveSearch、clone 输入、校验alpha48/alpha96、计算defaultConfig / resolvedConfig / position
外层壳imageWatermarkPipeline.jsrunImageWatermarkPipeline(...),串联 initial context → 候选收集 → hypothesis 执行 → ranking → meta → rejected/accepted 分支
Request 壳imageWatermarkPipelineRequest.jscreateImageWatermarkPipelineCleanupConfig(...)、createImageWatermarkPipelineRequest(...)
FinalizationpipelineFinalization.jscreateAcceptedPipelineFinalResult(...)

从 src/core/imageWatermarkPipeline.js 的源码可见,外层壳runImageWatermarkPipeline(...)以依赖注入方式暴露可替换的selectCandidate / collectCandidates / runCandidate / measureCandidate / rankCandidates / createSummaries / attachSelectionMeta / runAcceptedPipeline / createRejectedResult / createAcceptedFinalResult,这让 orchestration 可以被小单测覆盖而不是只依赖 full benchmark;而 src/core/watermarkProcessor.js 的processWatermarkImageData(imageData, options)最终退化为一行调用:runImageWatermarkPipeline(createImageWatermarkPipelineRequest({...}))。

文档在此阶段明确了一条"边界克制"原则:createAcceptedPipelineDependencies()当前仍绑定大量私有 refiner/gate,强行外移会迫使公开过多内部策略函数,收益低于风险,因此保留在 adapter 中——这提醒重构者:模块拆分应以真实边界收益为准,而非"文件越少代码越好"。

八、Phase 5:四层契约与接口矩阵(重构收口)

Phase 5 的目标是把"检测、alpha 逼近、修复、评估"的边界从文档意图变成可测试 contract,分六刀完成:

  1. pipelineLayerContracts.js(前述):固定四层 order 与每层 input/output/module/test anchors。
  2. pipelineDetectionCandidate.js:detection 层候选对象构造迁出,candidateEvaluation.jsre-export 保持兼容;createRejectedDecisionPath(...)改为复用createRejectedDetectionCandidate(...),让 skipped/rejected 路径也进入 detection contract。
  3. pipelineAlphaTrial.js:decisionPath.alphaTrial构造迁出,同时清理candidateEvaluation.js中迁出后未再使用的 trial id / config / position helper。
  4. pipelineAlphaTraceContract.js:把 alpha trace 的记录格式抽出(normalizeAlphaTrialEventForTrace(...)、normalizeAlphaAdjustmentStageForTrace(...)、createAlphaTraceContractSummary(...))。其中normalizeAlphaAdjustmentStageForTrace保留关键 gate:缺少 stage/alpha gain 跳过、same-gain 默认跳过(allowSameAlphaGain时允许)、非有限数归一为null、空字符串 strategy 归一为null;pipelineTrace.js退化为只维护两个数组并调用 contract 归一化。
  5. pipelineRepairTrial.js:decisionPath.repairTrial构造迁出(前述的 stage 分类与 repairStrategy 推断)。
  6. pipelineDecisionPath.js:accepted/rejected decisionPath 顶层装配迁出,candidateEvaluation.js收敛为真正的 candidate scoring/arbitration 入口(保留 new-margin 风险 gate、default-alpha vs alpha-variant 仲裁)。

Phase 5 收尾审阅的结论值得记录:不建议继续为了"更细文件"机械拆分——当前继续拆candidateEvaluation.js的收益已低于回到真实失败样本,剩余问题不太可能靠继续搬文件解决,需要重新按样本归因;且每次触碰 decisionPath/meta 都要跑全量 benchmark,低收益重构会拖慢进入算法改进。最终四层 contract 与运行壳的边界全部落到代码与测试中,质量门禁保持稳定(978/1000、newlyFailing=0、decisionPath=1000/1000、accepted 984 / rejected 16、repairApplied=175)。

九、迁移原则、验收门槛与 Stop 条件(可复用的工程纪律)

文档沉淀的7 条迁移原则是整个重构的灵魂:

  1. 先加结构,不改行为。
  2. 每一步迁移都必须保留旧路径对照,直到 full benchmark 和 gate 通过。
  3. 单个 strategy 迁移独立完成,不跨多类样本混改。
  4. skipped 的安全候选必须同时满足生产级原图证据和去除安全,不能只看去除后指标。
  5. 纹理修复只能在可信 detection + alpha trial 后执行,不能用来制造水印存在证据。
  6. 每个拒绝都要可解释:detection-rejected、alpha-no-safe-fit、repair-unsafe、evaluation-rejected。
  7. 每轮重构后更新此文档的状态和下一步。

验收门槛(每个阶段必须满足):核心测试通过、build 通过、线上样本 gate 通过、newlyFailing=0,且关键 report 能解释 selected path、rejected path、rejection reason、detection evidence、alpha fit scores、repair artifact scores。

Stop 条件(遇到即停下复核,而不是继续堆策略):

  • full benchmark 出现newlyFailing > 0;
  • skipped 样本只凭去除后指标变为通过,但原图生产级证据不足;
  • 单例样本需要新增独有阈值才能通过;
  • repair trial 在非 ROI 或低证据区域产生明显内容损伤;
  • userscript / SDK / CLI meta 兼容性被破坏。

十、重构后的质量监控体系(评估口径升级)

重构收口后,文档转入"完美修复率 / 瑕疵率监控",新增诊断入口:

  • scripts/create-online-sample-quality-monitor.js(pnpm report:online-sample:quality-monitor);
  • scripts/create-online-quality-review-pack.js(pnpm report:online-sample:quality-review);
  • scripts/create-online-quality-ablation-report.js(pnpm report:online-sample:quality-ablation);
  • scripts/create-online-perfect-lost-github-compare.js(pnpm report:online-sample:perfect-lost-github-compare)。

监控分三档:perfect strict(通过 benchmark 且 strict 阈值下无 residual / halo / damage / texture / near-black / clipping / weak suppression flag)、clean pass(clean 阈值下无瑕疵 flag)、severe defect(fail、可见残留或强 residual/halo/damage/texture/near-black 任一命中)。

Phase 5 当前质量基线(文档记录):

  • pass = 978/1000 = 97.80%
  • perfect strict = 82/1000 = 8.20%
  • clean pass = 247/1000 = 24.70%
  • strict defect = 918/1000 = 91.80%
  • clean defect = 753/1000 = 75.30%
  • severe defect = 393/1000 = 39.30%
  • visible residual = 292/1000 = 29.20%
  • damage / texture metric coverage = 984/1000 = 98.40%

与最早线上基线对比呈现pass +29、visible residual -13、perfect strict -59的格局。文档的解读非常严谨:早期latest-report.json的 damage/texture 指标覆盖为 0,而 Phase 5 覆盖为 984/1000,所以perfect / strict defect / severe defect的跨 initial delta 只能当风险预警,不是同口径质量结论。59 个perfectLost的主要 flags 为damage-penalty = 56、texture-penalty = 45、near-black-increase = 6,anchor 集中在48/96/96 = 44、96/64/64 = 8、48/32/32 = 3。

质量消融报告给出关键诊断:固定生产检测位置/尺寸/alpha map、跳过后续修复、只对直接 alpha 反混合做 gain 网格搜索,总计检查 148 个重点样本后,全局只有bestPerfect = 1、bestClean = 12;诊断分布为no-direct-alpha-improvement = 64、selected-alpha-core-causes-quality-flag = 53、direct-alpha-improves-but-not-clean = 19、alpha-grid-has-clean-candidate = 9、alpha-stage-overfit-previous-gain-clean = 2。结论是"主因已经前移到 detection 后的 alpha/core inverse 候选选择",而不是单纯的后处理层把图搞坏。

视觉复核决策(文档明确的生产决策):本轮不增加窄范围conservative-alphaproduction gate、不增加新的tradeoffgate、不全局关闭fine-alpha / located-aggressive / repair——因为证据只证明"有少量样本在 clean 阈值下可接受",未证明切换 conservative-alpha 会稳定改善肉眼质量。守门验证(同基线零 delta 监控)显示perfect delta = 0 / strict defect delta = 0 / severe defect delta = 0 / pass delta = 0。

GitHub v1.0.27 对照复核进一步排除了"当前版本相对旧版退步":对 59 个perfectLost分别渲染 source / GitHub v1.0.27 after / current after / old-to-current diff x8,量化结果是old-current avg crop delta < 0.01的样本占 57/59、< 0.1占 58/59、< 0.5占 59/59,最大平均差仅0.161/255。最终判断:perfect strict -59主要不是真实视觉退步,而是评估口径升级暴露风险(新增了 damage/texture/near-black 严格指标)。

十一、剩余失败样本四层归因与后续能力提升路线

重构的终极价值体现在失败样本归因上。Phase 5 后对 22 个失败样本按主责层归因:detection = 16、repair = 4、alpha = 2。

关键结论(文档原文逻辑):

  • 唯一值得优先做生产能力提升的重复簇是48/96/96 accepted residual / weak-suppression,共 3 个样本(2026-06-23/2069426775582052352、2026-06-23/2069438837913817088、2026-06-24/2069602182474240000),应归到repair -> alpha而非 detection;
  • 16 个 skipped 样本仍不建议放宽检测(skipped audit 结论是无 production-evidence-safe candidate);
  • issue 92 当前不是48/96/96残留簇,而是 false-positive anchor-selection guard(当前选择96/64/64,未选弱证据96/192/192default-alpha),应留作 evaluation/detection 回归样本,不并入 P1 residual fixture set。

文档还沉淀了值得跟的样本簇:48/96/96 大边距残留(跟踪 alpha edge profile、luma edge cleanup、修复层安全门槛)、48/32/32 小边距近阈值残留(高纹理/高对比背景下轻量 edge cleanup,仅略高于阈值,优先等同簇样本而非单例特化)、需要人工真值确认(有部分模板证据但去除不安全,适合人工真值池)。

P1 小实验收尾给出了实证结论:纯 alpha profile sweep 没有安全、稳定、可推广候选(best safe profile improvements = 0);boundary/texture repair sweep 中找到best safe preset = edge-luma-r5-signed-mid(样本2069426775582052352的balancedCost从0.578219降到0.293285、gradient从0.312419降到0.216936、visible=false),但样本被归类为structured-edge-protected,当前 gate 不允许直接进生产。文档给出的后续路线非常克制:先人工视觉复核该 sheet,若确认优于生产输出,再从全量 1000 中找同类样本做离线 gate sweep,只有当离线 sweep 没有新增损伤才把例外 gate 写入生产,且例外准入 gate 至少需满足:原图证据强、修复后 visible 关闭、balanced cost 明显下降、artifact cost 不上升、newly clipped 不上升、在非 P1 / skipped / issue92 样本上无误伤。

十二、总结:这次重构留下了什么

从 docs/image-watermark-pipeline-refactor-live.zh.md 的完整记录看,这次重构的实际收益可以概括为三点:

  1. 边界可测:把"检测、alpha 逼近、修复、评估"从文档意图变成可测试 contract,后续新增 alpha 候选、纹理修复、评估择优时不必再塞进一个长函数。
  2. 问题可归因:对 issue 92 这类"水印去掉后仍有明显痕迹"的问题,已有地方分别承接——alpha profile 问题进 alpha 层、边缘/纹理残留进 repair 层、路径选择错误进 evaluation 层。
  3. 质量有防线:每个阶段都用"核心测试 + build + 1000 样本 benchmark + gate +newlyFailing=0"守住底线,并在重构完成后升级出 perfect/clean/severe 三档质量监控与消融/复核体系,避免了"覆盖率提升但肉眼质量不稳"的隐性退化。

对任何想把单体图像处理函数改造成可维护流水线的开发者,这份文档与仓库源码(imageWatermarkPipeline.js、pipelineDecisionPath.js、pipelineLayerContracts.js 及其在 tests/core 下的配套测试)都是一份难得的实战标本:结构迁移可以完全行为等价,质量门禁必须始终在重构之前立起来。

【免费下载链接】gemini-watermark-remover

A high-performance, 100% client-side tool for removing Gemini AI image & video watermarks. Built with pure JavaScript using mathematically precise Reverse Alpha Blending. / 基于 JavaScript 的纯浏览器端 Gemini AI 图像和视频无损去水印工具,使用数学精确的反向 Alpha 混合算法

项目地址:https://gitcode.com/gh_mirrors/ge/gemini-watermark-remover
点击查看免费下载

相关推荐

上一篇:Pandas_talib与TA-Lib对比分析:哪个更适合你的量化项目?
下一篇:终极指南:如何在Hyper-V虚拟机中搭建Windows驱动开发调试环境

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询