当前位置: 首页 > ds >正文

使用LangChain与多模态模型实现图像中的文字和表格提取(PDF可转图片)

引言

在实际工程应用中,经常需要处理含有工程检验标准、施工图纸等复杂内容的PDF文档。这些文档往往包含大量水印、背景图层或无关信息,直接使用OCR识别容易引入噪声,影响后续的信息处理与分析。

为了解决这一问题,我尝试通过网页版Qwen进行测试,发现其对图像中的文字和表格具有较好的识别能力,并能有效忽略水印等干扰内容。在此基础上,我基于Ollama框架搭建多模态大模型环境,结合LangChain架构实现提示词工程,最终将提取的内容以Markdown格式输出,并转换为Word文档,满足了工程需求。

本文将详细介绍整个项目的实现流程,并提供完整的Python代码示例,适用于希望利用多模态大模型进行图像内容提取的开发者和工程师参考。

一、项目背景

在工程领域,很多技术文档是以扫描件或图片形式存在的,例如:

  • 工程验收标准表
  • 施工图纸说明
  • 检测报告模板
  • 设备参数铭牌

这类文档通常无法直接复制文本,传统做法是使用OCR工具如Tesseract、百度AI等进行识别,但效果受限于图像质量、字体样式以及排版复杂度。

本项目的目标是:从一张含工程检验标准的图片中提取文字和表格,并以Markdown格式输出,便于后续编辑、展示或转换为其他文档格式(如Word)。

主要步骤包括:

  1. 配置多模态模型服务
  2. 图像预处理与加载
  3. 构建符合任务目标的提示词
  4. 多模态模型推理与结果流式输出
  5. 结果验证与格式转换建议

二、环境准备

为了顺利运行该项目,请确保你的开发环境中已安装以下依赖库和组件:

1. 安装必要的Python包

pip install langchain openai pillow

注意:虽然我们使用的是自定义API服务,但ChatOpenAI类仍然可以兼容本地部署的多模态模型接口。

2. 获取多模态模型服务地址和密钥

你需要一个支持图像输入的多模态大模型服务,例如本地部署的Qwen-VL系列模型,或其他支持图像理解的LLM服务。

示例配置如下:

mllm = ChatOpenAI(openai_api_key="sk-RJaJE4fXaktHAI2MB295F6Ad58004f7eBcE255B863CdD6F0",openai_api_base="http://182.140.215.20:6542/v1/",model_name="qwen2.5vl:32b",temperature=0.3,max_tokens=2000
)

请根据实际部署情况替换上述URL和密钥。

三、核心代码说明(Demo)

1. 构建多模态模型调用对象

使用ChatOpenAI类来调用远程或本地部署的多模态模型接口,设置相关参数如API密钥、模型名称、最大输出长度等。

from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage, SystemMessagemllm = ChatOpenAI(openai_api_key="sk-RJaJE4fXaktHAI2MB296Ad58004f7eBcE255B863CdD6F0",openai_api_base="http://189.143.210.20:6532/v1/",model_name="qwen2.5vl:32b",temperature=0.3,max_tokens=2000
)

2. 提示词构建函数(支持图像输入)

定义系统提示词,确保模型只提取图像中的文字和表格,并翻译英文内容为中文,输出为Markdown格式。

system_prompt = """你是一个图片内容提取助手,请根据用户指令提取图片中的内容。整个过程需要严格保持以下要求:如果是英文内容必须翻译成中文。输出结果必须是中文和markdown格式。"""def load_image(image_path):"""优化图像预处理
http://www.xdnf.cn/news/9557.html

相关文章:

  • Android 插件化
  • 中企出海大会|打造全球化云计算一张网,云网络助力中企出海和AI创新
  • AudioTrack的理解
  • Mini-F5265-OB开发板——UART不定长接收
  • 内联盒模型基本概念?——前端面试中的隐形考点剖析
  • 前端EXCEL插件智表ZCELL数据源功能详解
  • LabVIEW 中内存释放相关问题
  • 2025年渗透测试面试题总结-匿名[校招]安全工程师(甲方)(题目+回答)
  • 第2讲、从启动到表单加载:Odoo 18 的完整执行流程详解
  • [科研实践] VS Code (Copilot) + Overleaf (使用 Overleaf Workshop 插件)
  • RabbitMQ仲裁队列高可用架构解析
  • Mac 版不能连接华为 GaussDB 吗?我看 Windows 版可以连接?
  • delphi12 sqlserver 客户-服务简单连接设置
  • GitLab CI流水线权限隔离
  • 数据结构-代码总结
  • Spring AI系列之使用 Mistral AI API 实现函数调用
  • MySQL 默认的隔离级别解析
  • AWS WebRTC:获取ICE服务地址(part 1)
  • Flask集成Selenium实现网页截图
  • SpringBoot+tabula+pdfbox解析pdf中的段落和表格数据
  • docker学习基本使用教程
  • Cursor:开启智能编程新视界
  • :inline=“true“会发生什么
  • 音视频解码基础知识
  • 从C++编程入手设计模式1——单例模式
  • Canvas实例篇:黑客帝国-3D字幕雨
  • 力扣面试150题--二叉树的最近公共祖先
  • 【Java工程师面试全攻略】Day3:Java并发编程面试精要
  • Linux系统中使用find命令自动清理过期备份文件的完整指南
  • 【Python】 -- 趣味代码 - 佩奇