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
接著添加依賴
<!-- 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='圖片'/>";
}
需要注意的是
- Stability AI 的提示詞請使用英文,中文可能會 pass
- Stability AI 的返回只有圖片的 base64 格式,返回的 URL 是 null
智譜#
另一個 AI 繪畫模型智譜我也試了一下,結果發現註冊後送的免費額度僅支持對話模型,不支持文生圖的模型,而且要免費試用最新的模型還需要實名認證。。。有點離譜,遂放棄。