DevTurtle logo DevTurtle

Tutorial OpenAI (GPT) – Usare le API di visione con Python

Quando pensiamo ai modelli di intelligenza artificiale, spesso ci vengono in mente i classici assistenti chatbot, capaci di comprendere il linguaggio naturale e generare risposte sempre più simili a quelle umane. Tuttavia, i modelli più avanzati hanno ampliato enormemente il loro campo di applicazione, grazie alla capacità di elaborare una vasta gamma di formati multimediali, come immagini, audio e video. Tra le competenze più affascinanti, la visione artificiale occupa un posto di rilievo, permettendo ai modelli di AI di analizzare e comprendere il contenuto visivo delle immagini.

Uno degli esempi più sorprendenti di queste capacità avanzate è rappresentato dal modello GPT di OpenAI. Originariamente noto per le sue abilità nel comprendere e generare testo, GPT ha evoluto le sue competenze per includere l’analisi delle immagini. Questo significa che, oltre a rispondere a domande testuali, GPT può ora esaminare il contenuto visivo delle immagini, identificare oggetti, descrivere scene e persino interpretare emozioni e contesti.

Questa abilità di comprendere il contenuto delle immagini apre nuove frontiere per numerose applicazioni pratiche. Ad esempio, può essere utilizzata per migliorare i sistemi di assistenza visiva per non vedenti, automatizzare la moderazione dei contenuti nelle piattaforme social, o potenziare le funzionalità di ricerca visiva nei motori di ricerca e nei cataloghi di e-commerce. Inoltre, la combinazione di analisi testuale e visiva permette a GPT di fornire risposte estremamente pertinenti e contestualizzate, aumentando significativamente l’efficacia e la precisione delle interazioni.

L’integrazione di queste capacità multimediali nei modelli di AI non solo rappresenta un passo avanti tecnologico, ma ridefinisce anche il modo in cui interagiamo con le macchine, rendendo le esperienze utente più intuitive, complete e soddisfacenti. Come vedremo in questo articolo, le API di visione di OpenAI offrono strumenti potenti per sfruttare queste innovazioni, permettendo agli sviluppatori di creare applicazioni sempre più intelligenti e versatili.

Prerequisiti per il tutorial

Prima di cominciare, è necessario che siano soddisfatti i seguenti prerequisiti:

  • Possedere un account OpenAI e avere a disposizione una API KEY valida (definire la variabile d’ambiente OPENAI_API_KEY);
  • Installare Python 3.7 o superiore;
  • Salvare in locale un’immagine da analizzare (nel nostro caso abbiamo usato l’immagine di copertina di questo articolo che abbiamo salvato come image.webp).

Implementazione Python

Conversione immagine in Base64

Per inviare un’immagine alle API di OpenAI, dobbiamo prima convertirla in formato Base64. Questo formato consente di rappresentare i dati binari come stringhe di testo, facilitando l’invio tramite richieste HTTP.

A tal proposito possiamo usare questa semplicissima classe Python:

Python
import base64

class ImgToBase64Converter():
  
   def __init__(self, image_path:str):
        with open(image_path, "rb") as image_file:
            self.base64:bytes = base64.b64encode(image_file.read()).decode('utf-8')
   
   def get_base64(self) -> bytes:
       return self.base64

Di seguito qualche commento per comprenderne il funzionamento:

  • Prima di tutto è necessario leggere il file contenente l’immagine mediante l’istruzione with open(image_path, "rb") as image_file. Questa istruzione apre il file in modalità lettura binaria ("rb"). L’uso del costrutto with assicura che il file venga chiuso correttamente dopo essere stato letto.
  • Il punto cardine del programma è costituito dalla funzione base64.b64encode che consente di trasformare un file in una sequenza di byte usando la codifica base64.

Questa classe è stata salvata in un modulo converter.py che useremo nello step successivo.

Invocazione dell’API di visione

A questo punto, vediamo di seguito come invocare l’API di visione usando il modello GPT-4o-mini:

Python
import os, requests
from converter import ImgToBase64Converter

base64_image = ImgToBase64Converter("image.webp").get_base64()

headers = {
  "Content-Type": "application/json",
  "Authorization": f"Bearer {os.environ['OPENAI_API_KEY']}"
}

payload = {
  "model": "gpt-4o-mini",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "Can you describe the content of the image?"
        },
        {
          "type": "image_url",
          "image_url": {
            "url": f"data:image/jpeg;base64,{base64_image}"
          }
        }
      ]
    }
  ],
  "max_tokens": 300
}

res = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=payload)
print(res.json()['choices'][0]['message']['content'])
  • Per autenticare la nostra richiesta alle API di OpenAI, dobbiamo includere la chiave API negli headers della richiesta. Abbiamo pertanto usato la funzione os.environ per recuperare il valore della relativa variabile d’ambiente. Inoltre abbiamo specificato il tipo di contenuto come application/json.
  • Il payload della richiesta contiene il modello da utilizzare, i messaggi da inviare e altri parametri come il numero massimo di token da generare. In questo caso, chiediamo al modello di descrivere il contenuto dell’immagine.
  • Abbiamo definito il modello da utilizzare (gpt-4o-mini) e abbiamo inviato due tipi di contenuto: un testo che chiede di descrivere l’immagine e l’immagine stessa in formato Base64.
  • Utilizzando la libreria requests è possibile inviare una richiesta POST alle API di OpenAI. La risposta contiene il testo generato dal modello, che descrive il contenuto dell’immagine.

Provando ad eseguire il codice possiamo verificare l’ottimo livello di comprensione che il modello riesce a raggiungere. Ad esempio nel nostro caso abbiamo ricevuto la seguente risposta:

The image depicts a famous painting, likely the Mona Lisa, displayed in an art gallery. In front of the painting, there are three small, round robots, seemingly observing the artwork. The gallery walls are adorned with other framed artworks, creating an artistic and cultural ambiance. The scene combines traditional art with futuristic technology, illustrating a unique interaction between robots and classic art.

In questo tutorial, abbiamo visto come convertire un’immagine in Base64, configurare una richiesta alle API di visione di OpenAI, creare il payload con il modello e i messaggi, e infine inviare la richiesta e gestire la risposta. Seguendo questi passaggi, puoi integrare facilmente le capacità di visione artificiale di OpenAI nei tuoi progetti Python, permettendo analisi avanzate delle immagini e migliorando le funzionalità delle tue applicazioni.