1. Wprowadzenie do modelu wizyjnego GPT-4

Model wizyjny GPT-4 (GPT-4V) to wielomodalny model sztucznej inteligencji opracowany przez OpenAI, który integruje możliwości rozumienia wizualnego oparte na GPT-4. W przeciwieństwie do tradycyjnych modeli przetwarzania tekstu, GPT-4V może otrzymywać i analizować treści obrazów, dostarczając opisów, odpowiadając na pytania i angażując się w interakcje związane z obrazami.

Przykładowe zastosowania:

  • Rozpoznawanie i klasyfikacja produktów: Platformy e-commerce mogą wykorzystywać GPT-4V do identyfikacji i dostarczania opisów obrazów produktów, co pomaga w ulepszaniu systemów wyszukiwania i rekomendacji.
  • Wsparcie w podejmowaniu decyzji medycznych: Choć GPT-4V nie nadaje się do bezpośredniej profesjonalnej diagnozy obrazów medycznych, może wspomagać personel medyczny w początkowym zrozumieniu obrazu i organizacji danych.
  • Edukacja i badania naukowe: W nauczaniu i badaniach naukowych GPT-4V może być używany do analizy wykresów, wyników eksperymentów oraz automatycznego interpretowania danych naukowych w formie obrazowej.
  • Monitorowanie i analiza ruchu ulicznego: Poprzez analizę obrazów z kamer monitoringu ruchu, GPT-4V może wspomagać systemy zarządzania ruchem w raportowaniu warunków w czasie rzeczywistym oraz identyfikacji wypadków.

2. Prosty przykład

Poniżej znajduje się prosty przykład używający żądania CURL, który ilustruje jak używać modelu wizyjnego GPT-4 do analizy obrazów:

Parametry żądania API:

  • model: Określa wersję modelu do użycia, w tym przypadku "gpt-4-vision-preview".
  • messages: Zawiera definicję roli i treść, gdzie treść może zawierać tekst i linki do obrazów.
  • max_tokens: Określa maksymalny limit długości generowanego tekstu.

Przykład żądania 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": "Co jest na tym obrazie?"
          },
          {
            "type": "image_url",
            "image_url": {
              "url": "Twój link do obrazu"
            }
          }
        ]
      }
    ],
    "max_tokens": 300
  }'

Z powyższym żądaniem przekazaliśmy obraz do modelu wizyjnego GPT-4 i zadać proste pytanie: "Co jest na tym obrazie?" Model przeanalizuje treść obrazu i udzieli odpowiedzi na podstawie jego zawartości.

3. Wysyłanie obrazów za pomocą kodowania Base64

W niektórych przypadkach konieczne może być wysłanie lokalnego pliku obrazu do modelu wizyjnego GPT-4. W takich przypadkach możemy osadzić dane obrazu w żądaniu API za pomocą kodowania base64.

Przykład kodu w języku Python:

import base64
import requests

api_key = "TWÓJ_OPENAI_API_KEY"

def koduj_obraz(sciezka_obrazu):
  with open(sciezka_obrazu, "rb") as plik_obrazu:
    return base64.b64encode(plik_obrazu.read()).decode('utf-8')

sciezka_obrazu = "ścieżka_do_twojego_obrazu.jpg"

obraz_base64 = koduj_obraz(sciezka_obrazu)

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

zadanie = {
  "model": "gpt-4-vision-preview",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "Co jest na tym obrazie?"
        },
        {
          "type": "image_url",
          "image_url": {
            "url": f"data:image/jpeg;base64,{obraz_base64}"
          }
        }
      ]
    }
  ],
  "max_tokens": 300
}

odpowiedz = requests.post("https://api.openai.com/v1/chat/completions", headers=naglowki, json=zadanie)

print(odpowiedz.json())

W powyższym kodzie najpierw konwertujemy lokalny plik obrazu na zakodowany base64 ciąg znaków, a następnie wysyłamy ten ciąg jako część żądania do interfejsu API. Odpowiedź modelu zawiera opis zawartości obrazu.

4. Obsługa wielu obrazów wejściowych

Czasami konieczne jest analizowanie wielu obrazów jednocześnie. Model wizyjny GPT-4 obsługuje jednoczesne otrzymywanie wielu obrazów i pozwala użytkownikom zadawać pytania dotyczące tych obrazów lub porównywać ich różnice.

Przykład wprowadzenia wielu obrazów:

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": "Co się różni na tych obrazach?"
          },
          {
            "type": "image_url",
            "image_url": {
              "url": "URL pierwszego obrazu",
            }
          },
          {
            "type": "image_url",
            "image_url": {
              "url": "URL drugiego obrazu",
            }
          }
        ]
      }
    ],
    "max_tokens": 300
  }'

W tym żądaniu przekazujemy dwa obrazy do interfejsu API. Model będzie analizować każdy obraz osobno i dostarczać opisy oraz porównania na podstawie postawionych pytań. Metoda ta jest idealna do ogólnej analizy zbioru obrazów.

5. Ustawianie Poziomu Szczegółowości Analizy Obrazu

Podczas korzystania z modelu wizyjnego GPT-4 do analizy obrazu, można ustawić poziom szczegółowości zgodnie z własnymi potrzebami. Poprzez dostosowanie parametru detail można wybrać jedną z opcji: low, high lub auto. Oto szczegółowe wyjaśnienie każdej z nich oraz sposób ich ustawienia:

  • low: Wybierając niski poziom szczegółowości, dezaktywuje się "model wysokiej rozdzielczości". Model ten będzie otrzymywał obraz o niskiej rozdzielczości 512 pikseli x 512 pikseli i wykorzysta budżet 65 tokenów do reprezentacji obrazu. Jest to odpowiednie dla scenariuszy, w których nie są wymagane wysokie detale, co pomaga uzyskać szybszy czas odpowiedzi i zużywa mniej tokenów wejściowych.

  • high: Wysoki poziom szczegółowości pozwala modelowi najpierw zobaczyć obraz o niskiej rozdzielczości, a następnie stworzyć szczegółową wersję w kratę 512 pikseli na podstawie rozmiaru obrazu. Każdy szczegółowy wycinek jest reprezentowany podwójnym budżetem 129 tokenów (tj. 65 tokenów na domyślny wycinek).

  • auto: Automatyczny poziom szczegółowości będzie decydował, czy użyć poziomu szczegółowości low czy high w zależności od rozmiaru obrazu wejściowego.

Poniższy przykład kodu pokazuje, jak ustawić poziom szczegółowości:

import base64
import requests

klucz_api = "Twój_klucz_OPENAI_API"

ścieżka_obrazu = "ścieżka_do_twojego_obrazu.jpg"

obraz_base64 = base64.b64encode(open(ścieżka_obrazu, "rb").read()).decode('utf-8')

nagłówki = {
  "Content-Type": "application/json",
  "Authorization": f"Bearer {klucz_api}"
}

dane = {
  "model": "gpt-4-vision-preview",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "Co jest na tym obrazie?"
        },
        {
          "type": "image_url",
          "image_url": {
            "url": f"data:image/jpeg;base64,{obraz_base64}",
            "detail": "high"  # Ustaw na wysoki poziom szczegółowości
          }
        }
      ]
    }
  ],
  "max_tokens": 300
}

odpowiedź = requests.post("https://api.openai.com/v1/chat/completions", headers=nagłówki, json=dane)

print(odpowiedź.json())

6. Zrozumienie Ograniczeń Modelu i Zarządzanie Obrazami

6.1. Ograniczenia Modelu

Pomimo potężnej funkcjonalności modelu wizyjnego GPT-4, nie jest on pozbawiony pewnych ograniczeń i zrozumienie tych ograniczeń jest kluczowe dla wykorzystania go do analizy obrazów. Oto przegląd pewnych znanych ograniczeń:

  • Obrazy Medyczne: Model nie nadaje się do interpretowania profesjonalnych obrazów medycznych, takich jak tomografie komputerowe, i nie powinien być stosowany do udzielania porad medycznych.

  • Tekst w Innych Językach: Model może mieć trudności w przetwarzaniu obrazów zawierających tekst z alfabetu innych niż łaciński, takich jak japoński czy koreański.

  • Lokalizacja Przestrzenna: Wydajność modelu jest suboptymalna w zadaniach wymagających precyzyjnych powiązań przestrzennych, takich jak identyfikowanie pozycji elementów na szachownicy.

  • Detale Obrazu: Model może mieć trudności z rozumieniem wykresów czy tekstu z różnymi kolorami i stylami (np. linie ciągłe, przerywane) na obrazie.

  • Rotacja Obrazu: Model może błędnie interpretować przechylony lub odwrócony tekst i obrazy.

6.2 Zarządzanie obrazami w sesjach

Ponieważ interfejs API Uzupełnień Czatu jest bezstanowy, musisz samodzielnie zarządzać wiadomościami (w tym obrazami) przekazywanymi do modelu. Jeśli chcesz użyć tego samego obrazu wielokrotnie, musisz ponownie przesłać dane obrazu przy każdym żądaniu API.


additional_payload = {
  "model": "gpt-4-vision-preview",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "Na podstawie tego obrazu, jakie masz sugestie?"
        },
        {
          "type": "image_url",
          "image_url": {
            "url": f"data:image/jpeg;base64,{base64_image}"
          }
        }
      ]
    }
  ],
  "max_tokens": 300
}

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

print(new_response.json())

7. Obliczanie kosztów

Każdy obraz z użyciem opcji detail: low zużywa stałe 85 znaków. Dla obrazów z opcją detail: high, obraz jest najpierw proporcjonalnie skalowany, aby pasował do rozmiaru 2048px x 2048px, a następnie krótszy bok obrazu jest dopasowany do 768px. Następnie obraz jest podzielony na wiele kwadratów 512px, przy czym każdy kwadrat zużywa 170 znaków, a do końcowego całkowitego kosztu dodawane jest dodatkowe 85 znaków.

Na przykład, jeśli obraz ma wymiary 1024px x 1024px i wybrano opcję detail: high, koszt w znakach będzie:

  • Po pierwsze, ponieważ 1024 jest mniejsze niż 2048, nie ma początkowej regulacji rozmiaru.
  • Następnie, przy krótszym boku wynoszącym 1024, obraz jest zmniejszany do 768 x 768.
  • Aby reprezentować obraz, potrzebne są 4 kwadraty 512px, więc końcowy koszt w znakach wyniesie 170 * 4 + 85 = 765.

Aby dokładnie zrozumieć sposób obliczania kosztów, prosimy zajrzeć do dokumentacji modelu GPT-4 Vision.

8. Najczęściej zadawane pytania

Poniżej znajdują się pewne często zadawane pytania i ich odpowiedzi, które użytkownicy mogą napotkać podczas korzystania z modelu GPT-4 Vision:

Q: Czy mogę dostroić możliwości obrazu gpt-4?

A: Obecnie nie obsługujemy dostrojenia możliwości obrazu gpt-4.

Q: Czy mogę użyć gpt-4 do generowania obrazów?

A: Nie, można użyć dall-e-3 do generowania obrazów i gpt-4-vision-preview do analizowania obrazów.

Q: Jakie rodzaje przesyłanych plików są obsługiwane?

A: Obecnie obsługujemy pliki PNG (.png), JPEG (.jpeg i .jpg), WEBP (.webp) i pliki GIF (.gif) bez animacji.