使用 Granite 视觉模型构建 PPT AI 图像分析问答系统

随着 AI 驱动技术的不断发展,图像分析正变得日益复杂,从而能够从视觉数据中获得更深入的洞察分析。随着机器学习的进步,AI 可以处理上传的图像、提取元数据,并支持大规模的内容审核。这些分析工具还有助于定价、视觉优化和图像生成等应用程序的预测建模,从而提高工作流程的成本效益和效率。通过整合数据驱动的方法,AI 增强了自动化和决策能力,为智能视觉解读提供了新的可能性。

用例

随着计算机视觉和先进 AI 的快速发展,企业和研究人员正在利用将基于图像的技术应用地更广泛的领域。从图像分类和 OCR(光学字符识别)到分割和视频分析,人工智能驱动的工具正在改变我们提取和分析视觉信息的方式。

在社交媒体等行业,AI 通过像素级图像分析来增强内容审核,确保合规性并提升用户参与度。企业还可以利用 Vision API 进行自动化文档处理,将扫描文件、Excel 表格和报告转换为结构化数据。这些应用程序能够简化工作流程,提高效率,并使组织能够从大规模视觉数据集中提取有意义的洞察分析。

这些用例凸显了人工智能驱动的图像分析在整个行业中日益重要的作用。在本教程中,我们重点关注将这些功能应用于 PowerPoint 演示文稿,利用先进的计算机视觉和 AI 模型,实现文本和图像上的交互式问答

人工智能驱动的演示文稿交互式问答

大型语言模型 (LLM) 通过从海量非结构化文本数据集中提取智能洞察分析,彻底革新了机器学习领域。然而,传统的 LLM 通常难以处理图像分析,这使得从演示文稿中的图表、图示和视觉元素中提取洞察分析变得极具挑战性。

IBM® Granite Vision 3.2 大语言模型 (LLM) 通过将 AI 工具与先进的对象检测算法相结合,弥合了这一差距,使用户能够自动化多模态分析。本教程演示如何使用 AI 提取和分析 PowerPoint (.pptx) 文件中的文本图与像,并实现交互式问答,增强演示文稿的洞察分析,从而简化您的工作流程。

在本教程中,您将学习如何构建 AI 驱动的系统,该系统能够利用 PowerPoint 幻灯片中的文本和图像作为上下文,实时回答用户的查询。本教程将指导您完成以下内容:

PowerPoint 处理:从 .pptx 文件中提取文本和图片,以进行基于 AI 的分析。

基于文本的问答:使用 Granite Vision 根据提取的幻灯片文本生成答案。

基于图片的问答: 让 AI 分析幻灯片中的图片、图表和图示。

优化问题构建:学习如何设计有效问题,以获得准确且相关的 AI 回复。

使用的技术

本教程利用前沿 AI 技术,包括:

1. IBM Granite Vision:一个能够处理文本和图像的强大的视觉语言模型 (VLM)。

2. Python-PPTX:一个用于从 PowerPoint 文件中提取文本和图片的库。

3. Transformers:一个高效处理 AI 模型输入的框架。

您将达成的目标

在本教程结束时,您将能够:

1. 提取和处理 PowerPoint 内容(文本和图片)。

2. 使用 Granite Vision 3.2 模型对幻灯片内容进行 AI 驱动的问答。

3. 向 AI 提出富有洞察力的有关文本和图片的问题。

4. 通过使用人工智能驱动的解释,改善用户与演示文稿的交互。

本教程专为希望复用 AI 驱动的洞察分析来增强其演示文稿的 AI 开发人员、研究人员、内容创作者和商业专业人士而设计。

视频

先决条件

您需要一个 IBM Cloud 帐户 来创建 watsonx.ai 项目。

步骤

第 1 步:设置环境

虽然您可以选择多种工具,本教程将引导您如何设置 IBM 帐户以使用 Jupyter Notebook。

使用您的 IBM Cloud 帐户登录 watsonx.ai

2. 创建 watsonx.ai 项目。您可以在项目内部获取项目 ID。点击管理选项卡。然后,从常规页面中的详细信息部分复制项目 ID。您需要此 ID 来完成本教程。

3. 创建 Jupyter Notebook

4. 将 PPTX 文件作为资产上传到 watsonx.ai

此步骤将打开一个笔记本环境,可在其中复制本教程中的代码。或者,您可以将此笔记本下载到本地系统并将其作为资产上传到您的 watsonx.ai 项目。本教程也可在 GitHub 上找到。

注意:本教程需要 GPU 基础架构来运行代码,因此建议按照本教程的演示使用 watsonx.ai。

第 2 步:安装所需的依赖项

在开始提取和处理 PowerPoint 内容之前,我们需要安装必要的 Python 库:

transformers:提供对 IBM Granite Vision 和其他 AI 模型的访问。

torch:一个深度学习框架,是高效运行模型所必需。

python-pptx:一个用于从 PowerPoint (.pptx) 文件中提取文本和图片的库。

运行以下命令来安装和升级这些软件包:

!pip install --upgrade transformers
!pip install --upgrade torch
!pip install python-pptx
!pip install botocore
!pip install ibm-cos-sdk

第 3 步:导入所需库

在此步骤中,我们将导入用于处理 PowerPoint 文件、处理图片以及与 IBM Granite Vision 模型交互所必需的库:

  1. osio:用于文件处理和输入/输出操作。
  2. Torch:确保与 AI 模型的兼容性。
  3. pptx.Presentation:从 PowerPoint (.pptx) 文件中提取文本和图片。
  4. PIL.Image:处理从幻灯片中提取的图片。
  5. transformers:为基于 AI 的问答加载 IBM Granite Vision。
  6. botoCore.client.configibm_boto3:处理基于云的存储访问 IBM Cloud Object Storage。
import os
import io
import torch
from pptx import Presentation
from PIL import Image
from io import BytesIO
from transformers import AutoProcessor, AutoModelForVision2Seq
from botocore.client import Config
import ibm_boto3

第 4 步:连接到 IBM Cloud Object Storage

在此步骤中,我们将建立与 IBM Cloud Object Storage 的连接,以访问和检索存储在云中的 PowerPoint 文件。

您可以利用通过 boto3 库的分支提供的 python 支持,该分支具有充分利用 IBM Cloud Object Storage 的功能。请查阅官方文档以获取这些凭据。

ibm_boto3.client:创建一个客户端以与 IBM Cloud Object Storage 交互。

ibm_api_key_id:用于身份验证的 IBM Cloud API 密钥。

ibm_auth_endpoint:IBM Cloud 的身份验证端点。

endpoint_url:特定的云对象存储 (COS) 的存储端点。

# IBM COS credentials
cos_client = ibm_boto3.client(
    service_name='s3',
    ibm_api_key_id='Enter your API Key',
    ibm_auth_endpoint='[Enter your auth end-point url]',
    config=Config(signature_version='oauth'),
    endpoint_url='[Enter your end-point url]'
)

注意:当您将文件作为资产上传到 watsonx.ai 时,该文件会自动存储在 IBM Cloud Object Storage 中。当您稍后将文件导入 Jupyter Notebook 时,watsonx.ai 会生成必要的凭据(API 密钥、身份验证端点和存储端点)并将其插入您的笔记本中。所提供的 IBM Cloud Object Storage 凭证可实现从存储器中检索文件的安全访问,从而实现 watsonx.ai 资产和笔记本环境之间的无缝集成以进行进一步处理。

通过配置此连接,我们可以无缝导入和处理存储在 IBM Cloud 中的 PowerPoint 演示文稿,以进行人工智能驱动的分析

第 5 步:定义存储参数

在此步骤中,我们将指定 IBM Cloud Object Storage 存储桶和文件详细信息,以定位和检索用于处理的 PowerPoint 演示文稿 (.pptx)。

查看此官方文档,通过 IBM Cloud UI 获取存储桶配置的详细信息。

bucket:存储文件的 IBM Cloud Object Storage 存储桶的名称。

Object_key:要访问的 PowerPoint 演示文稿的确切文件名

bucket = 'Enter your bucket key'
object_key = 'Application Integration client presentation.PPTX [You can replace this with your PPT name]'

第 6 步:从 IBM Cloud Object Storage 检索 PowerPoint 文件

在此步骤中,我们从 IBM Cloud Object Storage 下载 PowerPoint (.pptx) 文件,以便在本地进行处理。

cos_client.get_object():从指定的存储桶和对象键检索文件。

Streaming_body.read():将文件内容读取为字节流,以供进一步处理。

# Download PPTX file from IBM COS
streaming_body = cos_client.get_object(Bucket=bucket, Key=object_key)['Body']
pptx_bytes = streaming_body.read()

第 7 步:将 PowerPoint 文件保存在本地路径

在此步骤中,我们将下载的 PowerPoint 文件 (.pptx) 存储在本地,以便进行处理。

pptx_path:定义将要保存演示文稿的本地文件名。

open(pptx_path, 'wb'):以二进制写入模式打开文件,以存储检索到的字节。

f.write(pptx_bits):将下载的文件内容写入新创建的 .pptx 文件。

# Save the bytes to a local PPTX file
pptx_path = "downloaded_presentation.pptx"
with open(pptx_path, 'wb') as f:
    f.write(pptx_bytes)

第 8 步:确认文件保存位置

在此步骤中,我们打印一条确认消息,以确保 PowerPoint 文件已成功保存。`print` 函数显示 .pptx 所在的文件路径。

print(f"PPTX file saved as: {pptx_path}")

第 9 步:从 PowerPoint 文件中提取文本和图片

在此步骤中,我们定义一个函数来处理 PowerPoint 文件 (.pptx) 并提取其内容:

slide_texts:存储从每张幻灯片中提取的文本。

slide_images:将提取的图片存储为 Python 成像库 (PIL) 图像对象,并附带其对应的幻灯片编号。

通过幻灯片迭代,提取包含文本内容形状中的文本和嵌入幻灯片中的图片

该函数将文字和图片从 PPT 中分离出来,使聊天代理能根据提取的内容轻松回答用户的问题。

def extract_text_and_images_from_pptx(pptx_path):
        presentation = Presentation(pptx_path)
        slide_texts = []
        slide_images = []
        for slide_number, slide in enumerate(presentation.slides):
                # Extract text from slide
                slide_text = []
                for shape in slide.shapes:
                        if hasattr(shape, "text"):
                                slide_text.append(shape.text)
                                slide_texts.append("\n".join(slide_text))
                # Extract images from slide
                for shape in slide.shapes:
                        if hasattr(shape, "image"):
                                image_stream = BytesIO(shape.image.blob)
                                image = Image.open(image_stream)
                                slide_images.append((slide_number, image))
return slide_texts, slide_images

第 10 步:处理 PowerPoint 文件

在此步骤中,我们调用函数从已保存的 PowerPoint 文件中提取文本和图片。

pptx_path:指定已下载的 PowerPoint 文件的本地路径。

extract_text_and_images_from_pptx(pptx_path):从幻灯片中提取文本和图片。

slide_texts:存储从所有幻灯片中提取的文本。

de_images:存储提取的图片。

pptx_path = "downloaded_presentation.pptx"
slide_texts, slide_images = extract_text_and_images_from_pptx(pptx_path)

第 11 步:显示从幻灯片中提取的文本

在此步骤中,我们打印从每张幻灯片中提取的文本,以验证 PowerPoint 内容是否已正确处理。

enumerate(slide_texts):迭代提取的文本,并将每个文本与其各自的幻灯片编号相关联。

分隔符 ('-' * 40):帮助在视觉上区分不同幻灯片的内容。

# Display extracted text and images
for i, text in enumerate(slide_texts):
        print(f"Slide {i + 1} Text:\n{text}\n{'-'*40}")

第 12 步:显示从幻灯片中提取的图像

在此步骤中,我们将确认并可视化从 PowerPoint 幻灯片中提取的图片。

len:统计提取出的图片总数。

img.show():打开每张提取出的图片以供评论。

您可以将 `.show()` 替换为 `.save('filename.png')`,以便将图片存储到本地。

print(f"\nExtracted {len(slide_images)} images.")
for slide_num, img in slide_images:
        img.show() # This will open the image, or you can save it using img.save('filename.png')

第 13 步:加载 IBM Granite 视觉模型

在此步骤中,我们初始化 IBM Granite-Vision-3.2-2B 模型,用于基于人工智能驱动的文本和图片处理。

MODEL_NAME 指定要使用的预训练 Granite Vision 模型,而 torch.cuda.is_available() 用于检查是否有 GPU (CUDA) 可用于加速处理;否则,将默认使用 CPU。

# Load IBM Granite-Vision-3.1-2B-Preview model and processor
MODEL_NAME = "ibm/granite-vision-3-2-2b"
device = "cuda" if torch.cuda.is_available() else "cpu"

第 14 步:初始化模型和处理器

在此步骤中,我们将加载 IBM Granite Vision 模型及其相应的处理器,以处理文本和图片输入。

AutoProcessor.from_pretrained(MODEL_NAME, Trust_remote_code=True):加载预训练处理器,以便将输入数据(文本和图片)格式化为模型所需的格式。

AutoModelForVision2Seq.from_pretrained(MODEL_NAME, trust_remote_code=True, ignore_mismatched_sizes=True).to(device):加载 Granite Vision 模型并将其传输到可用设备(GPU 或 CPU)。

其中,

trust_remote_code=True:确保与自定义模型实现兼容。

ignore_mismatched_sizes=True:防止因模型尺寸细微不一致时而出错。

注意:加载过程可能需要一段时间。

processor = AutoProcessor.from_pretrained(MODEL_NAME, trust_remote_code=True)
model = AutoModelForVision2Seq.from_pretrained(MODEL_NAME, trust_remote_code=True, ignore_mismatched_sizes=True).to(device)

第 15 步:实施基于文本的 AI 聊天

在此步骤中,我们创建了一个聊天函数,允许用户根据从 PowerPoint 幻灯片中提取的文本来提问。

其工作原理:

  1. 用户输入与幻灯片内容相关的问题。
  2. 从 PPT 中提取的全部文本会被格式化为该模型的结构化对话。这将为模型提供准确的上下文,以便从 PPT 内容本身生成具体答案。
  3. apply_chat_template() 以对话格式准备 AI 模型的输入。
  4. Model.generate() 根据输入查询生成回复。
  5. processor.decode() 将 AI 生成的回复解码为人类可读的文本。
  6. 循环将持续进行,直到到用户键入 `exit` 退出聊天。
# Chat based on Text Only
def chat_with_text(model, processor, slide_texts):
    while True:
        query = input("Ask a question based on the presentation text (or type 'exit' to quit): ")
        if query.lower() == 'exit':
            break
        conversation = [
            {
                "role": "user",
                "content": [
                    {"type": "text", "text": "\n".join(slide_texts) + f"\nQuery: {query}"},
                ],
            },
        ]
        inputs = processor.apply_chat_template(
            conversation,
        add_generation_prompt=True,
        tokenize=True,
        return_dict=True,
        return_tensors="pt"
        ).to(device)
        outputs = model.generate(**inputs, max_new_tokens=150)
        response = processor.decode(outputs[0], skip_special_tokens=True)
        print("Model Response:", response)

第 16 步:实施基于图片的 AI 聊天

在此步骤中,我们创建了一个聊天功能,允许用户就从 PowerPoint 幻灯片中提取的单个图片进行提问。

其工作原理:

  1. 用户输入与幻灯片图片相关的问题。
  2. 它们指定一个幻灯片编号以引用特定图片。
  3. 选定的图像将临时保存为 `slide_image_temp.png`。
  4. 系统会创建结构化对话,包括:(a) 图片文件路径。(b) 用户的提问。
  5. apply_chat_template() 将输入处理为适合 AI 模型的格式。
  6. Model.generate() 根据图片和用户查询生成回复。
  7. 系统将回复解码并打印给用户。
  8. 循环会持续进行,直到用户输入 exit 退出。
# Chat based on Images Only
def chat_with_images(model, processor, slide_images):
    while True:
        query = input("Ask a question based on the presentation images (or type 'exit' to quit): ")
            if query.lower() == 'exit':
                break
            slide_num = int(input(f"Enter slide number (1 to {len(slide_images)}) to ask about its image: ")) - 1
            image = slide_images[slide_num][1]
            img_path = "slide_image_temp.png"
            image.save(img_path) # Save the image temporarily
            conversation = [
                {
                    "role": "user",
                    "content": [
                            {"type": "image", "url": img_path},
                            {"type": "text", "text": query},
                    ],
                },
            ]
            inputs = processor.apply_chat_template(
                conversation,
                add_generation_prompt=True,
                tokenize=True,
                return_dict=True,
                return_tensors="pt"
            ).to(device)
            outputs = model.generate(**inputs, max_new_tokens=150)
            response = processor.decode(outputs[0], skip_special_tokens=True)
            print("Model Response:", response)

第 17 步:进行基于文本的 AI 聊天

在此步骤中,我们调用了 chat_with_text 函数,允许用户就从 PowerPoint 幻灯片中提取的文本进行提问。

其工作原理:

  1. chat_with_text() 启动基于文本的问答会话。
  2. 该功能持续提示用户输入,根据提取的幻灯片文本回答问题。
  3. 聊天循环持续进行,直到用户输入 exit 退出。
chat_with_text(model, processor, slide_texts)

输出

查询:整合对您的组织来说是竞争优势吗?

<|assistant|>

是的,整合对您的组织来说是一种竞争优势。它可以帮助您更快地行动并克服挑战,但也可能导致成本增加、效率低下、安全风险和用户体验不佳,最终危及组织在快速变化商业环境中的竞争力和能力。

根据演示文稿文本提问(或输入 'exit 退出):退出

当用户询问“整合对您的组织是一种竞争优势吗?”时,Granite Vision 模型使用提取的 PowerPoint 幻灯片文本来处理查询并生成回复。

该模型将“整合”视为一种业务概念,并从第 7 张幻灯片中提供了一种结构化答案,解释了其优势和风险。它强调了整合可以提升速度和解决问题的能力,但也指出了潜在弊端,如管理不当可能导致成本增加、效率低下、安全风险和体验差等。

这一回复展示了该模型解释提取的幻灯片文本,并生成与上下文相关且均衡的答案的能力

第 18 步:运行基于图像的 AI 聊天

在此步骤中,我们调用 chat_with_images 函数,以便用户能够就从 PowerPoint 幻灯片中提取的图片进行提问。

其工作原理:

  1. chat_with_images() 启动基于图片的问答会话。
  2. 该功能提示用户选择包含图像的特定幻灯片编号。
  3. 选定的图片经过处理并格式化为视觉模型的结构化对话。
  4. 该模型根据图像内容和用户的查询生成回复。
  5. 循环会持续进行,直到用户输入 exit 退出。
chat_with_images(model, processor, slide_images)

输出

根据演示图像提问(或键入 'exit' 退出):这是什么图片?

输入幻灯片编号(1 至 41)以查询其图片:2

模型响应:<|system|>

一个好奇的用户和人工智能助手之间的聊天。助手会对用户的问题提供有用、详细且礼貌的答案。

<|user|>

这是什么图片?

<|assistant|>

3D 模型

根据演示图片提问(或键入 'exit' 退出):解释这张图片

输入幻灯片编号(1 至 41)以查询其图片:2

模型响应:<|system|>

一个好奇的用户和人工智能助手之间的聊天。助手会对用户的问题提供有用、详细且礼貌的答案。

<|user|>

解释这张图片

<|assistant|>

这张图片是一个立方体的 3D 模型。

根据演示图片提问(或键入 'exit' 退出):您能解释一下这个图表吗?

输入幻灯片编号(1 至 41)以查询其图片:1

模型响应:<|system|>

一个好奇的用户和人工智能助手之间的聊天。助手会对用户的问题提供有用、详细且礼貌的答案。

<|user|>

您能解释一下这张图表吗?

<|assistant|>

这里是一个标题为“企业云市场从第一代到第四代的成熟度发展”的柱状图。x 轴衡量代数进展,而 y 轴绘制多年来的成熟度进展。从该图表中可以看出,随着产品更新换代,企业云市场日趋成熟。

根据演示图像提问(或输入 'exit' 退出):退出

当用户提出与图片相关的问题时,Granite Vision 模型会处理选定的图片,并根据其对视觉内容的理解生成回复。

对于问题“这是什么图片?”(幻灯片 2),该模型将图片识别为“3D 模型”,但只提供了极简描述。

对于“解释一下这张图片”(幻灯片 2),该模型优化了其回复,将其识别为“一个立方体的 3D 模型。

对于“您能解释一下这张图表吗?”(幻灯片 1),该模型提供了对条形图的详细描述,解释了其标题、x 轴、y 轴和整体趋势,并指出了企业云成熟度是如何跨代演进的。

此步骤允许用户利用 IBM Granite Vision 模型进行智能分析和解释,与图表、图示和信息图等视觉元素进行交互

关键要点

  1. 该模型可识别基本的形状和对象,但对于某些图片可能只能提供笼统的描述。
  2. 对于图表和图示,它能提供结构化的洞察分析,包括标题、轴标签和趋势,使其在商业和数据演示中非常有用。
  3. 回复的准确性取决于图像的清晰度和复杂度,较简单的视觉对象(例如 3D 模型)可以收到较短的回复,而结构化视觉对象(例如图表)则能获得更详细的洞察分析。

本教程演示了 IBM Granite Vision 解释图像的能力。

相关解决方案
IBM Maximo Visual Inspection

解锁无代码计算机视觉的强大功能,实现视觉检查自动化。

探索 Maximo 的视觉检查功能
人工智能 (AI) 咨询服务

IBM Consulting AI 服务有助于重塑企业利用 AI 实现转型的方式。

深入了解人工智能服务
人工智能 (AI) 解决方案

借助 IBM 业界领先的人工智能专业知识和解决方案组合,让人工智能在您的业务中发挥作用。

深入了解人工智能解决方案
采取下一步行动

通过 IBM Maximo Visual Inspection 将计算机视觉 AI 能力赋予您的质量控制和检测团队。 解锁无代码计算机视觉的强大功能,实现视觉检测自动化。

探索 Maximo 的视觉检查功能 产品导览