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.niftyadmin.cn/n/5450379.html

相关文章

Untiy 布局控制器Aspect Ratio Fitter

Aspect Ratio Fitter是Unity中的一种布局控制器组件,用于根据指定的宽高比来调整包含它的UI元素的大小。实际开发中,它可以确保UI元素保持特定的宽高比,无论UI元素的内容或父容器的大小如何变化。 如图为Aspect Ratio Fitter组件的基本属性&…

SQLite使用的临时文件(二)

返回:SQLite—系列文章目录 上一篇:SQLite数据库文件损坏的可能几种情况 下一篇:未发表 ​ 1. 引言 SQLite的显着特点之一它是一个数据库由一个磁盘文件组成。 这简化了 SQLite 的使用,因为移动或备份 数据库就像复制单个文…

nav仿真(2)

开启仿真和建图 打开第一个窗口启动仿真: source devel/setup.bash export TURTLEBOT3_MODELburger roslaunch turtlebot3_gazebo turtlebot3_world.launch # 启动仿真打开第二个窗口,开始建图: source devel/setup.bash export TURTLEBOT3_…

聚观早报 | 滴滴2023年Q4营收;微软推广Copilot

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 3月25日消息 滴滴2023年Q4营收 微软推广Copilot 极狐汽车将出口西班牙 华为公开智能驾驶新专利 华为P70系列发布…

众邦科技CRMEB商城商业版任意文件写入getshell 0day

代码审计 接口:/adminapi/system/crud 处理的代码如下 public function save(SystemCrudDataService $service, $id 0){$data $this->request->postMore([[pid, 0],//上级菜单id[menuName, ],//菜单名[tableName, ],//表名[modelName, ],//模块名称[table…

深入了解直播美颜技术:美颜SDK的性能优化与算法创新

美颜技术的核心是美颜SDK,它不仅仅是简单的滤镜应用,更是依托着先进的算法和性能优化实现的。接下来,小编将深度探讨美颜SDK的性能优化与算法创新,带您了解这一领域的最新进展。 一、美颜技术的发展历程 随着移动设备性能的提升和…

nginx--解决响应头带Set-Cookie导致的验证失败

解决响应头带Set-Cookie导致的验证失败 前言给nginx.conf 设置Secure配置完成后会发现cookie就不会发生变化了 前言 在用nginx做代理的时候,会发现nginx在访问不同ip请求的时候会带setCookie 导致后端就是放开cookie验证,在访问玩这个链接他更新了cooki…

第一章 计算机网络概述习题(计算篇)

1.假定网络利用率达到了90%。试估计一下现在的网络时延是它的最小值的多少倍? 解:设网络利用率为U0,网络时延为D,网络时延最小值为D0。 已知U90%,DD0/(1-U)D0/(1-0.9), 即D/ D010,故现在的网络时延是最小值…