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

简介: 本文介绍了如何将Unity游戏引擎与Stable-Diffusion-WebUI的文生图API相结合,实现在Unity中生成图像的功能。内容包括启动Stable Diffusion的API设置、在Unity中创建脚本与UI配置,以及通过按钮点击事件触发图像生成的详细步骤和测试过程。

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

在这里插入图片描述

步骤 5: 创建按钮并绑定点击事件
  1. 在Unity编辑器中,右键点击Hierarchy面板中的空白区域。

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

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

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

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

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

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

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

三、测试

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

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

相关文章
|
机器学习/深度学习 人工智能 PHP
百度AI开发平台图像增强与特效API-SDK接口PHP实战记录
百度AI开发平台图像增强与特效API-SDK接口PHP实战记录
131 0
百度AI开发平台图像增强与特效API-SDK接口PHP实战记录
|
2月前
|
弹性计算 人工智能 自然语言处理
通义万相AIGC快速生成图像体验测评
通义万相AI绘画创作部署与体验。
|
4月前
|
编解码 人工智能
PixArt-Σ:华为最新文生图模型,支持4K高清图像生成
【5月更文挑战第18天】华为发布PixArt-Σ模型,一款基于DiT架构的4K图像生成器,提升图像质量和文本对齐度。模型采用“弱到强训练”,以少量参数生成优质图像。引入高质量数据和高效标记压缩方法,实现超高分辨率图像生成。实验显示,PixArt-Σ在遵循复杂文本提示和图像质量上表现优异,与顶尖T2I模型相当。然而,计算资源需求大及处理复杂场景能力有限仍是待解问题。[链接](https://arxiv.org/pdf/2403.04692.pdf)
98 1
|
4月前
|
移动开发 前端开发 API
HTML5 Canvas 提供丰富的绘图API,支持绘制图形、文本、渐变和图像,助力游戏开发
【5月更文挑战第13天】HTML5 Canvas 提供丰富的绘图API,支持绘制图形、文本、渐变和图像,助力游戏开发。关键功能包括绘制基本形状、文本渲染、图像处理及渐变图案。在游戏开发中,Canvas用于绘制游戏元素、实现动画效果、精确的物理碰撞检测,并具有跨平台兼容性,为创造多样化视觉体验和互动游戏提供强大工具。随着技术进步,Canvas在游戏领域的应用将持续增长。
52 4
|
4月前
|
人工智能 Serverless API
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
|
4月前
|
Web App开发 前端开发 测试技术
【Web API系列】使用异步剪贴板API(async clipboard)的图像的编程复制和粘贴
【Web API系列】使用异步剪贴板API(async clipboard)的图像的编程复制和粘贴
157 1
|
API 计算机视觉 索引
【COCO数据集】COCO API 解析图像数据和目标标签,vision-transformer DETR的相关transforms操作实现
【COCO数据集】COCO API 解析图像数据和目标标签,vision-transformer DETR的相关transforms操作实现
400 0
|
XML 存储 人工智能
分享:包括 AI 绘画在内的超齐全免费可用的API 大全
我给大家整理了超级齐全的免费可用 API,包括 AI 绘画在内,有需要的小伙伴赶紧收藏了。
1194 0
分享:包括 AI 绘画在内的超齐全免费可用的API 大全
|
监控 BI API
pyqt5 + 百度api 打造一个图像人脸识别、分割的程序
前序 这篇文章主要介绍利用 pyqt5 和 百度人脸识别 api 搭建一个具有人脸识别、头像裁剪等多个功能集一体的小工具,我们先看一下程序的最终效果
|
API C# 图形学
WPF中如何使用图像API进行绘制
原文:WPF中如何使用图像API进行绘制 首先,由于WPF中不象GDI+中有Graphics对象,因此你无法使用Graphics进行绘图了,取而代之的是:DrawingContext;类似地,GDI+中的OnPaint已被OnRender取代。
1123 0