优化人工智能生成的二维码
上周,我写了一篇 博客文章 ,讲述我如何学习生成可扫描的内容二维码代码。这样做时,我认为我的目标是找到一张对人类来说尽可能少地看起来像二维码的图像,但仍然可以被机器识别。
我们需要找到一个平衡点,调整权重来尝试错误。找到代表黑与黑的好构图仍然很困难。白点,同时保持内容对人类有意义。如果走得太远,二维码将无法扫描,如果走得不够远,图像就会像一个无聊的二维码。
由于这个过程存在相当大的随机性,有时当你找到一个好的但意识到它无法扫描时可能会很遗憾。为了改进这一点,我的工作流程是打开 Photoshop,将生成的图像与原始 QR 码叠加,手动检查差异,使用画笔标记这些点,然后发送到 inpaint 来绘制这些区域。它在一定程度上有效,但效率相当低,因为你需要来回好几次。同时,手动执行此操作也可能不准确,因为扫描算法可能会以不同的方式看到它们。
所以,我需要找到一个自动化此操作的方法,帮助我更轻松地验证和完善生成的二维码。我想出了一个简单的网络工具来做到这一点。让我向您介绍一下。
生成基本 QR 码
我发现非常重要的一件事是,我们将生成的 QR 码放入 ControlNet 对图像的影响很大。基本的方形 QR 码将导致图像更加方形和块状。值得尝试使用点、圆形或其他样式的 QR 码,看看它们是否有助于生成更好的图像。
生成以上图片具有完全相同的参数和相同的种子,只是二维码输入的样式略有不同。您可以看到差异非常显着。
另外,由于 QR 码的分布直接影响图像的构图。有时我们可能会发现某些模式可能很难解决。我们需要找到不同版本的 QR 码,以找到更适合我们想要的图像的版本。如果您对二维码足够熟悉,您可能知道生成二维码有一个步骤,称为 Mask Pattern。共有 8 种不同的图案可以应用于服务相同内容的 QR 码。遗憾的是,大多数生成器不提供更改它的功能。好的,我会构建它。
因此专门针对这个需求,我基于 QR 码生成器库 :
它为我提供了生成过程的全部功能。您可以更改纠错级别、遮罩图案、QR 码版本和旋转,以 找到 黑色和白色的良好分布。白点**。此外,它还允许您更改点的样式,或向边框添加一些随机噪声,使生成的图像更加融合。
生成图像
现在我们有了二维码通过代码,我们可以使用稳定扩散和 ControlNet 生成这些图像。详细步骤请参考 我之前的博文 。
验证并优化 QR 码
经过一夜的运行,我现在生成了大约 200 个图像。假设我发现一个人很有趣,并且看到了成为一名好人的潜力。我将首先使用手机尝试扫描它。正如前面提到的,你可能不会每次都那么幸运。不幸的是,这个无法扫描。
乍一看,我们看到那里该图像中有很多类似 QR 码的点,这应该使其能够被扫描仪识别。但为什么不呢?让我们找出原因:
使用 工具包 的 Compare 选项卡,上传生成的图像和原始二维码,调整网格大小,然后我们可以看到不匹配的点并检查节点。
我们可以看到该图像无法扫描,因为我们有很多不匹配的地方,说图像的某些部分可能没有足够的对比度。将鼠标悬停在 突出显示不匹配 按钮上,我们可以看到突出显示的不匹配点:
图像的上半部分似乎有点太暗,使扫描仪难以区分。我们还可以尝试增加图像对比度,看看它在扫描仪中的样子:
现在很清楚问题出在哪里了。那我们该如何解决呢?然后您可以尝试将鼠标悬停在 预览更正 按钮上,查看需要更改的内容:
它会淡化太暗的斑点,并使太亮的斑点变暗。然后您会立即看到此图像 变得可扫描 !
这很棒,但绝对不是我们最终得到的结果。我们可以从工具包中下载校正叠加或蒙版,以在 Photoshop 中进行 修复 或细粒度调整。
最终
经过几轮修复和调整,升级以改善细节,现在我们的最终图像为:
将其放回工具包中,我们看到不匹配的点现在减少了很多!有些不匹配实际上是故意造成的,因为 QR 码具有允许这种情况的纠错能力。
如果您有兴趣,请看这里可以看到与原始二维码叠加后的样子:
看起来很有趣 QR 码如何被扭曲并混合为图像的不同部分。
隐藏标记
目前的结果对我来说已经出奇的好。唯一缺少的可能是位置制定者没有很好地融合,但我想这就是限制。当我准备收工睡觉时,思考着让二维码制作者不那么明显的可能性,我在 classic.qrbtf.com (由提出 AI QR Code 想法的创建者创建),有一种名为 SP-1 的样式,具有“Plus shape”样式的位置标记。它看起来比方形或双圆形的更不做作。我不知道它也适用于扫描仪,所以我认为它可能值得一试。
所以我在我的生成器中实现了它,它看起来像这样:
如您所见,标记看起来与其他数据点的区别要小得多(请注意,这也会使代码更难以扫描)。作为控制网络输入可能值得尝试,看看它是否可以生成更好的图像。但既然我们已经有了一个很好的二维码,那么让我们使用新的二维码来重新绘制标记。
因此,使用新的二维码再次进行修复过程,并进行一些编辑,我们的 最终结果 为:
尽管我一步步做到了,但看到最终结果看起来像这样,但仍然可以扫描!
额外提示:扭曲 QR
因为我们发现 QR 码输入对输出图像的影响非常显着。以另一种方式思考,也许我们也可以尝试在将二维码发送到模型之前对其进行操作,而不是在帖子中细化生成的图像。
例如,我们可以使用生成器尝试不同的模式和配置,以生成更好的数据点分布。在边距中添加一些杂色,使位置标记更加随机,并将硬边缘四舍五入以减少块状感觉。我们可以:
然后我开始思考我们还能做些什么。于是我尝试在 Photoshop 中发挥滤镜效果。我发现 Distort > 波纹
和 像素化 > 结晶滤波器
具有相当平衡的失真效果。于是我在工具包中重新实现了 结晶 效果,得到了:
这进一步模糊了人眼中数据点之间的区别。将其发送给模型,我们得到了令人惊讶的非常好的结果!这是示例之一:
由于输入有很多带有一些阴影的更柔和的边缘,它使模型能够更自由地“猜测”物品。希望您会发现此提示很有用!我将尝试在工具包中实现更多有用的效果。
结论
我希望您喜欢本演练。如果您刚刚开始使用人工智能二维码,请尝试一下该工具,并告诉我是否有帮助。您可以在下面找到该应用程序和源代码。
加入我的 Discord Server ,分享您正在做的事情,让我们探索更多一起!
如果您对我如何制作此类工具感兴趣,我建议您继续阅读 关于 Yak Shaving](/posts/about-yak-shaving) 来学习我在构建工具时遵循的哲学。如果您喜欢我的工作,请考虑在 GitHub Sponsor 或 爱发电 支持我想出更多的想法和工具。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 面向程序员的卡尔曼滤波器非数学介绍
下一篇: 不要相信一个熬夜的人说的每一句话
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论