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