Skip to content

Визуальные возможности

Узнайте, как использовать визуальные возможности для понимания изображений. Многие модели OpenAI обладают визуальными возможностями, что означает, что они могут принимать изображения и отвечать на вопросы о них. Исторически сложилось так, что системы языковых моделей были ограничены возможностью принимать данные только в текстовом формате.

Начало работы

Изображения доступны модели двумя основными способами: путём передачи ссылки на изображение или путём передачи изображения, закодированного в формате base64, непосредственно в запросе. Изображения могут быть переданы в пользовательских сообщениях.

python
from openai import OpenAI

client = OpenAI()

response = client.chat.completions.create(
  model="gpt-4o-mini",
  messages=[
    {
      "role": "user",
      "content": [
        {"type": "text", "text": "Что на этом изображении?"},
        {
          "type": "image_url",
          "image_url": {
            "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
          },
        },
      ],
    }
  ],
  max_tokens=300,
)

print(response.choices[0])
bash
curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-4o-mini",
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "text",
            "text": "Что на этом изображении?"
          },
          {
            "type": "image_url",
            "image_url": {
              "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg"
            }
          }
        ]
      }
    ],
    "max_tokens": 300
  }'
js
import OpenAI from "openai";

const openai = new OpenAI();

async function main() {
  const response = await openai.chat.completions.create({
    model: "gpt-4o-mini",
    messages: [
      {
        role: "user",
        content: [
          { type: "text", text: "What’s in this image?" },
          {
            type: "image_url",
            image_url: {
              "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
            },
          },
        ],
      },
    ],
  });
  console.log(response.choices[0]);
}
main();

Модель лучше всего отвечает на общие вопросы о присутствующих на изображениях объектах. Хотя она понимает взаимосвязь между объектами на изображениях, она еще не оптимизирована для ответа на детализированные вопросы о расположении определённых элементов на изображении. Например, вы можете спросить модель о цвете автомобиля или идеи для ужина, основываясь на содержимом вашего холодильника. Однако, если вы покажете изображение комнаты и спросите, где находится стул, модель может ответить неверно.

Важно учитывать ограничения модели при изучении способов её использования для визуального понимания.

Видеопонимание с помощью vision

Узнайте, как использовать GPT-4 с Vision для понимания видео с помощью «OpenAI Cookbook».

Загрузка изображений, закодированных в Base64

Если у вас есть изображение или набор изображений локально, вы можете передать их модели в формате base64. Вот пример:

python
import base64
from openai import OpenAI

client = OpenAI()

# Функция для кодирования изображения
def encode_image(image_path):
  with open(image_path, "rb") as image_file:
    return base64.b64encode(image_file.read()).decode('utf-8')

# Путь к вашему изображению
image_path = "path_to_your_image.jpg"

# Получение строки base64
base64_image = encode_image(image_path)

response = client.chat.completions.create(
  model="gpt-4o-mini",
  messages=[
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "Что на этом изображении?",
        },
        {
          "type": "image_url",
          "image_url": {
            "url":  f"data:image/jpeg;base64,{base64_image}"
          },
        },
      ],
    }
  ],
)

print(response.choices[0])

Множественные вводы изображений

API Chat Completions способен принимать и обрабатывать множественные вводы изображений как в формате, закодированном в base64, так и в виде URL изображения. Модель обработает каждое изображение и использует информацию со всех изображений для ответа на вопрос.

python
from openai import OpenAI

client = OpenAI()
response = client.chat.completions.create(
  model="gpt-4o-mini",
  messages=[
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "Что на этих изображениях? Есть ли между ними различия?",
        },
        {
          "type": "image_url",
          "image_url": {
            "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
          },
        },
        {
          "type": "image_url",
          "image_url": {
            "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
          },
        },
      ],
    }
  ],
  max_tokens=300,
)
print(response.choices[0])
bash
curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-4o-mini",
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "text",
            "text": "Что на этих изображениях? Есть ли между ними различия?"
          },
          {
            "type": "image_url",
            "image_url": {
              "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
            }
          },
          {
            "type": "image_url",
            "image_url": {
              "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
            }
          }
        ]
      }
    ],
    "max_tokens": 300
  }'
js
import OpenAI from "openai";

const openai = new OpenAI();

async function main() {
  const response = await openai.chat.completions.create({
    model: "gpt-4o-mini",
    messages: [
      {
        role: "user",
        content: [
          { type: "text", text: "Что на этих изображениях? Есть ли между ними различия?" },
          {
            type: "image_url",
            image_url: {
              "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
            },
          },
          {
            "type": "image_url",
            "image_url": {
              "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
            },
          }
        ],
      },
    ],
  });
  console.log(response.choices[0]);
}
main();

Здесь модели показаны две копии одного и того же изображения, и она может ответить на вопросы о каждом из них независимо.

Понимание изображения низкого или высокого разрешения

Управляя параметром деталей, который имеет три варианта: низкий, высокий или авто, вы можете контролировать, как модель обрабатывает изображение и формирует своё текстовое понимание. По умолчанию модель будет использовать автоматическую настройку, которая посмотрит на размер входного изображения и решит, использовать ли низкую или высокую настройку.

Низкий включит режим низкого разрешения. Модель получит изображение с низким разрешением 512x512 пикселей и представит изображение с бюджетом в 85 токенов. Это позволяет API предоставлять более быстрые ответы и потреблять меньше входных токенов для использования в случаях, когда не требуется высокая детализация.

Высокий включит режим высокого разрешения, который сначала позволяет модели видеть изображение с низким разрешением (с использованием 85 токенов), а затем создаёт детализированные фрагменты, используя 170 токенов для каждого тайла размером 512x512 пикселей.

Выбор уровня детализации

python
from openai import OpenAI

client = OpenAI()

response = client.chat.completions.create(
  model="gpt-4o-mini",
  messages=[
    {
      "role": "user",
      "content": [
        {"type": "text", "text": "Что на этом изображении?"},
        {
          "type": "image_url",
          "image_url": {
            "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
            "detail": "high"
          },
        },
      ],
    }
  ],
  max_tokens=300,
)

print(response.choices[0].message.content)
bash
curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-4o-mini",
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "text",
            "text": "Что на этом изображении?"
          },
          {
            "type": "image_url",
            "image_url": {
              "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
              "detail": "high"
            }
          }
        ]
      }
    ],
    "max_tokens": 300
  }'
js
import OpenAI from "openai";

const openai = new OpenAI();

async function main() {
  const response = await openai.chat.completions.create({
    model: "gpt-4o-mini",
    messages: [
      {
        role: "user",
        content: [
          { type: "text", text: "Что на этом изображении?" },
          {
            type: "image_url",
            image_url: {
              "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
              "detail": "low"
            },
          },
        ],
      },
    ],
  });
  console.log(response.choices[0]);
}
main();

Управление изображениями

API Chat Completions, в отличие от Ассистентов API, не является постоянным. Это значит, что вы должны сами управлять сообщениями (включая изображения), которые вы передаете модели. Если вы хотите передать одно и то же изображение модели несколько раз, вам придется вставлять изображение каждый раз, когда вы делаете запрос.

Для долгих разговоров мы рекомендуем передавать изображения через URL вместо base64. Задержку модели также можно улучшить, уменьшая размер изображений заранее, чтобы он был меньше их ожидаемого максимального размера. Для режима низкого разрешения мы ожидаем изображение 512x512 пикселей. Для режима высокого разрешения короткая сторона изображения должна быть меньше 768 пикселей, а длинная должна быть меньше 2000 пикселей.

После того, как изображение обработано моделью, оно удаляется с серверов OpenAI и не сохраняется. Мы не используем данные, загруженные через API OpenAI, для обучения наших моделей.

Ограничения

Хотя GPT-4 с визуальными функциями мощный и может использоваться в разных ситуациях, важно понимать ограничения модели. Вот некоторые из известных нам ограничений:

  • Медицинские изображения: Модель не подходит для интерпретации специализированных медицинских изображений, таких как КТ, и не должна использоваться для медицинских консультаций.
  • Неанглоязычный текст: Модель может не работать оптимально при обработке изображений с текстом, использующим нелатинские алфавиты, такие как японский или корейский.
  • Мелкий текст: Увеличьте текст на изображении для улучшения его читаемости, но старайтесь не обрезать важные детали.
  • Поворот: Модель может неверно интерпретировать повернутый/перевернутый текст или изображения.
  • Визуальные элементы: Модель может испытывать затруднения с пониманием графиков или текста, где изменяются цвета или стили, такие как сплошные, пунктирные или точечные линии.
  • Пространственные рассуждения: Модель испытывает сложности с задачами, требующими точной пространственной локализации, такими как идентификация позиций на шахматной доске.
  • Точность: В определённых сценариях модель может генерировать неверные описания или подписи.
  • Форма изображения: Модель испытывает трудности с панорамными и рыбьеглазными изображениями.
  • Метаданные и изменение размера: Модель не обрабатывает оригинальные имена файлов или метаданные, а изображения изменяются по размеру перед анализом, что влияет на их первоначальные размеры.
  • Подсчёт: Модель может предоставлять приблизительные оценки для количества объектов на изображении.
  • CAPTCHAS: Из соображений безопасности мы внедрили систему для блокировки отправки «CAPTCHA».

Расчёт затрат

Изображения оцениваются и тарифицируются в токенах, так же как текстовые вводы. Стоимость токенов для данного изображения определяется двумя факторами: его размером и параметром детализации для каждого блока image_url. Все изображения с помощью параметра detail: low стоят 85 токенов каждое. Изображения с параметром detail: high сначала масштабируются так, чтобы соответствовать квадрату 2048x2048, сохраняя своё соотношение сторон. Затем они масштабируются так, что короткая сторона изображения составляет 768 пикселей. Затем мы подсчитываем, сколько квадратов 512 пикселей состоит изображение. Каждый такой квадрат стоит 170 токенов. В итоге всегда добавляется 85 токенов.

Примеры:

  • Квадратное изображение 1024x1024 в режиме detail: high стоит 765 токенов

    • 1024 меньше 2048, поэтому первоначальное изменение размера не требуется.
    • Короткая сторона 1024, поэтому изображение уменьшается до 768x768.
    • Потребуется 4 квадрата 512 пикселей, итоговая стоимость токенов будет 170*4 + 85 = 765.
  • Изображение 2048x4096 в режиме detail: high стоит 1105 токенов

    • Мы уменьшаем изображение до 1024x2048, чтобы оно соответствовало квадрату 2048.
    • Короткая сторона 1024, поэтому мы уменьшаем его до 768x1536.
    • Потребуются 6 квадратов 512 пикселей, итоговая стоимость токенов будет 170*6 + 85 = 1105.
  • Изображение 4096x8192 в режиме detail: low будет стоить 85 токенов

    • Независимо от размера входа, изображения с низкой детализацией имеют фиксированную стоимость.

Часто задаваемые вопросы

Могу ли я настроить способности к изображениям в gpt-4?

Нет, в данный момент мы не поддерживаем настройку возможностей изображения в gpt-4.

Могу ли я использовать gpt-4 для генерации изображений?

Нет, для генерации изображений вы можете использовать dall-e-3, а для понимания изображений – gpt-4o, gpt-4o-mini или gpt-4-turbo.

Какие типы файлов я могу загрузить?

В настоящее время мы поддерживаем файлы в форматах PNG (.png), JPEG (.jpeg и .jpg), WEBP (.webp), и неанимированные GIF (.gif).

Есть ли ограничение на размер загружаемого изображения?

Да, мы ограничиваем загрузку изображений до 20 МБ на изображение.

Могу ли я удалить загруженное изображение?

Нет, мы автоматически удалим изображение после его обработки моделью.

Где я могу узнать больше о соображениях по GPT-4 с Vision?

Вы можете найти подробную информацию в системной карточке «GPT-4 with Vision», где представлены наши оценки, подготовка и работа по снижению рисков.

Мы также внедрили систему для блокировки отправки «CAPTCHA».

Как работают ограничители скорости для GPT-4 с Vision?

Мы обрабатываем изображения на уровне токенов, поэтому каждое обработанное изображение учитывается в вашем лимите токенов в минуту (TPM). См. раздел расчёта затрат для получения информации о формуле, используемой для определения числа токенов на изображение.

Может ли GPT-4 с Vision понимать метаданные изображений?

Нет, модель не получает метаданные изображений.

Что произойдет, если моё изображение неясное?

Если изображение нечеткое или неясное, модель постарается его интерпретировать. Однако результаты могут быть менее точными. Хорошее правило: если среднестатистический человек не может увидеть информацию на изображении с разрешением, используемым в режиме низкого/высокого разрешения, то модель тоже не сможет.

Создано при поддержке AITUNNEL