Qwen2.5-Omni 大模型部署实践(八):视频信息提取的多模态应用探索

系列篇章💥

No.文章
1Qwen2.5-Omni 大模型部署实践(一):环境搭建与模型下载
2Qwen2.5-Omni 大模型部署实践(二):使用transformers推理实践
3Qwen2.5-Omni 大模型部署实践(三):启动本地 Web UI 演示
4Qwen2.5-Omni 大模型部署实践(四):使用 vLLM 部署推理实践
5Qwen2.5-Omni 大模型部署实践(五):音频理解全能指南
6Qwen2.5-Omni 大模型部署实践(六):语音聊天的实践应用与体验
7 Qwen2.5-Omni 大模型部署实践(七):通过屏幕录制实现智能信息交互
8Qwen2.5-Omni 大模型部署实践(八):视频信息提取的多模态应用探索


一、前言

在信息多元且海量的当下,视频凭借强大表现力与信息承载量,广泛用于娱乐、商业分析、科研数据记录等领域,其蕴含的丰富信息极具价值。如何高效精准提取这些信息,成为各界关注焦点。Qwen2.5-Omni 作为先进的多模态大模型,能理解视频的视觉、音频及相关文本信息,解答复杂问题,满足多样化信息提取需求。接下来,让我们深入体验如何巧用 Qwen2.5-Omni 从视频流中获取关键信息。

二、环境准备

如果在此之前,已经成功完成了相关的安装和准备工作,可以直接跳过此章节,快速进入到模型的实战应用环节。

(一)安装相关依赖

首先需要安装一系列关键的依赖库。这些依赖库共同为模型的运行提供支持。以下是具体的安装步骤:

pip uninstall transformers
pip install git+https://github.com/huggingface/transformers@f742a644ca32e65758c3adb36225aef1731bd2a8
pip install accelerate
pip install triton
pip install qwen-omni-utils
pip install -U flash-attn --no-build-isolation
# 用于从魔塔模型库下载模型
pip install modelscope

(二)模型下载准备

为了确保在后续的音频处理任务中能够顺畅地使用Qwen2.5-Omni模型,我们需要提前将模型下载到本地备用。这里,我们借助modelscope库中的snapshot_download函数来完成这一重要任务。代码如下:

from modelscope import snapshot_download

model_dir = snapshot_download('Qwen/Qwen2.5-Omni-7B', cache_dir='/root/autodl-tmp', revision='master')

代码中,snapshot_download函数的第一个参数'Qwen/Qwen2.5-Omni-7B'明确指定了我们要下载的模型名称,这个名称在modelscope平台上是唯一标识该模型的。cache_dir='/root/autodl-tmp'参数则用于指定模型下载后存储的路径,你可以根据自己的实际情况修改这个路径,但务必确保指定的目录具有足够的存储空间来容纳模型文件。因为Qwen2.5-Omni模型文件相对较大,充足的存储空间是保证下载成功的关键。revision='master'表示我们要下载模型的最新版本,这样可以获取到模型的最新特性和优化,以获得最佳的使用体验。

三、加载模型 & 导入依赖

当环境搭建完毕,模型也成功下载到本地后,接下来的核心步骤便是加载模型并导入相关依赖,为智能信息交互做好最后的准备工作。具体代码如下:

import torch
from transformers import Qwen2_5OmniModel, Qwen2_5OmniProcessor
from IPython.display import Video

model_path = "/root/autodl-tmp/Qwen/Qwen2.5-Omni-7B"
model = Qwen2_5OmniModel.from_pretrained(
    model_path,
    torch_dtype=torch.bfloat16,
    device_map="auto",
    attn_implementation="flash_attention_2",
)
processor = Qwen2_5OmniProcessor.from_pretrained(model_path)

在这段代码中,启用了flash_attention_2技术,这是一种高效的注意力机制实现方式,能进一步提升模型处理视频数据时的计算效率,使模型在信息交互场景中响应更迅速、准确。

四、定义推理函数

为高效处理视频输入和文本提示,并生成精准的文本输出,我们需定义一个专属推理函数。此函数协调模型与各类工具,确保任务顺利推进。以下是推理函数的详细代码:

from qwen_omni_utils import process_mm_info  # 导入用于处理多模态信息的工具函数

# @title inference function
def inference(video_path, prompt, sys_prompt):
    """
    推理函数,用于处理视频输入和文本提示,并生成文本输出。

    参数:
    - video_path: 视频文件路径
    - prompt: 用户提供的文本提示
    - sys_prompt: 系统提示,用于定义模型的角色和行为

    返回值:
    - text: 模型生成的文本输出
    """
    # 构建输入消息,包括系统消息和用户消息
    messages = [
        {"role": "system", "content": sys_prompt},  # 系统消息,定义模型的角色和行为
        {"role": "user", "content": [  # 用户消息,包含文本提示和视频输入
                {"type": "text", "text": prompt},  # 文本提示
                {"type": "video", "video": video_path},  # 视频输入路径
            ]
        },
    ]

    # 使用 processor 应用聊天模板,将消息转换为模型可处理的文本格式
    # 参数 tokenize=False 表示不对文本进行分词处理,add_generation_prompt=True 表示添加生成提示
    text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)

    # 调用 process_mm_info 函数处理多模态信息
    # 提取音频、图像和视频信息,use_audio_in_video=False 表示不从视频中提取音频信息
    audios, images, videos = process_mm_info(messages, use_audio_in_video=False)

    # 使用 processor 将文本、音频、图像和视频信息转换为模型输入张量
    # return_tensors="pt" 表示返回 PyTorch 张量,padding=True 表示对输入进行填充以匹配最大长度
    inputs = processor(text=text, audios=audios, images=images, videos=videos, return_tensors="pt", padding=True, use_audio_in_video=False)

    # 将输入张量移动到模型所在的设备和数据类型
    inputs = inputs.to(model.device).to(model.dtype)

    # 调用模型的 generate 方法生成输出
    # use_audio_in_video=False 表示在生成过程中不使用音频信息,return_audio=False 表示不返回音频输出
    output = model.generate(**inputs, use_audio_in_video=False, return_audio=False)

    # 解码生成的文本输出
    # skip_special_tokens=True 表示跳过特殊标记,clean_up_tokenization_spaces=False 表示不清理多余的空格
    text = processor.batch_decode(output, skip_special_tokens=True, clean_up_tokenization_spaces=False)

    # 返回生成的文本结果
    return text

五、基于视频提问(一)

以下代码通过 Qwen2.5-Omni 对视频文件进行推理,并生成文本输出,实现对视频中饮品种类数量的查询:

#video_path = "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2.5-Omni/shopping.mp4"
video_path = "files/shopping.mp4"

prompt = "How many kind of drinks can you see in the video?"
display(Video(video_path, width=640, height=360))

## Use a local HuggingFace model to inference.
response = inference(video_path, prompt=prompt, sys_prompt="You are a helpful assistant.")
print(response[0])

代码执行如下:
在这里插入图片描述

资源消耗如下:
在这里插入图片描述

六、基于视频提问(二)

以下代码通过 Qwen2.5-Omni 对视频文件进行推理,并生成文本输出,用于查询视频中拿起饮品的瓶数:

#video_path = "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2.5-Omni/shopping.mp4"
video_path = "files/shopping.mp4"
prompt = "How many bottles of drinks have I picked up?"

display(Video(video_path, width=640, height=360))

## Use a local HuggingFace model to inference.
response = inference(video_path, prompt=prompt, sys_prompt="You are a helpful assistant.")
print(response[0])

代码执行如下:
在这里插入图片描述

七、基于视频提问(三)

以下代码通过 Qwen2.5-Omni 对视频文件进行推理,并生成文本输出,旨在获取视频中第二次拿起饮品的瓶身容量信息:

#video_path = "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2.5-Omni/shopping.mp4"
video_path = "files/shopping.mp4"
prompt = "How many milliliters are there in the bottle I picked up second time?"

display(Video(video_path, width=640, height=360))

## Use a local HuggingFace model to inference.
response = inference(video_path, prompt=prompt, sys_prompt="You are a helpful assistant.")
print(response[0])

代码执行如下:
在这里插入图片描述

八、总结

通过本文的详细介绍,我们全面展示了如何运用 Qwen2.5-Omni 模型从视频流中精准提取信息。在实际操作过程中,通过灵活定义不同的系统提示和用户提示,我们能够巧妙地调控模型的行为,使其完美适配各类复杂多变的应用场景。无论是在商业领域对市场调研视频进行数据分析,精准洞察消费者行为;还是在教育场景中,从教学视频里提取关键知识点,辅助教学评估与优化;亦或是在安防监控方面,对监控视频进行智能分析,及时发现异常事件等,Qwen2.5-Omni 都能凭借其卓越的多模态处理能力,提供高效且准确的信息提取服务。
在这里插入图片描述

🎯🔖更多专栏系列文章:AI大模型提示工程完全指南AI大模型探索之路(零基础入门)AI大模型预训练微调进阶AI大模型开源精选实践AI大模型RAG应用探索实践🔥🔥🔥 其他专栏可以查看博客主页📑

😎 作者介绍:资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索(CSDN博客之星|AIGC领域优质创作者)
📖专属社群:欢迎关注【小兵的AI视界】公众号或扫描下方👇二维码,回复‘入群’ 即刻上车,获取邀请链接。
💘领取三大专属福利:1️⃣免费赠送AI+编程📚500本,2️⃣AI技术教程副业资料1套,3️⃣DeepSeek资料教程1套🔥(限前500人)
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我们,一起携手同行AI的探索之旅,开启智能时代的大门!

评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寻道AI小兵

🐳 感谢你的巨浪支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值