使用Unity 接入 Stable-Diffusion-WebUI 文生图生成图像

这篇具有很好参考价值的文章主要介绍了使用Unity 接入 Stable-Diffusion-WebUI 文生图生成图像。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考:stable diffusion 远端跑图—— Api基础知识掌握 - 知乎 (zhihu.com)

1、准备工作(下载启动器)

这一部分就不多赘诉了,我使用的是B站秋叶大佬的整合包,要启用API

stable diffusion的comfy ui版本保存的json代码可以接入unity吗,stable diffusion,unity

网上蛮多自己配置的,可能需要设密码之类的。经自己测试,使用整合包的话就不配置这个API账号密码了,不然会出现客户端出错,连接不上等问题(可能是我操作不当,我也还没研究透)

stable diffusion的comfy ui版本保存的json代码可以接入unity吗,stable diffusion,unity

附带:可以下一个Postman来测试接口

2、接口测试

FastAPI - Swagger UI 这里面有很多接口,暂时只研究了一下文生图的接口,关于文生图的这些请求体参数还没摸透目前。

  • 找到文生图的 Post 接口

stable diffusion的comfy ui版本保存的json代码可以接入unity吗,stable diffusion,unity

  • 打开,里头有个Try it out,点击之后会出现一个请求体,然后底下会有一个Execute的执行按钮,然后在底下就能直接复制这个接口的地址了。这个接口其实在上面图片就有了,就是你的本机ip加上/sdapi/v1/txt2img

    stable diffusion的comfy ui版本保存的json代码可以接入unity吗,stable diffusion,unity

  • 测试接口。可以在这个网站上直接测试接口。我这用的是Postman,其实没什么区别。在Postman中创建一个Post请求,填入地址。

stable diffusion的comfy ui版本保存的json代码可以接入unity吗,stable diffusion,unity

  • 添加请求体,选择json数据,输入请求体内容(如上所说,调试参数还没搞明白),然后发送等待返回数据即可。

stable diffusion的comfy ui版本保存的json代码可以接入unity吗,stable diffusion,unity

  • 解析数据。如果没出错的话,会返回一些信息,其中images是一个base64的字符串数组(后面在Unity会用到), 就是图片信息(是的,贼长一串),然后parameters就是你的请求体了(调试的参数),关于info(我不知道哈哈哈),

stable diffusion的comfy ui版本保存的json代码可以接入unity吗,stable diffusion,unity

  • 查看图片。可以复制这一长串字符串(images里面的。上面提到了这是数组,你的请求体如果写了出图是几张,如果你出的是两张图,那你直接复制进去肯定是解析不出来的,自己找到其中一张的信息拿出来用)。然后打开 Base64 to Image Decoder / Converter (codebeautify.org) 这个网站,将你的字符串输入进去(去掉首位的双引号啊中括号之类的),你就可以得到你生成的图片咯。

stable diffusion的comfy ui版本保存的json代码可以接入unity吗,stable diffusion,unity

ps:额...有点抽象。关于调试参数这些的,网上有挺多内容的,大家可以自行查阅一下。

3、Unity 接入

  • 发下疯,亚雷**,我以前写post接口测试的时候,都是传的json字符串,直接将数据序列化传输即可。测这玩意的时候,测了半天跑不通,就是422,读取不了我的数据。网上看了很多几乎都是python,官方文档也是用的python案例,好像也就是传个地址,然后不也是直接传的json字符串。有够绝望,误打误撞将数据转成byte字节流数据上传,成了....

  • 在场景里搞个RawImage用来等下接收生成的图片,然后准备个dll文件,放在Plugins下。这是一个序列化和反序列化的库文件。也可以直接在VS里装,但我不知道咋回事,装好了之后重新打开脚本,引用直接报错了,索性直接下一个dll丢到里头。

stable diffusion的comfy ui版本保存的json代码可以接入unity吗,stable diffusion,unity

  • 代码的话,思路无非就是创建结构体或者来,表示你要上传的数据,然后序列化成json字符串,在转byte字节流,发送请求,然后收到请求,然后解析数据啊这样。

  • 需要注意的几点就是:

    1、json 数据常会有空值,但是值类型是没有空值的,所以我定义接收数据的时候更常用一些引用类型来接收,避免出现错误。

    2、构建请求体的结构体或类时,字段名要对应Api接口的请求参数名。如api接口 prompt提示词和steps迭代次数,那我定义的时候就对应上。这个具体还是得看他所接收得字段名是啥,还有他得数据类型是啥。(传错的话似乎协程似乎会陷入无法释放的状态,然后就是重启大法....)

    public class txt2imgMes
    {
        public int steps;
        public string prompt;
        public int batch_size;
       
    }

stable diffusion的comfy ui版本保存的json代码可以接入unity吗,stable diffusion,unity

  • 请求的方法的话,UnityWebRequest 和 WWW 类我都试了一下,都行得通。之前做Post测试的时候,有时接口只能用其中一种方法,很奇怪我也不知道啥问题。另外需要加上请求头,试了一下不加请求头也会出错。

#region UnityWebRequest 请求
//  创建Post请求
UnityWebRequest requestPost = new UnityWebRequest(URL, UnityWebRequest.kHttpVerbPOST);
//  实例请求体
txt2img_Mes txt2imgMes = new txt2img_Mes();
txt2imgMes.prompt = "puppy dog";
txt2imgMes.steps = 15;
txt2imgMes.batch_size = 2;
string str = JsonConvert.SerializeObject(txt2imgMes);
// 将Json字符串转换为byte[]
byte[] postData = Encoding.UTF8.GetBytes(str);
​
//  添加请求头
requestPost.SetRequestHeader("Accept", "application/json");
requestPost.SetRequestHeader("Content-Type", "application/json");
//  实例上传处理器,并将 postData 设置为上传的数据
requestPost.uploadHandler = new UploadHandlerRaw(postData);
//  使用构造函数创建 Post 请求,需要实例下载器存储数据及上传处理器
//  通过静态方法 UnityWebRequest.Post() 创建Post请求,会自动实例分配下载处理器和上传处理器。
requestPost.downloadHandler = new DownloadHandlerBuffer();
​
yield return requestPost.SendWebRequest();
if (requestPost.isHttpError || requestPost.isNetworkError)
{
    Debug.Log(requestPost.error);
}
else
{
    Debug.Log("图片生成中");
    string text = requestPost.downloadHandler.text;
    action.Invoke(text);
}
#endregion
  • 定义接收返回数据的对象。之前提到过,返回的图片信息是一个base64字符串数组,然后试了一下用List列表去接收,也是可以的(毕竟列表也是通过数组实现的)。刚刚Postman测试的时候可以看到,返回的数据不止图片的信息一个,但只需要用到 images 这一个信息,所以只定义了这个对象用于接收

public class txt2imgReturnMes
{
    //  返回的图片信息是一个string字符串
    //  使用 List ,Json数据有的值是空值,对于接收的数据类型个人更常用引用类型
    public List<string> images;
    //  public string[] images;
}
  • 解析数据获取图片,反序列化获取的数据,然后将字符串转为byte字节流数据,生成图片,然后就可以了。

 StartCoroutine(PostRequest(Url, (string str) =>
 {
     Debug.Log(str);
     txt2img_ReturnMes byteMes = JsonConvert.DeserializeObject<txt2img_ReturnMes>(str);
     Debug.Log("获取返回数据");
     Debug.Log(byteMes.images.Count);
    
     byte[] bytes = Convert.FromBase64String(byteMes.images[0]);
     Texture2D texture = new Texture2D(1, 1);
     texture.LoadImage(bytes);
     image.texture = texture;
​
     byte[] bytes2 = Convert.FromBase64String(byteMes.images[1]);
     Texture2D texture2 = new Texture2D(1, 1);
     texture2.LoadImage(bytes2);
     image2.texture = texture2;
 }));
  • 出图,看起来还行,没那么抽象了哈哈哈

stable diffusion的comfy ui版本保存的json代码可以接入unity吗,stable diffusion,unity

研究一下这些调试的参数,后面再去研究一下图生图,看能不能通过用户拍照直接生成一张图出来。

有问题的地方还请各位指正,感谢。文章来源地址https://www.toymoban.com/news/detail-848265.html

到了这里,关于使用Unity 接入 Stable-Diffusion-WebUI 文生图生成图像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用stable-diffusion-webui 运行模型

    操作系统: Windows11 显卡: RTX2060 6GB 显存 下载 Python3.10.6 安装 image.png 注意勾选 Add Python 3.10.6 to PATH ,然后一路 下一步 即可 image.png 打开powershell, 确认安装成功 image.png 下载git image.png 完成安装 image.png 下载 为了避免找不到开源项目,可以像上图中的我一样, 先在用户目录建立一

    2024年02月12日
    浏览(77)
  • Stable-diffusion-webui 本地部署及使用

    1.安装conda; 2.创建conda env 和python 3.10.6; conda create --name stable-diffusion-webui python=3.10.6 3.更新pip; 4.安装cuda 11.8; https://developer.nvidia.com/cuda-toolkit-archive 5.克隆stable-diffusion-webui仓库 ; 6.下载SD模型 下载stablediffusion预训练模型至stable-diffusion-webui/models/stable-diffusion; V1.4 V1.5 7.运行

    2024年02月10日
    浏览(51)
  • 【AI】Stable-Diffusion-WebUI使用指南

    注:csdn对图片有审核,审核还很奇葩,线稿都能违规,为保证完整的阅读体验建议移步至个人博客阅读 最近AI绘画实现了真人照片级绘画水准,导致AI绘画大火,公司也让我研究研究,借此机会正好了解一下深度学习在AIGC(AI Generated Content)----人工智能自动内容生成领域的应用

    2024年02月07日
    浏览(63)
  • stable-diffusion-webui 中 Controlnet 使用说明

    Controlnet 允许通过线稿、动作识别、深度信息等对生成的图像进行控制。 自动安装 在 stable-diffusion-webui 页面上找到 Extensions - Install from URL ,输入插件的 git 地址,然后点击 Install 即可, URL 如下: 等待 loading 结束后,页面底部会出现 Installed into xxx. Use Installed tab to restart. 提示

    2024年02月06日
    浏览(69)
  • AIGC文生图:stable-diffusion-webui部署及使用

    Stable Diffusion Web UI 是一个基于 Stable Diffusion 的基础应用,利用 gradio 模块搭建出交互程序,可以在低代码 GUI 中立即访问 Stable Diffusion Stable Diffusion 是一个画像生成 AI,能够模拟和重建几乎任何可以以视觉形式想象的概念,而无需文本提示输入之外的任何指导 Stable Diffusion Web

    2024年02月16日
    浏览(80)
  • Stable-Diffusion-WebUI从代码下载到使用技巧

    本文用于对AI绘画感兴趣但无计算机编程基础的人,包含本人安装和使用过程中的心得,可供新学者参考。 心理准备: 电脑性能越高越好,最好有高端显卡,如30系以上。低端显卡也可以,速度和质量感人就是; 会要求下载一些软件、模型,涉及环境变量设置、虚拟环境安装

    2024年02月10日
    浏览(68)
  • stable-diffusion-webui的介绍与使用——Controlnet1.1

    源码地址:https://github.com/lllyasviel/ControlNet | 最新 版本 controlnet-v1.1 论文 地址:2302.Adding Conditional Control to Text-to-Image Diffusion Models 扩展 UI地址 (需先安装sd-webui):https://github.com/Mikubill/sd-webui-controlnet 相关博文 相关博文- stable-diffusion-webui的基础功能手动安装,了解代码结构、

    2024年02月10日
    浏览(81)
  • AI画图_stable-diffusion-webui安装使用指南(1)

    本文章适用于: 有一定学习能力和钻研能力,遇到问题能合理使用搜索引擎尝试解决问题的人 想在windows系统中尝试使用AI作画工具stable-diffusion-webui进行绘画的人 有一定的计算机基础(会 魔法上网 、 知道 python和Git)和英文阅读能力的人 显卡为Nvidia(或采用CUDA架构),且性

    2024年01月16日
    浏览(51)
  • 【AI作画】使用stable-diffusion-webui搭建AI作画平台

    进入官网下载安装包https://www.anaconda.com/并安装,然后将Anaconda配置到环境变量中。 打开命令行,依次通过如下命令创建Python运行虚拟环境。 笔者的显卡为NVIDIA,需安装NVIDIA的开发者工具进入官网https://developer.nvidia.com/,根据自己计算机的系统情况,选择合适的安装包下载安装

    2024年01月21日
    浏览(59)
  • 【Stable-Diffusion-WebUI】Windows系统安装Stable-Diffusion-WebUI

    基于 stable-diffusion 封装的 webui 开源项目,通过界面交互的方式来使用 stable-diffusion,降低了使用门槛,可以通过本地部署的方式进行访问,对电脑的配置要求较高,以下配置要求仅供参考 第一步:安装python3.10(这步可以跳过,3.8以上即可) 第二步:使用git下载stable diffusio

    2024年02月11日
    浏览(78)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包