Узнайте, как использовать GPT-4 для понимания изображений
GPT-4 со Зрением, иногда называемый GPT-4V или gpt-4-vision-preview
в API, позволяет модели принимать изображения и отвечать на вопросы о них.
Исторически системы языковых моделей были ограничены одним
видом входных данных - текстом. Для многих сценариев использования это ограничивало области, где
модели, такие как GPT-4, могли быть использованы.
GPT-4 со зрением в настоящее время доступен всем
разработчикам, у которых есть доступ к GPT-4 через модель gpt-4-vision-preview
и
API для завершения чатов, который был обновлен для поддержки ввода изображений. Обратите внимание,
что Справочник API в настоящее время не поддерживает ввод изображений.
Важно отметить следующее:
- GPT-4 Turbo со зрением может вести себя немного иначе, чем GPT-4 Turbo, из-за системного сообщения, которое мы автоматически вставляем в разговор
- GPT-4 Turbo со зрением такой же, как и превью-модель GPT-4 Turbo и работает так же хорошо с текстовыми задачами, но имеет добавленные возможности зрения
- Зрение - это только одна из множества возможностей модели
В настоящее время GPT-4 Turbo со зрением не поддерживает параметр message.name, functions/tools, параметр response_format, и мы в настоящее время устанавливаем низкое значение по умолчанию для max_tokens, которое вы можете изменить.
Изображения доступны модели двумя основными способами: передачей ссылки на
изображение или передачей изображения, закодированного в base64, непосредственно в запросе. Изображения
могут передаваться в сообщениях user
, system
и assistant
. В настоящее время мы не
поддерживаем изображения в первом сообщении system
, но это может измениться в будущем.
1from openai import OpenAI
2
3client = OpenAI()
4
5response = client.chat.completions.create(
6 model="gpt-4-vision-preview",
7 messages=[
8 {
9 "role": "user",
10 "content": [
11 {"type": "text", "text": "Что на этом изображении?"},
12 {
13 "type": "image_url",
14 "image_url": {
15 "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",
16 },
17 },
18 ],
19 }
20 ],
21 max_tokens=300,
22)
23
24print(response.choices[0])
Модель наилучшим образом отвечает на общие вопросы о том, что присутствует на изображениях. Хотя она и понимает взаимосвязь между объектами на изображениях, она еще не оптимизирована для ответа на детализированные вопросы о местоположении определенных объектов на изображении. Например, вы можете спросить её, какого цвета автомобиль или какие идеи для ужина можно реализовать, исходя из содержимого вашего холодильника, но если вы покажете ей изображение комнаты и спросите, где находится стул, она может ответить на вопрос некорректно.
Важно учитывать ограничения модели, когда вы изучаете, к каким сценариям использования может быть применено визуальное понимание.
Если у вас есть изображение или набор изображений локально, вы можете передать их модели в формате base 64. Вот пример того, как это работает:
1import base64
2import requests
3
4# OpenAI API Key
5api_key = "ВАШ_OPENAI_API_КЛЮЧ"
6
7# Функция кодирования изображения
8def encode_image(image_path):
9 with open(image_path, "rb") as image_file:
10 return base64.b64encode(image_file.read()).decode('utf-8')
11
12# Путь к вашему изображению
13image_path = "путь_к_вашему_изображению.jpg"
14
15# Получение строки в формате base64
16base64_image = encode_image(image_path)
17
18headers = {
19 "Content-Type": "application/json",
20 "Authorization": f"Bearer {api_key}"
21}
22
23payload = {
24 "model": "gpt-4-vision-preview",
25 "messages": [
26 {
27 "role": "user",
28 "content": [
29 {
30 "type": "text",
31 "text": "Что на этом изображении?"
32 },
33 {
34 "type": "image_url",
35 "image_url": {
36 "url": f"data:image/jpeg;base64,{base64_image}"
37 }
38 }
39 ]
40 }
41 ],
42 "max_tokens": 300
43}
44
45response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=payload)
46
47print(response.json())
API для завершений чата способен принимать и обрабатывать несколько входных изображений как в формате base64, так и в виде URL-адреса изображения. Модель будет обрабатывать каждое изображение и использовать информацию со всех из них для ответа на вопрос.
1curl https://api.openai.com/v1/chat/completions \
2 -H "Content-Type: application/json" \
3 -H "Authorization: Bearer $OPENAI_API_KEY" \
4 -d '{
5 "model": "gpt-4-vision-preview",
6 "messages": [
7 {
8 "role": "user",
9 "content": [
10 {
11 "type": "text",
12 "text": "Что изображено на этих фотографиях? Есть ли между ними различия?"
13 },
14 {
15 "type": "image_url",
16 "image_url": {
17 "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",
18 }
19 },
20 {
21 "type": "image_url",
22 "image_url": {
23 "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",
24 }
25 }
26 ]
27 }
28 ],
29 "max_tokens": 300
30 }'
Здесь модель показывают две копии одного и того же изображения и может отвечать на вопросы о каждом из изображений независимо.
Контролируя параметр detail
, который имеет три варианта: low
, high
или auto
, вы можете управлять тем, как модель обрабатывает изображение и генерирует его текстовое понимание. По умолчанию модель будет использовать настройку auto
, которая будет анализировать размер вводного изображения и решать, использовать ли настройки low
или high
.
low
отключит модель “высокого разрешения”. Модель будет получать изображение низкого разрешения 512px x 512px и представлять изображение с ограничением в 65 токенов. Это позволяет API возвращать ответы быстрее и потреблять меньше входных токенов для случаев, когда не требуется высокая детализация.high
включит режим “высокого разрешения”, который сначала позволяет модели увидеть изображение низкого разрешения, а затем создает детальные фрагменты входных изображений как квадраты 512px, исходя из размера входного изображения. Каждый из детальных фрагментов использует вдвое больший бюджет токенов (65 токенов) для общего количества в 129 токенов.
1curl https://api.openai.com/v1/chat/completions \
2 -H "Content-Type: application/json" \
3 -H "Authorization: Bearer $OPENAI_API_KEY" \
4 -d '{
5 "model": "gpt-4-vision-preview",
6 "messages": [
7 {
8 "role": "user",
9 "content": [
10 {
11 "type": "text",
12 "text": "Что изображено на этой картинке?"
13 },
14 {
15 "type": "image_url",
16 "image_url": {
17 "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",
18 "detail": "high"
19 }
20 }
21 ]
22 }
23 ],
24 "max_tokens": 300
25 }'
API завершений чата, в отличие от API помощников, не сохраняет состояние. Это означает, что вы должны сами управлять сообщениями (включая изображения), которые вы передаете модели. Если вы хотите передать одно и то же изображение модели несколько раз, вам придется передавать изображение каждый раз, когда вы делаете запрос к API.
Для длительных бесед мы предлагаем передавать изображения через URL вместо base64. Задержка модели также может быть улучшена путем уменьшения размера ваших изображений заранее, чтобы они были меньше максимального ожидаемого размера. Для режима низкого разрешения мы ожидаем изображение 512px на 512px. Для режима высокого разрешения короткая сторона изображения должна быть меньше 768px, а длинная сторона - меньше 2000px.
Хотя GPT-4 с возможностями Зрения мощен и может быть использован во многих ситуациях, важно понимать ограничения модели. Вот некоторые из ограничений, о которых мы знаем:
- Медицинские изображения: Модель не подходит для интерпретации специализированных медицинских изображений, таких как КТ-сканы, и не должна использоваться для медицинских советов.
- Не на английском: Модель может не оптимально работать при обработке изображений с текстом на нелатинских алфавитах, таких как японский или корейский.
- Мелкий текст: Увеличьте текст внутри изображения, чтобы улучшить читаемость, но избегайте обрезки важных деталей.
- Вращение: Модель может неправильно интерпретировать повернутый/перевернутый текст или изображения.
- Визуальные элементы: Модель может испытывать трудности с пониманием графиков или текста, где цвета или стили, такие как сплошные, пунктирные или точечные линии, различаются.
- Пространственное мышление: Модель испытывает трудности с задачами, требующими точной пространственной локализации, такими как идентификация шахматных позиций.
- Точность: Модель может генерировать неверные описания или подписи в определенных сценариях.
- Форма изображения: Модель испытывает трудности с панорамными и рыбьим глазом изображениями.
- Метаданные и изменение размера: Модель не обрабатывает оригинальные имена файлов или метаданные, и изображения изменяются в размере перед анализом, что влияет на их оригинальные размеры.
- Подсчет: Может давать приблизительные подсчеты объектов на изображениях.
- CAPTCHAS: В целях безопасности мы внедрили систему, блокирующую отправку CAPTCHAS.
Ввод изображений измеряется и взимается платеж в токенах, так же, как и ввод текста. Стоимость токенов для данного изображения определяется двумя факторами: его размером и параметром detail
для каждого блока image_url. Все изображения с detail: low
стоят 85 токенов каждое. Изображения detail: high
сначала масштабируются, чтобы поместиться в квадрат 2048 x 2048, сохраняя свое соотношение сторон. Затем они масштабируются так, чтобы наименьшая сторона изображения составляла 768 пикселей в длину. Наконец, мы подсчитываем, сколько квадратов 512 пикселей составляет изображение. Каждый из этих квадратов стоит 170 токенов. К окончательной сумме всегда добавляется еще 85 токенов.
Вот несколько примеров, демонстрирующих вышеизложенное.
- Квадратное изображение 1024 x 1024 в режиме
detail: high
стоит 765 токенов- 1024 меньше 2048, поэтому первоначальное изменение размера не происходит.
- Наименьшая сторона - 1024, поэтому мы уменьшаем изображение до 768 x 768.
- Для представления изображения нужно 4 квадрата 512 пикселей, поэтому окончательная стоимость токенов составляет
170 * 4 + 85 = 765
.
- Изображение 2048 x 4096 в режиме
detail: high
стоит 1105 токенов- Мы уменьшаем изображение до 1024 x 2048, чтобы оно поместилось в квадрат 2048.
- Наименьшая сторона - 1024, поэтому мы дополнительно уменьшаем до 768 x 1536.
- Нужно 6 квадратов 512 пикселей, поэтому окончательная стоимость токенов составляет
170 * 6 + 85 = 1105
.
- Изображение 4096 x 8192 в режиме
detail: low
стоит 85 токенов- Независимо от размера ввода, изображения с низкими деталями имеют фиксированную стоимость.
Нет, в настоящее время мы не поддерживаем тонкую настройку возможностей изображений gpt-4
.
Нет, вы можете использовать dall-e-3
для генерации изображений и gpt-4-vision-preview
для понимания изображений.
Мы в настоящее время поддерживаем PNG (.png), JPEG (.jpeg и .jpg), WEBP (.webp) и неанимированные GIF (.gif).
Да, мы ограничиваем загрузку изображений 20МБ на изображение.
Нет, мы автоматически удалим изображение за вас после его обработки моделью.
Мы обрабатываем изображения на уровне токенов, поэтому каждое обработанное нами изображение учитывается в вашем лимите токенов в минуту (TPM). Смотрите раздел расчета стоимости для подробностей о формуле, используемой для определения количества токенов на изображение.
Нет, модель не получает метаданные изображения.
Если изображение двусмысленно или нечетко, модель сделает все возможное для его интерпретации. Однако результаты могут быть менее точными. Хорошим правилом является то, что если средний человек не может увидеть информацию на изображении при разрешениях, используемых в режиме низкого/высокого разрешения, то и модель тоже не сможет.