stable diffusion webui 文生图(txt2img)api接口调用(使用C#)

本文介绍了如何使用C#通过RestSharp库调用sdwebuiapi的txt2img接口,包括配置api启用参数、本地运行Swagger文档以及处理可能的访问问题。同时,展示了请求和响应类的定义,并给出了请求接口的代码示例,包括设置请求头、请求体和处理响应。在遇到Unauthorized错误时,提示需要检查API授权。
摘要由CSDN通过智能技术生成

唠嗑

本次将跟读者讲一下如何通过C#请求sd webui api 【txt2img】接口,如果读者觉得文章有用,请给【点个赞】吧,有问题可以评论区提问。

实战

1.配置api启用参数

启动webui时,需加上【–api】 命令以保证api接口可以被调用。如果需要设置密码,可以通过【–api-auth 账号:密码】和【–gradio-auth 账号:密码】 的方式启用。如下图所示的方式,进行开启即可。
注:这里只设置–api-auth的密码是无效了,login接口,是用于ui页面登录的,原有代码是没有api-auth接口返回token的。(如果说错了,欢迎指正)
在这里插入图片描述

2.本地运行

访问http://127.0.0.1:7860/docs 可以看到swagger文档,但是有时候,会发现访问不到,且报了超时的错误。
原因是swagger界面有js文件是引用cdn的,如果科学上网就一定可以访问到,不科学上网,则有时可以有时不行!
在这里插入图片描述
在这里插入图片描述

3.代码实战

3.1请求/响应类

创建一个C#项目,这里我用控制台,也可以是webapi、mvc等都可以的。如下,创建两个dto类

/// <summary>
    ///  Txt2Img 文生图 请求实体类
    /// </summary>
    public partial class Text2ImgRequestDto
    {

        /// <summary>
        /// 高度(不适用这个去设置,容易导致图片生成重复的内容,因sd的模型,一般都是基于512去训练的)
        /// </summary>
        public long? height { get; set; } = 512;

        /// <summary>
        /// 宽度(不适用这个去设置,容易导致图片生成重复的内容,因sd的模型,一般都是基于512去训练的)
        /// </summary>
        public long? width { get; set; } = 512;

        /// <summary>
        /// 反向提示词
        /// </summary>
        public string? negative_prompt { get; set; }
        /// <summary>
        /// 正向提示词
        /// </summary>
        public string prompt { get; set; }

        /// <summary>
        /// 面部修复(画人像的时候可以考虑使用)
        /// </summary>
        public bool? restore_faces { get; set; } = false;

        /// <summary>
        /// 总批次数
        /// </summary>  
        public long? n_iter { get; set; } = 1;
        /// <summary>
        /// 单批数量(每次生成的图片数量)
        /// </summary>
        public long? batch_size { get; set; } = 4;
        /// <summary>
        /// Sampler 采样方法,默认Euler
        /// </summary>
        public string sampler_index { get; set; } = "Euler a";
        /// <summary>
        /// 随机种子数,默认为-1
        /// </summary>
        public long? seed { get; set; } = -1;
        /// <summary>
        /// 生成步数,默认20
        /// </summary>
        public long? steps { get; set; } = 20;

        
        /// <summary>
        /// 平铺
        /// </summary>
        public bool? tiling { get; set; } = false;

        /// <summary>
        /// 设置模型(不设置会自动有默认的模型)
        /// </summary>
        //public Dictionary<string, object> override_settings { get; set; }  = new Dictionary<string, object>() { { "sd_model_checkpoint", "deliberate_v2.ckpt" } };

        / <summary>
        / Hr Resize X
        / </summary>
        //public long? hr_resize_x { get; set; }

        / <summary>
        / Hr Resize Y
        / </summary>
        //public long? hr_resize_y { get; set; }

        / <summary>
        / 放大倍数
        / </summary>
        //public string hr_upscaler { get; set; }


        /// <summary>
        /// 关键词相关性
        /// </summary>
        public double? cfg_scale { get; set; } = 7;



    }
/// <summary>
    /// 文生图 响应体类
    /// </summary>
    public class Text2ImgResponseDto
    {
        /// <summary>
        /// 生成的图片数组
        /// </summary>
        public List<string> images = new List<string>();

        /// <summary>
        /// request请求中的body
        /// </summary>
        public Text2ImgRequestDto parameters = new Text2ImgRequestDto();

        /// <summary>
        /// 返回的图片数组生成参数信息
        /// </summary>
        public string? info { get; set; }
    }

3.2请求sd api接口

1、在控制台程序中,需要安装【RestSharp】和【Newtonsoft.Json】nuget包,一个用于做api请求,另一个用于json的序列化。
在这里插入图片描述
2、添加以下代码到你的项目中,直接运行即可,请求的是本地运行的接口,如下的【http://127.0.0.1:7860/sdapi/v1/txt2img】,需要替换为读者自己的路径。
3、设置请求头:如果读者本地设置了api接口访问需要登录,则需要在header中添加【Authorization】,并设置token。
4、设置请求体:需要创建一个【Text2ImgRequestDto】对象,并且【prompt(提示词)】属性值需要进行赋值,以保证sd接口的正常调用。

using ConsoleApp1;
using Newtonsoft.Json;
using RestSharp;
using System.Threading.Channels;

//使用restclient进行请求
var client = new RestClient("http://127.0.0.1:7860/sdapi/v1/txt2img");
var request = new RestRequest();

//添加i请求头
request.AddHeader("Content-Type", "application/json");
//request.AddHeader("Authorization", "Basic xxxxxx");  //如果启动时加了--api-auth,则需要加上token,否则会返回
request.AddHeader("Accept", "*/*");
request.AddHeader("Connection", "keep-alive");

//构造请求体内容,param中的参数,可以看【Text2ImgRequestDto】中的解析
var param = new Text2ImgRequestDto();
param.prompt = "a hat cat";//提示词
request.AddParameter("application/json", param, ParameterType.RequestBody);
RestResponse response = client.Post(request);
var result = JsonConvert.DeserializeObject<Text2ImgResponseDto>(response.Content);
Console.WriteLine("执行完!");

5、执行请求:执行RestClient的Post方法进行请求。
6、json序列化:使用【Newtonsoft.Json】的【JsonConvert.DeserializeObject】将请求结果转为实体类,如下图:
(1)images:是接口返回给我们的base64图片数组,因【Text2ImgRequestDto】设置了默认生成【4张图】,所以这里的数组长度为【4】。
(2)parameters:request请求中的body。
(3)info:返回的图片数组生成参数信息
在这里插入图片描述

3.4效果图

复制images数组其中一张图片的base64值,在网上找一个base64转图片的在线工具,粘贴后,可以看到生成的图片如下,这表示我们成功通过接口请求了sd webui api接口。
在这里插入图片描述

Request failed with status code Unauthorized

如果调用接口时,报了“Request failed with status code Unauthorized”错误,这个时候,需要看看是不是加了"–api-auth"参数?如果是的话,则需要请求token后,加到请求token中才可以。可以参考我的这篇文章的方式去请求token。
在这里插入图片描述
如果还是会报权限的异常,可以用以下的方式,传递账密进行调用
在这里插入图片描述

Stable Diffusion WebUI是一种用于管理CodePlex常见操作的网络用户界面(WebUI),这意味着您不需要登录到服务器上的命令行界面来管理项目。安装过程并不复杂,但需要一些基本的技术知识。下面是安装过程的一些步骤: 首先,确保您的服务器已安装一个数据库管理系统。Stable Diffusion WebUI支持MSSQL Server、MySQL和SQLite等数据库系统,您可以根据自己的需要选择。然后,您需要在服务器上安装.NET框架,因为Stable Diffusion WebUI是一个基于.NET开发的应用程序。您可以在微软官网上下载适合您的版本。 接下来,您需要下载最新版本的Stable Diffusion WebUI。您可以从官方网站或GitHub页面上找到下载链接。将安装包下载到服务器上的任何目录中,然后解压缩它。安装包中包含了一些必要的文件和文件夹,包括安装向导(Install.bat)、WebUI配置文件(StableDiffusion.config)和WebUI启动程序(WebUI.exe)。 在使用安装向导之前,您需要进一步配置您的数据库。因此,您需要使用数据库管理系统(如MSSQL Server Management Studio)创建一个新的Database,并确保您对其具有足够的权限。然后,将您的数据库连接字符串添加到StableDiffusion.config文件中,并更改一些其他设置,例如端口号和SSL证书等。您还需要指定用于启动WebUi的帐户和密码。 一旦您完成了这些准备工作,就可以启动安装向导了。双击Install.bat脚本文件,它会自动安装Stable Diffusion WebUI,并将相关的文件复制到服务器上的指定目录中。安装程序还可以安装.NET框架和其他必要的组件(如IIS和ASP.NET)。 最后,您可以尝试连接到WebUI界面并登录到您的CodePlex项目。在您经过手动或自动设置后,您可以使用Stable Diffusion WebUI的各种功能来管理代码版本控制、问题跟踪、建立代码合并请求等等。它非常方便、强大,是一个非常受欢迎的开源项目管理工具。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值