qinfengge

qinfengge

醉后不知天在水,满船清梦压星河
github
email
telegram

spring AI (七) 文生图 DALLE3 + SD

Spring AI 是支持文生图的,当然也是基于现有的解决方案,文生图的代码很简单,也就 5 行左右,不过还是记录下吧。

DALLE3#

这是 OpneAI 发布的文生图的模型,基本上也是最常用的吧,比起专业的 SD 和 MJ 也算可以的了,重点是简单,不要费脑子想提示词,用自然语言描述下即可。

因为之前已经设置过 OpneAI 的依赖和配置,所以也不用再改。

首先创建个 OpenAiImageModel 对象

private final OpenAiImageModel openAiImageModel;

然后把官方的示例copy 过来就行了

ImageResponse response = openaiImageModel.call(
        new ImagePrompt("A light cream colored mini golden doodle",
        OpenAiImageOptions.builder()
                .withQuality("hd")
                .withN(4)
                .withHeight(1024)
                .withWidth(1024).build())

);

其中构建时一些主要的参数解释如下:

参数解释
Model模型,默认是 DALL_E_3
Quality生成的图片质量,仅 dall-e-3 支持
N生成的图片数量
Width生成图片的宽度,对于 dall-e-2,必须是 256x256、512x512 或 1024x1024 之一。对于 dall-e-3 型号,必须是 1024x1024、1792x1024 或 1024x1792 之一
Height生成图片的高度
Style生成的图片风格,必须是 vivid 或 natural,前一个图像更真实后一个更自然,仅支持 dall-e-3

最后将图片返回即可

/**
     * 调用openAI的dall-e-3生成图片
     * @param message 提示词
     * @return ImageResponse
     */
    @GetMapping(value = "/openImage", produces = "text/html")
    public String openImage(@RequestParam String message) {
        ImageResponse imageResponse = openAiImageModel.call(new ImagePrompt(message,
                OpenAiImageOptions.builder()
                        .withModel(OpenAiImageApi.DEFAULT_IMAGE_MODEL)
                        .withQuality("hd")
                        .withN(1)
                        .withWidth(1024)
                        .withHeight(1024).build())
        );

        String url = imageResponse.getResult().getOutput().getUrl();
        System.err.println(url);
        return "<img src='" + url + "'/>";
    }

OpneAI 提供了 2 种返回方式,一种是返回图片的 URL,一种是返回图片的 BASE64 编码。

Stability AI#

最开始我以为 Stability AI 这种方式可以调用本机的 Stable Diffusion 接口进行图片生成,试过才发现不行,Stability AI 是 Stability 官方推出的在线绘画平台,这 2 个是不一样的。

首先在Stability AI 官网 注册账户以获取免费额度。
完成后复制 API KEY

image

接着添加依赖

 <!--  stability依赖   -->
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-stability-ai-spring-boot-starter</artifactId>
        </dependency>

和配置

spring:
  ai:
    stabilityai:
      api-key: sk-xxx

接着同样调用

/**
     * 调用stability生成图片
     * @param message 提示词
     * @return ImageResponse
     */
    @GetMapping(value = "/sdImage", produces = "text/html")
    public String sdImage(@RequestParam String message) {
        ImageResponse imageResponse = stabilityAiImageModel.call(
                new ImagePrompt(message,
                        StabilityAiImageOptions.builder()
                                .withStylePreset("cinematic")
                                .withN(1)
                                .withHeight(512)
                                .withWidth(768).build())

        );

        String b64Json = imageResponse.getResult().getOutput().getB64Json();
        String mimeType = "image/png";
        String dataUrl = "data:" + mimeType + ";base64," + b64Json;

        return "<img src='" + dataUrl + "' alt='图片'/>";

    }

需要注意的是

  1. Stability AI 的提示词请使用英文,中文可能会 pass
  2. Stability AI 的返回只有图片的 base64 格式,返回的 URL 是 null

image

智谱#

另一个 AI 绘画模型智谱我也试了一下,结果发现注册后送的免费额度仅支持对话模型,不支持文生图的模型,而且要免费试用最新的模型还需要实名认证。。。有点离谱,遂放弃。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。