Stable Diffusion基础:ControlNet之人体姿势控制

在AI绘画中精确控制图片是一件比较困难的事情,不过随着 ControlNet 的诞生,这一问题得到了很大的缓解。 今天我就给大家分享一个使用Stable Diffusion WebUI + OpenPose ControlNet 复制照片人物姿势的方法,效果可以参考上图。
OpenPose 可以控制人体的姿态、面部的表情,有时候还能够解决坏手的问题(不要抱太大期望,下文会有介绍)。
OpenPose可以直接复制一张图片的人体姿势,就像题图一样,也可以通过骨架图生成人体图片(什么是骨架图?下文会有介绍)。
下面我们就以“文生图”为例,来看下如何使用 OpenPose 。
安装ControlNet
一般的 Stable Diffusion WebUI 整合包或者镜像都已经安装了这个插件,如果你的还没有安装,需要先安装它。已经安装好的跳过这一小节即可。
方法是打开 Stable Dissusion WebUI 前端页面,进入“扩展插件”-“从网址安装”,在“扩展插件的git仓库网址”中输入:https://github.com/Mikubill/sd-webui-controlnet,然后点击“安装”,待安装完成后重启 SD WebUI。各种 ControlNet 模型和预处理器一般会在首次使用时自动下载安装。

如果访问github不畅,也可以通过别的方式下载插件包和对应的模型,然后自己部署到 stable-diffusion-webui 中。文章最后提供了我整理的插件包和各种模型。
具体部署路径如下:
- ControlNet插件:<stable-diffusion-webui>/extensions
- ControlNet模型:<stable-diffusion-webui>/extensions/sd-webui-controlnet/models
- ControlNet预处理器:<stable-diffusion-webui>/extensions/sd-webui-controlnet/annotator/downloads
注意需替换 <stable-diffusion-webui> 为你自己的SD WebUI部署路径,如果你的 SD WebUI 启动命令中配置了模型的路径,或者做了文件夹的软链接,也需要根据实际情况进行调整。
安装成功后,在“文生图”、“图生图”界面的下方会出现 ControlNet 区域,点击右侧的展开按钮,下边有4个ControlNet单元,也就是我们可以同时使用4个ControlNet模型控制出图的效果,一般也就够了。

如果你的 ControlNet 只有1个单元,或者你想修改这个单元的数量,可以到“设置”中调整,如下图所示,找到“多重控制网:最大模型数量”,更改之后别忘了重启。

复制图片姿势
进入“文生图”界面,只需要选择一个你喜欢的大模型,填写简单的提示词就可以了。文章最后提供了我整理的模型合集,有兴趣的可以参考使用。

然后在页面下方的 ControlNet 中设置 OpenPose,按照下图所示的步骤操作:
- 这里只需要设置1个 ControlNet 单元,选择第一个就行了。
- 上传你要复制姿势的图片。
- 启用这个 ControNet 单元,一般选择图片后会自动勾选。
- 选中“完美匹配像素”,让 ControlNet 自动计算一个合理的内部图片处理空间,涉及底层技术细节,无脑勾选就行了。
- Control Type 选择 OpenPose。
- 预处理会自动带出,不用修改。它是用来从参考图片中提取骨架图的。
- 模型会自动带出,不用修改。它是在生成图片时根据骨架图控制人体姿势的。
- 这个按钮可以将参考图片的尺寸带到“文生图”参数中,如果参考图片的高宽没有超过 1024 ,建议使用,超过1024的出图会比较慢,可以按照图片比例手动设置“文生图”中的高宽参数。

最后点击“生成”就等着出图吧。这里会输出两张图片,一张是使用大模型加OpenPose生成的图片,另一张是根据参考图片生成的骨架图,我们可以把这个骨架图复制出来,以后继续使用或者分享给别人使用。

注意看这个骨架图中是有一点手的形状的,所以理论上,如果我们在骨架图中描绘了手的形状,生成图片中的手是会受到一定约束的。再来一张总统挥手的照片,这只手看着还不错,不过也是生成了很多张之后挑选出来的。

生图参数:
a man in a suit waves from a plane window as he stands on the deck of a plane with his hand up, Beeple, sunglasses, a stock photo, american romanticism
Negative prompt: EasyNegative,bad hands,bad fingers
Steps: 20, Sampler: Euler a, CFG scale: 7, Seed: 289185078, Size: 656x432, Model hash: c0d1994c73, Model: realisticVisionV20_v20, Denoising strength: 0.7, Clip skip: 2, ControlNet 0: "preprocessor: openpose_full, model: control_v11p_sd15_openpose_fp16 [73c2b67d], weight: 1.5, starting/ending: (0, 1), resize mode: Crop and Resize, pixel perfect: True, control mode: Balanced, preprocessor params: (512, -1, -1)", Hires upscale: 2, Hires upscaler: Latent, TI hashes: "EasyNegative: c74b4e810b03", Version: v1.5.1
使用骨架图姿势
在上一小节我们使用 OpenPose 时,先提取了图片人物的骨架图,然后使用骨架图生成的图片,所以只要有骨架图就能生成图片了。这对于创造太方便了,毕竟没有那么多的图片可以参考。
这里为了演示方便,直接使用上一小节提取的骨架图。我们只需要更改 ControlNet 这里的设置,如下图所示:
- 上传照片使用骨架图。
- 预处理器设置为None,因为我们不需要再从照片中提取人物的骨架图。

其他参数都不变,直接生成就好了。
创造骨架图
骨架图从哪里来?这里介绍一个网站、两个插件,都可以生成或者获取骨架图。
Avatar Pose Maker
这是一个制作骨架图的网站,可以调整人体的姿势、拍照的视角,也可以下载别人制作好的骨架图。
访问地址:https://avatarposemaker.deezein.com/
打开的页面如下图所示,我简单说下几个操作区域:
- 这里选择你要调整的身体部位
- 这里设置具体身体部位的参数,可以调整姿势。
- 这里可以调整人物的视角,是正面、侧面,还是仰视、俯视等等。
- 这里下载你创造的骨架图照片
- 这里可以随机生成很多人体姿势。
- 这里可以进入查看别人分享的姿势,有标签说明姿势是什么含义,选择下载就好了。

OpenPose Editor
这是 Stable Diffusion WebUI 的一个插件,插件访问地址:https://github.com/fkunn1326/openpose-editor.git,插件安装方法参考上文的“安装ControlNet”。
安装成功后,我们可以在一级页签中看到“OpenPose Editor”,这个插件的使用比较简单,可以在绘图区域这里直接调整人物的姿势,然后下载图片备用,或者直接发送到文生图、图生图等使用。

这里贴出我这个骨架图的出图效果:

生图参数:
eastern girl,18 years old, standing, waving left hand, balck hair, long straight hair, blue eyes, white shirt, blue jeans, trees, blue sky, cloud
Negative prompt: EasyNegative, bad hands, bad fingers, malformed
Steps: 30, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 1995058330, Face restoration: CodeFormer, Size: 512x512, Model hash: 15012c538f, Model: realisticVisionV51_v51VAE, Denoising strength: 0.7, Clip skip: 2, ControlNet 0: "preprocessor: none, model: control_v11p_sd15_openpose_fp16 [73c2b67d], weight: 1, starting/ending: (0, 1), resize mode: Crop and Resize, pixel perfect: False, control mode: Balanced, preprocessor params: (-1, -1, -1)", Hires upscale: 2, Hires upscaler: Latent, TI hashes: "EasyNegative: c74b4e810b03", Version: v1.5.1
3D Openpose
这是又一个Stable Diffusion WebUI的插件,访问地址:https://github.com/nonnonstop/sd-webui-3d-open-pose-editor.git,不会安装的同学请参考上文的“安装ControlNet”。
安装成功后,我们可以在一级页签中看到“3D Openpose”,这个插件功能比较强大,我们可以在一个3D的环境中调整人物的形态,但是操作上也会比较复杂,大家可以自己体会下。
- 双击骨架图中的关节部位可以调整这个关节的方向。
- 鼠标滑动可以调整人物的视角和大小。
- 特别支持了手脚的深度图、边缘检测图,用于优化手脚的生成,也可以单独只生成手。
调整好后,点击“生成”。

生成后的预览图如下,第一张是骨架图,后边几张是用来画手脚的辅助图。

可以直接发送到文生图和图生图,也可以下载后备用。直接发送感觉不太好用,建议先下载再上传。ControlNet的设置方式和上文直接使用骨架图生成图片一样,注意不需要选择预处理器。

如果我们希望对手脚进行专门的修复,可以使用画手脚的辅助图。这里选择边缘检测这个ControlNet,注意还是不要选择预处理器,启动控制步数和结束控制步数大家可以根据实际情况调整,文生图中不要从0到1,会影响图片的结构,图生图中可以使用局部绘图修手修脚。

虽然我们专门对手脚进行了处理,但是出图的效果还是经常出现畸形的手脚,效果是有的,但和期望的差距还比较大。下边是两个例子:
- 文生图带修手:

- 先文生图,再图生图局部修手:

资源下载
如果你下载插件和模型不方便,可以使用我整理的资源包,关注公众号:萤火遛AI(yinghuo6ai),发消息:插件,即可获取下载地址。
以上就是本次分享的主要内容,如果有问题欢迎沟通交流。
如果你还没有使用过Stable Diffusion WebUI,可以先看这几篇文章,了解下如何使用:
手把手教你在本机安装Stable Diffusion秋叶整合包
Stable Diffusion基础:ControlNet之人体姿势控制的更多相关文章
- Stable Diffusion 关键词tag语法教程
提示词 Prompt Prompt 是输入到文生图模型的文字,不同的 Prompt 对于生成的图像质量有较大的影响 支持的语言Stable Diffusion, NovelAI等模型支持的输入语言为英 ...
- AI 绘画咒语入门 - Stable Diffusion Prompt 语法指南 【成为初级魔导士吧!】
要用好 Stable Diffusion,最最重要的就是掌握 Prompt(提示词).由于提示词对于生成图的影响甚大,所以被称为魔法,用得好惊天动地,用不好魂飞魄散 . 因此本篇整理下提示词的语法(魔 ...
- Stable Diffusion魔法入门
写在前面 本文为资料整合,没有原创内容,方便自己查找和学习, 花费了一晚上把sd安装好,又花了大半天了解sd周边的知识,终于体会到为啥这些生成式AI被称为魔法了,魔法使用前要吟唱类比到AI上不就是那些 ...
- 从DeepNet到HRNet,这有一份深度学习“人体姿势估计”全指南
从DeepNet到HRNet,这有一份深度学习"人体姿势估计"全指南 几十年来,人体姿态估计(Human Pose estimation)在计算机视觉界备受关注.它是理解图像和视频 ...
- 使用 LoRA 进行 Stable Diffusion 的高效参数微调
LoRA: Low-Rank Adaptation of Large Language Models 是微软研究员引入的一项新技术,主要用于处理大模型微调的问题.目前超过数十亿以上参数的具有强能力的大 ...
- 最新版本 Stable Diffusion 开源 AI 绘画工具之使用篇
目录 界面参数 采样器 文生图(txt2img) 图生图(img2img) 模型下载 界面参数 在使用 Stable Diffusion 开源 AI 绘画之前,需要了解一下绘画的界面和一些参数的意义 ...
- Java04-Java语法基础(三)流程控制
Java04-Java语法基础(三)流程控制 一.数据类型的转换 1.自动转换:在赋值运算中,占字节数大的类型会自动向字节小的类型转换 double d1 = 3.14; int t1 = d1; 2 ...
- 053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结
053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结 本文知识点: 流程控制知识总结 流程控制知识总结 选择结构语句 循环结构语句 ...
- 052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试——debug2 多断点调试程序
052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试--debug2 多断点调试程序 本文知识点: Eclipse下程序调 ...
- 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1
051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...
随机推荐
- 2023-04-21:用go语言重写ffmpeg的metadata.c示例。
2023-04-21:用go语言重写ffmpeg的metadata.c示例. 答案2023-04-21: 这段 Go 代码演示了如何使用 ffmpeg-go 库中的函数来读取多媒体文件元数据,包括视频 ...
- 2022-12-29:nsq是go语言写的消息队列。请问k3s部署nsq,yaml如何写?
2022-12-29:nsq是go语言写的消息队列.请问k3s部署nsq,yaml如何写? 答案2022-12-29: yaml如下: apiVersion: apps/v1 kind: Deploy ...
- 2022-02-20:设计内存文件系统。 设计一个内存文件系统,模拟以下功能: ls: 以字符串的格式输入一个路径。如果它是一个文件的路径,那么函数返回一个列表,仅包含这个文件的名字。如果它是一个文件
2022-02-20:设计内存文件系统. 设计一个内存文件系统,模拟以下功能: ls: 以字符串的格式输入一个路径.如果它是一个文件的路径,那么函数返回一个列表,仅包含这个文件的名字.如果它是一个文件 ...
- 2022-02-05:字典序的第K小数字。 给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字。 注意:1 ≤ k ≤ n ≤ 10**9。 示例 : 输入: n: 13 k: 2
2022-02-05:字典序的第K小数字. 给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字. 注意:1 ≤ k ≤ n ≤ 10**9. 示例 : 输入: n: 13 k: 2 输出 ...
- 2021-07-05:股票问题2。给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖
2021-07-05:股票问题2.给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格.设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖 ...
- ET框架6.0分析二、异步编程
概述 ET框架很多地方都用到了异步,例如资源加载.AI.Actor模型等等.ET框架对C#的异步操作进行了一定程度的封装和改造,有一些特点: 显式的或者说强调了使用C#异步实现协程机制(其实C#的异步 ...
- Vue 打包后报 Uncaught SyntaxError: Unexpected token ‘<‘
根本原因在于你的vue.config.js里的publishPath设置的路径是相对路径还是绝对路径 大家都是看别人设置成 process.env.NODE_ENV==='production' ? ...
- flutter填坑之旅(配置本地资源文件)
一.添加单个资源文件 项目下创建一个assets目录,在该目录下存放对应的资源文件(json.image.-) pubspec.yaml文件中配置资源文件路径(注意缩进要与上下文一直) assets: ...
- # 代码随想录算法训练营Day10 栈与队列| 理论基础 232.用栈实现队列 225. 用队列实现栈
栈与队列理论基础 队列是先进先出,栈是先进后出 关于栈的四个问题 C++中stack 是容器么? 我们使用的stack是属于哪个版本的STL? 我们使用的STL中stack是如何实现的? stack ...
- html+css实现二级导航栏效果,简单易看懂噢!
这应该是这几天以来看到的最简单易懂的有二级菜单栏的导航栏效果实现了 使用html+css实现,看了好几天导航栏的实现方式,要么是太复杂的需要JS或者框架的,要么是太简单仅仅使用div和超链接的, 再要 ...