L'avvento dell'intelligenza artificiale ha rivoluzionato molteplici settori, dall'automazione industriale alla medicina. Ma una delle applicazioni più affascinanti è sicuramente la capacità di generare immagini realistiche attraverso algoritmi di machine learning. In questo capitolo della nostra guida su Spring AI, vedremo come generare immagini con OpenAI nelle applicazioni java.

Il modello DALL-E di OpenAI
DALL-E è un modello di IA, specificamente un generatore di immagini, creato da OpenAI. Ciò che lo rende straordinario è la sua capacità di generare immagini realistiche a partire da brevi descrizioni testuali. Il nome stesso del modello è un gioco di parole che evoca il famoso pittore surrealista Salvador Dalí.
Le API di OpenAI mettono a disposizione degli utenti due modelli:
- DALL-E 3: è il modello più recente e permette al momento solo la generazione di nuove immagini in alta definizione. I formati supportati sono: 1024×1024, 1024×1792 or 1792×1024 pixels.
- DALL-E 2: è il modello precedente ma ha meno limitazioni rispetto a DALL-E 3. Oltre a generare nuove immagini, può essere usato anche per modificare immagini esistenti.
Tutorial generazione immagini
Il tutorial partirà come sempre dal nostro progetto di base creato con Spring AI per il quale è possibile scaricare il codice sorgente dal nostro repository GitHub:

Il codice del nostro programma è molto semplice ed è interamente racchiuso all’interno del seguente RestController
:
package com.example.aidemo.controller;
import org.springframework.ai.image.ImageModel;
import org.springframework.ai.image.ImagePrompt;
import org.springframework.ai.image.ImageResponse;
import org.springframework.ai.openai.OpenAiImageOptions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class OpenAiImageController {
private final ImageModel imageClient;
@Autowired
public OpenAiImageController(ImageModel imageClient) {
this.imageClient = imageClient;
}
@GetMapping("/ai/image")
public String generate(@RequestParam(value = "message") String message) {
ImageResponse response = imageClient.call(
new ImagePrompt(message,
OpenAiImageOptions.builder()
.withQuality("hd")
.withN(1)
.withHeight(1024)
.withWidth(1024)
.build()));
return response.getResult().getOutput().getUrl();
}
}
Nonostante il significato sia abbastanza comprensibile a prima vista, riporto di seguito qualche commento sulle proprietà che si possono passare in input al modello:
withQuality
: se valorizzato con “hd” produce immagini di qualità migliore (il valore è compatibile solo col modello “dall-e-3”). Se non specificato, questo parametro verrà valorizzato a “standard”.withN
: indica il numero di alternative da generare. Se valorizzato con un numero diverso da 1 crea più immagini sulla base del prompt fornito in input.withWidth
ewithHeight
: indicano la dimensione dell’immagine (larghezza e altezza).
A meno che non venga specificato diversamente, il modello usato di default è DALL-E 3. Per cambiare modello è possibile impostare la seguente proprietà:
spring.ai.openai.image.options.model=<model>
Il risultato può essere ottenuto in base64 o, come nel nostro esempio, è possibile recuperare l’URL dell’immagine generata.
Per testare il programma possiamo invocare l’endpoint che abbiamo definito:
http://localhost:8080/ai/image?message=Can you create an image of a cat sitting on a chair?
Il risultato che abbiamo ottenuto con la nostra prova è il seguente:

Spero che questo tutorial vi sia stato utile per capire come generare immagini con Spring AI e come al solito concludo invitandovi a leggere anche gli altri articoli della guida.