Stable Diffusion 进阶教程 - 二次开发(制作您的文生图应用)

目录

1. 引言

 2. 基于Rest API 开发

 2.1 前置条件

 2.2 代码实现

  2.3 效果演示

  2.4 常见错误

 3. 总结


1. 引言

        Stable Diffusion作为一种强大的文本到图像生成模型,已经在艺术、设计和创意领域引起了广泛的关注和应用。然而,对于许多开发者来说,仅仅使用模型的默认设置可能无法满足特定的需求。因此,二次开发成为了实现个性化定制和性能优化的关键途径。本文将引导读者进入Stable Diffusion的二次开发世界,探索如何通过插件、脚本、API二次来实现更高级的图像生成功能。

        首先有必要对 Stable Diffusion 的插件、脚本、API 做个初步的认识:

        Stable Diffusion的插件通常是一些附加的组件或工具,它们可以集成到Stable Diffusion的主程序中,以提供额外的功能或改进现有功能。

        例如,在上一文中《Stable Diffusion插件安装的3种方法,附4个插件下载地址!-CSDN博客》,提到的,人脸修复插件、OpenPose编辑插件都插件:

GitHub - Bing-su/adetailer: Auto detecting, masking and inpainting with detection model.Auto detecting, masking and inpainting with detection model. - Bing-su/adetailericon-default.png?t=N7T8https://github.com/Bing-su/adetailer.gitGitHub - nonnonstop/sd-webui-3d-open-pose-editor: 3d openpose editor for stable diffusion and controlnet3d openpose editor for stable diffusion and controlnet - nonnonstop/sd-webui-3d-open-pose-editoricon-default.png?t=N7T8https://github.com/nonnonstop/sd-webui-3d-open-pose-editor.git         脚本:则是一系列自动化指令的集合,用于执行特定的任务或操作。通过编写脚本,用户可以自动化一些繁琐或重复性的任务,提高工作效率。在Stable Diffusion中,脚本可能被用于自动化图像生成、参数调整、功能拓展等任务。

        API(应用程序接口)是Stable Diffusion提供的一套强大的接口,本文特指SD以RestFul形式对外提供的接口,用于实现Stable Diffusion的各种功能。API允许开发者或用户通过编程的方式与Stable Diffusion进行交互,从而能够定制和扩展其功能。例如,通过API,用户可以接入Stable Diffusion的功能,将其集成到自己的应用程序或网站中,实现个性化的图像生成和处理。

       通过插件、脚本和API的拓展,它们使得Stable Diffusion更加灵活、高效和易于使用。

       本章主要对基于SD的Rest API开发进行详细介绍,给您一种拓展SD的思路,其他的两种开发方式,可以找对应的插件源码进行分析参考。

 2. 基于Rest API 开发

 2.1 前置条件

        如果需要使用SD的REST API,需要先启用API,启用位置如下图:

启用接口

        启用后,可以访问到SD基于Swagger的接口文档,在浏览器中访问http://127.0.0.1:7860/docs,可以查看非常详细的接口描述,以下是部分接口的截图:

接口文档

        如果您还没有安装SD,可以看看往期文章:

        Stable Diffusion绘图神器,2分钟极速安装教程!(提供安装包)-CSDN博客

  2.2 代码实现

        这里为了方便使用python的gradio进行演示,其实也可以使用其他任何语言来调用REST API,也就是说使用调用Rest API的方式,您可以基于SD使用任何语言来开发您的应用。

import gradio as gr
import json
import requests
import io
import base64
from PIL import Image
# 定义文生图请求
def text_to_image(text):payload = {"prompt": text,"steps": 20}url = "http://127.0.0.1:7860";payload_json = json.dumps(payload)# 发送POST请求response = requests.post(url=f'{url}/sdapi/v1/txt2img', data=payload_json).json()# response 响应包含 images、parameters 和 info,image 可能会含有多个图像 这里只取第一个图像。image  = Image.open(io.BytesIO(base64.b64decode(response['images'][0])))return image# 创建Gradio接口实例
iface = gr.Interface(fn=text_to_image,inputs="text",outputs="image",title="Text to Image Generator",description="Enter some text and see the generated image.")
# 启动交互式Web应用
iface.launch(inline=True)  # 使用`inline=True`在Jupyter notebook中运行

         上述代码中,payload 是请求的参数体,可以结合具体的接口参数,传入更多配置参数!

  • 启动程序
后台输出

        启动程序后根据后台输出提示,在浏览器中输入对应地址进行访问,出现如下界: 

启动后的界面

   2.3 效果演示

        在输入框中输入提示词,点击提交按钮,右边就会出现生成的结果。

演示效果

   2.4 常见错误

        如果点击提交按钮出现类似这样的错误:index.js:170     POST http://127.0.0.1:7861/run/predict 422 (Unprocessable Entity) ,根据经验可能是gradio和python的版本不对应。将python的版本切换到python3.8以上可以解决此问题。

 3. 总结

        至此,基于Stable Diffusion 的二次开发已经介绍完毕,在本教程中,提供了详细的代码示例,展示了如何调用SD的API。这些示例旨在为读者提供一个起点,以便在实际应用中进一步探索Stable Diffusion的二次开发潜力。基于Stable Diffusion的二次开发是一个充满挑战和机遇的领域。通过不断地探索和实践,相信您可以创造出更多有趣和实用的应用。

       

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

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

相关文章

iOS开发进阶(九):OC混合开发嵌套H5应用并互相通信

文章目录 一、前言二、嵌套H5应用并实现双方通信2.1 WKWebView 与JS 原生交互2.1.1 H5页面嵌套2.1.2 常用代理方法2.1.3 OC调用JS方法2.1.4 JS调用OC方法 2.2 JSCore 实现原生与H5交互2.2.1 OC调用H5方法并传参2.2.2 H5给OC传参 2.3 UIWebView的基本用法2.3.1 H5页面嵌套2.3.2 …

Spring Boot | SpringBoo“开发入门“

目录 : 1.SpringBoot的“介绍”SpringBoot”概述” :SpringBoot”简介“SpringBoot的“优点” 2. SpringBoot入门程序环境准备使用 “Maven”方式构建SpringBoot 项目使用“Spring Initializr”方式构建Spring Boot 项目 3. “单元测试” 和“热部署”单元测试热部署…

微服务day06 -- Elasticsearch的数据搜索功能。分别使用DSL和RestClient实现搜索

1.DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1.DSL查询分类 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有:查询出所有数据,一…

‘npm‘ 不是内部或外部命令,也不是可运行的程序

npm认识三年了,今天才知道这是node.js的命令 也就是说,想要在cmd里面运行 npm 命令,但就的安装node.js 1. node.js安装 没有安装包的先下载安装包:下载 | Node.js 中文网 (nodejs.cn) 下载之后双击打开,一路安装确…

基于Arduino IDE 野火ESP8266模块 EEPROM 存储开发

一、操作存储器 我们可以使用ESP8266模块的EEPROM,也就是可读可擦存储器,可以掉电不丢失地帮我们存储一些数据。ESP8266微控制器有一个闪存区(Flash memory) 来模拟Arduino的EEPROM。这是微控制器中一个特殊的内存位置,即使在主板关闭后&…

vscode添加gitee

1.创建仓库 2.Git 全局设置 3.初始化仓库 2.1 打开vscode打开需要上传到给git的代码文件 2.2.点击左边菜单第三个的源代码管理->初始化仓库 4.点击加号暂存所有更改 5.添加远程仓库 5.1 添加地址,回车 5.2 填写库名,回车 6.提交和推送 6.1 点击✔提交…

SpringBoot学习之ElasticSearch下载安装和启动(Mac版)(三十一)

本篇是接上一篇Windows版本,需要Windows版本的请看上一篇,这里我们继续把Elasticsearch简称为ES,以下都是这样。 一、下载 登录Elasticsearch官网,地址是:Download Elasticsearch | Elastic 进入以后,网页会自动识别系统给你提示Mac版本的下载链接按钮 二、安装 下载…

【分布式】——CAPBASE理论

CAP&BASE理论 ⭐⭐⭐⭐⭐⭐ Github主页👉https://github.com/A-BigTree 笔记链接👉https://github.com/A-BigTree/tree-learning-notes ⭐⭐⭐⭐⭐⭐ Spring专栏👉https://blog.csdn.net/weixin_53580595/category_12279588.html Sprin…

JMeter元件作用域和执行顺序

JMeter元件作用域和执行顺序 元件的基本介绍基本元件总结 作用域的基本介绍作用域的原则元件执行顺序Jmeter第一个案例: Jmeter三个重要组件(重点)线程组特点线程组分类线程组的属性案例分析 HTTP请求案例一(使用HTTP请求路径来传…

基于ArkUI框架开发-ImageKnife渲染层重构

ImageKnife是一款图像加载缓存库,主要功能特性如下: ●支持内存缓存,使用LRUCache算法,对图片数据进行内存缓存。 ●支持磁盘缓存,对于下载图片会保存一份至磁盘当中。 ●支持进行图片变换:支持图像像素…

el-card设置内边距

el-card设置内边距 :deep(.el-card .el-card__body) {padding: 5px; }

java第一次作业(二)

先写思路,再写代码,思路清晰,才能写对代码 7-6 求12...n的和 思路: 运用expression的字符串输出 重点: expression输出 代码: import java.util.Scanner; public class Main {public static void main…

【代驾+顺风车+货运】全开源双端APP代驾+顺风车+货运代驾小程序源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 一、详细介绍 系统是基于Thinkphpuniapp开发的,全开源未加密,这套源码可以拿回去自己做二开 后台用户端司机端 功能详情介绍: 车主实名认证,驾驶证认证,车…

MySQL8.0.27(社区版)安装教程和环境变量配置

MySQL8.0.27(社区版)软件百度网盘链接 链接:https://pan.baidu.com/s/1SRS0hAQQBENQFTfLeDjYzw?pwd1111 提取码:1111 下载完成后,解压MySQL社区版的ZIP压缩文件,通过命令的方式安装MySQL 1.安装MySQL8.0…

程序汪若依微服务华为云Linux部署保姆教程

若依官方有3个版本,程序汪以前已经出了对应的安装部署视频教程 单应用版本 前后分离版本 微服务版本 本视频是若依微服务版本,如果基础的环境软件都不会安装建议看下程序汪的单应用和前后端分离版本教程, 欢迎点击进入 (单应…

字符驱动程序-LCD驱动开发

一、驱动程序的框架 总共分为五步: 1、自己设定或者系统分配一个主设备号 2、创建一个file_operations结构体 这个结构体中有操作硬件的函数,比如drv_open、drv_read 3、写一个注册设备驱动函数 需要register_chrdev(major,name,结构体)&#xff0…

各种需要使用的方法-->vue/微信小程序/layui

各种需要使用的方法-->vue/微信小程序/layui 1、vue里样式不起作用的方法,可以通过deep穿透的方式2、 js获取本周、上周、本月、上月日期3、ArrayBuffer Blob 格式转换ArrayBuffer与Blob的区别ArrayBuffer转BlobBlob转ArrayBuffer需要借助fileReader对象 4、使用…

2015年认证杯SPSSPRO杯数学建模D题(第一阶段)城市公共自行车全过程文档及程序

2015年认证杯SPSSPRO杯数学建模 D题 城市公共自行车 原题再现: 城市交通问题直接影响市民的生活和工作。在地形平坦的城市,公共自行车出行系统是一种很好的辅助手段。一般来说,公共自行车出行系统由数据中心、驻车站点、驻车桩、自行车&…

python初级第一次作业

一、 dayint(input("enter today day")) fdayint(input("enter num of day since today")) c((fday%7)day)%7 if c0:print("sunday") elif c1:print("monday") elif c2:print("tuesday") elif c3:print("wendnsday&quo…

openGauss + Datakit搭建openGauss运维平台

系统架构OS 硬件需求:2c4g [rootlocalhost ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [rootlocalhost ~]# uname -m x86_64 [rootlocalhost ~]# hostname -I 192.168.92.32 下载地址:https://opengauss.org/zh/download/ 下载…