使用请求调用本地部署的stable-diffusion接口

news2025/3/24 21:41:37

stable-diffusion-webui项目地址
具体部署教程请去B站寻找或者直接使用整合包
这里直接编写工具类

public class StableDiffusionUtil {
    private static final String BASE_URL = "http://127.0.0.1:7860";
    private static final OkHttpClient CLIENT = new OkHttpClient();
    private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
    /**
     * 获取可用模型列表
     *
     * @return 模型列表的 JSON 字符串
     * @throws IOException 如果请求失败
     */
    public static List<ModelInfo> listModels() throws IOException {
        Request request = new Request.Builder()
                .url(BASE_URL + "/sdapi/v1/sd-models")
                .get()
                .build();

        try (Response response = CLIENT.newCall(request).execute()) {
            if (response.isSuccessful()) {
                String jsonResponse = response.body().string();
                // 将 JSON 字符串解析为 ModelInfo 对象列表
                return OBJECT_MAPPER.readValue(jsonResponse, new TypeReference<List<ModelInfo>>() {});
            } else {
                throw new IOException("请求失败: " + response.code());
            }
        }
    }

    /**
     * 生成图片并保存
     *
     * @param prompt          生成图片的描述
     * @param negativePrompt  负面描述
     * @param steps           生成步骤
     * @param cfgScale        CFG 参数
     * @param width          图片宽度
     * @param height         图片高度
     * @param samplerIndex   采样器
     * @param modelCheckpoint 模型名称
     * @param outputFilePath  保存图片的文件路径
     * @throws IOException 如果请求失败或保存图片失败
     */
    public static byte[] generateImage(String prompt, String negativePrompt, int steps, int cfgScale,
                                       int width, int height, String samplerIndex, String modelCheckpoint) throws IOException {
        // 请求参数
        String json = "{"
                + "\"prompt\": \"" + prompt + "\","
                + "\"negative_prompt\": \"" + negativePrompt + "\","
                + "\"steps\": " + steps + ","
                + "\"cfg_scale\": " + cfgScale + ","
                + "\"width\": " + width + ","
                + "\"height\": " + height + ","
                + "\"sampler_index\": \"" + samplerIndex + "\","
                + "\"sd_model_checkpoint\": \"" + modelCheckpoint + "\""
                + "}";

        RequestBody body = RequestBody.create(json, MediaType.parse("application/json; charset=utf-8"));
        Request request = new Request.Builder()
                .url(BASE_URL + "/sdapi/v1/txt2img")
                .post(body)
                .build();

        try (Response response = CLIENT.newCall(request).execute()) {
            if (response.isSuccessful()) {
                String jsonResponse = response.body().string();
                String imageBase64 = jsonResponse.split("\"images\":\\[\"")[1].split("\"")[0];

                // 解码 Base64 图片
                byte[] imageBytes = Base64.getDecoder().decode(imageBase64);
                ByteArrayInputStream bis = new ByteArrayInputStream(imageBytes);
                BufferedImage image = ImageIO.read(bis);

                // 将图片转换为二进制数组
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                ImageIO.write(image, "png", baos);
                return baos.toByteArray();
            } else {
                throw new IOException("请求失败: " + response.code());
            }
        }
    }

    /**
     * 切换模型
     *
     * @param modelCheckpoint 模型名称
     * @throws IOException 如果请求失败
     */
    public static void switchModel(String modelCheckpoint) throws IOException {
        // 更新模型配置
        String json = "{"
                + "\"sd_model_checkpoint\": \"" + modelCheckpoint + "\""
                + "}";

        RequestBody body = RequestBody.create(json, MediaType.parse("application/json; charset=utf-8"));
        Request request = new Request.Builder()
                .url(BASE_URL + "/sdapi/v1/options")
                .post(body)
                .build();

        try (Response response = CLIENT.newCall(request).execute()) {
            if (response.isSuccessful()) {
                System.out.println("模型已切换到 " + modelCheckpoint);
            } else {
                throw new IOException("请求失败: " + response.code());
            }
        }
    }




}

调用工具类实现

@Autowired
    private SysOssService ossService;
    @Test
    void test8() throws Exception {

        String prompt = "A futuristic city with flying cars, highly detailed, 4k";
        String negativePrompt = "blurry, low quality, distorted, text";
        int steps = 30;
        int cfgScale = 7;
        int width = 512;
        int height = 512;
        String samplerIndex = "Euler a";
        String outputFilePath = "output.png";
        String modelInfo="anything-v5-PrtRE.safetensors [7f96a1a9ca]";
        // 调用方法生成图片
        byte[] imageBytes= StableDiffusionUtil.generateImage(prompt, negativePrompt, steps, cfgScale, width, height, samplerIndex, modelInfo);
        String fileName = "generated_image.png"; // 文件名
        String contentType = "image/png"; // 文件类型
        SysOssDTO ossDTO = ossService.upload(imageBytes, fileName, contentType);

        // 打印上传结果
        System.out.println("文件上传成功,访问路径: " + ossDTO.getUrl());
    }

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

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

相关文章

封装一个分割线组件

最终样式 Vue2代码 <template><div class"sep-line"><div class"sep-label"><span class"sep-box-text"><slot>{{ title }}</slot> <!-- 默认插槽内容&#xff0c;如果没有传递内容则使用title -->&…

网络HTTPS协议

Https HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是 HTTP 协议的加密版本&#xff0c;它使用 SSL/TLS 协议来加密客户端和服务器之间的通信。具体来说&#xff1a; • 加密通信&#xff1a;在用户请求访问一个 HTTPS 网站时&#xff0c;客户端&#x…

OSASIS(One-Shot Structure-Aware Stylized Image Synthesis)

文章目录 摘要abstract论文摘要方法损失函数实验结论 总结 摘要 本周阅读了一篇关于新型图像风格化的论文《One-Shot Structure-Aware Stylized Image Synthesis》&#xff0c;旨在解决现有GAN模型在风格化过程中难以保持输入图像结构的问题。通过分离图像的结构和语义信息&am…

C++学习之网盘项目单例模式

目录 1.知识点概述 2.单例介绍 3.单例饿汉模式 4.饿汉模式四个版本 5.单例类的使用 6.关于token的作用和存储 7.样式表使用方法 8.qss文件中选择器介绍 9.qss文件样式讲解和测试 10.qss美化登录界面补充 11.QHTTPMULTIPART类的使用 12.文件上传协议 13.文件上传协议…

Apache Flink技术原理深入解析:任务执行流程全景图

前言 本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据技术体系 思维导图 📌 引言 Apache Flink 作为一款高性能的分布式流处理引擎,其内部执行机制精妙而复杂。本文将…

RAG(Retrieval-Augmented Generation)基建之PDF解析的“魔法”与“陷阱”

嘿&#xff0c;亲爱的算法工程师们&#xff01;今天咱们聊一聊PDF解析的那些事儿&#xff0c;简直就像是在玩一场“信息捉迷藏”游戏&#xff01;PDF文档就像是个调皮的小精灵&#xff0c;表面上看起来规规矩矩&#xff0c;但当你想要从它那里提取信息时&#xff0c;它就开始跟…

C语言【文件操作】详解中(会使用fgetc,fputc,fgets,fputs,fscanf,fprintf,fread,fwrite函数)

引言 介绍和文件操作中文件的顺序读写相关的函数 看这篇博文前&#xff0c;希望您先仔细看一下这篇博文&#xff0c;理解一下文件指针和流的概念&#xff1a;C语言【文件操作】详解上-CSDN博客文章浏览阅读606次&#xff0c;点赞26次&#xff0c;收藏4次。先整体认识一下文件是…

GpuGeek:破解算力难题,赋能AI创新与普及

文章目录 一、引言二、填补算力资源供需缺口&#xff0c;降低使用门槛三、提升算力资源利用率&#xff0c;推动高效协作四、满足多样化需求&#xff0c;支持AI技术落地五、推动算力市场创新&#xff0c;促进生态良性发展六、助力AI人才培养&#xff0c;推动行业长远发展七、结语…

扣子平台知识库不能上传成功

扣子平台知识库不能上传成功 目录 扣子平台知识库不能上传成功查看模板复制头部到自己的excel中json数据转为excel或者csv&#xff08;一定使用excel&#xff0c;csv总是报错&#xff09; 查看模板复制头部到自己的excel中 json数据转为excel或者csv&#xff08;一定使用excel&…

JVM的组成--运行时数据区

JVM的组成 1、类加载器&#xff08;ClassLoader&#xff09; 类加载器负责将字节码文件从文件系统中加载到JVM中&#xff0c;分为&#xff1a;加载、链接&#xff08;验证、准备、解析&#xff09;、和初始化三个阶段 2、运行时数据区 运行时数据区包括&#xff1a;程序计数…

c++进阶之------红黑树

一、概念 红黑树&#xff08;Red-Black Tree&#xff09;是一种自平衡二叉查找树&#xff0c;它在计算机科学的许多领域中都有广泛应用&#xff0c;比如Java中的TreeMap和C中的set/map等数据结构的底层实现。红黑树通过在每个节点上增加一个颜色属性&#xff08;红色或黑色&am…

ubuntu22.04安装搜狗输入法保姆教程~

一、添加中文语言支持 1.首先打开设置,找到Language and Region 2.点击Manage Installed Languages 3.点击 Install/Remove Languages... 4.选中Chinese (simplified),点击Apply

《数据库原理》SQLServer期末复习_题型+考点

目录 题型&#xff1a; 一. 概况分析题&#xff08;5小题&#xff0c;每小题2分&#xff0c;共10分&#xff09; 二. 计算题&#xff08;3小题&#xff0c;每小题5分&#xff0c;共15分&#xff09; 三. 数据库设计&#xff08;2小题&#xff0c;每小题10分&#xff0c;共2…

Zstd(Zstandard)压缩算法

要压缩的数据量越小&#xff0c;压缩的难度就越大。这个问题对所有压缩算法都是通用的&#xff0c;原因是压缩算法从过去的数据中学习如何压缩未来的数据。但是&#xff0c;在新数据集开始时&#xff0c;没有“过去”可以构建。 官网 为了解决这种情况&#xff0c;Zstd 提供了一…

本地部署 browser-use

本地部署 browser-use 0. 引言1. 核心功能与优势2. 快速上手3. 部署 Gradio UI4. 更多示例0. 引言 Browser-Use 是一个强大的工具,旨在让 AI Agent 能够控制浏览器,从而实现各种自动化任务。它简化了 AI 与浏览器的交互,让开发者能够轻松构建能够执行网页操作的智能应用。本…

Vite管理的Vue3项目中monaco editer的使用以及组件封装

文章目录 背景环境说明安装流程以及组件封装引入依赖封装组件 外部使用实现效果 v-model实现原理 背景 做oj系统的时候,需要使用代码编辑器,决定使用Monaco Editor&#xff0c;但是因为自身能力问题&#xff0c;读不懂官网文档&#xff0c;最终结合ai和网友的帖子成功引入&…

[笔记] TinyWebServer编译及demo运行过程

文章目录 前言环境搭建ubuntumysql 8.0c/c开启root用户TinyWebServer 搭建及编译过程运行结果常见问题./threadpool/../CGImysql/sql_connection_pool.h:6:10: fatal error: mysql/mysql.h: No such file or directory./server运行后直接退出了 前言 哎 也就帮帮新手看看问题 …

基于springboot的电影院管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 互联网技术的成熟和普及&#xff0c;势必会给人们的生活方式带来不同程度的改变。越来越多的经营模式中都少不了线上运营&#xff0c;互联网正强力推动着社会和经济发展。国人对民族文化的自信和不同文化的包容&#xff0c;再加上电影行业的发展&#xff0c;如此繁荣吸引…

虚拟电商-延迟任务系统的微服务改造(二)注册中心和Feign调用

一、微服务注册中心Consul 编写完延迟任务系统的web层接口&#xff0c;也就是说可以基于http协议来访问延迟系统&#xff0c;接下来要将延迟任务改造成一个服务。首要考虑的问题就是服务的注册与发现&#xff0c;服务的注册与发现都离不开服务的注册中心&#xff0c;本项目选取…

数智读书笔记系列022《算力网络-云网融合2.0时代的网络架构与关键技术》读书笔记

一、书籍核心价值与定位 1.1 书籍概述:中国联通研究院的权威之作 《算力网络 —— 云网融合 2.0 时代的网络架构与关键技术》由中国联通研究院算力网络攻关团队精心撰写,是业界首部系统性探讨云网融合 2.0 与算力网络的专著。在云网融合从 1.0 迈向 2.0 的关键节点,本书的…