首页 >科技周边 >人工智能 >Paligemma 2 Mix:Demo OCR项目的指南

Paligemma 2 Mix:Demo OCR项目的指南

Christopher Nolan
Christopher Nolan原创
2025-02-28 16:32:11823浏览

>从账单收据中提取和分类费用。

    >执行光学特征识别(OCR)以检索关键信息。
  • >根据提供的图像总结支出。
  • >我们的重点是构建财务见解工具,但您可以使用此博客中所学的知识来探索其他Paligemma 2 Mix的用例,例如图像细分,对象检测和问题答案。
  • >
  • 什么是paligemma 2混合?
> Paligemma 2 Mix是一种高级视觉语言模型(VLM),将图像和文本作为输入处理并生成基于文本的输出。它旨在在支持多种语言的同时处理各种多模式AI任务。

>

paligemma 2专为各种视觉语言任务而设计,包括图像和简短的视频字幕,视觉问题答案,光学特征识别(OCR),对象检测和分割。

>

>图中使用的图像的来源:google

paligemma 2混合模型设计用于:> Paligemma 2 Mix:Demo OCR项目的指南

>图像和简短视频字幕:生成静态图像和简短视频的准确和上下文感知字幕。

>视觉询问答案(VQA):根据视觉内容分析图像并回答基于文本的问题。

>光学特征识别(OCR):从图像中提取和解释文本,使其可用于文档,收据和扫描材料。
    >对象检测和分割:它在图像中标识,标签和片段对象进行结构化分析。
  • >多语言支持:该模型还可以以多种语言以全局应用程序为文本生成和理解。
  • >您可以在官方发行文章中找到有关Paligemma 2混合模型的更多信息。 
  • 项目概述:Bill Scanner和Paligemma 2 Mix
  • 的支出分析仪
  • >让我们概述我们要采取的主要步骤:
    1. 加载并准备数据集:该过程是从加载和准备收据图像作为输入开始的。
    2. >初始化paligemma 2混合模型:我们配置并加载用于处理视觉语言任务的模型。
    3. >进程输入图像:然后,将图像转换为适当的格式(RGB),并准备它们进行分析。
    4. 提取关键信息:执行光学特征识别(OCR)以检索总量。
    5. >对费用进行分类:将购买分为杂货,服装,电子产品等类别。
    6. >
    7. 生成支出见解:我们总结了分类的费用并生成支出分配图。
    8. >构建一个交互式gradio接口:最后,我们创建一个UI,用户可以在其中上传多个账单,提取数据并以视觉上的方式分析支出。
    >步骤1:先决条件

    >在开始之前,让我们确保我们安装了以下工具和库:

    python 3.8
    • >火炬
    • 变形金刚
    • pil
    • matplotlib
    • gradio
    • 运行以下命令以安装必要的依赖项:
    >

    一旦安装了上述依赖项,请运行以下导入命令:>
    pip install gradio -U bitsandbytes -U transformers -q

    >步骤2:模型初始化

    import gradio as gr
    import torch
    import pandas as pd
    import matplotlib.pyplot as plt
    from transformers import PaliGemmaForConditionalGeneration, PaliGemmaProcessor, BitsAndBytesConfig
    from transformers import BitsAndBytesConfig
    from PIL import Image
    import re
    >我们使用量化配置并加载Paligemma 2混合模型以优化性能。对于此演示,我们将使用448 x 448输入图像分辨率的10B参数模型。您需要至少具有40GB内存(COLAB配置)的T4 GPU来运行此模型。 

    > bitsandbytes量化有助于减少记忆使用量的同时保持性能,从而可以在有限的GPU资源上运行大型模型。在此实现中,我们使用4位量化来进一步优化内存效率。

    >我们通过传递模型ID和量化配置,使用来自变形金刚库的PaligemmaforCongengergeneration类加载模型。同样,我们加载处理器,该处理器将输入预处理到张量中之前,然后将其传递给模型。
    device = "cuda" if torch.cuda.is_available() else "cpu"
    # Model setup
    model_id = "google/paligemma2-10b-mix-448" 
    bnb_config = BitsAndBytesConfig(
        load_in_8bit=True,  # Change to load_in_4bit=True for even lower memory usage
        llm_int8_threshold=6.0,
    )
    
    # Load model with quantization
    model = PaliGemmaForConditionalGeneration.from_pretrained(
        model_id, quantization_config=bnb_config
    ).eval()
    
    # Load processor
    processor = PaliGemmaProcessor.from_pretrained(model_id)
    # Print success message
    print("Model and processor loaded successfully!")
    步骤3:图像处理

    >装载模型后,我们将图像传递到模型之前对图像进行处理以维护图像格式的兼容性和增益均匀性。我们将图像转换为RGB格式:

    现在,我们的图像已准备好推理。

    >

    >步骤4:推理使用paligemma

    def ensure_rgb(image: Image.Image) -> Image.Image:
        if image.mode != "RGB":
            image = image.convert("RGB")
        return image
    >现在,我们设置了用于使用模型运行推断的主要功能。此功能将带有输入图像和问题,将它们整合到提示中,然后通过处理器将它们传递给模型。

    >步骤5:提取密钥信息

    >现在我们已经准备好主函数,我们将下一个从图像中提取关键参数 - 在我们的情况下,这些是总金额和商品类别。
    pip install gradio -U bitsandbytes -U transformers -q

    > extract_total_amount()函数处理图像以使用OCR从收据中提取总量。它构建了一个查询(问题),指示模型仅提取数值值,然后调用ask_model()函数以生成模型的响应。 

    import gradio as gr
    import torch
    import pandas as pd
    import matplotlib.pyplot as plt
    from transformers import PaliGemmaForConditionalGeneration, PaliGemmaProcessor, BitsAndBytesConfig
    from transformers import BitsAndBytesConfig
    from PIL import Image
    import re
    步骤6:分析信息

我们已经准备好所有关键功能,所以让我们分析输出。>

>上面的功能创建了一个饼图,以可视化不同类别的支出分布。如果不存在有效的支出数据,它将生成一个空白的图形,并带有表示“无支出数据”的消息。否则,它将创建带有类别标签和百分比值的饼图,确保比例且良好的可视化。

步骤6:同时分析多个账单
device = "cuda" if torch.cuda.is_available() else "cpu"
# Model setup
model_id = "google/paligemma2-10b-mix-448" 
bnb_config = BitsAndBytesConfig(
    load_in_8bit=True,  # Change to load_in_4bit=True for even lower memory usage
    llm_int8_threshold=6.0,
)

# Load model with quantization
model = PaliGemmaForConditionalGeneration.from_pretrained(
    model_id, quantization_config=bnb_config
).eval()

# Load processor
processor = PaliGemmaProcessor.from_pretrained(model_id)
# Print success message
print("Model and processor loaded successfully!")

我们通常有多个账单要分析,因此让我们创建一个函数来同时处理所有账单。

用于一次分析多个账单,我们执行以下步骤:>

初始化存储:我们创建用于存储结果和图像的列表,将total_spending设置为0,并为类别总计定义字典。

def ensure_rgb(image: Image.Image) -> Image.Image:
    if image.mode != "RGB":
        image = image.convert("RGB")
    return image
处理每个账单:

  1. 打开并将图像转换为rgb。
  2. >将图像附加到列表中。
从收据中提取总金额。
  • 在收据中对商品进行分类。
  • 更新总支出和类别的总计。
  • >将提取的数据存储在结果列表中。
  • 生成洞察力:我们创建一个支出分配饼图以及总支出的摘要。
  • 返回结果:最后,我们返回图像列表,帐单摘要的数据框架,总支出摘要和支出图表。
>步骤7:构建Gradio接口
  1. >现在,我们已经制定了所有关键逻辑函数。接下来,我们致力于使用Gradio构建Interactive UI。
  2. >上面的代码创建一个结构化的gradio ui,其中具有用于多个图像的文件上载程序,并为触发处理。提交后,上传帐单图像显示在画廊中,提取的数据显示在表中,总支出总结在文本中,并生成了支出分配饼图。 
  3. 该功能将用户输入连接到process_multiple_bills()函数,以确保无缝数据提取和可视化。最后,demo.launch()函数启动了用于实时互动的Gradio应用程序。

    >

    Paligemma 2 Mix:Demo OCR项目的指南

    >我还尝试了两个基于图像的账单(亚马逊购物发票)的演示,并得到以下结果。

    注意:VLMS发现很难提取数字,这有时可能导致结果不正确。例如,它提取了以下第二账单的错误总金额。这是可以使用较大型号或简单地对现有模型进行微调来纠正。

    >

    Paligemma 2 Mix:Demo OCR项目的指南

    Paligemma 2 Mix:Demo OCR项目的指南

    结论

    在本教程中,我们使用Paligemma 2 Mix构建了一个AI驱动的多个Bill Scanner,这可以帮助我们从收据中提取和分类支出。我们使用Paligemma 2 Mix的视觉语言功能来进行OCR和分类,以毫不费力地分析支出见解。我鼓励您将本教程适应您自己的用例。 

以上是Paligemma 2 Mix:Demo OCR项目的指南的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn