0

0

Tesseract页面分割模式--psm 2的限制与替代方案

心靈之曲

心靈之曲

发布时间:2025-11-04 11:38:30

|

351人浏览过

|

来源于php中文网

原创

Tesseract页面分割模式--psm 2的限制与替代方案

本文深入探讨了tesseract ocr引擎中 `--psm 2` 模式用于纯页面分割(布局检测)的实践问题。尽管官方文档指出该模式旨在仅进行页面分割而不执行ocr,但用户在实际操作中常发现此功能未被实现。文章通过验证命令揭示了这一限制,并分析了其对`pytesseract`和`layoutparser`等python封装库的影响。最后,提供了在 `--psm 2` 不可用时,实现页面分割或优化处理速度的替代策略和建议,包括后处理tesseract输出和考虑专用布局检测工具

理解Tesseract的页面分割模式(PSM)

Tesseract OCR引擎提供了一系列页面分割模式(Page Segmentation Mode, PSM),允许用户根据输入图像的特性和期望的输出结果来指导Tesseract的分析行为。这些模式通过 --psm 参数进行设置,旨在优化文本检测和识别的准确性。

其中,--psm 2 模式在Tesseract的官方文档中被描述为“自动页面分割,但不进行方向和脚本检测(OSD)或光学字符识别(OCR)”。这使得它成为那些只需要图像布局信息(如文本块、段落、行和单词的边界框),而不需要实际识别文本内容的用户的理想选择。例如,当用户拥有自己的定制OCR模型,或仅需进行文档结构分析时,纯页面分割可以显著提高处理效率。

--psm 2 模式的实现限制

尽管 --psm 2 模式在理论上非常有用,但在实际使用中,用户可能会发现它并未按预期工作。这通常是因为该模式在特定Tesseract版本或编译环境中并未被完全实现。要验证您的Tesseract安装是否支持 --psm 2,可以通过命令行执行以下命令:

tesseract --help-psm 2

该命令将显示所有可用的页面分割模式及其描述。如果 --psm 2 模式后面附有 (not implemented) 字样,则表示您的Tesseract版本不支持此功能。例如,输出可能如下所示:

Page segmentation modes:
  0    Orientation and script detection (OSD) only.
  1    Automatic page segmentation with OSD.
  2    Automatic page segmentation, but no OSD, or OCR. (not implemented)
  3    Fully automatic page segmentation, but no OSD. (Default)
  ...

如果输出明确指出 (not implemented),那么尝试使用 --psm 2 将无法达到仅进行页面分割而不执行OCR的目的。Tesseract在执行时仍会进行OCR处理,或者根本不产生预期的输出。

对Python封装库的影响

当Tesseract核心程序不支持 --psm 2 时,使用Python封装库如 pytesseract 或 layoutparser 也会受到影响。即使在这些库中明确指定 --psm 2 配置,底层Tesseract引擎仍会执行完整的OCR过程,导致处理速度缓慢,并且返回的数据中包含不必要的OCR文本信息。

例如,在使用 pytesseract 的 image_to_data 函数时:

import cv2
import pytesseract

# 假设 img_path 是图片路径
img = cv2.imread(img_path)
# 即使指定 --psm 2,如果底层Tesseract不支持,仍会执行OCR
layout_info = pytesseract.image_to_data(img, config='tsv --psm 2', output_type='data.frame')

或者使用 layoutparser 的 TesseractAgent 时:

import layoutparser as lp

# 假设 img_path 是图片路径
ocr_agent = lp.TesseractAgent()
# layoutparser的TesseractAgent默认也会调用Tesseract进行OCR
# 且没有直接的参数来禁用OCR,如果需要纯分割,需在Tesseract层面解决
res = ocr_agent.detect(img_path, return_response=True)
layout_info = res['data'] # 仍然包含OCR输出

在这些情况下,layout_info 数据框中依然会包含OCR结果,并且处理时间并不会因为指定了 --psm 2 而缩短。

替代策略与优化建议

鉴于 --psm 2 模式可能未实现,用户需要考虑其他方法来实现页面分割或优化处理速度。

Tana
Tana

“节点式”AI智能笔记工具,支持超级标签。

下载

1. 后处理Tesseract输出以获取纯布局信息

如果您的Tesseract版本不支持纯页面分割,但您仍希望利用Tesseract的分割能力,可以采取以下策略:

  • 运行Tesseract的默认模式或支持分割的模式: 大多数Tesseract版本默认使用 --psm 3(完全自动页面分割),它会进行分割和OCR。
  • 提取布局信息,丢弃OCR文本: 运行Tesseract后,从输出数据中提取边界框、置信度等布局相关的信息,然后丢弃实际的识别文本。这虽然不能节省Tesseract的OCR处理时间,但可以让你获得所需的布局数据。

以 pytesseract 为例,您可以这样操作:

import cv2
import pytesseract

img_path = "your_image.png" # 替换为您的图片路径
img = cv2.imread(img_path)

# 使用默认或支持分割的PSM(例如--psm 3),然后过滤结果
# 这里我们不指定--psm 2,让Tesseract执行默认的OCR和分割
layout_data = pytesseract.image_to_data(img, output_type=pytesseract.Output.DATAFRAME)

# 过滤掉置信度为-1的行(通常表示非文本或边界信息)
# 并且只保留与布局相关的列,例如 'level', 'page_num', 'block_num', 'par_num', 'line_num', 'word_num', 'left', 'top', 'width', 'height'
# 丢弃 'text' 和 'conf' 列(如果不需要)
pure_layout_info = layout_data[layout_data.conf != -1].drop(columns=['text', 'conf'], errors='ignore')

print(pure_layout_info.head())

这种方法虽然没有避免OCR的计算开销,但确保了您只处理和存储布局信息。

2. 探索专用布局检测库

如果Tesseract的OCR处理时间是关键瓶颈,并且您只需要布局检测,那么考虑使用专门的布局检测库或模型可能更有效。

  • layoutparser 结合其他模型: layoutparser 库本身是一个强大的布局分析工具,它不仅支持Tesseract作为OCR后端,还支持多种其他布局检测模型(如Detectron2、PaddlePaddle等)。您可以利用 layoutparser 的布局检测功能,而不依赖其Tesseract OCR代理。

    import layoutparser as lp
    import cv2
    
    img_path = "your_image.png" # 替换为您的图片路径
    image = cv2.imread(img_path)
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # layoutparser通常期望RGB格式
    
    # 示例:使用一个基于深度学习的布局检测模型
    # 这里以一个预训练的Detectron2模型为例
    # 您可能需要安装detectron2以及相关的依赖
    # model = lp.models.Detectron2LayoutModel(
    #     config_path="lp://PubLayNet/faster_rcnn_R_50_FPN_3x/config",
    #     model_path=None, # 使用预训练模型
    #     extra_config=["MODEL.ROI_HEADS.SCORE_THRESH_TEST", 0.8],
    #     label_map=lp.models.PubLayNet.LABEL_MAP
    # )
    
    # 对于简单的应用,可以考虑基于规则或传统CV的布局方法
    # 或者寻找其他轻量级的布局检测模型
    
    # 如果您有其他布局检测模型,可以这样使用:
    # layout = model.detect(image)
    # print(layout)

    请注意,使用深度学习模型通常需要GPU支持才能达到最佳性能,并且可能需要额外的安装配置。

3. 优化Tesseract OCR处理速度(如果OCR不可避免)

如果您的工作流程中OCR是不可避免的,但希望提高整体处理速度,可以考虑以下优化措施:

  • 图像预处理: 对图像进行去噪、二值化、倾斜校正等预处理,可以显著提高Tesseract的识别效率和准确性。
  • 选择合适的语言模型: 如果只识别特定语言,确保只加载该语言的模型,并考虑使用更小、更快的模型(如果可用)。
  • Tesseract配置调整: 尝试调整Tesseract的内部配置参数,例如 tessedit_pageseg_mode (PSM) 和 tessedit_ocr_engine_mode (OEM),以找到性能和准确性的最佳平衡点。
  • 硬件加速 在支持GPU的系统上,确保Tesseract或其依赖库能够利用GPU进行加速(虽然Tesseract本身对GPU利用有限,但一些预处理或后处理步骤可能受益)。

总结

Tesseract的 --psm 2 模式旨在提供纯页面分割功能,但其在不同版本中的实现状态不一,用户在依赖此功能前务必通过 tesseract --help-psm 2 命令进行验证。当该模式不可用时,可以通过对Tesseract的完整输出进行后处理来提取布局信息,或转向更专业的布局检测库(如 layoutparser 结合其他模型)以获得更高的效率和灵活性。同时,对图像进行适当的预处理和优化Tesseract的配置,也能有效提升整体处理速度。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

765

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

640

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

764

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

639

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1305

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

549

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

709

2023.08.11

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

3

2026.01.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 6.7万人学习

Django 教程
Django 教程

共28课时 | 3.3万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号