使用LangChain与多模态模型实现图像中的文字和表格提取(PDF可转图片)
引言
在实际工程应用中,经常需要处理含有工程检验标准、施工图纸等复杂内容的PDF文档。这些文档往往包含大量水印、背景图层或无关信息,直接使用OCR识别容易引入噪声,影响后续的信息处理与分析。
为了解决这一问题,我尝试通过网页版Qwen进行测试,发现其对图像中的文字和表格具有较好的识别能力,并能有效忽略水印等干扰内容。在此基础上,我基于Ollama框架搭建多模态大模型环境,结合LangChain架构实现提示词工程,最终将提取的内容以Markdown格式输出,并转换为Word文档,满足了工程需求。
本文将详细介绍整个项目的实现流程,并提供完整的Python代码示例,适用于希望利用多模态大模型进行图像内容提取的开发者和工程师参考。
一、项目背景
在工程领域,很多技术文档是以扫描件或图片形式存在的,例如:
- 工程验收标准表
- 施工图纸说明
- 检测报告模板
- 设备参数铭牌
这类文档通常无法直接复制文本,传统做法是使用OCR工具如Tesseract、百度AI等进行识别,但效果受限于图像质量、字体样式以及排版复杂度。
本项目的目标是:从一张含工程检验标准的图片中提取文字和表格,并以Markdown格式输出,便于后续编辑、展示或转换为其他文档格式(如Word)。
主要步骤包括:
- 配置多模态模型服务
- 图像预处理与加载
- 构建符合任务目标的提示词
- 多模态模型推理与结果流式输出
- 结果验证与格式转换建议
二、环境准备
为了顺利运行该项目,请确保你的开发环境中已安装以下依赖库和组件:
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):"""优化图像预处理