qinfengge

qinfengge

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

春季 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 繪畫模型智譜我也試了一下,結果發現註冊後送的免費額度僅支持對話模型,不支持文生圖的模型,而且要免費試用最新的模型還需要實名認證。。。有點離譜,遂放棄。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。