>从账单收据中提取和分类费用。
>
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
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!")
现在,我们的图像已准备好推理。
>
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中文网其他相关文章!