AI - stable-diffusion 艺术化二维码

news2024/11/15 8:12:58

系列文章:

  • 《AI - stable-diffusion(AI 绘画)的搭建与使用》
  • 《AI - AI 绘画的精准控图(ControlNet)》

一、介绍

近日,AI 绘画(stable-diffusion)用来艺术化二维码算是比较火热的事了,这个 idea 是由国人用 Checkpoint + LoRA + QR Code ControlNet 组合实现出来的,下面是几张图片案例:

这是原作者的文章:《AI 生成可扫码图像 — 新 ControlNet 模型展示》

不过,文章内并没有讲述艺术化二维码的具体过程,也没有现成的 QR Code ControlNet 可供使用(可能出于某些原因没有公布吧,瞎猜的~),从网上收集了一些资料,使用现有的 ControlNet 模型也能够实现同样的效果,下面来看看具体实现步骤。

二、实战

需要先下载 2 个 ControlNet 模型:

  • SD15_brightness:https://huggingface.co/ioclab/ioc-controlnet/tree/main/models
  • SD15_tile:https://huggingface.co/lllyasviel/ControlNet-v1-1/tree/main

下载后存放到 stable-diffusion-webui\extensions\sd-webui-controlnet\models 目录下。

注:建议将 ControlNet 插件升级到最新版本,支持更多预处理器,还有更方便好用的 UI。

1、生成二维码

我们先准备一张二维码图片,可以通过以下任意一个网址生成:

  • 草料二维码:https://cli.im/
  • QR.io:https://qr.io/

2、灰度处理

  1. 上传二维码
  2. ControlNet Unit 0:打钩启用(Enable)
  3. 预处理器(Preprocessor):inpaint_global_harmonious
  4. 模型(Model):control_v1p_sd15_brightness
  5. 权重(Control Weight):0.4
  6. 开始与停止步骤(Starting Control Step、Ending Control Step):01

注:如果你找不到 inpaint_global_harmonious 预处理器,把 ControlNet 插件升级到最新就有了。

3、细节处理

  1. 上传二维码
  2. ControlNet Unit 1:打钩启用(Enable)
  3. 预处理器(Preprocessor):inpaint_global_harmonious
  4. 模型(Model):control_v11f1e_sd15_tile
  5. 权重(Control Weight):0.6
  6. 开始与停止步骤(Starting Control Step、Ending Control Step):0.350.75

注:如果你页面上没有多个 ControlNet 单元,可以到 Settings 中,找到 Multiple ControlNets 进行设置,详见:《AI - AI 绘画的精准控图(ControlNet)》

4、配置描述

根据你希望在二维码画面中出现的东西进行配置,比如我希望在画面中出现一个战火中的高达,我的参数配置如下:

  1. 正向提示词(Prompt):masterpiece, best quality, mecha, no humans, black armor, blue eyes, science fiction, fire, laser canon beam, war, conflict, destroyed city background
  2. 反向提示词(Negative prompt):UnrealisticDream, FastNegativeEmbedding
  3. 采样方法(Sampling method):Euler a
  4. 采样步数(Sampling steps):26
  5. CFG 比例(CFG Scale):6.5
  6. 随机种子(Seed):1234843297

注:如果你不知道这些配置含义是什么,可以查阅这篇文章:《AI - stable-diffusion(AI 绘画)的搭建与使用》

配置完描述后,点击 Generate 按钮,等待图片生成即可:

至此,艺术化后的二维码就生成好了,而且是可以被正常扫码识别出来的哦~

三、资料

在上述实战中,出现了 1 个新的 ControlNet 预处理器和 2 个新的 ControlNet 模型,它们的作用分别是什么呢?

1、预处理器 inpaint_global_harmonious

inpaint_global_harmonious 主要用于局部(遮罩部分)重绘,在原生基于图生图的重绘模式上加入了 ControlNet 的控制,从而让 inpaint 能够更加准确的预测重绘细节。但是注意,和普通局部重绘不同,ControlNet 的 inpaint 模型除了重绘遮罩部分外,遮罩以外的地方也会发生微小变化(重绘),这样做带来的好处是它能够更好地将重绘区域与整体画面融合,让整体出图更加和谐统一。当然你也能将 ControlNet 引导权重调节到最大,此时 ControlNet-inpaint 模型将尽可能得保持遮罩区域以外的画面不发生变化。

传统图生图 inpaint 效果

上图是传统图生图的局部重绘,原图蒙版重绘部分往往会出现与周围环境不相容的独立景物,无法统一整体布局。

ControlNet inpaint 效果

可以看到,对比传统图生图的局部重绘,ControlNet 的 inpaint 模型能在统一整体效果的前提下,补全蒙版部分的内容,同时遮罩外部分的轮廓和细节也得到了较好的保留。

上述介绍源自:https://www.jianshu.com/p/2e433f71f544

2、模型 control_v1p_sd15_brightness

该模型为稳定扩散带来亮度控制,允许用户对灰度图像着色或对生成的图像重新着色。

上述介绍源自:
https://aigc.ioclab.com/sd-showcase/brightness-controlnet.html
https://huggingface.co/ioclab/control_v1p_sd15_brightness

3、模型 control_v11f1e_sd15_tile

tile 模型原本是为了放大图片而设计的,具体来讲需要先将原图分割为一块一块的小区域(叫做 Tile 或瓦块),然后分别对每个瓦块进行图生图放大,最后集合所有放大后的瓦块,拼成完整的大图。之所以采用局部放大后拼接的模式是为了减少显存占用。但是这样放大图片也有弊端,那就是必须要求每个小图在图生图时重绘幅度不能太大,因为本质上每个小图使用的也是全图提示词,当重回幅度过高时,老版本 tile 模型很可能会在每个小图里生成全图提示词所描绘的全部内容。

ControlNet1.1 版本后的 Tile 模型更加强大,它具有两种特性:

  • 忽略图像中的细节并生成新的细节。
  • 如果局部瓦片语义和提示不匹配,则忽略全局提示,并根据局部上下文引导扩散。

因为该模型可以生成新的细节并忽略现有的图像细节,所以我们可以使用该模型去除不良细节并添加细化的细节。例如,消除由图像大小调整引起的模糊。

上述介绍源自:
https://www.jianshu.com/p/2e433f71f544
https://github.com/lllyasviel/ControlNet-v1-1-nightly

四、分析

我将实战中两个 ControlNet 单元依次生成的图片拆开,得到如下过程图:

结合上述资料中对两个 ControlNet 模型的介绍,可以大致理解为 control_v1p_sd15_brightness 在二维码图片的基础上进行重新着色,但会丢失二维码信息,control_v11f1e_sd15_tile 则在此基础上,对二维码信息细节进行补充。至于预处理器 inpaint_global_harmonious,因为此场景下二维码并不需要进行 inpaint 处理,所以把预处理器设为 none 也是可以的,对结果并不影响。

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

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

相关文章

Spring Security 实战篇

文章目录 前言内存版(memory)数据库库版(jdbc)自定义登录 - 单体(custom-login-single)自定义登录 - 前后分离会话一致性方案方案一方案二方案三为什么不用JWT 登录改json方式登录(custom-login-json)认证密码加密登录&#xff08…

【欧瑞博智能家居】ZigBee Mini网关、超静音智能开合帘电机 添加操作流程

目录 一、添加ZigBee Mini网关 二、添加超静音智能开合帘电机 参考资料 一、添加ZigBee Mini网关 1. 下载《智家365》APP 2. 网关通电,用网线连接路由器的网线接口 3. 再次扫描产品手册里面的二维码添加ZigBee Mini网关,注意手机wifi要在同一个网络…

Nucleo-F411RE (STM32F411)LL库体验 10 - RT-Thread nano finsh的移植

Nucleo-F411RE (STM32F411)LL库体验 10 - RT-Thread nano finsh的移植 1、Makefile中添加finsh的编译 编译报错如下: 在rtconfig.h添加#include “finsh_config.h” 继续编译,继续报错: 这里是个WEAK函数&#xff…

【python中对点云PCL库的下载安装与配置】

需要的资料: python_pcl-0.3.1-cp36-cp36m-win_amd64.whl 压缩包:pcl-1.12.1-pdb-msvc2019-win64 pcl程序:PCL-1.12.1-AllInOne-msvc2019-win64 网盘链接:https://pan.baidu.com/s/184yY7fc5rqwwd9F4cMncDw 提取码&#xff1a…

SpringSecurity(一):权限管理设计与实现(官文英解+源码调试+基本环境搭建)

权限管理设计与实现 前言权限管理认证授权安全管理框架 整体架构认证AuthenticationManagerAuthenticationSecurityContextHolder 授权AccessDecisionManagerAccessDecisionVoterConfigAttribute 环境搭建技术栈创建项目整合Spring Security 实现原理官方文档解读A Review of F…

Jmeter多接口测试之参数传递

目录 前言: 接口示例 正则表达式提取器 正则表达式提取实例 Json提取器 Json提取器实例 前言: 在进行多接口测试时,有些情况下需要将前一个接口返回数据作为后一个接口的参数,以模拟实际场景。JMeter作为一款常用的性能测试…

【百问百答】可靠性基础知识第六期

1.跌落试验需要确认哪些试验条件? 试验条件包括:释放高度,释放方法和试验表面。 2.什么是跌落试验的试验表面? 试验表面应该是混凝土或者是钢制的平滑坚硬的刚性表面,必要时,可按照相关规范规定其他表面。 3.什么是跌落高度? 指…

云安全技术(二)之云计算参考架构

云计算参考架构 1.1 描述云计算参考架构 Describe Cloud Reference Architecture 多个主要组件组合在一起形成云架构(Cloud Architecture)和云实现的全貌。涉及的组件包括管理和运营云环境的活动(Activity)、角色(Role)和能力(Capability),以及基于云托管和服务交…

CSDN如何快速获得粉丝和高质量铁粉

✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…

Linux:DNS服务(bind)

目录 环境 主服务器和从服务器的配置环境 主服务器 从服务器 主DNS配置文件 dns从服务器配置 环境 如果你只需要主dns服务器那么你只需要挑着主dns服务器配置看即可 我这里使用了4台虚拟机,你也可以不使用这么多根据你的电脑性能去调整 他们必须要在同一个网段…

什么是渗透测试?渗透等于入侵?

什么是渗透测试? 渗透测试 (penetration test)并没有一个标准的定义,国外一些安全组织达成共识的通用说法是:渗透测试是通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法。这个过程包括对系统的任何弱点、技术…

6.5 this关键字

1. 关键字:this 1.1 this 是什么? 首先。this在Java中是一个关键字,this 指代的是本类的引用对象 1.2 什么时候使用 this 1.2.1 实例方法或构造器中使用当前对象的成员 1、在实例方法或构造器中,我们在使用get和set方法中使用…

Nucleo-F411RE (STM32F411)LL库体验 9 - RT-Thread nano的移植

Nucleo-F411RE (STM32F411)LL库体验 9 - RT-Thread nano的移植 1、RT-Thread下载 这一节基于rt-thread nano版本,进行内核的移植,不包含任何组件。移植成功后,可创建任务,串口输出RT-Thread版本信息。 …

【Nginx】Nginx操作命令

Nginx操作命令 1.Nginx原生命令1.1 官方文档1.2 找到命令执行文件1.3 介绍基本操作命令1.3.1 命令帮助1.3.2 启动Nginx1.3.3 Nginx停止、重新加载配置文件:-s signal1.3.4 Nginx查看版本、测试配置文件正确性:-s signal 2.使用系统控制命令 systemctl3.补…

【Unity3D】激光雷达特效

1 由深度纹理重构世界坐标 屏幕深度和法线纹理简介中对深度和法线纹理的来源、使用及推导过程进行了讲解,本文将介绍使用深度纹理重构世界坐标的方法,并使用重构后的世界坐标模拟激光雷达特效。 本文完整资源见→Unity3D激光雷达特效。 1)重构…

C++linux高并发服务器项目实践 day12

Clinux高并发服务器项目实践 day12 socket介绍字节序字节序转换函数 socket地址IP地址转换(字符串ip-整数,主机、网络字节序的转换)TCP通信流程套接字函数TCP三次握手TCP滑动窗口TCP四次挥手 socket介绍 socket是网络环境中进程间通信的API,也是可以被命…

CAPL如何仿真ARP报文

文章目录 前言一、环境搭建二、IG生成器仿真ARP报文三、CAPL仿真ARP报文前言 随着智能电动汽车的普及,车载以太网的应用逐渐广泛,所以在汽车电子台架测试过程中,免不了仿真模拟发送以太网报文,本文就介绍两种方法模拟仿真发送以太网ARP报文。 一、环境搭建 CANoe安装 VN5…

FPGA时序约束--实战篇(Vivado添加时序约束)

前面几篇文章已经详细介绍了FPGA时序约束基础知识以及常用的时序约束命令,相信大家已经基本掌握了时序约束的方法。 今天介绍一下,如何在Vivado中添加时序约束,Vivado添加约束的方法有3种:xdc文件、时序约束向导(Cons…

vue基础-全选,使用计算属性 和 every遍历数组的返回值 true or false

购物车--计算购物车价格 1、计算属性--只要被依赖的数据 发生变化,结果就会变化 2、全选实现 根据选项,动态计算出布尔值,通过计算属性 得到布尔值: 通过every遍历数组list,只要所有 都满足 item > item.goods_s…

递推算法介绍

递推算法 给定一个数的序列H0,H1,…,Hn,…若存在整数n0&#xff0c;使当n>n0时,可以用等号(或大于号、小于号)将Hn与其前面的某些项Hi(0<i<n)联系起来&#xff0c;这样的式子就叫做递推关系。 递推算法是一种简单的算法&#xff0c;即通过已知条件&#xff0c;利用特…