1. Introduzione al Modello GPT-4 Vision

Il modello GPT-4 Vision (GPT-4V) è un modello di intelligenza artificiale multimodale introdotto da OpenAI, che integra capacità di comprensione visiva basate su GPT-4. A differenza dei tradizionali modelli di elaborazione del testo, GPT-4V può ricevere ed analizzare contenuti delle immagini, fornendo descrizioni, risposte a domande e interazioni relative alle immagini.

Esempi di Applicazioni:

  • Riconoscimento e Classificazione di Prodotti: Le piattaforme di e-commerce possono utilizzare GPT-4V per identificare e fornire descrizioni di immagini di prodotti, contribuendo a migliorare i sistemi di ricerca e raccomandazione.
  • Supporto alle Decisioni Mediche: Sebbene GPT-4V non sia adatto per una diagnosi diretta professionale di immagini mediche, può aiutare il personale medico nella comprensione iniziale delle immagini e nell'organizzazione dei dati.
  • Educazione e Ricerca: Nell'insegnamento e nella ricerca scientifica, GPT-4V può essere utilizzato per analizzare grafici, risultati sperimentali e interpretare automaticamente dati scientifici delle immagini.
  • Monitoraggio e Analisi del Traffico: Mediante l'analisi delle immagini di sorveglianza del traffico, GPT-4V può assistere i sistemi di gestione del traffico nella segnalazione in tempo reale delle condizioni e nell'identificazione degli incidenti.

2. Esempio Semplice

Di seguito è riportato un semplice esempio che utilizza una richiesta CURL per dimostrare come utilizzare il modello di visione GPT-4 per analizzare immagini:

Parametri della Richiesta API:

  • model: Specifica la versione del modello da utilizzare, in questo caso "gpt-4-vision-preview".
  • messages: Contiene la definizione del ruolo e il contenuto, dove il contenuto può includere testo e collegamenti alle immagini.
  • max_tokens: Specifica il limite massimo di lunghezza per la generazione del testo.

Esempio di Richiesta CURL:

curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-4-vision-preview",
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "text",
            "text": "Cosa c'è in questa immagine?"
          },
          {
            "type": "image_url",
            "image_url": {
              "url": "Il Tuo Link All'Immagine"
            }
          }
        ]
      }
    ],
    "max_tokens": 300
  }'

Con la richiesta sopra, abbiamo inviato un'immagine al modello di visione GPT-4 e posto una semplice domanda: "Cosa c'è in questa immagine?" Il modello analizzerà il contenuto dell'immagine e fornirà una risposta basata sul contenuto dell'immagine.

3. Caricamento Immagini Utilizzando l'Encoding Base64

In alcuni casi, potresti dover caricare un file immagine locale al modello di visione GPT-4. In tali casi, possiamo incorporare i dati dell'immagine nella richiesta API utilizzando l'encoding base64.

Esempio di Codice Python:

import base64
import requests

api_key = "LA_TUA_OPENAI_API_KEY"

def encode_image(image_path):
  with open(image_path, "rb") as image_file:
    return base64.b64encode(image_file.read()).decode('utf-8')

image_path = "percorso_al_tuo_file_immagine.jpg"

base64_image = encode_image(image_path)

headers = {
  "Content-Type": "application/json",
  "Authorization": f"Bearer {api_key}"
}

payload = {
  "model": "gpt-4-vision-preview",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "Cosa c'è in questa immagine?"
        },
        {
          "type": "image_url",
          "image_url": {
            "url": f"data:image/jpeg;base64,{base64_image}"
          }
        }
      ]
    }
  ],
  "max_tokens": 300
}

response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=payload)

print(response.json())

Nel codice sopra, convertiamo prima un file immagine locale in una stringa codificata in base64 e quindi inviamo questa stringa come parte della richiesta all'API. La risposta del modello contiene una descrizione del contenuto dell'immagine.

4. Gestione di Input Multipli di Immagini

A volte è necessario analizzare più immagini contemporaneamente. Il modello di visione GPT-4 supporta la ricezione di input multipli di immagini simultaneamente e consente agli utenti di porre domande su queste immagini o confrontarne le differenze.

Esempio di Input Multiplo di Immagini:

curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-4-vision-preview",
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "text",
            "text": "Cosa c'è di diverso in queste immagini?"
          },
          {
            "type": "image_url",
            "image_url": {
              "url": "URL della prima immagine",
            }
          },
          {
            "type": "image_url",
            "image_url": {
              "url": "URL della seconda immagine",
            }
          }
        ]
      }
    ],
    "max_tokens": 300
  }'

In questa richiesta, inviamo due immagini all'API. Il modello analizzerà ogni immagine separatamente e fornirà descrizioni e confronti in base alle domande poste. Questo approccio è ideale per l'analisi complessiva di una collezione di immagini.

5. Impostazione del Livello di Dettaglio dell'Analisi delle Immagini

Quando si utilizza il modello visivo GPT-4 per l'analisi delle immagini, è possibile impostare il livello di dettaglio in base alle proprie esigenze. Regolando il parametro detail, è possibile scegliere tra basso, alto o auto. Ecco una spiegazione dettagliata di ciascuna opzione e come impostarla:

  • basso: Scegliendo il livello di dettaglio basso, si disabiliterà il modello "ad alta risoluzione". Questo modello riceverà una versione a bassa risoluzione dell'immagine a 512 pixel x 512 pixel e utilizzerà un budget di 65 token per rappresentare l'immagine. Questo è adatto per scenari che non richiedono dettagli elevati, contribuendo a ottenere un tempo di risposta più veloce e a consumare meno token di input.

  • alto: Il livello di dettaglio alto permette al modello di prima visualizzare un'immagine a bassa risoluzione e quindi creare una versione dettagliata ritagliata in una griglia di 512 pixel in base alle dimensioni dell'immagine di input. Ogni ritaglio dettagliato è rappresentato da un budget raddoppiato di 129 token (cioè 65 token per ritaglio predefinito).

  • auto: Il livello di dettaglio automatico determinerà se utilizzare il livello di dettaglio basso o alto in base alle dimensioni dell'immagine di input.

Nell'esempio di codice seguente è mostrato come impostare il livello di dettaglio:

import base64
import requests

api_key = "tuo_OPENAI_API_KEY"

image_path = "percorso_della_tua_immagine.jpg"

base64_image = base64.b64encode(open(image_path, "rb").read()).decode('utf-8')

headers = {
  "Content-Type": "application/json",
  "Autorizzazione": f"Bearer {api_key}"
}

payload = {
  "model": "gpt-4-vision-preview",
  "messages": [
    {
      "ruolo": "utente",
      "contenuto": [
        {
          "tipo": "testo",
          "testo": "Cosa c'è in questa immagine?"
        },
        {
          "type": "image_url",
          "image_url": {
            "url": f"data:image/jpeg;base64,{base64_image}",
            "detail": "alto"  # Impostato al livello di dettaglio alto
          }
        }
      ]
    }
  ],
  "max_tokens": 300
}

risposta = richieste.post("https://api.openai.com/v1/chat/completions", headers=headers, json=payload)

stampa(risposta.json())

6. Comprensione delle Limitazioni del Modello e Gestione delle Immagini

6.1. Limitazioni del Modello

Nonostante la potente funzionalità del modello visivo GPT-4, non è privo di limitazioni, e comprendere queste limitazioni è cruciale per utilizzarlo per la comprensione delle immagini. Ecco una panoramica di alcune limitazioni conosciute:

  • Immagini Mediche: Il modello non è adatto per interpretare immagini mediche professionali, come ad esempio scansioni TC, e non dovrebbe essere utilizzato per consigli medici.

  • Testo Non in Inglese: Il modello potrebbe non performare bene nel processare immagini contenenti testo non latino, come giapponese o coreano.

  • Localizzazione Spaziale: Le prestazioni del modello sono subottimali nei compiti che richiedono precise associazioni di posizione spaziale, come l'identificazione delle posizioni delle pedine su una scacchiera.

  • Dettagli dell'Immagine: Il modello potrebbe avere difficoltà a comprendere grafici o testo con variazioni di colore e stile (ad es. linee continue, linee tratteggiate) in un'immagine.

  • Rotazione dell'Immagine: Il modello potrebbe interpretare erroneamente testo e immagini inclinate o capovolte.

6.2 Gestione delle immagini in sessioni

Poiché l'API di completamento della chat è senza stato, è necessario gestire autonomamente i messaggi (compresi le immagini) passati al modello. Se si desidera utilizzare la stessa immagine più volte, è necessario inviare i dati dell'immagine con ciascuna richiesta API.


payload_aggiuntivo = {
  "modello": "gpt-4-vision-preview",
  "messaggi": [
    {
      "ruolo": "utente",
      "contenuto": [
        {
          "tipo": "testo",
          "testo": "In base a questa immagine, quali suggerimenti hai?"
        },
        {
          "tipo": "image_url",
          "image_url": {
            "url": f"data:image/jpeg;base64,{base64_image}"
          }
        }
      ]
    }
  ],
  "max_tokens": 300
}

nuova_risposta = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=payload_aggiuntivo)

print(nuova_risposta.json())

7. Calcolo dei costi

Ogni immagine che utilizza l'opzione dettaglio: basso consuma fisso 85 token. Per le immagini con l'opzione dettaglio: alto, l'immagine viene prima ridimensionata proporzionalmente per adattarsi alle dimensioni di 2048px x 2048px, e quindi il lato più breve dell'immagine viene assicurato di essere 768px. L'immagine viene quindi divisa in più quadrati da 512px, con ciascun quadrato che consuma 170 token, e vengono aggiunti ulteriori 85 token al conteggio totale finale.

Ad esempio, se un'immagine ha dimensioni di 1024px x 1024px e viene scelta l'opzione dettaglio: alto, il costo in token sarebbe:

  • Prima, poiché 1024 è inferiore a 2048, non vi è alcun adattamento iniziale delle dimensioni.
  • Quindi, con il lato più breve di 1024, l'immagine viene ridimensionata a 768 x 768.
  • Sono necessari 4 quadrati da 512px per rappresentare l'immagine, quindi il costo totale finale dei token sarà 170 * 4 + 85 = 765.

Per una comprensione dettagliata del metodo di calcolo dei costi, consultare la documentazione del modello GPT-4 Vision.

8. Domande frequenti

Di seguito sono riportate alcune domande comuni e relative risposte che gli utenti potrebbero incontrare durante l'utilizzo del modello GPT-4 Vision:

D: Posso ottimizzare le capacità dell'immagine di gpt-4?

R: Attualmente non supportiamo l'ottimizzazione delle capacità dell'immagine di gpt-4.

D: Posso utilizzare gpt-4 per generare immagini?

R: No, puoi utilizzare dall-e-3 per generare immagini e utilizzare gpt-4-vision-preview per comprendere le immagini.

D: Quali tipi di caricamenti file sono supportati?

R: Attualmente supportiamo file PNG (.png), JPEG (.jpeg e .jpg), WEBP (.webp) e file GIF non animati (.gif).