
DeepSeek Janus-Pro 應用代碼與圖片鏈接實踐
OpenAI 提供了多種模型用于圖像生成,其中 DALL-E 系列是最為知名的。DALL-E 3 模型能夠生成 1024×1024 的高質量圖像,并支持多種尺寸的圖像輸出。
在 Spring AI 框架中,核心的圖像生成接口是 ImageClient
。這個接口通過 ImagePrompt
來描述我們希望生成的圖像。
ImagePrompt
包含了我們需要繪制的圖片信息,如繪圖指令 ImageMessage
和繪圖選項 ImageOptions
。例如,我們可以通過以下代碼構建一個簡單的繪圖請求:
ImagePrompt imagePrompt = new ImagePrompt("幫我畫一張小狗的圖片",
OpenAiImageOptions.builder()
.withModel(OpenAiImageApi.ImageModel.DALL_E_3.getValue())
.withHeight(1024)
.withWidth(1024)
.withResponseFormat("url")
.build());
不同版本的 DALL-E 模型支持的圖片尺寸有所不同:
通過合理配置 ImageOptions
,我們可以生成所需尺寸和格式的圖像。
在了解了基本概念之后,我們將通過一個簡單的例子來實現 DALL-E 3 的圖像生成接口。
在 Spring Boot 項目中,我們可以通過 REST 控制器來處理圖像生成請求。以下是一個簡單的控制器實現:
package com.example.image;
import org.springframework.ai.image.ImageClient;
import org.springframework.ai.image.ImagePrompt;
import org.springframework.ai.image.ImageResponse;
import org.springframework.ai.openai.OpenAiImageOptions;
import org.springframework.ai.openai.api.OpenAiImageApi;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class ImageController {
private final ImageClient imageClient;
public ImageController(ImageClient imageClient) {
this.imageClient = imageClient;
}
@GetMapping("/image")
public String generateImage(String prompt) {
ImagePrompt imagePrompt = new ImagePrompt(prompt, OpenAiImageOptions.builder()
.withModel(OpenAiImageApi.ImageModel.DALL_E_3.getValue())
.withHeight(1024)
.withWidth(1024)
.withResponseFormat("url")
.build());
ImageResponse imageResponse = imageClient.call(imagePrompt);
List results = imageResponse.getResults();
String url = results.get(0).getOutput().getUrl();
return String.format("
", url, prompt);
}
}
在某些情況下,Java 環境可能不適合直接運行復雜的深度學習模型。這時,我們可以通過調用 Python API 來實現。
假設我們已經在 Python 中使用 Flask 搭建了 Imagen
模型的 API 服務器,以下是一個簡單的示例:
from flask import Flask, request, jsonify
from imagen import ImagenModel # 假設已經有Imagen的實現
app = Flask(__name__)
model = ImagenModel()
@app.route('/generate_image', methods=['POST'])
def generate_image():
data = request.json
text = data.get('text', '')
if text:
image = model.generate(text)
image.save('generated_image.png')
return jsonify({"status": "success", "image_path": "generated_image.png"})
else:
return jsonify({"status": "error", "message": "No text provided"})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
下面是如何在 Java 中通過 HTTP 請求調用上述 Python API 的示例:
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import org.json.JSONObject;
public class ImagenClient {
private static final String API_URL = "http://localhost:5000/generate_image";
public static void main(String[] args) {
try {
URL url = new URL(API_URL);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json");
connection.setDoOutput(true);
JSONObject jsonInput = new JSONObject();
jsonInput.put("text", "A beautiful sunset over a mountain range");
try (OutputStream os = connection.getOutputStream()) {
byte[] input = jsonInput.toString().getBytes("utf-8");
os.write(input, 0, input.length);
}
int responseCode = connection.getResponseCode();
System.out.println("POST Response Code :: " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} else {
System.out.println("POST request not worked");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
通過本文,我們詳細探討了如何在 Java 中調用 Imagen 3 API,實現從簡單的圖像生成到通過 Python API 進行復雜的圖像生成服務。結合這些方法,我們可以在 Java 應用中實現高效的圖像生成功能。
問:如何在 Java 項目中集成 Imagen 3 API?
spring-ai-openai-spring-boot-starter
依賴,并使用 ImageClient
和 ImagePrompt
來實現。問:是否可以在 Java 環境中直接運行 Imagen 模型?
問:如何處理圖像生成的不同尺寸需求?
ImageOptions
中配置所需的尺寸和格式,DALL-E 模型支持多種尺寸選項。問:如何確保圖像生成請求的安全性?
問:Java 調用 Python API 是如何實現的?
HttpURLConnection
類發送 HTTP 請求,并處理 API 的 JSON 響應。