这几天我又生成了很多漂亮的二维码图片,有了一些感受和想法,特总结此文,分享给大家。需要图片参数的同学可直接看文章最后,我生成了100多张不同风格的图片。

先看效果,喜欢的可以继续读下去。

背景

在这篇文章之前,我写了两篇文章来介绍SD WebUI制作艺术二维码的方法:

AI制作艺术二维码-文生图

AI制作艺术二维码-图生图

在“文生图”一文中介绍了使用提示词+标准二维码生成艺术二维码的方法,演示了生成狮子头像二维码的实例,实际出图的效果也还不错,但是不能控制图片的细节,这也是只使用提示词生成图片的通常问题。

在“图生图”一文中介绍了使用图片+标准二维码生成艺术二维码的方法,演示了生成美女头像二维码的实例,通过这种方法,我们可以把一张选好的照片附加到二维码上,比如自己的Logo,但是图片的美观程度不是那么好,二维码比较灰暗,而且人脸出现了深颜色的斑块,其实在“文生图”中也存在这个问题,只是我们没有使用人脸。

另外这两种方法还存在一个问题:二维码的痕迹比较明显,大家一眼就能看出来这是一个二维码,对于追求视觉效果或者不想让别人看出来是二维码的场景,就力不从心了。

在实际出图的过程中,我还遇到过很多生成的二维码无法识别的情况:有时候是完全无法扫出;有时候是手机摄像头可以扫码,但是应用中长按不能识别;还有Android手机摄像头和长按都可以,但是iPhone长按不可以。对于需求者来说,二维码肯定是要能被识别的,只是好看没有用处。

对于艺术二维码,总结下来就是这几个需求

  1. 要容易被识别。
  2. 视觉效果要好(特别的:人脸要好看),不要那么二维码。
  3. 能控制一些细节。

所以我又去找了一些资料,试图解决所有这些问题,结果很难十全十美,但是获得一定程度上的平衡还是可行的,现在分享给大家。

基本思路

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

https://antfu.me/posts/ai-qrcode-refine

https://qrcode.antfu.me/

https://qrbtf.com/

https://mp.weixin.qq.com/s/i4WR5ULH1ZZYl8Watf3EPw

玩转AI二维码:揭秘我的漂亮二维码生成秘诀的更多相关文章

  1. 小白都能看懂的 Spring 源码揭秘之依赖注入(DI)源码分析

    目录 前言 依赖注入的入口方法 依赖注入流程分析 AbstractBeanFactory#getBean AbstractBeanFactory#doGetBean AbstractAutowireC ...

  2. 如何使用二维码进行表白-一键制作二维码,gif二维码制作

    " 如何使用二维码进行表白-一键制作二维码" 二维码在我们现在生活中随处可见,因为一次突发奇想,那我们可不可以制作一个自己的二维码呢!然后让女朋友去扫描一下----嘿嘿嘿--不行, ...

  3. C# 生成二维码,彩色二维码,带有Logo的二维码及普通条形码

    每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默.我眼中的程序员大多都不 ...

  4. (转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果

    场景:移动支付需要对二维码的生成与部署有所了解,掌握目前主流的二维码生成技术. 1 ZXing 生成二维码 首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老 ...

  5. Thinkphp3.2结合phpqrcode生成二维码(含Logo的二维码),附案例

    首先,下载phpqrcode,将其解压到项目ThinkPHP\Library\Vendor目录下.Index_index.html(模板可自行配置) <form action="{:U ...

  6. js生成二维码以及点击下载二维码

    js生成二维码 jquery.qrcode.js可以快速使用页面生成二维码.但改项目有两个小问题:1.不支持中文:2.不支持二维码中间生成图片. 支持中文的jquery-qrcode jquery.q ...

  7. php--------php库生成二维码和有logo的二维码

    php生成二维码和带有logo的二维码,上一篇博客讲的是js实现二维码:php--------使用js生成二维码. 今天写的这个小案例是使用php库生成二维码: 效果图:        使用了 php ...

  8. 二维码(QR code)基本结构及生成原理

    什么是二维码 二维码 (2-dimensional bar code),是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的. 在许多种类的二维条码中,常用的码制 ...

  9. Opencv+Zbar二维码识别(标准条形码/二维码识别)

    使用Opencv+Zbar组合可以很容易的识别图片中的二维码,特别是标准的二维码,这里标准指的是二维码成像清晰,图片中二维码的空间占比在40%~100%之间,这样标准的图片,Zbar识别起来很容易,不 ...

  10. 二维码之zxing仿新浪微博二维码

    在前言中最后部分,提到了二维码开发工具资源ZXing.网上有它最新1.7版的源码,感兴趣的可以下载下来看看,要打包生成core比较麻烦,网上有相关教程.嫌麻烦的朋友,可以去我的资源里下载Java版的c ...

随机推荐

  1. Nvidia Tensor Core-WMMA API编程入门

    1 WMMA (Warp-level Matrix Multiply Accumulate) API 对于计算能力在7.0及以上的CUDA设备,可以使用CUDA C++ API调用Tensor Cor ...

  2. 手动编写Swagger文档与部署指南

    Swagger介绍 在Web开发中,后端开发者在完成接口开发后,需要给前端相应的接口使用说明,所以一般会写一份API文档.一般来说,有两种方式提供API接口文档,一种是利用插件在代码中自动生成,另一种 ...

  3. OI 数论中的上界估计与时间复杂度证明

    预备 0.1 渐进符号 其实不少高等数学 / 数学分析教材在讲解无穷小的比较时已经相当严谨地介绍过大 O.小 O 记号,然而各种历史习惯记法的符号滥用(abuse of notation)[1] 直到 ...

  4. Wine运行问题 希沃-汉字卡无法显示

    在wine环境下运行希沃白板5,汉字卡无法正常显示: 这个模块是我之前参与开发的模块,过了5年还有点印象. 大概原理是获取字体库中字符的笔画路径GraphicsPath,根据里面的路径点集PathPo ...

  5. ToF技术全解读

    文章目录 ToF技术全解读 1. 什么是ToF 2. ToF的原理 3. ToF 优缺点 ToF技术全解读 1. 什么是ToF ToF: Time of flight. 飞行时间.当然这只是一种翻译的 ...

  6. Python 列表的修改、添加和删除元素

    列表修改.添加和删除元素 大多数创建的列表都是动态的,随程序的运行增删元素 修改列表元素 指定列表名和要修改的元素的索引,再指定要修改元素的新值 # 修改列表元素案例 motorcycles = [' ...

  7. .net 6 使用 NEST 查询,时间字段传值踩坑

    0x01业务描述 说明: 同事搭建的业务系统,最开始使用 log4net  记录到本地日志. 然后多个项目为了日志统一,全部记录在 Elasticsearch ,使用  log4net.Elastic ...

  8. DFS(深度优先搜索) 总是需要重置 visited 的状态吗?

    问题来自 P1902 刺杀大使,在最初的实现中 DFS 中一段代码如下: visited[x2][y2] = true; flag = dfs(v, x2, y2); visited[x2][y2] ...

  9. cefsharp学习笔记

    环境:VS2015+cefsharp 57.0 全部代码如下: 1.要初始化,否则不能刷新 using System; using CefSharp; using System.Collections ...

  10. 2020-10-23:go中channel的创建流程是什么?

    福哥答案2020-10-23:1.元素大小是否小于2的16次方,否则throw.2.对齐检查,否则throw.3.元素大小和容量的乘积不能超出范围,否则panic.4.生成*hchan,设置buf.4 ...