先把当时的情况摆出来。用 canny 提取线稿,边缘碎成一堆噪点,出图细节混乱,画面里出现大量细小的纹理。

原因不止一个,得分开看。低阈值过低,把噪声也当成边缘。还有一种是原图分辨率高,边缘密度过大。

另外,没有做模糊预处理,纹理被强化。少数情况下是控制权重过高,模型被边缘牵着走。

提高低阈值过滤噪点

python -c "import cv2;print(cv2.Canny(img, 100, 200).mean())"

做一次高斯模糊再提边缘

python -c "import cv2;img=cv2.GaussianBlur(img,(5,5),0);print(img.shape)"

降低控制权重给模型留出发挥空间

image = pipe(prompt, controlnet_conditioning_scale=0.7).images[0]

保存边缘图对比不同参数

python -c "import cv2;cv2.imwrite('edge.png', e)"

报错是间歇性的,我蹲守了半小时才抓到一次完整现场。

白天有业务在跑,能验证的部分都压到了晚上做。

别只看报错消失,验证要多做一步。边缘图干净连贯,出图保留了主要结构又不会满屏碎纹理,整体质感提升。

阈值不是固定值,线稿和实拍图的合适区间差别很大,最好一次生成三四组参数对比着挑。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189