当前位置: 首页 > news >正文

如何用GPT-4o解读视频

在这里插入图片描述

  OpenAI在去年推出的GPT-4V已经支持了多模态识别,但一直仅限于图片输入,不支持视频。相比之下,Google的Gemini早已支持视频识别。最近,我司业务场景中出现了一个需要识别视频的需求,而我们只采购了GPT-4o模型。这就引发了一个问题:如何使用GPT-4o完成对视频的处理?

  经过研究一些教程后,我找到了一个解决这个问题的可行方法。这种方法包括两个步骤:首先,将视频拆分成一系列关键帧图像;然后,将这些图像输入GPT-4o进行分析,从而完成对整个视频的解读。 实现起来很简单,这里我特意找了一段猫和老鼠的视频片段,来复现下这个实现,具体代码如下:

from IPython.display import display, Image# 这里我们需要用到cv2和base64 
import cv2 
import base64
import time
from openai import OpenAIclient = OpenAI()

  接下来是视频关键帧的抽取。为了减少token消耗,我采用了两种方式削减信息量:

  1. 丢弃大部分画面,每秒只保留一帧;
  2. 将图片分辨率缩减至360p,以减小图片大小。

  这里额外解释一下为什么要转成base64编码的数据。OpenAI接口支持两种传递图片的方式:一种是直接传可公开访问的图片URL,但我们没有;另一种是将图片直接base64编码后传递,所以我们只能选择后者。

video = cv2.VideoCapture("data/tom_and_jerry.mp4")
base64Frames = []fps = video.get(cv2.CAP_PROP_FPS)frame_jump = int(fps)
frame_count = 0# 定义目标尺寸
target_width = 640
target_height = 320while video.isOpened():success, frame = video.read()if not success:break# 一秒钟保存一帧if frame_count % frame_jump == 0:resized_frame = cv2.resize(frame, (target_width, target_height))_, buffer = cv2.imencode(".jpg", resized_frame)base64Frames.append(base64.b64encode(buffer).decode("utf-8"))frame_count += 1
video.release()
print(len(base64Frames), "frames read.")

  接下来是最关键的部分:调用GPT-4o来解析图片。这个函数将处理我们先前提取的视频帧,利用GPT-4o模型分析这些图像。它会生成一个详细的视频内容描述,帮助我们理解整个视频的剧情脉络。

def vision(frames):PROMPT_MESSAGES = [{"role": "user","content": [{"type": "text","text": f"""这些图片是从视频中按先后顺序截取出来的,截取的时间间隔是1s,总共{len(frames)}张,请根据这些画面信息,用中文详细描述下视频的剧情。"""},*[{"type": "image_url","image_url": {"url": 'data:image/jpeg;base64,' + frame,}} for frame in frames]],},]params = {"model": "gpt-4o","messages": PROMPT_MESSAGES,"max_tokens": 2000,"temperature": 0.7}result = client.chat.completions.create(**params)return result.choices[0].message.content

最后,我们调用先前定义的 vision 函数来处理提取的视频帧,并获得相应的分析结果。

result = vision(base64Frames)
print(result)

  得到的结果如下,剧情的描述还是相当准确的。 这个实验结果证明了我们的方法是可行的。通过将视频拆分成关键帧并使用GPT-4o进行分析,我们成功地对整个视频内容进行了准确的描述。这种方法不仅解决了我们无法直接处理视频的限制,还展示了GPT-4o在多模态任务中的强大能力。

这段视频似乎是汤姆和杰瑞的经典动画片。剧情开始时,一个女人正在用扫帚打扫地板,她穿着高跟鞋。接着,一只小白鼠(可能是杰瑞的朋友)出现在扫帚旁边。随后,汤姆猫出现,试图用扫帚抓住小白鼠,但小白鼠灵活地避开了。然后,汤姆展开追逐,抓住了小白鼠,但杰瑞及时赶到,与汤姆展开对抗。汤姆试图打开一个门,但被困在了门后。女人用扫帚打了汤姆的头,并责备他为什么还在找麻烦。汤姆用手指着小白鼠,试图证明自己的行为是正当的,但女人显然不买账。汤姆因此被赶出屋外,并浑身沾满油漆。小白鼠发现了一瓶鞋油,似乎在计划什么。最后,汤姆装扮成白色的猫,试图重新回到屋内,并假装自己是“会跳舞的猫”。女人对他的伎俩似乎感到满意,进行了表扬,但小白鼠却看穿了汤姆的伪装。视频以汤姆和小白鼠的搞笑互动结束,最后画面出现“结束”的字样。总体来看,这段视频展示了汤姆和杰瑞的经典追逐和幽默桥段,充满了滑稽和欢乐。

  尽管GPT-4o官方并未提供视频分析功能,我们仍可通过这种巧妙的变通方法实现视频理解。我个人认为这种方法相当有趣。完整的代码已在GitHub上公开,链接为https://github.com/xindoo/openai-examples/blob/main/vision_for_video.ipynb。

相关文章:

如何用GPT-4o解读视频

OpenAI在去年推出的GPT-4V已经支持了多模态识别,但一直仅限于图片输入,不支持视频。相比之下,Google的Gemini早已支持视频识别。最近,我司业务场景中出现了一个需要识别视频的需求,而我们只采购了GPT-4o模型。这就引发…...

[ACTF2020]Upload 1--详细解析

信息收集 题目告诉我们是一道upload,也就是文件上传漏洞题目。 进入界面,是一个灯泡,将鼠标放在图标上就会出现文件上传的相应位置: 思路 文件上传漏洞,先看看有没有前端校验。 在js源码中找到了前端校验&#xff…...

【微软:多模态基础模型】(3)视觉生成

欢迎关注【youcans的AGI学习笔记】原创作品 【微软:多模态基础模型】(1)从专家到通用助手 【微软:多模态基础模型】(2)视觉理解 【微软:多模态基础模型】(3)视觉生成 【微…...

整合Druid

添加依赖 配置数据源信息...

基于Python空气质量可视化及预测

摘 要 随着社会的发展和工业化进程的加速,环境问题日益凸显,尤其是空气质量问题对人们的生活和健康产生了重大影响。为了更好地了解和预测空气质量,本文设计并实现了一个基于Python爬虫、Flask框架和ECharts的天气质量预测及可视化系统。该系统通过爬取网络上的空气质量数据…...

第1章-PostgreSQL(PG)介绍

第1章-PostgreSQL(PG)介绍 1、简介2、排名3、发展4、应用5、优势6、对比 1、简介 PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版…...

moduo之阻塞队列BlockingQueue和BoundedBlockingQueue

简介 moduo中的队列与java线程池中的队列类似, 有无界阻塞队列和有界阻塞队列 结构 #mermaid-svg-Gf8nET825tZgzVRM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Gf8nET825tZgzVRM .error-icon{fill…...

大模型Tuning方法详解

1. 引言 大模型与Tuning的重要性 随着人工智能和深度学习技术的快速发展,大规模预训练模型(Large Pre-trained Models,简称大模型)在自然语言处理、计算机视觉等领域取得了显著的效果。大模型如GPT-4、BERT、T5和DALL-E等具备强…...

爬虫策略与反爬机制——爬虫常见策略

随着网络爬虫技术的日益发展,反爬机制也变得越来越复杂,网站和服务商不断加强对爬虫行为的监控和限制,开发者需要采取一系列有效的爬虫策略来提高爬虫的效率并规避反爬措施。本章将介绍一些常见的爬虫策略,帮助开发者应对不同情况…...

Linux基础(十七)——Linux 帐号管理与 ACL 权限设置

Linux 帐号管理与 ACL 权限设置 1.UID与GID2./etc/passwd3./etc/shadow4./etc/group5./etc/gshadow6.有效群组和初始群组7.账号管理7.1 增加、修改、删除账户7.2 增加、修改、删除群组7.3 实例 8.ACL使用8.1 ACL定义8.2 查询与设置ACL 9.用户切换9.1 su9.2 .sudo 10. 使用者的特…...

【HarmonyOS】鸿蒙系统在租房项目中的项目实战(二)

从今天开始,博主将开设一门新的专栏用来讲解市面上比较热门的技术 “鸿蒙开发”,对于刚接触这项技术的小伙伴在学习鸿蒙开发之前,有必要先了解一下鸿蒙,从你的角度来讲,你认为什么是鸿蒙呢?它出现的意义又是…...

11.16 Vue element

Ajax 概念:Asynchronous JavaScript Anderson XML,异步的JavaScript和XML。 作用: 数据交换:通过Ajax 可以给服务器发送请求,并收取服务器相应的数据。异步交互:可以在不重新加载整个页面的情况下&#…...

Gin 框架中的路由

1、路由概述 路由(Routing)是由一个 URI(或者叫路径)和一个特定的 HTTP 方法(GET、POST 等) 组成的,涉及到应用如何响应客户端对某个网站节点的访问。 RESTful API 是目前比较成熟的一套互联网应用程序的 API 设计理论,所以我们设计我们的路 由的时候建议参考 …...

在MATLAB中实现自适应滤波算法

自适应滤波算法是一种根据信号特性自动调整滤波参数的数字信号处理方法,其可以有效处理噪声干扰和信号畸变问题。在许多实时数据处理系统中,自适应滤波算法得到了广泛应用。在MATLAB中,可以使用多种方法实现自适应滤波算法。本文将介绍自适应…...

linux文件与重定向

目录 一、共识原理 二、回顾C语言文件函数 1.fopen 2.fwrite 3.fclose 三、文件系统调用 1.open 2.write 3.访问文件的本质 4.stdin&&stdout&&stderror 5.文件的引用计数 四、重定向 1.文件描述符的分配规则 2. 输出重定向 3.重定向系统调用 4.…...

基于Python的仓库管理系统设计与实现

背景: 基于Python的仓库管理系统功能介绍 本仓库管理系统采用Python语言开发,利用Django框架和MySQL数据库,实现了高效、便捷的仓库管理功能。 用户管理: 支持员工和管理员角色的管理。 用户注册、登录和权限分配功能&#x…...

【Pikachu】URL重定向实战

人生在世只有一次,不必勉强选择自己不喜欢的路,随性而生或随性而死都没关系,不过无论选择哪条路,都不要忘记自己的初心。 1.不安全的url跳转实战 首先点击页面上的链接,观察url 直接修改url为https://www.baidu.com进…...

C语言实现3D动态爱心图形的绘制与动画效果

**标题:C语言实现3D动态爱心图形的绘制与动画效果** --- ### 一、引言 在计算机图形学中,三维图形的绘制和动画处理是一个重要且有趣的研究方向。通过数学公式描述的几何体可以在计算机屏幕上展示出丰富多彩的动态效果,其中“爱心”图形作…...

深入理解Nginx:从基础配置到高级优化

什么是Nginx? Nginx(发音为“Engine-X”)是一个高性能的HTTP和反向代理服务器,同时也可以作为邮件代理服务器和通用的TCP/UDP代理服务器。Nginx以其高并发处理能力、稳定性和灵活的配置闻名,是现代Web开发和部署的核心…...

ONLYOFFICE8.2版本测评,团队协作的办公软件

文章目录 引言ONLYOFFICE产品简介功能与特点1. 实时协作2. 兼容性3. 模板库4. 评论和修订5. 安全性 体验与测评功能测试 邀请用户使用项目介绍结尾了解更多 引言 在数字化办公的浪潮中,效率和协作成为了工作的核心。ONLYOFFICE作为一个强大的办公套件,正…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...