Como Gerar Imagens com IA em Java: Spring Boot + OpenAI DALL-E

Introdução
A integração de inteligência artificial (IA) em aplicações Java nunca foi tão simples e poderosa quanto com o Spring AI. Neste post, vamos explorar como você pode gerar imagens incríveis usando o OpenAI DALL-E diretamente de uma aplicação Spring Boot. O projeto Spring AI facilita a integração de modelos de IA, como o DALL-E, em suas aplicações Java, permitindo que você crie funcionalidades avançadas com poucas linhas de código.
O Projeto Spring AI
O Spring AI é um projeto que visa simplificar a integração de modelos de IA em aplicações Spring. Ele oferece uma abstração fácil de usar para interagir com diferentes provedores de IA. Com o Spring AI, você pode focar na lógica do seu negócio, enquanto a biblioteca cuida da complexidade de se comunicar com APIs de IA.
Para saber mais sobre o Spring AI e sua documentação oficial, você pode acessar o link: Spring AI Documentation.
Gerando Imagens com OpenAI DALL-E
Vamos criar um exemplo prático onde geramos uma imagem com base em uma descrição fornecida pelo usuário. A imagem será gerada usando o OpenAI DALL-E e retornada em uma página HTML que renderiza a imagem.
Configuração do Projeto
Primeiro, vamos configurar nosso projeto Spring Boot. Aqui está o pom.xml
com as dependências necessárias:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.gasparbarancelli</groupId>
<artifactId>image-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>image-demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>23</java.version>
<spring-ai.version>1.0.0-M5</spring-ai.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${spring-ai.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
Implementação do Endpoint
Agora, vamos implementar um endpoint que recebe uma descrição de imagem e retorna a imagem gerada pelo DALL-E.
package com.gasparbarancelli.image_demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ImageDemoApplication {
public static void main(String[] args) {
SpringApplication.run(ImageDemoApplication.class, args);
}
}
E aqui está o controlador que faz a mágica acontecer:
package com.gasparbarancelli.image_demo;
import org.springframework.ai.image.ImagePrompt;
import org.springframework.ai.image.ImageResponse;
import org.springframework.ai.openai.OpenAiImageModel;
import org.springframework.ai.openai.OpenAiImageOptions;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Controller
@RequestMapping("/")
public class ImageDemoApi {
private final OpenAiImageModel openAiImageModel;
public ImageDemoApi(OpenAiImageModel openAiImageModel) {
this.openAiImageModel = openAiImageModel;
}
@GetMapping
@ResponseBody
public String index(@RequestParam("description") String description) {
ImageResponse response = openAiImageModel.call(
new ImagePrompt(description,
OpenAiImageOptions.builder()
.quality("hd")
.N(1)
.height(1024)
.width(1024).build())
);
var url = response.getResult().getOutput().getUrl();
return """
<html>
<body>
<img src='%s'>
</body>
</html>
""".formatted(url);
}
}
Configuração da Chave API
No arquivo application.properties
, adicione sua chave API da OpenAI:
spring.application.name=image-demo
spring.ai.openai.api-key=${API_KEY}
Como Funciona?
-
Descrição da Imagem: O usuário fornece uma descrição da imagem que deseja gerar.
-
Chamada ao DALL-E: A aplicação envia a descrição para o DALL-E via Spring AI.
-
Renderização da Imagem: A URL da imagem gerada é retornada e renderizada em uma página HTML.
Exemplos de Imagens Geradas
Aqui estão dois exemplos de imagens que gerei usando a aplicação:
-
Descrição: "Uma xícara de café na cor branca e amarela em cima de um livro de cor azul."

-
Descrição: "Uma mesa rústica com várias folhas verdes, uma xícara de café e um lago no fundo com pôr do sol."

Conclusão
Como você pode ver, integrar IA em suas aplicações Java com Spring AI é incrivelmente simples. Com poucas linhas de código, você pode gerar imagens impressionantes usando o OpenAI DALL-E. O Spring AI abstrai toda a complexidade, permitindo que você se concentre no que realmente importa: a lógica do seu negócio.
Experimente você mesmo e veja como é fácil adicionar IA às suas aplicações Spring Boot!