AIGC + QR 稳定扩散二维码

Author Avatar
Rzk 8月 08, 2023
  • 在其它设备中阅读本文章

使用 Stable diffusion 模型生成的图像,以 QR 码作为 ControlNet 的输入,使 QR 码数据点融入到艺术图像中,同时仍然可以被 QR 码阅读器扫描的图片。

AIGC + QR 稳定扩散二维码

什么是稳定扩散二维码

使用 Stable diffusion 模型生成的图像,以 QR 码作为 ControlNet 的输入,使 QR 码数据点融入到艺术图像中,同时仍然可以被 QR 码阅读器扫描的图片。

效果图

5qGy08d_d RVshJ1h_d

扫描识别

建议使用 iOS控制中心的扫码器微信的扫码器来验证您的二维码。它们是最宽容的。

如何生成

方案 A:用 ControlNet 进行文本到图像转换

● 实现 1 生成带有提示(prompt)的图像,并使用 ControlNet 和 QR 码输入来干预生成过程。
● 实现 2 风格化的 Lora + ControlNet[] + QR 码 生成风格化的图片
● 实现 3 提示词配合 ControlNet[qrCodeMonster_V10] 调节二维码主体轮廓,

通过 ControlNet[control_v1p_sd15_brightness] 调节亮部和暗部,

通过 ControlNet[controlnetQRPatternQR_v2Sd15] 调节 25% 最接近黑色的像素和 25% 最接近白色的像素

方案 B:图像到图像

使用 QR 码图像作为输入,并让稳定扩散重绘 QR 码的每个部分。需要 ControlNet 调整参数 ControlNet [tile] + ControlNet [depth]

建议

测试发现 方法 A文本到图像方法产生更好的结果, 同时对参数的控制也更方便, 可以对细节进行微调, 影响最终的结果。

实现细节

方案 A

  1. prompt + ControlNet [control_v1p_sd15_brightness] + ControlNet [tile]

  2. prompt + Lora + ControlNet [control_v1p_sd15_brightness] + ControlNet [tile]

  3. prompt + ControlNet[qrCodeMonster_V10] + ControlNet[control_v1p_sd15_brightness] + ControlNet[controlnetQRPatternQR_v2Sd15]

方案 B

prompt + ControlNet [tile] + ControlNet [depth]

tile 输入数据为二维码, depth输入数据为示例图片

生成的图片与输入图片类似, 但并不相仿效果如下

原图:

img

生成图:

png-20230808175929313

调优方案

通过调整 ControlNet 的 ControlWeight 以及 Starting Control Step 和 Ending Control Step 可以改变图片的属性.

调整艺术含量更高或者是二维码含量更高.

输入的二维码是生成混合良好的代码的整个过程中最重要的部分之一。

理论上,您可以使用任何提示来生成这些二维码。

为了帮助二维码更好地融入,我们发现在提示中包含一些流动性或碎片化的项目会很有帮助。

参数

ControlNet 的参数会影响何时以及如何将控制应用于生成过程。

控制权重- ControlNet 的权重。权重越高,输出受 ControlNet 的影响就越大。
开始控制步骤- ControlNet 开始生效时生成过程的百分比。
结束控制步骤- ControlNet 停止生效时生成过程的百分比。

启动控制步骤将允许提示和模型在知道 QR 码控件存在之前发挥创意。

最终控制步骤将允许模型尝试将 QR 码更多地融入到艺术品中(但会使代码更难扫描)。

需要几次尝试和错误才能找到适当的平衡,以便 ControlNet 有足够的时间进行干预,但又不能太多,这样代码就足够艺术化。

不同的模型可能有不同的控制强度,因此可能需要相应地调整参数。最好先阅读说明文档。

多重控制网络

多个ControlNet层主要用于在模型控制不足时增加图像的可识别性。

尽量避免因图片变化过大而导致结果偏差,导致无法获得理想的图片。

识别困难可能是由于提示的变化或者是由于标清机型的特性,导致画面细节过于琐碎或整体色调过亮/过暗而无法识别。

该方法可以有效提高扫描自动识别成功率。

选择性多层控制

深入研究QR码规范,你可以看到QR码是由不同类型的数据和位置模式组成的。

除了显而易见的位置标记之外,还可以看到位置标记周围还有版本和格式信息。这些信息非常重要,因为它告诉扫描仪如何正确解码 QR 码。另一方面,由于数据区域具有良好的纠错和重复功能,因此在需要时包含一些未对齐实际上是可以的。现在可以意识到,许多二维码无法扫描是因为这些区域的区分度不够,导致扫描仪在进入实际数据之前就提前退出。

那么,既然二维码中的数据点并不同样重要,为什么要同等地控制它们呢?也许可以尝试有选择地控制不同的领域。比如增加功能区的控制权重,减少数据区的权重,让二维码更具可读性,同时也更具艺术感。

可以使用两个 ControlNet 层:
● 第一层:完整 QR 码,中等控制权重。
● 第二层:QR码的选择性部分,权重较大但控制步骤较短。

图像到图像增强

当发现生成的图像难以扫描时,可以尝试将图像发送至img2img,使用原始二维码输入启用 ControlNet,然后:

● 降低去噪强度保留更多原始图像。
● 增加控制重量获得更好的可读性。
● 典型工作流程是:最大化引导比例并最小化去噪强度,然后提高强度直到代码扫描。

这告诉模型在 ControlNet 的指导下通过使暗区域更暗、亮区域更亮来重新增强图像。

API 生成

使用 Python 脚本调用接口生成二维码:

效果如下

png-20230808175942033

识别率与参数设置相关, 艺术风格较重的图片识别率较低,

可以一次生成多张来提高可识别图像的数量。

落地相关条件

可以落地生产环境, 通过设置 ControlNet 参数, 配合二维码图片即可生成;

png-20230808175929434

脚本批量生成效果如下:

png-20230808175951024

可以 [搭配/不搭配] 用户的 prompt 输入;

配合 controlnet_unit_weight 参数微调, 大约 70%~80% 的图像可以被 iOS API 识别;

风格 style 可以使用之前的已经训练完成的 Lora , 也可以让 UI 团队配合 再训练新的更适合二维码的风格;

脚本 + iOS API 识别 具体步骤:

  1. 切换底模

  2. 设置 ControlNet 参数 [二维码 + control_weight等参数]

  3. 设置 payload 参数 [prompt + Lora + negative_prompt]

  4. 请求生成

  5. 保存结果

  6. iOS API 判断识别率

总结

  1. 当前已测试 11 种 style, 每个 style 20 张图片, 可识别率 55%及以上的 style 为oil_painting, Gothic, Digital_art, Bokeh「虚化背景」, picasso, Epic「史诗风格」 6种, 识别率较低(低于35%)的 style 为 Carrton, Botticelli, Polaroid, Mosaic, Ghibli 5种;

可识别QR图像示例:

png-20230808175929725 png-20230808175930661 png-20230808175930672 png-20230808175932630 png-20230808175932731 png-20230808175933246
  1. 可以使用现有的 style 继续调整 controlnet 参数来提高识别率; 也可以寻找或者配合 UI团队 训练新的更加适合二维码的 style, 新的 style 也需要微调 controlnet 参数来生成识别率高的图像;
  2. 二维码图片的识别率与艺术性呈负相关关系, 识别率高的艺术性较低;