玩转AI二维码:分享我的漂亮二维码生成秘诀

news2024/11/29 20:55:07

这几天我又生成了很多漂亮的二维码图片,有了一些感受和想法,特总结此文,分享给大家

先看效果,喜欢的可以继续读下去(遵守平台规则,图片已阉割,需要更多图片参数的同学可直接看文章最后,我提供了一个下载方式)。

 

 

背景

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

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

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

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

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

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

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

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

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

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

基本思路

1、给二维码做一些变形,让它看起来更杂乱无章,不像是二维码。这里会用到一个工具,下边实际生成时会介绍。

具体方法包括:

  • 降低二维码的容错率,让它更简单一些,但也不要太低。
  • 将像素块由正方形变为弧形、圆形、线形等;
  • 在二维码的外围增加一些形似二维码中像素块的区块。
  • 旋转二维码,让它不是常规的角度,增加人眼识别难度;
  • 给定位标志换一些样式,比如用圆圈或者菱形代替方块,用断线代替直线等;
  • 给二维码的像素块增加一些结晶效果,这样可以方便融入别的图像。
  • 给二维码换一个颜色,让它可以和图像更好的融合。

变形演示图片:

2、将二维码融入背景,让肉眼很难分辨。我这里想到两种做法:

  • 将整个二维码区域和图像融合,比如森林或者照片墙之类的。
  • 将二维码部分作为整个图像的某个区域,比如墙上的画框或者院子里的屏风。

3、如果需要人像,使用某些Lora或者插件进行优化。

4、修正二维码,包括:

修正不和谐的画面元素,比如人脸上的斑块。这可以通过图生图局部绘制来实现。

修正二维码的错误像素块,让它更容易被识别。这会用到别的工具。

1、二维码处理

这个插件可以生成标准二维码,对二维码进行变形,还可以对SD生成的艺术二维码进行像素块修正。

(1)直接在SD中安装插件:GitHub - antfu/sd-webui-qrcode-toolkit: Anthony's QR Toolkit for Stable Diffusion WebUI

重启SD WebUI:

(2)打开二维码工具:

设置生成二维码的参数:

生成好了之后 ,点击二维码下方的Download,保存起来备用。

2、人像处理

adetailer这个插件可以根据模型检测、伪装和修复图像中的某些部分,如果需要在二维码中合成头像,则需要这个步骤,否则跳过即可。

(1)安装这个细节处理插件:GitHub - Bing-su/adetailer: Auto detecting, masking and inpainting with detection model.,注意安装完成后需要重启。

(2)下载插件需要的模型。

正常情况下,重启后这个插件会自动下载需要的模型,但是由于众所周知的网络限制问题,有时候不能自动下载成功,这时候就需要手动下载。

这里我们先只下载一个修脸的模型,下载后放到 SD WebUI 的models目录下。

Bingsu/adetailer at 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。

下载地址:monster-labs/control_v1p_sd15_qrcode_monster at 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思路,我也会发到公众号,欢迎及时关注,以免错过精彩内容。


参考文章,感谢大佬们的分享:

Stylistic QR Code with Stable Diffusion

Refining AI Generated QR Code

https://qrcode.antfu.me/

https://qrbtf.com/

AI 生成可扫码图像 — 新 ControlNet 模型展示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/741365.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leap AI + Python 开发绘图应用

使用python语言,并借助Leap AI网站的api key,可以轻松实现AI绘图功能。使用时,用户只要输入prompt提示词,几秒钟之内服务器就能生成图片并返回图片的链接地址。开发人员可以利用这个功能开发个性化的绘图软件,或者整合…

后端Linux软件安装大全[JDK、Tomcat、MySQL、Irzsz...持续更新中]

文章目录 前言1.软件安装方式2.安装jdk3.安装Tomcat4.安装MySQL5.安装lrzsz 总结 前言 为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚&…

Webkit浏览器内核探究——Webkit简介

文章目录 1、什么是Webkit2、Webkit做了什么3、Webkit组成4、应用程序如何利用Webkit的 1、什么是Webkit Wekbit是一个开源的Web浏览器引擎,也就是浏览器的内核。 Apple的Safari, Google的Chrome, Nokia S60平台的默认浏览器,Apple手机的默认浏览器&…

如何监测电路中恶性负载

随着社会的发展和科技的进步,人们对于用电的安全性和稳定性要求越来越高。电路中的恶性负载往往会导致电路故障,甚至引发火灾等严重事故。因此,如何监测电路中的恶性负载成为了一个重要的课题。本文将从恶性负载的定义、监测方法、防范措施等…

【新版系统架构】第十八章-安全架构设计理论与实践

信息安全体系架构设计 信息系统安全设计重点考虑:系统安全保障体系,信息安全体系架构 系统安全保障体系: 安全区域策略的确定,根据安全区域的划分,主管部门应制定针对性的安全策略统一配置和管理防病毒系统&#xff…

【实验一】java基础

1、每个非素数都可以唯一地被分解为若干素数地乘积,请编程对其进行验证。 个人答案: package 实验1;import java.util.Scanner;public class sushu {public static Scanner input new Scanner(System.in);public static void main(String[] args) {Sy…

【工具使用】VS Code 某些文件夹为灰色全局搜索搜不到该文件夹的内容

一,简介 本文主要介绍在VS Code使用过程中,出现文件夹为灰色,且搜索内容时灰色文件夹中的字符串检索不到问题的原因和解决方法,从而提高工作效率。供参考。 二,问题现象 VS Code中部分文件夹显示为灰色,…

找工作第三弹——JS面试题由浅入深

目录 前言理论篇1.js的单线程2.js的数据类型3.js的内存泄漏4.js的宏任务与微任务(事件循环机制)5.js的作用域与作用域链6.js的闭包7.ES6新增8.原型和原型链8.深浅拷贝9.js的防抖和节流10.js中的this指向11.改变this指向的call、apply、bind12.事件流13.D…

Git 命令提交和分支控制

强大的分支和合并:Git 提供了强大的分支功能,使得开发者可以轻松创建、合并和管理分支。这种灵活性使得团队可以同时进行多个任务和实验性开发,而不会相互干扰 Git 在处理大型代码仓库和版本历史时表现出色。它使用了一种称为“快照”的机制…

数据处理轻松搞定:如何利用PaddleNLP高效处理大规模文本数据

目录 前言一、paddleNLP介绍、特性1-1、介绍1-2、特性介绍 二、paddleNLP安装三、PaddleNLP一键使用3-1、中文分词3-2、词性标注3-3、命名实体识别3-4、依存句法分析(DDParser)3-5、解语知识标注3-6、文本纠错(ERNIE-CSC)3-7、文本…

工业园区扬尘噪音监测,该怎么操作?这篇告诉你!

随着工业园区的不断发展和扩大,扬尘和噪声问题成为引起关注的重要环境挑战。工业活动产生的扬尘和噪声不仅对周边居民的生活质量和健康构成威胁,也对环境可持续性产生负面影响。 因此,进行有效的扬尘和噪声监测成为管理者和决策者必须关注和解…

【打包问题】执行mvn spotless:apply之后,import的包被去移除了

import的包被去移除了 出现的问题mvn spotless:apply的作用原因在哪解决方式快速恢复代码的规范性 出现的问题 执行mvn spotless:apply之后 mvn spotless:apply的作用 简单来说这个就是执行代码的规范化 原因在哪 我为了展示效果所以把下满应该引入的包注释了出来&#xf…

CDN应用的三大技术及五大优点

CDN应用的三大技术 CDN的实现需要依赖多种网络技术,如负载均衡技术、动态内容分发与复制技术、缓存技术等,以下为您做简要介绍: 1、负载均衡技术 负载均衡技术就是将网络中的流量尽可能平均分配到多个能完成相同任务的服务器或网络节点&am…

奇葩功能实现:级联选择框组件el-cascader实现同一级的二级只能单选,但是一级可以多选

前言: 其实也不能说这个功能奇葩,做项目碰到这种需求也算合理正常,只是确实没有能直接实现这一需求的现成组件。 el-cascader作为级联选择组件,并不能同时支持一级多选,二级单选的功能,只能要么是单选或者…

从零开始构建一个电影知识图谱,实现KBQA智能问答[下篇]:Apache jena SPARQL endpoint及推理、KBQA问答Demo超详细教学

项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限NLP、知识图谱、计算机视觉等领域):汇总有意义的项目设计集合,助力新人快速实…

Pyhon学习之条件判断和循环语句

1.if flag 1 if 1:print(type(True)) if 0:print(name) if flag:print("flag的类型:"str(type(flag)))根据这个结果,可以看出来,这里没有进行类型转换,bool就是int true 就是1 false 就是0 flag 0 if 1:print(type(…

Fiddler抓取app HTTPS请求

一、电脑和手机连接同一WIFI cmd->ipconfig,查看电脑当前IP地址为192.168.101.48 二、配置Fiddler Options选项勾选Allow remote computers to connect。 安装证书 勾选抓取HTTPS请求 三、手机端配置代理 手机端连接wifi,手动配置代理。 主机名&…

uniapp下上传图片后图片裁剪加图片旋转,支持H5和app

效果图 代码如下 <template><view class"container" v-show"isShow"><view><view class"cropper-content"><view v-if"isShowImg" class"uni-corpper":style"width: cropperInitW px;he…

Java 动态规划 174. 地下城游戏

代码展示&#xff1a; class Solution {public int calculateMinimumHP(int[][] dungeon) {int mdungeon.length;int ndungeon[0].length;//创建dp数组int[][]dpnew int[m1][n1];//初始化for(int i0;i<m;i){dp[i][n]Integer.MAX_VALUE;}for(int j0;j<n;j){dp[m][j]Integ…

Linux - 用户|权限管理 - 查看用户组

当我们需要查看 Linux服务器都有哪些用户组的时候, 可以通过如下命令进行查看: cat /etc/group如下图所示: 同时, 还可以通过groupmod三次tab键 进行查看: 具体信息内容解读: