玩转AI二维码:揭秘我的漂亮二维码生成秘诀
这几天我又生成了很多漂亮的二维码图片,有了一些感受和想法,特总结此文,分享给大家。需要图片参数的同学可直接看文章最后,我生成了100多张不同风格的图片。
先看效果,喜欢的可以继续读下去。




背景
在这篇文章之前,我写了两篇文章来介绍SD WebUI制作艺术二维码的方法:
在“文生图”一文中介绍了使用提示词+标准二维码生成艺术二维码的方法,演示了生成狮子头像二维码的实例,实际出图的效果也还不错,但是不能控制图片的细节,这也是只使用提示词生成图片的通常问题。
在“图生图”一文中介绍了使用图片+标准二维码生成艺术二维码的方法,演示了生成美女头像二维码的实例,通过这种方法,我们可以把一张选好的照片附加到二维码上,比如自己的Logo,但是图片的美观程度不是那么好,二维码比较灰暗,而且人脸出现了深颜色的斑块,其实在“文生图”中也存在这个问题,只是我们没有使用人脸。
另外这两种方法还存在一个问题:二维码的痕迹比较明显,大家一眼就能看出来这是一个二维码,对于追求视觉效果或者不想让别人看出来是二维码的场景,就力不从心了。
在实际出图的过程中,我还遇到过很多生成的二维码无法识别的情况:有时候是完全无法扫出;有时候是手机摄像头可以扫码,但是应用中长按不能识别;还有Android手机摄像头和长按都可以,但是iPhone长按不可以。对于需求者来说,二维码肯定是要能被识别的,只是好看没有用处。
对于艺术二维码,总结下来就是这几个需求:
- 要容易被识别。
- 视觉效果要好(特别的:人脸要好看),不要那么二维码。
- 能控制一些细节。
所以我又去找了一些资料,试图解决所有这些问题,结果很难十全十美,但是获得一定程度上的平衡还是可行的,现在分享给大家。
基本思路
1、给二维码做一些变形,让它看起来更杂乱无章,不像是二维码。这里会用到一个工具,下边实际生成时会介绍。
具体方法包括:
- 降低二维码的容错率,让它更简单一些,但也不要太低。
- 将像素块由正方形变为弧形、圆形、线形等;
- 在二维码的外围增加一些形似二维码中像素块的区块。
- 旋转二维码,让它不是常规的角度,增加人眼识别难度;
- 给定位标志换一些样式,比如用圆圈或者菱形代替方块,用断线代替直线等;
- 给二维码的像素块增加一些结晶效果,这样可以方便融入别的图像。
- 给二维码换一个颜色,让它可以和图像更好的融合。
变形演示图片:

2、将二维码融入背景,让肉眼很难分辨。我这里想到两种做法:
- 将整个二维码区域和图像融合,比如森林或者照片墙之类的。
- 将二维码部分作为整个图像的某个区域,比如墙上的画框或者院子里的屏风。
3、如果需要人像,使用某些Lora或者插件进行优化。
4、修正二维码,包括:
修正不和谐的画面元素,比如人脸上的斑块。这可以通过图生图局部绘制来实现。
修正二维码的错误像素块,让它更容易被识别。这会用到别的工具。
1、二维码处理
这个插件可以生成标准二维码,对二维码进行变形,还可以对SD生成的艺术二维码进行像素块修正。
(1)直接在SD中安装插件:https://github.com/antfu/sd-webui-qrcode-toolkit.git

重启SD WebUI:

(2)打开二维码工具:

设置生成二维码的参数:

生成好了之后 ,点击二维码下方的Download,保存起来备用。
2、人像处理
adetailer这个插件可以根据模型检测、伪装和修复图像中的某些部分,如果需要在二维码中合成头像,则需要这个步骤,否则跳过即可。
(1)安装这个细节处理插件:https://github.com/Bing-su/adetailer,注意安装完成后需要重启。

(2)下载插件需要的模型。
正常情况下,重启后这个插件会自动下载需要的模型,但是由于众所周知的网络限制问题,有时候不能自动下载成功,这时候就需要手动下载。
这里我们先只下载一个修脸的模型,下载后放到 SD WebUI 的models目录下。
https://huggingface.co/Bingsu/adetailer/tree/main

(3)重启后,在图像生成种子的下边会看到多了一个ADetailer的区块,选择我们刚刚下载的这个模型,最先变有个参数 Mask erosion 设置为-4,是为了让脸部不要太影响二维码。

(4)这里可能还存在一个问题:找不到模块 ultralytics。
我的Stable Diffusion WebUI是在云端运行的,用的别人的镜像,生成图片的时候报这个错误,此时需要在对应的Python运行环境中安装这个包。参考:
source /root/stable-diffusion-webui/venv/bin/activate
pip install ultralytics
注意 /root/stable-diffusion-webui/venv/bin/activate 需要换成你的 Python 虚拟运行环境路径。
3、ControlNet设置
之前合成二维码时我们使用了 tile 和 brightness 模型,这里我们使用专门处理二维码的模型:control_v1p_sd15_qrcode_monster。
下载地址:https://huggingface.co/monster-labs/control_v1p_sd15_qrcode_monster/tree/main
(1)这里下载以 .safetensors 为后缀名的文件,下载后放到 SD WebUI 的 models/controlnet 目录下。

(2)设置ControlNet。
首先上传需要合成的二维码:

然后刷新模型,选中我们刚下载的模型,这里选择了一个预处理器 invert,它会将二维码颜色反转,这样图片会比较亮一些,视觉效果好。
这里 Control Weight 参数也很重要,如果二维码的痕迹比较重,则需要降低这个权重,如果扫不出来,则需要增加这个权重。大家需要根据自己的二维码和要生成的图片效果进行设置,没有放之四海皆可的标准值。

4、大模型设置

(1)经过测试,revAnimated 这个模型出各种图的效果都还不错,建议大家使用。
其它根据你的图片风格,也可以试试 comix 系列的模型。
(2)提示词比较多,这里粘贴出来一个(其它提示词请看文章最后)。
正向提示词:1 girl, upper body, serene expression, mesmerizing eyes, straight long hair, flowing dress, poised posture, porcelain skin, subtle blush, warm tones, sun flare, soft shadows, vibrant colors, painterly effect, dreamy atmosphere, scenic lake, big trees, mottled shadows, many stones in water,peaceful ambiance, idyllic sunset, ultra detailed, 8k wallpaper, mandala, RTX, raytracing
反向提示词: NSFW,nude,bad-hands-5,bad-picture-chill-75v,badhandv4,easynegative,ng_deepnegative v1 75t , watermark,character watermark,photo date watermark,Datewatermarking,sketch, duplicate, ugly, huge eyes, text, logo, monochrome, (bad and mutated hands:1.3), (worst quality:2.0), (low quality:2.0), (blurry:2.0), horror, geometry, bad_prompt, (bad hands), (missing fingers), multiple limbs, bad anatomy, (interlocked fingers:1.2), Ugly Fingers, (extra digit and hands and fingers and legs and arms:1.4), ((2girl)), (deformed fingers:1.2), (long fingers:1.2),(bad-artist-anime), bad-artist, extra legs, nipples,disfigured, poorly drawn face, deformed, extra limbpoorly drawn hands
(3)生成参数设置:

这些参数都可以可以调整的,可以换换试试看。
如果你的宽度和高度设置的不大于512,可以勾选“高分辨率修复”,大于512时勾选会消耗比较多的资源,生成也会变慢。
生成次数和每次数量用于批量跑图,因为生成一张好图的概率可能比较低,所以一次多生成几张,从中挑选 ,这样会节省时间。
看看我这次出图的效果(一个花姑娘):

5、修复二维码
生成的图片存在一些问题,比如脸不好看,扫不出来等,这时候可以采用一些补救措施。
(1)图生图(局部绘制)
适合修复视觉效果出问题的图片,比如脸上难看的板块。

(2)使用之前安装的二维码插件 QR ToolKit。
在它的选项卡Compare这里可以上传生成的图片和二维码图片,它会对比两张图,找出错误的像素点,点击右侧的 “Preview Correction”可以预览修复效果,点击“Download”可以下载修复后的图,下边还有一些修复参数,可以点击看看效果,这里就不啰嗦了。

(3)一个别人分享的经验
这是知识星球上别人分享的一个经验(特别感谢),有些图能扫码但是不能长按识别,或者有些图在Android中可以长按识别但是在iPhone中不能,此时不要点开大图识别,可以给小图截屏,然后再长按识别,此时一般就能够成功了 。
(4)图片的颜色不要过于杂乱
这个不是绝对的,但是颜色少点确实比较容易识别。再给大家参考两张图(只截取了部分):


6、下载参考图片
这几天我使用不同的模型 、提示词和二维码生成了一百多张图片,每张都经过了手机扫码测试(不保证长按识别),可以给大家提供一些生成的思路,有兴趣的请关注微信公众号:萤火遛AI,回复“AI二维码”即可获取下载地址。
后续有新的AI思路,我也会发到公众号,欢迎及时关注,以免错过精彩内容。
参考文章,感谢大佬们的分享:
https://antfu.me/posts/ai-qrcode
玩转AI二维码:揭秘我的漂亮二维码生成秘诀的更多相关文章
- 小白都能看懂的 Spring 源码揭秘之依赖注入(DI)源码分析
目录 前言 依赖注入的入口方法 依赖注入流程分析 AbstractBeanFactory#getBean AbstractBeanFactory#doGetBean AbstractAutowireC ...
- 如何使用二维码进行表白-一键制作二维码,gif二维码制作
" 如何使用二维码进行表白-一键制作二维码" 二维码在我们现在生活中随处可见,因为一次突发奇想,那我们可不可以制作一个自己的二维码呢!然后让女朋友去扫描一下----嘿嘿嘿--不行, ...
- C# 生成二维码,彩色二维码,带有Logo的二维码及普通条形码
每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默.我眼中的程序员大多都不 ...
- (转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果
场景:移动支付需要对二维码的生成与部署有所了解,掌握目前主流的二维码生成技术. 1 ZXing 生成二维码 首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老 ...
- Thinkphp3.2结合phpqrcode生成二维码(含Logo的二维码),附案例
首先,下载phpqrcode,将其解压到项目ThinkPHP\Library\Vendor目录下.Index_index.html(模板可自行配置) <form action="{:U ...
- js生成二维码以及点击下载二维码
js生成二维码 jquery.qrcode.js可以快速使用页面生成二维码.但改项目有两个小问题:1.不支持中文:2.不支持二维码中间生成图片. 支持中文的jquery-qrcode jquery.q ...
- php--------php库生成二维码和有logo的二维码
php生成二维码和带有logo的二维码,上一篇博客讲的是js实现二维码:php--------使用js生成二维码. 今天写的这个小案例是使用php库生成二维码: 效果图: 使用了 php ...
- 二维码(QR code)基本结构及生成原理
什么是二维码 二维码 (2-dimensional bar code),是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的. 在许多种类的二维条码中,常用的码制 ...
- Opencv+Zbar二维码识别(标准条形码/二维码识别)
使用Opencv+Zbar组合可以很容易的识别图片中的二维码,特别是标准的二维码,这里标准指的是二维码成像清晰,图片中二维码的空间占比在40%~100%之间,这样标准的图片,Zbar识别起来很容易,不 ...
- 二维码之zxing仿新浪微博二维码
在前言中最后部分,提到了二维码开发工具资源ZXing.网上有它最新1.7版的源码,感兴趣的可以下载下来看看,要打包生成core比较麻烦,网上有相关教程.嫌麻烦的朋友,可以去我的资源里下载Java版的c ...
随机推荐
- 【译】ConfigureAwait FAQ
.NET 在数年前就在语言和库中添加了 async/await.在那段时间里,它像野火一样蔓延开来,不仅在 .NET 生态系统中,而且在无数其他语言和框架中被复制.在 .NET 中也看到了大量的改进, ...
- 【Dotnet 工具箱】WPF UI - 现代化设计的开源 WPF 框架
1.WPF UI - 现代化设计的开源 WPF 框架 WPF UI 是一个基于 C# 开发的, 拥有 4k star 的开源 UI 框架.WPF UI 在 WPF 的基础上,提供了更多的现代化,流利的 ...
- JS Bom(window)对象
window 是客户端浏览器对象模型的基类,window 对象是客户端 JavaScript 的全局对象.一个 window 对象实际上就是一个独立的窗口,对于框架页面来说,浏览器窗口每个框架都包含一 ...
- STL大全
排序最速传说--sort 我们都学过一些排序的写法,比如冒泡排序,快速排序之类的东西,举个例子来说吧,这是快速排序的代码: #include<iostream> using namespa ...
- 2023 Hubei Provincial Collegiate Programming Contest题解 C F H I J K M
补题链接:https://codeforces.com/gym/104337 原文链接:https://www.eriktse.com/algorithm/1136.html M. Different ...
- 当我再次用Kotlin完成五年前已经通过Kotlin完成的项目后
> 近日来对Kotlin的使用频率越来越高, 也对自己近年来写过的Kotlin代码尝试进行一个简单的整理. 翻到了自己五年前第一次使用Kotlin来完成的一个项目([贝塞尔曲线](https ...
- 使用 shell 脚本自动申请进京证 (六环外) —— debug 过程
问题现象 用 shell 脚本写了一个自动办理六环外进京证的工具 <使用 shell 脚本自动申请进京证 (六环外)>,然而运行这个脚本总是返回以下错误信息: { "msg&qu ...
- 2022-11-10:写一个 bash 脚本以统计一个文本文件 words.txt 中每个单词出现的频率。 为了简单起见,你可以假设: words.txt只包括小写字母和 ‘ ‘ 。 每个单词只由小写
2022-11-10:写一个 bash 脚本以统计一个文本文件 words.txt 中每个单词出现的频率. 为了简单起见,你可以假设: words.txt只包括小写字母和 ' ' . 每个单词只由小写 ...
- 2022-09-14:以下go语言代码输出什么?A:0 0;B:0 1;C:1 1;D:1 0。 package main func main() { println(f(1)) } func
2022-09-14:以下go语言代码输出什么?A:0 0:B:0 1:C:1 1:D:1 0. package main func main() { println(f(1)) } func f(x ...
- 2021-06-19:交错字符串。 有三个字符串s1,s2,s3。判断s3是否由s1和s2交错组成的。比如s1=“abc“,s2=“123“,s3=“12ab3c“,应该返回true,因为s3去掉12
2021-06-19:交错字符串. 有三个字符串s1,s2,s3.判断s3是否由s1和s2交错组成的.比如s1="abc",s2="123",s3=" ...