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

news2025/1/23 14:03:31

唠嗑

本次将跟读者讲一下如何通过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。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/632516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Shell脚本文本三剑客之awk编辑器

目录 一、sed编辑器简介 二、sed工作流程 三、sed命令 四、sed命令的使用 1.sed打印文件内容&#xff08;p&#xff09; &#xff08;1&#xff09;打印文件所有行 &#xff08;2&#xff09;打印文件指定行 2.sed增加、插入、替换行&#xff08;a、i、c&#xff09; …

Shell脚本之正则表达式详解

目录 一、正则表达式简介 二、正则表达式的组成 三、正则表达式分类 四、正则表达式字符用法 1.基础正则表达式常见元字符&#xff08;支持grep、egrep、sed、awk&#xff09; 2. 扩展正则表达式元字符&#xff08;支持&#xff1a;egrep、grep -E、awk、sed -r&#xff…

C语言之数据在内存中的存储(2)

本章重点&#xff1a;浮点数在内存中的存储 浮点数&#xff1a;数学中的小数 eg.123.45 12.345*10^1 1.2345*10^2 1E10&#xff1a;1.0*10^10 整型家族的类型&#xff0c;表示范围&#xff1a;limits.h 浮点数&#xff1a;float.h 大家可以猜测一下打印的这四个数字…

Unity中动画系统的性能优化

降低骨骼数&#xff0c;减少面片数。 方法&#xff1a; 1.勾选Optimize Game Objects&#xff0c;以剔除骨骼节点对应的Transform节点 2.开启多线程渲染选项 主要影响的函数调用开销&#xff0c;可以在profiler中查看&#xff1a; Animators.Update MeshSkinning.Update C…

【TCP/IP】多进程服务器的实现(进阶) - 信号处理及signal、sigaction函数

目录 信号 signal函数 sigaction函数 尝试用信号来处理僵尸进程 我们在之前学习了如何处理“僵尸进程”&#xff0c;但也会有疑问&#xff1a;调用wait和waitpid函数时我们关注的始终是在子进程上&#xff0c;那么父进程上的管控&#xff08;对于子进程&#xff09;该如何实…

STM32——05-按键、时钟控制、中断复位 点亮LED灯

如何点亮一颗LED灯 编程实现点灯 常用的 GPIO HAL 库函数&#xff1a; void HAL_GPIO_Init ( GPIO_TypeDef * GPIOx , GPIO_InitTypeDef * GPIO_Init ); void HAL_GPIO_WritePin ( GPIO_TypeDef * GPIOx , uint16_t GPIO_Pin , GPIO_PinState PinState ); void HAL_GPIO_Togg…

chatgpt赋能python:Python如何创建新项目

Python如何创建新项目 Python已经成为了全球最受欢迎的编程语言之一。如果您是一个有经验的Python工程师&#xff0c;您可能已经知道如何在命令行上创建新项目。但是&#xff0c;如果您是一个新手或初学者&#xff0c;您可能需要一些指导来开始创建新的项目。在本篇文章中&…

Vue中如何进行样式绑定?

Vue中如何进行样式绑定&#xff1f; 在Vue中&#xff0c;我们可以很方便地进行样式绑定。样式绑定是将CSS样式与Vue组件中的数据进行关联的一种技术。通过样式绑定&#xff0c;我们可以根据组件的状态动态地修改其外观。本文将介绍Vue中的样式绑定&#xff0c;包括类绑定、内联…

chatgpt赋能python:Python如何进行升序排列?

Python如何进行升序排列&#xff1f; Python是一门广泛应用于Web开发、数据科学、人工智能、机器学习等领域的编程语言。在这个快速发展的世界中&#xff0c;如何高效地排序数据是非常重要的。本文将介绍Python中如何进行升序排序。 基本排序方法 Python提供了一个内置函数s…

Vue 中的列表渲染

Vue 中的列表渲染 在 Vue 中&#xff0c;列表渲染是非常常见的操作。它允许我们将一个数组中的数据渲染为一个列表&#xff0c;从而实现数据的展示和交互。在本文中&#xff0c;我们将探讨 Vue 中的列表渲染的基本原理和用法&#xff0c;并给出一些实例代码来帮助读者更好地理…

【模块三:职业成长】38|能力维度三:如何提升解决跨领域冲突的能力?

你好&#xff0c;我是郭东白。今天我们来讨论架构师核心能力的第三个层次——解决跨领域冲突。 上节课我们讲了从程序员到兼职架构师的跨越&#xff0c;也就是如何搭建解决横向问题的能力。 不过&#xff0c;在兼职架构师这个角色中&#xff0c;架构能力是一个加分项&#xff…

chatgpt赋能python:如何使用Python升序排列一个列表?

如何使用Python升序排列一个列表&#xff1f; 在Python编程中&#xff0c;我们经常需要对列表进行排序。列表排序是一种常见的操作&#xff0c;可以帮助我们对数据进行分析和管理。在这篇文章中&#xff0c;我们将学习如何使用Python对一个列表进行升序排列。 什么是升序排列…

时间同步/集群时间同步/在线/离线

目录 一、能够连接外网 二、集群不能连接外网--同步其它服务器时间 一、能够连接外网 1.介绍ntp时间协议 NTP&#xff08;Network Time Protocol&#xff09;网络时间协议&#xff0c;是用来使计算机时间同步的一种协议&#xff0c;它可以使计算机对其服务器或时钟源做同步…

【python】【Word】用正则表达式匹配正文中的标题(未使用样式)并通过win32com指定相应样式

标题的格式 二级标题&#xff1a; 数字.数字. 文字 三级标题&#xff1a;数字.数字.数字 文字 python代码 使用方法 只保留一个需要应用的WORD文档运行程序&#xff0c;逐行匹配 使用效果 代码 import win32com.client import redef compile_change_Word_titlestyle():#…

shell脚本语句控制命令(exit、break、continue)

一、exit exit用于直接退出shell脚本程序并返回状态码&#xff08;状态码可在执行命令执行后用$&#xff1f;查看&#xff09; 如果不在exit后添加状态码&#xff0c;会默认返回最后一条命令执行后的状态码 exit 加状态码&#xff0c;代表退出程序并向系统指定状态码 状态码…

基于zinx的go tcp通信案例

基于zinx的go tcp通信示例 一、zinx简介:(https://gitee.com/Aceld/zinx/) Zinx是一个基于Golang的轻量级tcp服务框架&#xff0c;根据官方的定位&#xff0c;zinx是在游戏领域或者其他长链接的领域的轻量级企业框架&#xff0c;其使用简单&#xff0c;性能高效&#xff0c;能…

Baumer工业相机堡盟工业相机如何使用BGAPISDK的相机图像时间戳计算运行时间以及时间差(C#)

Baumer工业相机堡盟工业相机如何使用BGAPISDK的相机图像时间戳计算运行时间以及时间差&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机BGAPI SDK和图像时间戳的技术背景Baumer工业相机使用BGAPISDK控制相机数据流的方式1.引用合适的类文件2.使用BGAPISDK获取时间戳的…

Vue中如何进行条件渲染

Vue中如何进行条件渲染 Vue是一款流行的前端框架&#xff0c;它提供了许多方便的功能来处理数据和视图。其中一个非常有用的功能是条件渲染。条件渲染可以根据条件来控制视图的显示和隐藏。在本文中&#xff0c;我们将介绍Vue中如何进行条件渲染&#xff0c;并提供一些示例代码…

异常数据检测 | Python实现k-means时间序列异常数据检测

文章目录 文章概述模型描述源码分享学习小结文章概述 异常数据检测 | Python实现k-means时间序列异常数据检测 模型描述 k-means是一种广泛使用的聚类算法。它创建了k个具有相似特性的数据组。不属于这些组的数据实例可能会被标记为异常。在我们开始k-means聚类之前,我们使用e…

spring.expression 随笔0 概述

0. 我只是个普通码农&#xff0c;不值得挽留 Spring SpEL表达式的使用 常见的应用场景:分布式锁的切面借助SpEL来构建key 比较另类的的应用场景:动态校验 个人感觉可以用作控制程序的走向&#xff0c;除此之外&#xff0c;spring的一些模块的自动配置类&#xff0c;也会在Cond…