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

news2025/6/1 19:42:47

引言

在实际工程应用中,经常需要处理含有工程检验标准、施工图纸等复杂内容的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, SystemMessage

mllm = 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.coloradmin.cn/o/2393404.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Redis】hash

Hash 哈希 几乎所有的主流编程语言都提供了哈希(hash)类型,它们的叫法可能是哈希、字典、关联数组、映射等。在 Redis 中,哈希类型指值本身又是一个键值对结构,形如 key “key”, value {{field1, value1}, …{field…

基于Vite的前端自动化部署方案

👨 作者简介:大家好,我是Taro,全栈领域创作者 ✒️ 个人主页:唐璜Taro 🚀 支持我:点赞👍📝 评论 ⭐️收藏 文章目录 前言一、主流解决方案二、了解SCP概念三、自动化部署…

antDesignVue中a-upload上传组件的使用

工作中需要使用上传组件,记录一下a-upload部分属性用法 1.showUploadList属性使用 使用:showUploadList"{ showRemoveIcon: true ,showDownloadIcon: true }"属性可控制右侧下载,删除图标 2.如何实现回显功能 使用:defaultFileList"fil…

龙舟竞渡与芯片制造的共通逻辑:华芯邦的文化破局之道

端午节承载着中华民族数千年的精神密码,龙舟最初是古人沟通天地、祈求风调雨顺的仪式载体。战国时期,屈原投江的悲壮故事为端午注入了家国情怀,龙舟竞渡从此兼具纪念英雄与祈福避疫的双重意义。这种文化内核,与深圳市华芯邦“以科…

机房网络设备操作安全管理制度

该制度围绕机房网络设备操作安全,规定账号实行系统管理员、操作管理员、一般用户三级分级管理,遵循最小授权和权限分割原则,账号需实名制、禁止共享及转借,密码设置需至少 8 位、3 种字符组合且每 3 个月修改一次;高危指令执行需上级审批、双人核查,远程登录需限制权限、…

Milvus分区-分片-段结构详解与最佳实践

导读:在构建大规模向量数据库应用时,数据组织架构的设计往往决定了系统的性能上限。Milvus作为主流向量数据库,其独特的三层架构设计——分区、分片、段,为海量向量数据的高效存储和检索提供了坚实基础。 本文通过图书馆管理系统的…

5月课程精彩回顾 | 2025高通边缘智能创新应用大赛系列公开课

当边缘计算与人工智能的碰撞掀起技术革命浪潮,如何抢占创新先机?2025高通边缘智能创新应用大赛以行业顶尖资源赋能开发者,在初赛阶段重磅打造系列公开课。 5月13日至29日,大赛主办方高通技术公司携手承办方阿加犀,以及…

设计模式25——中介者模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用,主要是下面的UML图可以起到大作用,在你学习过一遍以后可能会遗忘,忘记了不要紧,只要看一眼UML图就能想起来了。同时也请大家多多指教。 中介者模式(Mediat…

阿里云配置安全组策略开放端口

目录 1. 测试端口是否开放 1.1 测试程序 1.2 测试工具 2. 阿里云安全组开放端口 3. 测试开放之后是否能访问 1. 测试端口是否开放 1.1 测试程序 Linux: This repository is specifically designed to store Linux code - Gitee.comhttps://gitee.com/Axurea/linux/tree/…

uniapp 搭配uviwe u-picker 实现地区联栋

原始数据: ["id": 2,"createTime": null,"updateTime": null,"citycode": null,"adcode": "410000","cityName": "河南省","level": "province","cent…

win10电脑时间同步失败的解决方法

win10电脑时间同步失败 问题如下: 解决方法如下: 搜索里搜索:控制面板,然后选择时钟和区域 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d734b28553514f6699d559d4218e5e99.png 此处输入:ntp.aliyun.com 然后时间就同步完成了~ 可以…

代码随想录打卡|Day53 图论(Floyd 算法精讲 、A * 算法精讲 (A star算法)、最短路算法总结篇、图论总结 )

图论part11 Floyd 算法精讲 代码随想录链接 题目链接 代码 三维DP数组 import java.util.Scanner;public class Main {// 定义最大距离值,避免使用Integer.MAX_VALUE防止加法溢出public static final int INF 100000000; // 10^8足够大且不会溢出public static…

yum安装nginx后无法通过服务方式启动

背景 在linux系统下,通过yum方式安装nginx后 通过nginx命令 nginx 可以启动nginx 但是作为测试或者生产服务器,我们需要配置开机自启动,这时候需要用服务方式启动 yum安装后的nginx 已经默认生成了服务启动方式的 nginx.service文件 按…

数据基座觉醒!大数据+AI如何重构企业智能决策金字塔(下)

1. 数据架构的量子跃迁 1.1 从线性堆叠到立体网络 传统六层架构正在经历基因重组。某智能家居企业将数据流转路径重构为三维拓扑网络后,新品研发周期从18个月压缩至9个月。这个改造的核心在于打破数据层间的物理隔离,让原始数据流能直接触达决策中枢。…

在线博客系统【测试报告】

🕒 一. 项目背景 由于纸质笔记容易丢失,携带不变,为了方便自己学习的过程中记录笔记,特开发了这个博客系统。这个系统后端采用 SpringBoot MyBatis SpringMVC ;前端使用Html CSS JS;数据库使用的是Mysq…

Void:免费且隐私友好的 AI 编码利器,挑战 Cursor 地位?

开发者圈儿里最近有点小激动,大家都在议论一个叫Void的开源AI代码编辑器。这家伙在GitHub上人气飙涨,短时间内就斩获了超过22.1k的星标,简直成了科技圈的新宠。它被誉为“黑马”,不仅因为它继承了大家都很熟悉的Visual Studio Cod…

Elasticsearch的写入流程介绍

Elasticsearch 的写入流程是一个涉及 分布式协调、分片路由、数据同步和副本更新 的复杂过程,其设计目标是确保数据一致性、可靠性和高性能。以下是写入流程的详细解析: 一、写入流程总览 二、详细步骤解析 1. 客户端请求路由 请求入口:客户端(如 Java 客户端、REST API)…

【PCB工艺】PCB设计中的基本概念

此文结合实例讲解PCB的设计流程和一些基本概念。 🧱 PCB 是什么? PCB(Printed Circuit Board)(即印制线路板) 是电子元器件的载体,是没有焊接任何器件的“裸板”。 PCB只是板子,没有焊接元件,而PCBA可以理解为焊接好元件的完成板子。 简单点说,PCB 只包含:铜线、电源…

WPF事件处理器+x名称空间

目录 ​编辑 一、事件处理器知识点 1. XAML中的事件绑定 2. C#中的事件处理方法 3. 方法签名解释 4. 命名规范 工作流程 二、导入引用名称空间 三、x名称空间及其常用元素 (1)x名称空间的由来和作用 (2)x名称空间里都有…

具身智能:OpenAI 的真正野心与未来展望

提到 ChatGPT,你对它的第一印象是什么?是担心它会威胁到工程师的工作,还是觉得它只是个会说空话的工具?或许你正在学习一些简单的教程,试图用它来建立知识库,自动化日常工作,觉得它不过如此&…