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

使用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.lryc.cn/news/2393404.html

相关文章:

  • 【Redis】hash
  • 基于Vite的前端自动化部署方案
  • antDesignVue中a-upload上传组件的使用
  • 龙舟竞渡与芯片制造的共通逻辑:华芯邦的文化破局之道
  • 机房网络设备操作安全管理制度
  • CentOS中安装Docker Compose
  • Linux Kernel动态调试:运行时调试的利器
  • Milvus分区-分片-段结构详解与最佳实践
  • 5月课程精彩回顾 | 2025高通边缘智能创新应用大赛系列公开课
  • 设计模式25——中介者模式
  • 阿里云配置安全组策略开放端口
  • uniapp 搭配uviwe u-picker 实现地区联栋
  • win10电脑时间同步失败的解决方法
  • 每日c/c++题 备战蓝桥杯(Cantor 表)
  • 代码随想录打卡|Day53 图论(Floyd 算法精讲 、A * 算法精讲 (A star算法)、最短路算法总结篇、图论总结 )
  • yum安装nginx后无法通过服务方式启动
  • 数据基座觉醒!大数据+AI如何重构企业智能决策金字塔(下)
  • 在线博客系统【测试报告】
  • Void:免费且隐私友好的 AI 编码利器,挑战 Cursor 地位?
  • Elasticsearch的写入流程介绍
  • 【PCB工艺】PCB设计中的基本概念
  • WPF事件处理器+x名称空间
  • 具身智能:OpenAI 的真正野心与未来展望
  • mybatis的mapper对应的xml写法
  • Lyra学习笔记2 GFA_AddComponents与ULyraPlayerSpawningManagerComponent
  • 个人健康中枢的多元化AI软件革新与精准健康路径探析
  • 使用 Redis 作为向量数据库
  • Matlab实现LSTM-SVM时间序列预测,作者:机器学习之心
  • 美国服务器文件系统的基本功能和命令
  • 开源软件协议大白话分类指南