当前位置:首页 » 《关于电脑》 » 正文

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

17 人参与  2024年09月16日 15:21  分类 : 《关于电脑》  评论

点击全文阅读


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

文章目录

使用Unity 接入 Stable-Diffusion-WebUI 文生图生成图像一、前言二、具体步骤1、启动SD的api设置2、unity 创建生图脚本3、Unity 生图交互配置步骤 1: 创建sdControl步骤2:生成后图片画布步骤3:创建两个输入框步骤4:sdcontrol赋值步骤 5: 创建按钮并绑定点击事件 三、测试

一、前言

在无聊的时候,想瞅一下sd生图遂做了一下
在这里插入图片描述
注意:我采用了异步处理,每点击一次发送一次请求,不需要等待生成完再点击。后面生成的画面会覆盖掉之前的。

二、具体步骤

1、启动SD的api设置

在这里插入图片描述

注意,运行后的api相关功能可以在:http://127.0.0.1:7860/docs 查看
在这里插入图片描述

比如这一次我们要的生图的地址就是/sdapi/v1/txt2img 是POST
所以可以通过requests 向 "http://127.0.0.1:7860/sdapi/v1/txt2img"发送POST请求并拿到数据

注意: “http://127.0.0.1:7860/sdapi/v1/txt2img” ,里面的地址和端口在unity中改成你设置的,如果没有改就不动
到这里sd的前期准备就OK了

2、unity 创建生图脚本

新建C#脚本,imgsd
注意:

“http://127.0.0.1:7860/sdapi/v1/txt2img” 里面的ip和端口与sd中设置的一致sd_model_name = “animePastelDream_softBakedVae” 模型用你自己的模型,如果删掉则用默认你第一个模型。模型文件如:majicmixRealistic_v7.safetensors 则模型名为majicmixRealistic_v7要用某个魔,需要在sd的web中能看到这个模型,你才能使用api调用。你需要下载模型后放在models文件夹在,参考地址如:sd-webui-aki-v4\models\Stable-diffusion

其他的保持不动即可

using UnityEngine;using UnityEngine.Networking;using UnityEngine.UI;using System.Text;using System;using System.Collections;public class imgsd : MonoBehaviour{    public InputField promptInputField; // 在Inspector中设置    public InputField negativePromptInputField; // 在Inspector中设置    public RawImage outputImage; // 在Inspector中设置    private string txt2imgUrl = "http://127.0.0.1:7860/sdapi/v1/txt2img";    // 调用这个方法来开始生成图像的过程    public void GenerateImage()    {        string prompt = promptInputField.text;        string negativePrompt = negativePromptInputField.text;        StartCoroutine(PostRequest(txt2imgUrl, prompt, negativePrompt));    }    [Serializable]    public class YourResponseType    {        public string[] images;        // 添加其他需要的字段    }    IEnumerator PostRequest(string url, string prompt, string negativePrompt)    {        var data = new        {            prompt = prompt,            negative_prompt = negativePrompt,            sd_model_name = "animePastelDream_softBakedVae"        };        string jsonData = JsonUtility.ToJson(data);        using (UnityWebRequest www = UnityWebRequest.Post(url, UnityWebRequest.kHttpVerbPOST))        {            byte[] bodyRaw = Encoding.UTF8.GetBytes(jsonData);            www.uploadHandler = (UploadHandler)new UploadHandlerRaw(bodyRaw);            www.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();            www.SetRequestHeader("Content-Type", "application/json");            yield return www.SendWebRequest();            if (www.result != UnityWebRequest.Result.Success)            {                Debug.LogError($"请求失败: {www.error}");            }            else            {                Debug.Log("请求成功");                // 解析响应                string jsonResponse = www.downloadHandler.text;                YourResponseType response = JsonUtility.FromJson<YourResponseType>(jsonResponse);                // 假设YourResponseType是你定义的类,用来匹配JSON响应的结构                // 显示图像                DisplayImage(response.images[0]); // 假设images[0]包含了Base64编码的图像            }        }    }    private void DisplayImage(string base64String)    {        byte[] bytes = Convert.FromBase64String(base64String);        Texture2D texture = new Texture2D(2, 2);        if (texture.LoadImage(bytes))        {            outputImage.texture = texture;        }        else        {            Debug.LogError("图像加载失败");        }    }}

3、Unity 生图交互配置

要通过点击事件触发GenerateImage方法,你可以使用Unity的UI系统中的按钮(Button)组件。这里有一个简单的步骤说明如何做到这一点:

步骤 1: 创建sdControl
在Unity编辑器中,右键点击Hierarchy面板中的空白区域。创建一个空对象Create Empty,并改名为sdcontrol。将上一步创建的imgsd脚本拖拽到sdcontrol
步骤2:生成后图片画布
在Unity编辑器中,右键点击Hierarchy面板中的空白区域。UI->Raw Image ``
步骤3:创建两个输入框
在Unity编辑器中,右键点击Hierarchy面板中的空白区域。UI->Legacy -> input fileld ``UI->Legacy -> input fileld ``
执行两次,创建两个输入框
注:UI ->如果没有Legacy 那就UI -> input fileld
步骤4:sdcontrol赋值

在这里插入图片描述

步骤 5: 创建按钮并绑定点击事件

在Unity编辑器中,右键点击Hierarchy面板中的空白区域。

选择UI -> Button。这将自动创建一个Canvas(如果尚未存在),button的text改为生成

选中你刚刚创建的按钮对象。

在Inspector面板中找到Button (Script)组件。

拖拽包含TextToImageRequest脚本的GameObject(即你将该脚本附加到的对象)到Button (Script)组件下方的OnClick()列表中。

点击OnClick()列表旁边的加号(+)来添加一个新的条目。

在新条目的None (Object)字段中,确保包含TextToImageRequest脚本的GameObject被选中。

然后点击旁边的下拉菜单,选择TextToImageRequest -> GenerateImage

三、测试

进入Play模式,输入prompt 点击按钮,这应该会触发GenerateImage方法,从而开始图像生成的过程。
在这里插入图片描述

注:如果发现生成了画面,但与实际的不符,请尝试输入另外一个框,再试着点击一次。因为两个框依次代表,prompt 和native prompt如果输错了框会导致生成效果不理想。


点击全文阅读


本文链接:http://zhangshiyu.com/post/160715.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 祖母寿宴,侯府冒牌嫡女被打脸了(沈屿安秦秀婉)阅读 -
  • 《雕花锦年,昭都旧梦》(裴辞鹤昭都)完结版小说全文免费阅读_最新热门小说《雕花锦年,昭都旧梦》(裴辞鹤昭都) -
  • 郊区41号(许洛竹王云云)完整版免费阅读_最新全本小说郊区41号(许洛竹王云云) -
  • 负我情深几许(白诗茵陆司宴)完结版小说阅读_最热门小说排行榜负我情深几许白诗茵陆司宴 -
  • 九胞胎孕妇赖上我萱萱蓉蓉免费阅读全文_免费小说在线看九胞胎孕妇赖上我萱萱蓉蓉 -
  • 为保白月光,侯爷拿我抵了债(谢景安花田)小说完结版_完结版小说全文免费阅读为保白月光,侯爷拿我抵了债谢景安花田 -
  • 陆望程映川上官硕《我的阿爹是带攻略系统的替身》最新章节阅读_(我的阿爹是带攻略系统的替身)全章节免费在线阅读陆望程映川上官硕
  • 郑雅琴魏旭明免费阅读_郑雅琴魏旭明小说全文阅读笔趣阁
  • 头条热门小说《乔书意贺宴临(乔书意贺宴临)》乔书意贺宴临(全集完整小说大结局)全文阅读笔趣阁
  • 完结好看小说跨年夜,老婆初恋送儿子故意出车祸_沈月柔林瀚枫完结的小说免费阅读推荐
  • 热推《郑雅琴魏旭明》郑雅琴魏旭明~小说全文阅读~完本【已完结】笔趣阁
  • 《你的遗憾与我无关》宋怀川冯洛洛无弹窗小说免费阅读_免费小说大全《你的遗憾与我无关》宋怀川冯洛洛 -

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1