视觉理解与图片问答,学习如何使用 GPT-4o (GPT-4 Omni) 来理解图像

🍉 CSDN 叶庭云https://yetingyun.blog.csdn.net/


一、引言

OpenAI 最新发布的 GPT-4 Omni 模型,也被称为 GPT-4o,是一个多模态 AI 模型,旨在提供更加自然和全面的人机交互体验

GPT-4o 与 GPT-4 Turbo 都具备视觉功能,这意味着模型能够处理图片并回答相关问题,为用户提供更丰富、更直观的交互体验。历史上,语言模型系统主要局限于处理文本这一单一输入模式,这在很大程度上限制了如 GPT-4 等强大模型的应用范围。之前,该模型有时被称为 GPT-4V 或在 API 中以 gpt-4-vision-preview 的形式出现。然而,请留意,当前的 Assistants API 尚不支持图片输入功能。

在用户消息中支持传递图片。模型获取图片主要有两种方式:一是通过传递图片链接,二是直接在请求中传递 Base64 编码的图片

GPT-4 Vision 官方文档:https://platform.openai.com/docs/guides/vision,指导用户如何使用 GPT-4 的视觉功能:

  • GPT-4 视觉功能:介绍了 GPT-4 模型如何理解图片,以及如何通过 API 使用这项功能。API 还能够处理多个图片输入,并根据所有图片信息来回答问题。
  • 快速开始指南:提供了如何通过链接或直接在请求中传递 Base64 编码的图片来使用模型的方法。
  • 图片细节控制:通过设置细节参数(低、高或自动),可以控制模型如何处理图片并生成文本理解。
  • 图片处理限制:列出了模型在处理图片时的一些限制,例如:目前限制图片上传大小为每张 20MB、模型能够理解图片中的对象及其关系,但不适合精确空间定位或解读专业医学图像(例如 CT 扫描图像,高分辨率病理组织切片图像),以及可能无法正确理解非拉丁字母的文本等。
  • 成本计算:解释了图片输入如何按 token 计费,以及如何根据图片大小和细节选项确定 token 成本。

总的来说,GPT-4 的图片理解功能对开发者而言极为实用,可广泛应用于食物识别以提供营养指南、社交媒体内容分析、艺术品鉴赏和科学图表解读等多个领域。


二、代码示例

安装所需的依赖库:

pip install -U openai
pip install requests==2.29.0
pip install urllib3==1.25.11

示例 1:使用图片 URL,以及英文 Prompt。

👇 测试图片如下所示,图片的链接为:https://s3.bmp.ovh/imgs/2024/06/22/88ba888d9fddda32.jpg

在这里插入图片描述

图片来源:UniST: A Prompt-Empowered Universal Model for Urban Spatio-Temporal Prediction

👇 Python 代码如下:

import base64
import requests
from openai import OpenAI

client = OpenAI(
    api_key="sk-your_api_key",
    base_url="https://api.openai.com/v1",
)

prompt = "Your task is to describe the content and details of this image in detail. Then explain what this image means."
image_url = "https://s3.bmp.ovh/imgs/2024/06/22/88ba888d9fddda32.jpg"
messages_template = [
    {
        "role": "user",
        "content": [
            {"type": "text", "text": prompt},
            {"type": "image_url", "image_url": {"url": image_url, "detail": "auto"}},
        ],
    }
]
response = client.chat.completions.create(
    model="gpt-4o",
    messages=messages_template,
    n=1,
    max_tokens=1024,
    temperature=0,
    seed=42,
)
# print(response.json())
result = response.choices[0].message.content
print(result)

👇 生成结果如下:

The image is a conceptual diagram illustrating the transition from using multiple separate models to a unified model for handling diverse spatiotemporal (ST) data. Here is a detailed description of the content and its meaning:

Content Description:

  1. Left Section (Separate Models):

    • This section shows multiple neural network diagrams, each representing a separate model. These models are depicted as traditional neural networks with interconnected nodes and layers.
    • Each model is associated with an arrow pointing towards the central section, indicating that each model is designed to handle specific types of data.
  2. Central Section (Diverse ST Data):

    • This section contains various images representing different types of spatiotemporal data:
      • The first image appears to be a heatmap or density map.
      • The second image shows a map with data points or clusters.
      • The third image is a cityscape with some form of wireless communication overlay.
      • The fourth image shows bicycles, likely indicating bike-sharing data.
      • The fifth image is a map with routes or paths, possibly representing transportation networks.
      • The sixth image shows a 5G network symbol, indicating telecommunications data.
      • The seventh image depicts taxis, likely representing taxi service data.
      • The eighth image shows industrial smokestacks, indicating pollution or environmental data.
  3. Right Section (One-for-All Model):

    • This section shows a single neural network diagram labeled “UniST,” representing a unified model.
    • An arrow points from the diverse ST data to this unified model, indicating that this single model is designed to handle all types of spatiotemporal data.

Meaning:

The image illustrates the concept of moving from multiple specialized models to a single, unified model for processing diverse spatiotemporal data. Traditionally, different types of spatiotemporal data (such as traffic patterns, environmental data, telecommunications data, etc.) would require separate models, each tailored to the specific characteristics of the data. This approach can be resource-intensive and complex to manage.

The “One-for-All” model, labeled as “UniST,” represents a more efficient and streamlined approach. This unified model is designed to handle various types of spatiotemporal data within a single framework. The benefits of such a model include reduced complexity, improved scalability, and potentially better performance due to the shared learning across different data types.

In summary, the image conveys the transition from using multiple specialized models to a single, versatile model capable of handling a wide range of spatiotemporal data, thereby simplifying the modeling process and enhancing efficiency.

示例 2:本地多张图片,上传 Base64 编码的图片,以及中文 Prompt。

上传 Base64 编码的图片。若你本地有图片,无论是单张还是多张,都可以将其转换为 Base64 编码格式,然后传给模型。

多图输入:Chat Completions API 能够接收并处理多个图片输入,无论是 Base64 编码格式还是图片 URL。该模型将一同处理每张图片,并使用所有图片的信息来回答问题。

👇 测试的两张图片如下所示:

在这里插入图片描述

图片一来源:https://news.yxrb.net/2024/0621/4254.html

图片二来源:https://s3.bmp.ovh/imgs/2024/06/22/88ba888d9fddda32.jpg

👇 Python 代码如下:

import os
import base64
import requests

def encode_image(image_path):
    """
    对图片文件进行 Base64 编码

    输入:
         - image_path:图片的文件路径
    输出:
         - 编码后的 Base64 字符串
    """
    # 二进制读取模式打开图片文件,
    with open(image_path, "rb") as image_file:
        # 将编码后的字节串解码为 UTF-8 字符串,以便于在文本环境中使用。
        return base64.b64encode(image_file.read()).decode("utf-8")

# 中文 Prompt 指令
prompt = (
    "你的任务是详细描述图片包含的内容和细节。进而解释图片的含义。"
)
# 对本地多张图片进行 Base64 编码
images = os.listdir("./images")
images.sort()
print(images)
base64_images = [encode_image("./images/" + image) for image in images]
# 组织用户消息
user_content = [{"type": "text", "text": prompt}]
base64_images = [
    {
        "type": "image_url",
        "image_url": {
            "url": f"data:image/jpeg;base64,{base64_image}",
            "detail": "high",
        },
    }
    for base64_image in base64_images
]
user_content.extend(base64_images)
messages_template = [{"role": "user", "content": user_content}]
# 构造请求参数
payload = {
    "model": "gpt-4o",
    "messages": messages_template,
    "max_tokens": 1600,
    "temperature": 0,
    "seed": 2024,
}
# OpenAI API Key
api_key = "sk-your_api_key"
# 请求头
headers = {"Content-Type": "application/json", "Authorization": f"Bearer {api_key}"}
# 发送 POST 请求
response = requests.post(
    "https://api.chatanywhere.com.cn/v1/chat/completions",
    headers=headers, json=payload
)
# 打印生成结果
print(response.json())
result = response.json()["choices"][0]["message"]["content"]
print(result)

👇 生成结果如下:

图片一:游戏《王者荣耀国际服》登顶苹果商店免费游戏排行榜

内容和细节描述:
  1. 背景和主题

    • 图片的背景是橙色和白色的渐变,带有一些抽象的图案。
    • 左上角有 “Honor of Kings” 的标志,表明这是关于《王者荣耀》的内容。
  2. 主要人物形象

    • 图片左侧有一个穿着红色和白色服装的女性角色,手持长棍,姿势英姿飒爽,显得非常有力量和自信。
  3. 文字信息

    • 图片顶部有大字标题:“《王者荣耀国际服》登顶苹果商店免费游戏排行榜”。
    • 下面列出了多个国家和地区的名称,如“印尼/马来/菲律宾/柬埔寨/缅甸/老挝/新加坡/文莱/美国/加拿大/澳大利亚/新西兰/秘鲁/玻利维亚”,表明该游戏在这些地区的苹果商店中排名第一。
  4. 排行榜截图

    • 右侧有一个苹果商店排行榜的截图,显示《Honor of Kings》在免费游戏排行榜中排名第一。
    • 下面有一个 “Download on the App Store” 的按钮,提示用户可以在苹果商店下载该游戏。
图片含义:

这张图片主要是宣传《王者荣耀国际服》在多个国家和地区的苹果商店免费游戏排行榜中登顶,展示了该游戏的全球受欢迎程度和影响力。通过展示排行榜截图和游戏角色形象,吸引更多玩家下载和体验这款游戏。

图片二:UniST 模型的概念图

内容和细节描述:
  1. 左侧:Separate Models

    • 左侧有多个独立的神经网络模型图示,表示传统方法中针对不同数据集使用不同的模型。
  2. 中间:Diverse ST Data

    • 中间部分展示了多种时空数据(ST Data)的图片,包括:
      • 热力图
      • 城市夜景
      • 自行车共享系统
      • 5G 网络
      • 出租车
      • 工业排放
    • 这些图片展示了不同类型的时空数据,表明数据的多样性。
  3. 右侧:One-for-All Model

    • 右侧展示了一个统一的神经网络模型,标注为 “UniST”。
    • 这个模型整合了所有不同类型的数据,形成一个 “一体化” 的模型。
图片含义:

这张图片展示了一个名为 “UniST” 的统一模型的概念。传统方法中,不同类型的时空数据需要使用不同的模型进行处理,而 UniST 模型则能够整合多种不同类型的数据,形成一个通用的模型。这种方法可以提高模型的泛化能力和处理效率,适用于多种时空数据的分析和预测。


三、总结

总的来说,GPT-4o 在回答图片中存在什么这样的一般性问题上表现卓越。虽然它能理解图片中物体间的关联,但尚未能精确回答涉及物体具体位置的详细问题。例如,询问车辆的颜色或基于冰箱内容提供晚餐建议,GPT-4o 基本都能应对自如。然而,若展示一个房间图片并询问椅子位置,它可能无法给出准确答案。因此,在探索视觉理解应用时,务必考虑到模型的这些局限性

注意:GPT-4 虽配备视觉功能,功能强大且适用广泛,但了解其局限性同样关键。以下是模型已知的一些局限:

  • 在医学图片方面,该模型不适宜解读专业的 CT 扫描、病理组织切片等医学图像,故不宜用于医疗建议。
  • 对于非英语文本,如日语或韩语等含有非拉丁字母的图片,模型可能无法发挥最佳性能。
  • 放大图片文本以提高可读性时,需避免裁剪重要细节。
  • 模型在处理旋转或颠倒的文本 / {/} /图片时,可能产生误解。
  • 当图形或文本中的颜色、样式(如实线、虚线、点线)各异时,模型可能难以准确理解。
  • 在需要精确空间定位的任务(如棋盘位置识别)上,模型表现不佳。
  • 某些情况下,模型可能会生成错误的描述或标题。
  • 模型在处理全景和鱼眼图片时存在一定困难。
  • 模型不处理原始文件名或元数据,且在分析前会调整图片大小,可能影响其原始尺寸。
  • 对于图片中的对象计数,模型可能仅能提供大致数量(可能不准确)。
  • 出于安全考虑,OpenAI 实施了一个系统来阻止提交验证码图片。

常见问题解答

我可以微调 gpt-4 的视觉功能吗?
不能,目前不支持微调 gpt-4 的视觉功能。

我可以使用 gpt-4 来生成图片吗?
不能,但其实你可以使用 dall-e-3 来生成图片,再使用 gpt-4o 或 gpt-4-turbo 来理解图片。

我可以上传哪种类型的文件?
目前支持 PNG(.png)、JPEG(.jpeg 和 .jpg)、WEBP(.webp)和非动画 GIF(.gif)。

上传的图片大小有限制吗?
是的,目前限制图片上传大小为每张 20MB

我可以删除我上传的图片吗?
不能,OpenAI 声明会在模型处理完图片后自动为你删除。

我在哪里可以了解更多关于 GPT-4 与视觉方面的注意事项?
你可以在 GPT-4 带视觉系统卡中找到 OpenAI 的评估、准备和缓解工作的详细信息。OpenAI 进一步实施了一个系统,以阻止提交验证码图片。

带视觉功能的 GPT-4 的速率限制是如何工作的?
OpenAI 在 token 级别处理图片,所以其处理的每张图片都会计入你的每分钟 token(TPM)限制。有关用于确定每张图片 token 计数的公式的详细信息,请参见计算成本部分。

带视觉功能的 GPT-4 可以理解图片元数据吗?
不能,模型不接收图片元数据。

如果我的图片不清晰会怎么样?
如果一张图片模糊不清,模型会尽力解释它。但是,结果可能不那么准确。一个好的经验法则是,如果一个普通人在低 / {/} /高分辨率模式下看不清图片中的信息,那么模型也同样看不清。


📚️ 相关链接:

  • 「视觉版」GPT-4 Turbo 重磅升级!ChatGPT 40 条消息限制或取消

  • AI 洞察|GPT-4o 震撼登场,点燃中国大模型的创新火花

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/733036.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL程序使用的选项文件

MySQL程序使用的选项文件如下: 显示帮助消息并退出。 在具有多个网络接口的计算机上,使用此选项可以选择用于连接MySQL服务器的接口。 安装字符集的目录。 如果可能,压缩客户端和服务器之间发送的所有信息。 从MySQL 8.0.18开始,…

【因果推断python】50_去偏/正交机器学习2

目录 Frisch-Waugh-Lovell on Steroids CATE Estimation with Double-ML Frisch-Waugh-Lovell on Steroids 双重/偏差 ML 其思想非常简单:在构建结果和治疗残差时使用 ML 模型: 是估计,是估计 我们的想法是,ML 模型具有超强的…

【RK3588/算能/Nvidia智能盒子】AI算法应用于中国生物疫苗生产过程智能监测,赋能生产安全,提升品质管控

因操作失误导致食品药品质量事故频发 计算机视觉检测技术为监管提供新思路 近年来,各类因人员操作失误导致的食品药品质量事故不断发生。例如有员工取出原材料及称重确认时未进行双人复核导致“混药”、员工未能按照生产步骤对生牛奶进行杀菌导致奶酪污染、员工误将…

webpack5入门,根据官方文档简单学习,简单总结

c.**loader加载器:**webpack 只能理解 JS文件和 JSON 文件,loader 让 webpack 能够去处理其他类型的文件,并将它们转换为有效 模块,以供应用程序使用,以及被添加到依赖图中。(比如css,less&…

人人讲视频如何下载

一、工具准备 1.VLC media player 2.谷歌浏览器 二、视频下载 1.打开人人讲网页,需要下载的视频 谷歌浏览器打开调试窗口 搜索m3u8链接 拷贝到VLCplayer打开网络串流方式打开测试是否能正常播放 2.下载视频 能正常播放后,切换播放为转换选择mp4格式…

分享excel全套教程速成,高效人士的Excel必修课,附视频课程!

我是阿星。今天,我要来聊聊那些让Excel变得像魔法一样的课程,它们能让你们在办公室里像超人一样高效。别急,听我慢慢道来。 首先,得说说这些课程,它们都是mp4格式,就像电影一样,但比电影实用多…

Python一文轻松搞定正则匹配

一、前言 日常工作中,不可避免需要进行文件及内容的查找,替换操作,python的正则匹配无疑是专门针对改场景而出现的,灵活地运用可以极大地提高效率,下图是本文内容概览。 ​ 二、正则表达式符号 对于所有的正则匹配表达…

强化学习中的自我博弈(self-play)

自我博弈(Self-Play)[1]是应用于智能体于智能体之间处于对抗关系的训练方法,这里的对抗关系指的是一方的奖励上升必然导致另一方的奖励下降。通过轮流训练双方的智能体就能使得双方的策略模型的性能得到显著提升,使得整个对抗系统…

动态规划02(Leetcode62、63、343、96)

参考资料: https://programmercarl.com/0062.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84.html 62. 不同路径 题目描述: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移…

STM32之二:时钟树

目录 1. 时钟 2. STM3时钟源(哪些可以作为时钟信号) 2.1 HSE时钟 2.1.1 高速外部时钟信号(HSE)来源 2.1.2 HSE外部晶体电路配置 2.2 HSI时钟 2.3 PLL时钟 2.4 LSE时钟 2.5 LSI时钟 3. STM32时钟(哪些系统使用时…

html做一个分组散点图图的软件

在HTML中创建一个分组散点图,可以结合JavaScript库如D3.js或Plotly.js来实现。这些库提供了强大的数据可视化功能,易于集成和使用。下面是一个使用Plotly.js创建分组散点图的示例: 要添加文件上传功能,可以让用户上传包含数据的文…

使用 Python 进行测试(6)Fake it...

总结 如果我有: # my_life_work.py def transform(param):return param * 2def check(param):return "bad" not in paramdef calculate(param):return len(param)def main(param, option):if option:param transform(param)if not check(param):raise ValueError(…

matlab入门基础笔记

1、绘制简单三角函数: 绘制正弦曲线和余弦曲线。x[0:0.5:360]*pi/180; plot(x,sin(x),x,cos(x)); (1)明确x轴与y轴变量: 要求为绘制三角函数: X轴:角度对应的弧度数组 Y轴:对应sin(x)的值 求…

python pynput实现鼠标点击两坐标生成截图

脚本主要实现以下功能: 按ctrl开始截图,点击两个坐标,保存截图tk输出截图文本信息,文本输出内容倒序处理默认命名为A0自增。支持自定义名称,自增编号,修改自定义名称自增重新计算清空文本框内容 from pyn…

C++ (week8):数据库

文章目录 一、数据库简介1.数据库2.MySQL(1)数据库的结构(2)MySQL的三种使用方式(3)命令行(4)Navicat Premium 二、SQL1.SQL (Structured Query Language),即结构化查询语言2.数据定义语言 DDL (Data Definition Language) ,创建、修改、删除数据库、表结…

Leetcode3184. 构成整天的下标对数目 I

Every day a Leetcode 题目来源&#xff1a;3184. 构成整天的下标对数目 I 解法1&#xff1a;遍历 统计满足 i < j 且 hours[i] hours[j] 构成整天的下标对 i, j 的数目。 构成整天的条件&#xff1a;(hours[i] hours[j]) % 24 0。 代码&#xff1a; /** lc applee…

20分钟攻破DISCUZ论坛并盗取数据库(web安全白帽子)

20分钟攻破DISCUZ论坛并盗取数据库&#xff08;web安全白帽子&#xff09; 1 快速搭建discuz论坛1.1 攻击思路1.2 快速搭建实验环境1.2.1&#xff0c;漏洞概述1.2.2&#xff0c;在centos7虚拟机上搭建LAMP环境1.2.3&#xff0c;上传到discuz_X2_SC_UTF8.zip 到Linux系统/root下…

JAVA大型医院绩效考核系统源码:​医院绩效考核实施的难点痛点

JAVA大型医院绩效考核系统源码&#xff1a;​医院绩效考核实施的难点痛点 绩效考核数字化综合管理系统是一个基于数字化技术的管理平台&#xff0c;用于帮助企业、机构等组织进行绩效考评的各个环节的管理和处理。它将绩效考评的各个环节集成到一个系统中&#xff0c;包括目标…

RTA_OS基础功能讲解 2.10-调度表

RTA_OS基础功能讲解 2.10-调度表 文章目录 RTA_OS基础功能讲解 2.10-调度表一、调度表简介二、调度表配置2.1 同步三、到期点配置四、启动调度表4.1 绝对启动4.2 相对启动4.3 同步启动五、到期点处理六、停止调度表6.1 重新启动被停止的调度表七、切换调度表八、选择同步策略8.…

【C语言】解决C语言报错:Array Index Out of Bounds

文章目录 简介什么是Array Index Out of BoundsArray Index Out of Bounds的常见原因如何检测和调试Array Index Out of Bounds解决Array Index Out of Bounds的最佳实践详细实例解析示例1&#xff1a;访问负索引示例2&#xff1a;访问超出上限的索引示例3&#xff1a;循环边界…