惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
CERT Recently Published Vulnerability Notes
S
Security @ Cisco Blogs
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Help Net Security
Help Net Security
Spread Privacy
Spread Privacy
WordPress大学
WordPress大学
S
Schneier on Security
博客园 - 聂微东
C
Cybersecurity and Infrastructure Security Agency CISA
F
Full Disclosure
人人都是产品经理
人人都是产品经理
Cisco Talos Blog
Cisco Talos Blog
D
Docker
aimingoo的专栏
aimingoo的专栏
Application and Cybersecurity Blog
Application and Cybersecurity Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
月光博客
月光博客
GbyAI
GbyAI
Stack Overflow Blog
Stack Overflow Blog
V
Visual Studio Blog
Security Latest
Security Latest
C
CXSECURITY Database RSS Feed - CXSecurity.com
N
News and Events Feed by Topic
小众软件
小众软件
A
About on SuperTechFans
Scott Helme
Scott Helme
Cloudbric
Cloudbric
T
Threatpost
雷峰网
雷峰网
NISL@THU
NISL@THU
N
News | PayPal Newsroom
Microsoft Azure Blog
Microsoft Azure Blog
T
Tailwind CSS Blog
T
Tor Project blog
T
The Blog of Author Tim Ferriss
The Hacker News
The Hacker News
C
Cyber Attacks, Cyber Crime and Cyber Security
量子位
Latest news
Latest news
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
I
Intezer
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
P
Privacy International News Feed
TaoSecurity Blog
TaoSecurity Blog
N
News and Events Feed by Topic
IT之家
IT之家
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MongoDB | Blog
MongoDB | Blog
P
Privacy & Cybersecurity Law Blog

XINDOO

关于内卷,几个值得深想的洞察 当创作被 Skill 化:我用 AI 写了一部 320 章的长篇网文 AI第一剑,先斩程序员 AI 也会偷懒?这个 PUA 工具专治“摸鱼式编程” Gstack 深度解析:YC CEO 开源的 AI 工程团队 GitHub Trending霸榜!深度解析AI Coding辅助神器 Superpowers 深度探讨:从 OpenClaw 爆火,看 AI Agent 的真相与程序员的未来 我复刻了NotebookLM的信息图功能 我用AI写了部小说,这里是整个过程 [翻译]我在谷歌14年学到的21堂课 2万字吊打40万字:为什么我的“牛马Agent”比“数字分身”更聪明? 最近AI领域爆火的 Agent Skills 是什么? 从计算机科学的视角来看拖延症 一周改6个库后我悟了:AI时代,程序员正在退化成“甲方” 使用n8n做一个自动同步更新的Github项目问答机器人 Agent设计模式——第 20 章:优先级排序 Agent设计模式——第 1 章:提示词链 Agent设计模式——附录 D - 使用 AgentSpace 构建 Agent Agent设计模式——第 19 章:评估和监控 Agent设计模式——第 10 章:模型上下文协议 (MCP) Agent设计模式——第 21 章:探索和发现 Agent设计模式——智能体设计模式 Agent设计模式——第 11 章:目标设定和监控 Agent设计模式——第 9 章:学习和适应 Agent设计模式——第 16 章:资源感知优化 Agent设计模式——附录 G - 编码 Agent Agent设计模式——第 13 章:人机协同 Agent设计模式——第 17 章:推理技术 Agent设计模式——附录 F - 深入剖析:Agent 推理引擎的内部运作机制 Agent设计模式——章节目录 Agent设计模式—— Agent设计模式——第 7 章:多 Agent 协作 Agent设计模式——附录 E - 命令行界面中的 AI Agent Agent设计模式——附录 C - Agentic 框架快速概览 Agent设计模式——第 3 章:并行化 Agent设计模式——**常见问题解答:Agentic 设计模式** Agent设计模式——第 14 章:知识检索(RAG) Agent设计模式——第 18 章:Guardrails/安全模式 Agent设计模式——第 15 章:Agent 间通信(A2A) Agent设计模式——第 8 章:内存管理 Agent设计模式——第 12 章:异常处理和恢复 Agent设计模式——第 4 章:反思 Agent设计模式——附录 B - AI Agentic 交互:从图形界面到现实世界环境 Agent设计模式——第 5 章:工具使用(函数调用) Agent设计模式——结论 Agent设计模式——第 6 章:规划 Agent设计模式——第 2 章:路由 从经验主义到贝叶斯理论:如何排查线上问题 我用AI为自己造了一把安全的开发者“瑞士军刀”” 从LLM和MCP的协同过程看如何做优化 打通Dify与AI工具生态:将Workflow转为MCP工具的实践 一文了解知识库背后的技术RAG AI应用的五个级别:从入门到专家的进阶之路 一文入门AI圈最近爆火的MCP协议 HTTP/3:性能改进(第 2 部分) deepseek-r1祛魅:从过度热捧到理性认知⁠ 为什么AI智能体需要工作流 json命令行处理神器jq介绍 OpenAI的结构化浅析 从大模型的原理到提示词优化 从经济学原理看团队分工合作 [翻译]关于人工智能的30个思考 从马斯洛需求层次理论谈职场激励 知识与智慧 如何使用大语言模型绘制专业图表 两个开源项目打造自己的大模型聚合平台 我让gpt4o给我推荐了一千多次书 得到了这些数据 用Langchain创建一个可以总结网页内容的Agent 推荐一个好用的命令行工具ShellGPT 关于ffmpeg height not divisible by 2的错误 使用Certbot解决https证书自动更新的问题 Spring Cache简明教程 软件开发中的抓大放小vs极致细节思维 OpenAI Assistants-API简明教程 OpenAI的多函数调用(Multiple Function Calling)简介 如何使用ffmpeg制作透明背景的视频 spring-kafka中ContainerProperties.AckMode详解 如何在地图上寻找最密集点的位置? IO密集型服务提升性能的三种方法 职场中的基本归因错误和自利归因 使用javax.validation.constraints校验参数合法性 Java Optional:让你的代码更优雅 ChatGPT函数调用初体验:让ChatGPT具备抓取网页文本的能力 如何使用ChatGPT提升自己的“码”力? 使用ffmpeg拼接两张图片 ThreadPoolExecutor——高效处理并发任务的必备良器 从CPU的视角看 多线程代码为什么那么难写! 使用ffmpeg缩小视频体积的几种方式 Linux parallel 命令使用手册 为什么说过早优化是万恶之源? Linux xargs命令介绍 深入理解Spring的事件通知机制 Java高并发之CyclicBarrier简介 聊一聊过度设计! 详解Redisson分布式限流的实现原理 Java中使用HashMap时指定初始化容量性能一定会更好吗? 如何用ffmpeg截取视频片段&截取时间不准确的坑 XINDOO的2022年年终总结 使用ffmpeg将视频转成HLS(m3u8)格式 谷歌Guava LoadingCache介绍
如何用GPT-4o解读视频
xindoo · 2024-11-17 · via XINDOO

  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 OpenAI

client = 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 = 320

while 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