>从账单收据中提取和分类费用。
>
paligemma 2专为各种视觉语言任务而设计,包括图像和简短的视频字幕,视觉问题答案,光学特征识别(OCR),对象检测和分割。
>图中使用的图像的来源:google paligemma 2混合模型设计用于:
>步骤2:模型初始化 > bitsandbytes量化有助于减少记忆使用量的同时保持性能,从而可以在有限的GPU资源上运行大型模型。在此实现中,我们使用4位量化来进一步优化内存效率。
>步骤4:推理使用paligemma
> extract_total_amount()函数处理图像以使用OCR从收据中提取总量。它构建了一个查询(问题),指示模型仅提取数值值,然后调用ask_model()函数以生成模型的响应。
>对象检测和分割:它在图像中标识,标签和片段对象进行结构化分析。
>步骤1:先决条件
>在开始之前,让我们确保我们安装了以下工具和库:
>
pip install gradio -U bitsandbytes -U transformers -q
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来运行此模型。
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:图像处理现在,我们的图像已准备好推理。
>
def ensure_rgb(image: Image.Image) -> Image.Image:
if image.mode != "RGB":
image = image.convert("RGB")
return image
>现在,我们设置了用于使用模型运行推断的主要功能。此功能将带有输入图像和问题,将它们整合到提示中,然后通过处理器将它们传递给模型。
>现在我们已经准备好主函数,我们将下一个从图像中提取关键参数 - 在我们的情况下,这些是总金额和商品类别。pip install gradio -U bitsandbytes -U transformers -q
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:同时分析多个账单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处理每个账单:
该功能将用户输入连接到process_multiple_bills()函数,以确保无缝数据提取和可视化。最后,demo.launch()函数启动了用于实时互动的Gradio应用程序。
>
>我还尝试了两个基于图像的账单(亚马逊购物发票)的演示,并得到以下结果。
注意:VLMS发现很难提取数字,这有时可能导致结果不正确。例如,它提取了以下第二账单的错误总金额。这是可以使用较大型号或简单地对现有模型进行微调来纠正。
>以上是Paligemma 2 Mix:Demo OCR项目的指南的详细内容。更多信息请关注PHP中文网其他相关文章!