文档表格和图形理解系统

本项目致力于开发一个利用计算机视觉技术的文档表格和图形理解系统,该系统可应用于商业环境,以自动从文档中提取和处理信息。将使用由Roboflow构建的表格和图形识别API来检测和提取文档页面图像中的表格和图形。一旦这些元素被识别,它们将通过视觉语言模型(VLM)进行处理和分析,以生成详细的解释。

项目构建步骤

以下是构建本项目的步骤:

对于此项目,将使用来自Roboflow Universe中huyifei工作区的TF-ID计算机视觉数据集。该数据集包含超过4,000张文档页面的图像。可以下载数据集并将其上传到自己的工作区。数据集包含用两个类别标记的图像,'figure'和'table',以识别文档中的所有表格和图形,如下所示。

Roboflow中使用Roboflow 3.0对象检测(快速)模型类型和COCOn检查点训练此数据集的模型。下图显示了模型的指标。

接下来,将在Roboflow中创建一个工作流,以构建一个能够识别文档中的表格和图形并提供描述的应用。Roboflow工作流是一个强大的开源工具,用于快速构建计算机视觉应用。可以了解更多关于工作流的信息,以及如何开始和探索其他博客。对于本博客文章中的项目,将创建以下工作流。

工作流包含以下模块:

  • 输入模块:允许指定工作流所需的输入。在此工作流中,它使能够输入图像。
  • 对象检测模型模块:启用预训练的对象检测模型以预测对象的位置和边界框。在此工作流中,它配置了在步骤1中为文档理解自定义训练的表格和图形识别模型。
  • 动态裁剪模块:根据对象检测模型返回的边界框坐标裁剪感兴趣区域。
  • OpenAI模块:运行OpenAI的GPT-4,在此工作流应用中,它接受前一个动态裁剪模块裁剪的图像作为输入,并运行指定的提示以生成图像的描述。
  • 响应模块:这是工作流应用的最终模块,可以包括工作流中任何步骤的一个或多个输出。它用于显示工作流应用的输出。

运行工作流将生成以下输出,包括边界框描述、裁剪图像和GPT-4响应。

在这一步中,将构建一个Gradio应用,允许用户输入文档页面的图像,以帮助他们理解图像中的任何图形或表格。Gradio应用利用在前一步开发的Roboflow工作流来执行此操作。

以下是Gradio应用的输出界面代码示例:

import gradio as gr from inference_sdk import InferenceHTTPClient from google.colab import userdata from PIL import Image, ImageDraw from io import BytesIO import base64 # 获取Colab密钥 API_KEY = userdata.get('ROBOFLOW_API_KEY') # 初始化Roboflow客户端 client = InferenceHTTPClient( api_url="https://detect.roboflow.com", api_key=API_KEY ) # 运行推理并绘制边界框的函数 def process_image(image): # 保存图像到本地 image_path = "uploaded_image.jpg" image.save(image_path) # 运行推理工作流 result = client.run_workflow( workspace_name="tim-4ijf0", workflow_id="document-understanding-api", images={ "image": image_path } ) # 初始化绘制对象以修改图像 draw = ImageDraw.Draw(image) # 提取边界框信息并在图像上绘制 bounding_boxes = result[0]['bounding_box']['predictions']['predictions'] for box in bounding_boxes: x = box['x'] y = box['y'] width = box['width'] height = box['height'] left = x - width / 2 top = y - height / 2 right = x + width / 2 bottom = y + height / 2 # 绘制边界框 draw.rectangle([left, top, right, bottom], outline="red", width=3) # 将所有GPT-4输出合并为一个字符串 gpt4o_outputs = result[0]['GPT4o_output'] raw_output = "\n\n".join([output['raw_output'] for output in gpt4o_outputs]) return image, raw_output # 创建Gradio界面 interface = gr.Interface( fn=process_image, inputs=gr.Image(type="pil", label="上传或捕获图像", mirror_webcam=False), # 输入标签 outputs=[ gr.Image(type="pil", format="png", label="带有边界框的输出图像"), # 输出图像标签 gr.Textbox(label="详细解释(GPT-4o响应)") # 输出文本标签 ], title="文档理解中的表格和图形识别", description="上传或捕获包含表格和/或图形的文档页面图像以理解它。" ) # 启动Gradio应用 interface.launch(share=True)
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485