跳转至

17 GPT 4o最强多模态模型实战

你好,我是黄佳。

2024年5月,又一个重磅炸弹从天而降。OpenAI隆重推出了新的旗舰模型GPT-4o,这个模型不仅更加强大,更加聪明,而且它的API还比老一代的GPT-4-Turbo更便宜。它最惊艳的特性就是多模态能力,尤其是在语音方面,它拥有把握人类语音中情感信息的能力(比如说仅通过语气发现你在和ChatGPT4对话时候是否焦躁、伤心、紧张、疲惫等),因此它能够更完美地实时处理音频、视觉和文本的推理。

下面的几张图片,是我在ChatGPT App中和GPT对话的过程,惊喜地发现,GPT-4o模型也即将在App中上线了。

图片

当GPT-4o的新语音识别功能上线之后,ChatGPT将能够从我的语气中推知我当前的情绪和情感。

图片

好,下面我们就来详细介绍下GPT-4o的多模态能力,并说说它能够为我们的AI应用带来哪些方面的新拓展。

GPT-4o 的关键特性

GPT-4o中的 “o”,英文是omni。它是一个来自拉丁语的前缀,意思是“全部”、“所有”或“全能”。人如其名,这一款模型旨在实现更加自然的人机交互,可以接受文本、音频、图像和视频的输入,并生成文本、音频和图像的输出。

能力碾压

上一课已经提到,GPT-4o的英文文本和编码任务性能与GPT-4 Turbo相匹配,同时在非英语语言的性能上有显著提升。它速度更快,成本降低50%。因为,之前的GPT-4V版本已经拥有了读图能力,因此GPT-4o的核心能力增强主要是在音频方面,平均响应时间为320毫秒,与人类对话速度非常接近。

在GPT-4o之前的GPT模型已经可以让人类通过语音模式与ChatGPT对话,平均延迟为2.8秒(GPT-3.5)和5.4秒(GPT-4)。为了实现这一点,ChatGPT的语音模式使用了三个独立的模型:一个简单的模型将音频转录为文本,GPT-3.5或GPT-4接收文本并输出文本,第三个简单的模型将文本转换回音频。但是,这样的过程导致主要的智能来源GPT-4失去了大量信息——它无法直接观察语气、多说话者或背景噪音,也无法输出笑声、歌唱或表达情感。

通过GPT-4o,OpenAI训练了一个全新的端到端模型来处理文本、视觉和音频,这意味着所有的输入和输出都由同一个神经网络处理。GPT-4o是OpenAI的第一个结合所有这些模态的模型,其能力立即就碾压了某大厂前两个月所推出的“多模态一体化模型”——对,我说的就是Google和Gemini。(当然,目前最新的Claude-3.5似乎很多方面能力又超越了GPT-4o)

模型评估

在传统基准测试中,GPT-4o在文本、推理和编码智能方面达到了与GPT-4 Turbo相同的性能,同时在多语言、音频和视觉能力方面设定了新的高标。

  • 文本评估:GPT-4o在零样本链式推理(COT)MMLU(通用知识问题)中创下了88.7%的新高分。在传统的五样本无链式推理(COT)MMLU中,GPT-4o创下了87.2%的新高分。
  • 音频 ASR 性能:GPT-4o显著提高了对Whisper-v3的语音识别性能,特别是在资源较少的语言方面。
  • 音频翻译性能:GPT-4o在MLS基准测试中超越了Whisper-v3。
  • 多语言视觉推理评估:M3Exam基准测试包括各个国家标准化测试的多项选择题(包含图表和图形)。在这个测试中,GPT-4o在所有语言上都比GPT-4表现更强。
  • 视觉理解评估:GPT-4o在零样本视觉感知基准测试中达到了行业最先进的性能,包括MMMU、MathVista和ChartQA的零样本链式推理。

作为开发者,目前我们也可以在API中访问GPT-4o的文本和视觉模型。并且,GPT-4o的速度是GPT-4 Turbo的两倍,价格是其一半,速率限制也只有之前的 5 倍。这对于开发者来说,无疑都是天大的好消息。在这个消息推出之后,国内大模型厂商就纷纷打起了API Token价格战,大模型变得越来越便宜,越来越接地气。大模型应用开发的节奏无疑是被OpenAI的最新模型驱动的,一波未平一波又起,一浪更比一浪高。当然,在一个浪接一个浪的汹涌大潮中,站在潮头的,总是OpenAI。

用 GPT-4o 一键解读视频

其实,OpenAI是计划在未来几周内逐步向一小群授信的合作伙伴推出GPT-4o的新音频和视频功能,也就是说,最新的GPT-4o音频和视频接口还没有完全成熟。不过,这打消不了我们希望用GPT-4o来尝试开发多模态应用的积极性。

下面,我们就来开始用GPT-4o进行视频解读的项目实战。

项目准备

先来为项目做准备,做视频处理,我们需要用到 FFmpeg 这款功能强大的开源多媒体处理工具。FFmpeg 用于处理音频、视频和其他多媒体文件,可以实现以下功能。

  • 转码:将多媒体文件从一种格式转换为另一种格式,例如将视频从 MP4 转换为 AVI。
  • 剪辑:从多媒体文件中提取片段或合并多个片段。
  • 处理:调整视频的尺寸、比特率、帧率,或音频的采样率、声道数等。
  • 添加效果:为视频添加滤镜、字幕、水印等。
  • 流媒体:将多媒体文件实时传输到网络上。

如果你是用Windows开发应用程序,那么,在这里下载FFmpeg(或者访问 FFmpeg 官方下载页面)。找到 Windows 版本的 FFmpeg,并下载适合你系统的压缩包(通常是 ffmpeg-release-essentials.7z)。

将下载的压缩包解压到一个你方便访问的文件夹,然后添加 FFmpeg 到系统路径。

  • 右键点击“此电脑”或“计算机”,选择“属性”。
  • 选择“高级系统设置”。
  • 在“系统属性”窗口中,点击“环境变量”。
  • 在“系统变量”部分,找到并选中 “Path”,然后点击“编辑”。
  • 点击“新建”,然后输入 C:\ffmpeg\bin(换成你的解压路径),点击“确定”。
  • 关闭所有窗口,并重启命令提示符以应用更改。

如果你是用Linux,比如Ubuntu,那么直接安装即可。

sudo apt install ffmpeg 

除了FFmpeg 之外,还需要安装 opencv-python 和 moviepy。

pip install opencv-python 
pip install moviepy

几个音视频处理软件装好,准备工作就完成了!

处理视频

下面开始处理视频。这里准备了一段短视频,我想让GPT-4o对它进行解读和分析。

图片

这段短视频是我从抖音下载下来的,描绘了一个卡车司机看到路面不平,进行了好人好事的行为。

视频需要先做一些预处理,代码如下:

# 导入所需的库
import os
import cv2  # 视频处理
import base64  # 编码帧

VIDEO_FILE = "Good_Driver.mp4"

def extract_frames(video_file, interval=2):
    encoded_frames = []
    file_name, _ = os.path.splitext(video_file)

    video_capture = cv2.VideoCapture(video_file)
    total_frame_count = int(video_capture.get(cv2.CAP_PROP_FRAME_COUNT))
    frame_rate = video_capture.get(cv2.CAP_PROP_FPS)
    frames_interval = int(frame_rate * interval)
    current_frame = 0

    # 循环遍历视频并以指定的采样率提取帧
    while current_frame < total_frame_count - 1:
        video_capture.set(cv2.CAP_PROP_POS_FRAMES, current_frame)
        success, frame = video_capture.read()
        if not success:
            break
        _, buffer = cv2.imencode(".jpg", frame)
        encoded_frames.append(base64.b64encode(buffer).decode("utf-8"))
        current_frame += frames_interval
    video_capture.release()

    print(f"提取了 {len(encoded_frames)} 帧")
    return encoded_frames

# 每2秒提取1帧(采样率)
encoded_frames = extract_frames(VIDEO_FILE, interval=2)

导入必要的模块,包括os用于路径操作,cv2用于视频处理,base64用于编码帧,以及moviepy.editor用于处理音频。函数extract_frames_and_audio,用于提取视频帧和音频。参数video_file为视频文件路径,interval为每提取一帧所间隔的秒数。使用OpenCV遍历视频并提取指定间隔的帧,将每个帧编码为Base64格式并存储在列表中。使用moviepy从视频中提取音频并保存为MP3文件。

用 GPT-4o 根据视频帧回答问题

下面的代码,我就调用了GPT-4o,并通过提示词让它对视频进行简单解读,并保存在Markdown格式的网页中。

# 创建OpenAI客户端
from openai import OpenAI 
client = OpenAI()

# 使用GPT-4o模型生成视频介绍
response = client.chat.completions.create(
    model='gpt-4o',
    messages=[
        {"role": "system", "content": "请用Markdown格式生成视频的介绍."},
        {"role": "user", "content": [
            "下面是视频的图像帧",
            *map(lambda x: {"type": "image_url", "image_url": {"url": f'data:image/jpg;base64,{x}', "detail": "low"}}, encoded_frames)
        ]},
    ],
    temperature=0,
)

# 打印生成的Markdown格式介绍
print(response.choices[0].message.content)

输出如下:

图片

我把输出拷贝到Markdown单元,可以看到良好的格式化。(图片链接目前无法显示,不过无伤大雅,我们完全可以在程序中,把视频截图和这个文字自动搭配起来)

图片

下面,我接着问 GPT-4o 一些相关的问题,期望它能够根据视频的内容来做出准确的回答。

# 使用GPT-4o模型根据视频内容回答问题

QUESTION = "图中的人做了什么?"

qa_response = client.chat.completions.create(
    model=MODEL,
    messages=[
    {"role": "system", "content": "请用Markdown格式根据视频内容回答问题."},
    {"role": "user", "content": [
        "下面是视频的图像帧.",
        *map(lambda x: {"type": "image_url", "image_url": {"url": f'data:image/jpg;base64,{x}', "detail": "low"}}, encoded_frames),
        QUESTION
        ],
    }
    ],
    temperature=0,
)

# 打印生成的Markdown格式问题回答
print(QUESTION + "\n" + qa_response.choices[0].message.content)

GPT-4o的回答如下:

图中的人做了什么?
图中的人发现路面有凹陷,可能会对来往车辆造成安全隐患。他停车后打开双闪灯,下车跑到路边拿起锥形桶,并将锥形桶放置在路面凹陷处,警示后方车辆。随后,他确认情况并报警,最后默默离开。当地公安找到他并表示感谢,还送了一个纪念品给他。

这个小例子至此结束,程序结构虽然简单,但这种强大的视频解读能力为我们带来很多想象的空间。

GPT-4o 开脑洞的种种应用

GPT-4o的超强逻辑分析能力、情绪感知能力,以及接收实时音视频输入的能力,为我们进一步开发新一代的AI应用打开了无数脑洞。

OpenAI官方就通过很多视频进行了模型能力的展示,这些视频各种各样,覆盖日常生活的各种场景,以及人类需求的方方面面,比如两个GPT-4o模型的互动与歌唱,比如帮助用户进行面试准备,比如和 Imran Khan(可汗学院创始人)进行数学对话,比如指点和学习西班牙语等等等等。

那么,顺着OpenAI的思路,我们还可以想象并设计出更多的可以落地的AI应用,我把这些应用列表如下。

图片

上述各种应用,每一个想象空间都很大,咱们来细化一个帮助盲人游览巴黎的应用场景,并进行详细的描述。

  • 实时描述环境:GPT-4o通过连接到盲人佩戴的摄像头,可以实时描述他们周围的环境。例如,当盲人走在巴黎的香榭丽舍大街时,GPT-4o可以通过耳机向他们描述街道上的建筑、商店和行人。
  • 景点介绍:当盲人到达某个著名景点,如埃菲尔铁塔时,GPT-4o可以自动识别该景点,并开始讲解其历史和有趣的事实。这些信息可以通过自然语言生成功能,以生动的方式呈现出来,让盲人用户能够“看到”这些景点。
  • 导航帮助:GPT-4o还可以提供导航帮助,引导盲人从一个地点到另一个地点。例如,盲人想要从卢浮宫前往塞纳河,GPT-4o可以通过GPS和实时视频分析,为他们提供详细的步行路线,并提醒他们前方的障碍物或台阶。
  • 交互式问答:如果盲人对某个景点或某件艺术品有问题,他们可以直接问GPT-4o,系统会基于其庞大的知识库,提供准确且详细的回答。例如,“埃菲尔铁塔有多高?”或“蒙娜丽莎的背景是什么?”。
  • 社交互动:在一些公共活动或聚会中,GPT-4o可以帮助盲人识别周围的人的面部表情和动作,帮助他们更好地参与社交活动。

这种应用不仅提高了盲人的生活质量,还让他们能够独立、安全地探索世界,享受旅行的乐趣。唉,其实说实在的,别说盲人了,即使是一个正常成人,如果我去巴黎,全身上下我挂几个手机,全方位打开ChatGPT和Camera,走到哪里,GPT-4o给我全景360度的建筑文化说明,自然历史讲解,交通情况提醒,我也会觉着自己不再是个傻宝宝了。

总结时刻

作为开发者和AI爱好者,我们正处在一个令人激动的时代。GPT-4o是OpenAI在深度学习领域推动能力和应用边界的最新一步,这次的方向是实用性和AI落地。

这节课我们全面了解了GPT-4o的强大功能及其在多模态AI应用开发中的巨大潜力,并通过实际操作体验了如何利用GPT-4o进行视频解读。

GPT-4o作为全新的端到端多模态模型,能够在极短的时间内处理多种模态输入和输出,使得人机交互更加自然和高效。尤其是在视频解读和音频分析方面,GPT-4o的表现令人印象深刻。例如,通过解读一段短视频,GPT-4o不仅能准确描述视频中的行为,还能基于视频内容回答相关问题。

GPT-4o的多模态能力为我们开发者提供了新的开发思路和工具,从实时环境描述、景点介绍、导航帮助到交互式问答和社交互动,GPT-4o都能提供强有力的支持。这不仅提高了用户体验,还为特殊人群提供了更多便利,为生活增添新的乐趣。我觉得,GPT-4o将为AI应用的开发带来革命性的变化,基于GPT-4o的AI应用将在各行各业得到广泛应用,并不断催生出更多创新的解决方案。

思考题

  1. 本课展示了GPT-4o在视频解读中的强大能力,你还能想到哪些领域可以利用GPT-4o的多模态能力进行创新开发?
  2. GPT-4o在视频解读中表现很优秀,如果将这项能力应用于智能监控系统中,你认为它还能实现哪些功能?
  3. GPT-4o能够实时分析和解读多模态数据,对于实时数据流(如实时语音对话)你认为可以开发出哪些实用的应用?

期待你的分享,欢迎与我交流。如果今天的内容让你有所收获,也欢迎你把这节课转发给有需要的朋友!我们下节课再见!

精选留言(2)
  • qinsi 👍(1) 💬(0)

    说是解读视频, 这里还是解读视频帧吧. 要用于监控的话对实时性要求比较高. 比如上一秒一个人还站着, 下一秒这个人倒在地上, 实时性不够就不知道中间发生了什么. 此外这个例子中的视频是带字幕的, 有没有可能GPT只是在读画面中的字幕呢? 因为这里看不到截取的视频帧长什么样...

    2024-06-27

  • qinsi 👍(0) 💬(0)

    不知道gpt-4o能不能发现隐形的大猩猩: http://www.theinvisiblegorilla.com

    2024-06-26