本文由 莫潇羽@无忆研习社 原创撰写,未经授权禁止转载。如需转载请注明出处:www.wuyi.wiki
写在前面
最近这段时间,OCR(光学字符识别)领域可以说是热闹非凡。作为无忆研习社的站长,我一直在关注各类开源项目的动态,而PaddleOCR这个项目从2020年开源至今,始终是我重点跟踪的对象之一。就在前不久,百度飞桨团队发布了PaddleOCR-VL-1.5版本,这个仅有0.9B参数量的模型,居然在全球权威文档解析评测榜单OmniDocBench V1.5中超越了Gemini-3-Pro和GPT-5.2这些庞然大物,这让我感到非常震撼。
在千亿参数大模型满天飞的今天,一个不到十亿参数的小模型能够取得如此成绩,背后究竟藏着怎样的技术秘密?作为一个长期关注AI技术落地的技术博主,莫潇羽认为有必要为大家深入剖析一下这个项目的技术原理和实际操作方法。接下来的内容会比较长,但我会尽量用通俗易懂的语言把复杂的技术概念讲清楚,希望无论你是技术大牛还是刚入门的小白,都能从这篇文章中有所收获。
第一部分:理解OCR技术的前世今生
什么是OCR技术
在正式介绍PaddleOCR-VL-1.5之前,我们需要先理解什么是OCR技术。OCR的全称是Optical Character Recognition,翻译过来就是光学字符识别。简单来说,它是一种能够让计算机"看懂"图片中文字的技术。当你用手机拍摄一张包含文字的照片,OCR技术就能把照片里的文字提取出来,变成可以编辑、搜索的电子文本。
莫潇羽在无忆研习社的日常工作中经常需要处理各种文档资料,深知这项技术的重要性。想象一下,如果没有OCR技术,我们想要把一本纸质书籍数字化,就只能一个字一个字地手动输入,这个工作量简直难以想象。而有了OCR技术,只需要拍张照片或者扫描一下,几秒钟就能把整页文字都提取出来。
OCR技术的发展历程
OCR技术的发展可以追溯到上世纪六十年代,那时候的OCR系统只能识别特定字体的印刷文字,而且准确率非常有限。到了八九十年代,随着计算机性能的提升和算法的改进,OCR技术开始能够处理更多种类的字体和排版方式。
真正让OCR技术发生质变的是深度学习的兴起。大约在2012年左右,卷积神经网络(CNN)开始被应用到图像识别领域,OCR技术的准确率得到了飞跃式的提升。后来,循环神经网络(RNN)和长短期记忆网络(LSTM)的引入,让OCR系统能够更好地处理连续的文字序列。再到后来,注意力机制(Attention)和Transformer架构的出现,更是把OCR技术推向了一个新的高度。
作为无忆研习社的站长,莫潇羽见证了这些年OCR技术的快速发展。从最初只能识别简单的印刷体,到现在能够处理各种复杂的手写体、弯曲文本、多语言混排等场景,OCR技术的进步确实令人惊叹。
为什么OCR在大模型时代变得更加重要
你可能会问,现在大模型这么火,为什么还要关注OCR这样的"传统"技术呢?这就要说到一个很重要的背景了。
现阶段,互联网上的公开文本数据,已经被各大模型厂商采集得差不多了。高质量的文本数据开始变得稀缺,AI的发展开始遇到瓶颈。要想进一步提升大模型的能力,就必须从真实世界中获取更多高质量的数据。
而真实世界中有海量的学术论文、复杂的金融报表、尘封的历史档案,这些非结构化的文档中蕴含着极高密度的专业知识。但是这些文档大多是图片格式或者PDF格式,大模型没办法直接"阅读"它们。这时候,OCR技术就成了连接这些宝贵数据和AI系统的关键桥梁。
莫潇羽认为,未来的OCR技术将成为给AI输送高质量"数据燃料"的关键管道。谁能把OCR做得更准、更快、更全面,谁就能在数据竞争中占据优势。这也是为什么各大科技公司最近都在OCR领域加大投入的原因。
第二部分:PaddleOCR项目全景介绍
PaddleOCR是什么
说完了OCR技术的背景,我们来正式认识一下今天的主角——PaddleOCR。这是由百度飞桨团队开发维护的一套开源OCR工具库,从2020年首次开源至今,已经在GitHub上累积了超过69000个Star,是OCR领域当之无愧的王牌项目。
PaddleOCR之所以能够获得如此高的关注度,主要有以下几个原因。首先是它的功能非常全面,涵盖了文字检测、文字识别、版面分析、表格识别、公式识别等多个方面,基本上你能想到的OCR相关需求,它都能满足。其次是它的模型种类丰富,从超轻量级的移动端模型到高精度的服务端模型,从通用场景到垂直领域,各种规格应有尽有。最后是它的使用门槛很低,即使是没有深度学习基础的开发者,也能很快上手。
莫潇羽在无忆研习社的技术分享中多次推荐过这个项目,因为它真的是一个对开发者非常友好的工具库。无论你是想快速集成OCR功能到自己的应用中,还是想深入研究OCR技术的底层原理,PaddleOCR都能满足你的需求。
PaddleOCR的发展脉络
为了让大家更好地理解PaddleOCR-VL-1.5的定位,我们有必要回顾一下PaddleOCR的发展历程。
PaddleOCR项目最初发布于2020年,那时候主打的是PP-OCR系列模型。PP-OCR的设计理念是"实用超轻量",目标是在保证识别精度的同时,尽可能减小模型体积和计算量,让OCR技术能够在各种终端设备上运行。PP-OCR系列经过多次迭代,从最初的PP-OCRv1发展到PP-OCRv5,识别精度不断提升,已经成为业界最受欢迎的轻量级OCR解决方案之一。
2025年5月,百度发布了PaddleOCR 3.0版本,这是一次重大升级。这个版本不仅全面适配了飞桨框架3.0正式版,还引入了PP-StructureV3通用文档解析方案,能够智能地将复杂的PDF和文档图像转换为保留原始结构的Markdown和JSON文件。
到了2025年10月,百度首次发布并开源了PaddleOCR-VL模型,这是一个专门为文档解析任务设计的视觉语言模型。这个模型一发布就在HuggingFace全球模型总趋势榜上霸榜多日,引起了广泛关注。
而我们今天要重点介绍的PaddleOCR-VL-1.5,就是在PaddleOCR-VL基础上的进一步升级。它在2026年1月29日正式发布,不仅在精度上有了显著提升,还创新性地支持了异形框定位等新功能,让OCR技术在真实应用场景中的表现更上一层楼。
PaddleOCR生态全景
为了让大家对PaddleOCR有一个更全面的了解,莫潇羽在这里为大家梳理一下目前PaddleOCR提供的主要产品和工具。
PP-OCRv5是目前最新的通用场景文字识别模型,它的特点是单模型支持五种文字类型,包括简体中文、繁体中文、中文拼音、英文和日文。而且它还支持复杂手写体识别,对于那些连笔潦草的字迹也能有不错的识别效果。相比上一代PP-OCRv4,PP-OCRv5的整体识别精度提升了13个百分点,可以说是质的飞跃。
PP-StructureV3是通用文档解析方案,它能够将各种复杂的PDF和文档图像转换为结构化的数据格式。在OmniDocBench基准测试中,PP-StructureV3的表现领先了众多开源和闭源方案。它的特长在于处理复杂版面的文档,比如多栏排版、图文混排、表格嵌套等场景。
PP-ChatOCRv4是智能信息抽取方案,它原生集成了文心大模型4.5 Turbo,能够从海量文档中精准提取关键信息。相比上一代,关键信息抽取的精度提升了15%。
而PaddleOCR-VL系列则是专门为复杂文档解析场景设计的视觉语言模型,也是我们今天要重点讲解的内容。
第三部分:PaddleOCR-VL-1.5技术原理深度剖析
什么是视觉语言模型(VLM)
在深入了解PaddleOCR-VL-1.5之前,我们有必要先理解一下什么是视觉语言模型。这个概念对于理解PaddleOCR-VL-1.5的工作原理非常关键。
视觉语言模型(Vision-Language Model,简称VLM)是一类能够同时处理视觉信息(如图像、视频)和语言信息(如文本、语音转写)的人工智能模型。传统的深度学习模型通常只能处理单一模态的数据,比如图像分类模型只能处理图像,语言模型只能处理文本。而VLM打破了这个界限,它能够理解图像中的内容,并用自然语言来描述、解释或者回答关于图像的问题。
莫潇羽认为,VLM的出现是人工智能发展的一个重要里程碑。因为在现实世界中,信息往往是多模态的。一份文档不仅有文字,还有表格、图片、公式等多种元素。如果AI只能理解文字,那它对这份文档的理解就是片面的。VLM的能力让AI能够像人类一样,综合理解文档中的各种元素。
VLM的核心组件通常包括三个部分:视觉编码器(用于提取图像特征)、语言模型(用于生成和理解文本)、以及连接两者的对齐模块(用于建立视觉特征和语言特征之间的对应关系)。不同的VLM在这三个组件的设计上各有特色,而PaddleOCR-VL-1.5的设计则是专门为文档解析任务优化的。
为什么OCR需要VLM
你可能会问,传统的OCR技术已经很成熟了,为什么还需要引入VLM呢?这是一个很好的问题,莫潇羽来为大家分析一下。
传统的OCR系统通常采用流水线(Pipeline)的方式工作:首先用一个模型检测图像中文字的位置,然后用另一个模型识别每个位置上的文字内容,最后按照一定的规则组织识别结果。这种方式在处理简单文档时效果不错,但在处理复杂文档时会遇到很多问题。
第一个问题是上下文理解不足。流水线系统中的识别模型通常只看局部的图像块,不了解这个图像块在整个文档中的位置和作用。但实际上,同样的字符在不同的上下文中可能有不同的含义。比如,一个"1"在正文中可能是数字,但在标题序号中又代表"第一"的意思。VLM能够看到整个文档的全局信息,更好地理解每个元素的上下文。
第二个问题是错误累积。流水线系统中每个阶段的错误都会传递到下一个阶段。如果检测阶段漏检了一个文本块,后续的识别和组织阶段都没有机会补救。而VLM采用端到端的方式,各个阶段的处理是耦合的,可以相互补充和纠正。
第三个问题是复杂元素处理能力不足。传统OCR系统对表格、公式、图表等复杂元素的处理能力有限,通常需要针对每种元素设计专门的处理逻辑。而VLM通过统一的框架就能处理各种类型的元素,大大简化了系统设计。
莫潇羽在无忆研习社接触过很多用户,他们反馈最多的问题就是传统OCR对复杂文档的处理效果不好。PaddleOCR-VL-1.5的出现,正是为了解决这些痛点。
整体架构设计
好了,铺垫了这么多,终于要进入正题了。让我们来深入了解一下PaddleOCR-VL-1.5的技术原理。
PaddleOCR-VL-1.5的核心是一个紧凑而强大的视觉语言模型(Vision-Language Model,简称VLM)。这个模型采用了两阶段的处理框架来完成文档解析任务。
第一阶段是版面分析,由PP-DocLayoutV3算法负责。这个算法的任务是识别文档图像中的各种元素,比如文本块、表格、图片、公式等,并确定它们的位置和阅读顺序。PP-DocLayoutV3相比前代有一个非常重要的升级,就是它不再局限于传统的矩形检测框,而是支持多点定位,可以输出四边形甚至多边形的检测框。这意味着即使文档发生了倾斜、弯曲或者透视变形,PP-DocLayoutV3也能准确地定位各个元素的边界。
第二阶段是元素识别,由PaddleOCR-VL-1.5-0.9B模型负责。这个模型接收第一阶段输出的定位区域作为输入,然后进行高保真度的内容识别,能够处理文本、复杂表格、数学公式、图表和印章等多种类型的内容。
莫潇羽认为,这种两阶段的设计非常巧妙。它把复杂的文档解析任务拆解成了两个相对独立的子任务,每个子任务都可以由专门优化的模型来处理,最终实现了1+1>2的效果。
视觉编码器的设计
PaddleOCR-VL-1.5-0.9B模型的视觉编码器采用了NaViT风格的动态分辨率设计。对于不熟悉这个概念的朋友,莫潇羽来简单解释一下。
传统的视觉模型通常要求输入图像具有固定的分辨率,比如224x224或者384x384。但是实际应用中的文档图像尺寸千差万别,有的是横向的A4纸,有的是竖向的海报,有的是正方形的证件照。如果强行把所有图像都缩放到同一个尺寸,就会导致信息丢失或者变形。
NaViT(Native Resolution Vision Transformer)的核心思想是让模型能够直接处理原始分辨率的图像,而不需要强制缩放。它通过动态划分图像块(Patch)的方式来适应不同尺寸的输入,这样就能更好地保留图像中的细节信息。
对于文档解析任务来说,细节信息非常重要。一个小小的标点符号、一个细微的下划线,都可能影响对文档内容的理解。所以NaViT风格的视觉编码器对于PaddleOCR-VL-1.5来说是一个非常合适的选择。
语言模型的选择
PaddleOCR-VL-1.5-0.9B的语言模型部分采用的是ERNIE-4.5-0.3B。ERNIE是百度自研的预训练语言模型系列,在中文理解方面有着深厚的积累。
选择0.3B参数量的语言模型是一个很有意思的设计决策。莫潇羽分析,这个选择背后的考量可能有以下几点。
首先是效率优先。文档解析任务的主要难点在于视觉理解,也就是如何从图像中准确提取文字和结构信息。一旦这些信息被正确提取出来,后续的语言处理相对来说就比较简单了。所以把更多的参数分配给视觉编码器,而语言模型保持精简,是一个合理的资源分配策略。
其次是部署友好。0.9B的总参数量使得这个模型可以在消费级显卡上流畅运行,大大降低了部署门槛。如果语言模型部分太大,可能就需要更高端的硬件才能跑起来了。
最后是任务适配。文档解析任务的输出通常是结构化的格式,比如Markdown或者JSON,这类输出的生成相对规整,不需要特别强大的语言生成能力。ERNIE-4.5-0.3B虽然参数不多,但对于这类任务已经足够胜任。
异形框定位技术详解
PaddleOCR-VL-1.5最大的亮点之一就是全球首创的"异形框定位"能力。这个功能解决了传统OCR在处理非规则文档时的一个痛点。
传统的OCR系统在进行文本检测时,通常输出的是矩形边界框(Bounding Box)。这种方式假设文档中的所有元素都是水平或垂直排列的,用一个方方正正的矩形框就能框住。但现实情况往往不是这样。
想象一下这些场景:你用手机拍摄一本翻开的书,书页是弯曲的;你在光线不好的地方拍摄一份合同,纸张有些皱褶;你拍摄一张贴在曲面上的海报,透视变形很严重。在这些情况下,矩形边界框就显得力不从心了。如果强行用矩形框来框选弯曲的文本行,要么框得太大包含了干扰信息,要么框得太小遗漏了部分文字。
PaddleOCR-VL-1.5的异形框定位技术采用了多边形检测的方式来解决这个问题。PP-DocLayoutV3算法可以输出四边形甚至更复杂的多边形检测框,这些框可以精确地贴合文档元素的实际边界,即使元素发生了倾斜或弯曲也没关系。
莫潇羽打个比方,传统的矩形框检测就像是用一把固定尺寸的尺子去量东西,如果东西是弯的,量出来的结果就不准确。而异形框定位就像是用一条可以弯曲的软尺,能够贴合任何形状的物体,量出来的结果自然更精确。
从技术实现的角度来说,PP-DocLayoutV3从前代的矩形检测架构转变为了实例分割框架。实例分割是计算机视觉中的一个经典任务,它的目标是为图像中的每个目标实例生成一个像素级的掩码。将实例分割的思想应用到版面分析任务中,就能够输出任意形状的检测结果,而不局限于矩形。
同时,PP-DocLayoutV3还将阅读顺序预测集成到了一个统一的端到端Transformer架构中。这意味着版面检测和阅读顺序预测可以同时进行,相互补充,提高整体的准确性。
多任务学习框架
PaddleOCR-VL-1.5采用了多任务学习的框架,一个模型可以同时支持文档解析(Document Parsing)和文本检测识别(Text Spotting)两类任务。
对于文档解析任务,模型采用前面介绍的两阶段流程:先用PP-DocLayoutV3进行版面分析,再用VLM进行元素识别。这种方式适合处理完整的文档页面,能够输出结构化的解析结果。
对于文本检测识别任务,模型直接使用VLM进行端到端的处理,不需要经过版面分析阶段。这种方式更加灵活,适用于各种场景下的文本识别,包括标准文档、身份证件、古籍手稿、广告海报、对话截图、路牌招牌、多语言文本等等。
莫潇羽认为,这种多任务设计让PaddleOCR-VL-1.5具有了更广泛的适用性。用户可以根据自己的具体需求选择合适的使用方式,非常灵活方便。
第四部分:性能评测与对比分析
OmniDocBench评测结果
说了这么多技术细节,PaddleOCR-VL-1.5的实际表现到底怎么样呢?让我们来看看权威评测的结果。
OmniDocBench是目前业界公认的文档解析评测基准,它包含了大量来自真实场景的文档样本,涵盖了各种版面类型和内容元素。在OmniDocBench V1.5评测中,PaddleOCR-VL-1.5取得了94.5%的综合精度,这个成绩超越了众多顶级模型,包括Gemini-3-Pro、GPT-5.2、DeepSeek-OCR-2、Qwen3-VL-235B-A22B等。
这里需要特别强调的是参数量的对比。Qwen3-VL-235B-A22B是一个235B参数的大模型,GPT-5.2和Gemini-3-Pro更是千亿级别的巨无霸。而PaddleOCR-VL-1.5只有0.9B参数,还不到人家的百分之一。用这么小的体量取得这么好的成绩,只能说明模型的设计和训练都非常到位。
在OmniDocBench V1.5的几个关键子项目上,PaddleOCR-VL-1.5也表现出色。表格结构理解得分达到了92.8分,阅读顺序预测得分达到了95.8分,这两项核心指标都位列第一。特别是阅读顺序预测,PaddleOCR-VL-1.5的版面逻辑解析错误率仅为同类其他模型的约一半,这说明它对复杂文档结构的理解能力确实很强。
Real5-OmniDocBench评测结果
除了标准的OmniDocBench评测,百度团队还专门构建了一个面向真实场景的新基准——Real5-OmniDocBench。这个基准包含了五种真实场景下的文档样本:扫描件(Scanning)、倾斜(Skew)、弯曲(Warping)、屏幕拍摄(Screen-photography)和光照变化(Illumination)。
在Real5-OmniDocBench上,PaddleOCR-VL-1.5取得了92.05%的综合精度,同样创下了新的纪录。这个成绩充分证明了PaddleOCR-VL-1.5在处理真实场景文档时的鲁棒性。
莫潇羽认为,Real5-OmniDocBench这个基准非常有实际意义。因为在真实的应用场景中,我们面对的往往不是扫描仪出来的完美文档,而是各种各样条件下拍摄的图片。如果一个OCR系统只能处理理想条件下的文档,那它的实用价值就大打折扣了。PaddleOCR-VL-1.5在这个基准上的优秀表现,说明它真的是一个"能打"的实用工具。
与DeepSeek-OCR-2的对比
2026年1月27日,深度求索发布了DeepSeek-OCR-2,引发了广泛关注。作为OCR领域的新玩家,DeepSeek-OCR-2采用了"因果流查询"机制,并将语言模型融入视觉编码,在OmniDocBench V1.5中实现了91.09%的精度。
仅仅两天后,百度就发布了PaddleOCR-VL-1.5作为回应,以94.5%的精度再次刷新纪录。从数据上看,PaddleOCR-VL-1.5领先DeepSeek-OCR-2约3.4个百分点。
在实际测试中,两者的差异更加明显。比如在识别日文包装时,PaddleOCR-VL-1.5能够完美识别包装上的文字,而DeepSeek-OCR-2则输出了一堆乱码。在识别弯曲的书页时,两者都能识别出大部分内容,但DeepSeek-OCR-2出现了更多的错别字。在识别手写的医疗诊断书时,PaddleOCR-VL-1.5的识别结果更加完整,而DeepSeek-OCR-2只识别出了寥寥几行字。在识别包含数学公式的倾斜页面时,PaddleOCR-VL-1.5能够准确识别并渲染公式,而DeepSeek-OCR-2的公式渲染出现了问题,看起来像乱码。
莫潇羽觉得,这些对比测试结果很好地说明了PaddleOCR-VL-1.5在实际应用中的优势。特别是对于那些条件不理想的文档图片,比如光线不好、角度倾斜、纸张弯曲等情况,PaddleOCR-VL-1.5的表现明显更加稳定可靠。
技术优势总结
通过前面的评测分析,我们可以总结出PaddleOCR-VL-1.5的几个核心技术优势。
首先是极致的参数效率。用0.9B的参数量达到了千亿级模型才能达到的效果,这说明PaddleOCR团队在模型架构设计和训练策略上下了很大功夫。小模型不仅意味着更低的部署成本,还意味着更快的推理速度和更广泛的部署场景。
其次是真实场景的鲁棒性。传统OCR系统在实验室条件下可能表现很好,但一到真实场景就掉链子。PaddleOCR-VL-1.5专门针对扫描、倾斜、弯曲、拍照、光照变化等真实场景进行了优化,确保在各种不理想条件下都能保持稳定的识别效果。
再次是全面的功能覆盖。从基础的文字识别,到复杂的表格解析、公式识别、图表理解,再到特殊的印章识别、古籍识别,PaddleOCR-VL-1.5几乎涵盖了文档处理的所有需求。用户不需要针对不同任务使用不同的工具,一个模型就能搞定所有事情。
最后是友好的生态支持。PaddleOCR-VL-1.5不是一个孤立的模型,而是整个PaddleOCR生态系统的一部分。它与PaddleOCR的其他组件无缝集成,有完善的文档和社区支持,这对于开发者来说非常友好。
莫潇羽认为,这些优势的组合使得PaddleOCR-VL-1.5成为了当前市面上最具竞争力的文档解析解决方案。无论你是个人开发者还是企业用户,都能从中受益。
第五部分:新增功能特性详解
印章识别能力
PaddleOCR-VL-1.5新增了印章(Stamp/Seal)识别能力,这对于处理各类公文、合同、证明等正式文档非常有用。
印章识别的难点在于印章通常是圆形或椭圆形的,文字排列方式与普通文档不同,而且印章的颜色往往与文档底色形成对比,但与文档上的其他红色元素(如签名、标注)又可能混淆。此外,印章可能会与其他文字重叠,增加了识别的难度。
PaddleOCR-VL-1.5针对这些难点进行了专门的优化。在版面分析阶段,模型能够准确识别出印章区域并与其他元素区分开来。在内容识别阶段,模型能够理解印章文字的环形排列方式,正确提取印章内容。
莫潇羽认为,印章识别功能的加入大大拓展了PaddleOCR-VL-1.5的应用场景。在金融、法务、政务等领域,文档上的印章往往包含重要信息,能够准确识别这些信息对于文档的自动化处理非常关键。
生僻字和古籍识别
PaddleOCR-VL-1.5对生僻字和古籍文献的识别能力也进行了显著增强。这个功能对于从事人文学科研究、古籍数字化、家谱整理等工作的用户来说,绝对是一个福音。
古籍文献的识别难点包括:竖排排版、从右往左的阅读顺序、繁体字和异体字、年代久远导致的字迹模糊等。普通的OCR系统在处理这类文档时往往会出现大量错误。
PaddleOCR-VL-1.5通过专门的训练数据和模型优化,能够很好地处理这些挑战。它支持竖排文本的识别,能够正确理解从右往左的阅读顺序,对于繁体字和生僻字也有较高的识别准确率。
莫潇羽曾经在无忆研习社上收到过一些用户的反馈,说他们在整理家族老照片和旧文档时,苦于找不到好用的OCR工具。现在有了PaddleOCR-VL-1.5,这个问题应该能够得到很好的解决。
多语言支持扩展
PaddleOCR-VL-1.5将语言支持扩展到了111种,相比前代又增加了2种语言。新增的语言包括藏语和孟加拉语。
对于在全球化业务中需要处理多语言文档的用户来说,这个功能非常实用。想象一下,你收到了一份同时包含中文、英文、日文、韩文的合同,PaddleOCR-VL-1.5可以一次性识别所有语言的内容,不需要分别用不同的工具处理,大大提高了工作效率。
除了语言数量的扩展,PaddleOCR-VL-1.5对多语种表格的识别能力也进行了优化。在跨国业务中,经常会遇到表格中混合使用多种语言的情况,比如表头是英文、内容是中文,或者不同列使用不同语言。PaddleOCR-VL-1.5能够很好地处理这类复杂情况。
跨页处理能力
PaddleOCR-VL-1.5新增了跨页表格自动合并和跨页段落标题识别功能,这对于处理长文档来说非常有用。
在处理多页文档时,经常会遇到表格跨页的情况——一个表格从一页延续到下一页。如果每页单独处理,就会把一个完整的表格切成两个不完整的片段。PaddleOCR-VL-1.5能够自动识别这种情况,并将跨页的表格合并为一个完整的表格。
同样的,段落和标题的跨页情况也能够被正确处理。模型能够理解文档的整体结构,将分散在不同页面上的相关内容正确关联起来。
莫潇羽觉得,这个功能体现了PaddleOCR-VL-1.5对真实应用场景的深入理解。在实际工作中,我们处理的往往不是单独的一页文档,而是几十页甚至上百页的长文档。如果OCR系统不能正确处理跨页情况,输出的结果就会很碎片化,后续还需要大量人工整理。而PaddleOCR-VL-1.5的跨页处理能力,可以直接输出结构完整的结果,省去了很多麻烦。
特殊元素识别增强
PaddleOCR-VL-1.5对下划线和复选框等特殊元素的识别能力也进行了增强。
下划线在表单类文档中非常常见,通常用来指示填写位置或者强调某些内容。复选框则在调查问卷、申请表等文档中广泛使用。这些特殊元素看起来简单,但对OCR系统来说其实是不小的挑战,因为它们不是标准的文字字符,需要专门的处理逻辑。
PaddleOCR-VL-1.5能够准确识别这些特殊元素,并在输出结果中正确标注。比如对于复选框,模型不仅能识别出复选框的存在,还能判断复选框是选中状态还是未选中状态。
第六部分:环境配置与安装教程
硬件要求
在开始安装之前,我们先来了解一下PaddleOCR-VL-1.5的硬件要求。
PaddleOCR-VL-1.5支持多种推理方式和硬件平台。如果你使用NVIDIA GPU,推荐配置是8GB以上显存的显卡,比如RTX 3060、RTX 3070、RTX 4060等消费级显卡都可以流畅运行。当然,如果你有更高端的显卡,比如RTX 4090或者专业计算卡A100,那运行速度会更快。
如果你没有NVIDIA GPU,PaddleOCR-VL-1.5也支持在CPU上运行,只是速度会慢一些。此外,它还支持AMD GPU(通过ROCm)和一些国产计算芯片,比如昆仑芯P800、天数天垓150等。
莫潇羽建议,如果你只是想试用一下或者处理少量文档,可以先用CPU版本体验。如果确定要长期使用或者需要处理大量文档,还是建议配置一块合适的GPU。
Python环境准备
PaddleOCR-VL-1.5需要Python 3.8或更高版本。莫潇羽推荐使用conda来管理Python环境,这样可以避免不同项目之间的依赖冲突。
首先,创建一个新的conda环境:
conda create -n paddleocr python=3.10
conda activate paddleocr
这里我们选择了Python 3.10版本,这是目前比较稳定的选择。环境名称"paddleocr"可以根据你的喜好修改。
安装PaddlePaddle框架
PaddleOCR是基于PaddlePaddle深度学习框架开发的,所以我们首先需要安装PaddlePaddle。
如果你有NVIDIA GPU并且已经安装了CUDA,可以安装GPU版本:
# 对于CUDA 11.8
pip install paddlepaddle-gpu==3.0.0 -i https://mirror.baidu.com/pypi/simple
# 对于CUDA 12.6
pip install paddlepaddle-gpu==3.0.0.post126 -i https://mirror.baidu.com/pypi/simple
如果你没有GPU或者只想用CPU版本,可以安装CPU版本:
pip install paddlepaddle==3.0.0 -i https://mirror.baidu.com/pypi/simple
安装完成后,可以用以下命令验证安装是否成功:
import paddle
print(paddle.__version__)
print(paddle.is_compiled_with_cuda())
如果输出了版本号,并且is_compiled_with_cuda()返回True(如果你安装的是GPU版本),说明安装成功。
安装PaddleOCR
安装好PaddlePaddle之后,就可以安装PaddleOCR了:
pip install paddleocr==3.0.0 -i https://mirror.baidu.com/pypi/simple
这个命令会安装PaddleOCR及其所有依赖项。安装过程可能需要几分钟,取决于你的网络速度。
莫潇羽提醒大家,PaddleOCR 3.x版本与2.x版本有较大的接口变化,如果你之前用过2.x版本,需要注意代码的兼容性问题。
模型下载
PaddleOCR-VL-1.5的模型可以从HuggingFace下载:
# 使用huggingface-cli下载
huggingface-cli download PaddlePaddle/PaddleOCR-VL-1.5 --local-dir ./models/PaddleOCR-VL-1.5
如果你的网络访问HuggingFace比较慢,也可以使用国内镜像或者百度云盘下载。具体的下载链接可以在PaddleOCR的GitHub仓库中找到。
第七部分:快速上手使用指南
命令行方式
PaddleOCR提供了便捷的命令行工具,可以直接在终端中使用。
最简单的使用方式是:
paddleocr doc_parser -i your_image.png
这个命令会对指定的图片进行文档解析,输出识别结果。
如果你想指定输出格式和保存路径,可以加上相应的参数:
paddleocr doc_parser -i your_image.png --output_format markdown --save_path ./output
这样就会将识别结果以Markdown格式保存到指定目录。
莫潇羽提示,命令行方式非常适合快速测试或者批量处理。你可以写一个简单的shell脚本,对一个文件夹中的所有图片进行批量处理。
Python代码调用
如果你需要在自己的Python程序中集成PaddleOCR-VL-1.5,可以使用Python API:
from paddleocr import PaddleOCRVL
# 创建Pipeline实例
pipeline = PaddleOCRVL()
# 对图片进行识别
output = pipeline.predict("your_image.png")
# 处理输出结果
for res in output:
res.print() # 打印结果
res.save_to_json(save_path="output") # 保存为JSON
res.save_to_markdown(save_path="output") # 保存为Markdown
这段代码展示了最基本的使用流程。首先创建一个PaddleOCRVL实例,然后调用predict方法对图片进行识别,最后处理输出结果。
predict方法的输入可以是图片路径、URL、或者numpy数组,非常灵活。输出结果包含了识别的文本内容、版面结构信息等,可以保存为JSON或Markdown格式。
使用vLLM加速推理
如果你需要更高的推理性能,可以使用vLLM作为后端。vLLM是一个高性能的大模型推理引擎,能够显著提升推理速度。
首先,启动vLLM推理服务:
paddleocr genai_server --model_name PaddleOCR-VL-1.5-0.9B --backend vllm --port 8080
或者使用Docker启动:
docker run \
--rm \
--gpus all \
--network host \
ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddleocr-genai-vllm-server:latest-nvidia-gpu \
paddleocr genai_server --model_name PaddleOCR-VL-1.5-0.9B --host 0.0.0.0 --port 8080 --backend vllm
服务启动后,就可以通过客户端调用:
from paddleocr import PaddleOCRVL
pipeline = PaddleOCRVL(
vl_rec_backend="vllm-server",
vl_rec_server_url="http://127.0.0.1:8080/v1"
)
output = pipeline.predict("your_image.png")
莫潇羽建议,如果你需要处理大量文档,或者需要构建一个OCR服务供多个客户端调用,使用vLLM加速是非常值得的。它能够实现更高的吞吐量和更低的延迟。
使用transformers库调用
如果你更习惯使用HuggingFace的transformers库,PaddleOCR-VL-1.5也提供了相应的支持:
from transformers import AutoModelForVision2Seq, AutoProcessor
# 加载模型和处理器
model = AutoModelForVision2Seq.from_pretrained("PaddlePaddle/PaddleOCR-VL-1.5")
processor = AutoProcessor.from_pretrained("PaddlePaddle/PaddleOCR-VL-1.5")
# 处理图片
from PIL import Image
image = Image.open("your_image.png")
inputs = processor(images=image, return_tensors="pt")
# 推理
outputs = model.generate(**inputs)
result = processor.decode(outputs[0], skip_special_tokens=True)
print(result)
不过莫潇羽要提醒大家,官方推荐还是使用PaddleOCR的原生接口,