新闻中心
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 模式可能未实现,用户需要考虑其他方法来实现页面分割或优化处理速度。
Pippit AI
CapCut推出的AI创意内容生成工具
133
查看详情
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的配置,也能有效提升整体处理速度。
以上就是Tesseract页面分割模式--psm 2的限制与替代方案的详细内容,更多请关注其它相关文章!
# 仍会
# 海口网站怎样推广的呀
# 湖北网站推广公司工作
# seo麒麟原创度
# 云阳外贸网站优化设计
# 益达营销推广方案
# 义乌市微信网站建设推广
# 推广网站哪些好点的
# 济南seo网络推广优化
# 网站优化光公司
# 湖州抖音营销推广
# 可以通过
# 您可以
# word
# 也会
# 后处理
# 不支持
# 而不
# 文档
# 您的
# 硬件加速
# 深度学习
# 后端
# 工具
# python
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
韩剧圈正版入口页面_韩剧圈官网登录链接
理解J*aScript Promise的微任务队列与执行顺序
React项目中导航栏Logo自适应布局:避免裁剪与布局溢出
蛙漫限时开放最深处链接_蛙漫全站漫画会员同款秒开地址
Excel中VLOOKUP的第四个参数是干什么用的_Excel VLOOKUP第四参数作用解析
C++ typeid如何获取类型信息_C++ RTTI运行时类型识别用法
Python多版本共存与虚拟环境管理深度指南
Excel函数批量查找替换超快方法_Excel用REPLACE和FIND函数秒级替换
C++如何实现线程池_C++11手动实现一个简单的固定大小线程池
b站怎么取消点赞_b站点赞取消操作方法
Fabric Mod开发:在1.19.3+版本中正确添加自定义物品并管理物品组
163邮箱登录密码 163邮箱忘记密码找回
qq游戏跨平台入口_qq游戏多设备同步登录
LINUX下如何进行磁盘分区_fdisk与parted工具在LINUX中的使用对比
Win11怎么查看显卡显存 Win11显示适配器属性及专用视频内存查询
Discord Slash 命令响应超时问题的异步解决方案
Python多线程中正确使用sigwait处理SIGALRM信号
React/Next.js中实现列表项的动态选择与移动
如何将HTML表格多行数据保存到Google Sheets
React/Next.js中实现列表项的动态移动与状态管理:兼论唯一键的重要性
美团外卖商家服务中心入口 美团商家版官网入口
Lar*el用户头像管理:实现图片缩放、存储与旧文件安全删除的最佳实践
Golang如何优雅处理error_Golang error处理最佳实践总结
荒野行动PC版怎么注册_荒野行动PC版账号注册详细流程图文教程
Node.js中HTML按钮与J*aScript函数交互的正确姿势
Pyrogram与g4f集成:异步编程实践与常见错误解决
TikTok国际版网页端快速入口 TikTok全球版短视频浏览教程
C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程
CSS Flexbox如何实现多行排列_flex-wrap wrap自动换行显示
Golang如何实现容器化日志收集与分析_Golang容器日志收集分析方法
J*a TimerTask中HashMap意外清空的深层原因与解决方案
c++ 命名空间怎么用 c++ namespace使用指南
win11开机启动修复循环怎么办 Win11无法进入系统高级启动解决方法【修复】
Win11怎么开启高性能模式_Windows 11电源计划优化设置
必由学在线入口 必由学网页版快速登录入口
汽水音乐网页版使用入口_汽水音乐电脑版播放指南
如何使用CaptainHook和Composer管理Git钩子_在提交前自动运行代码检查的Composer配置
如何使用纯J*aScript判断Input元素是否在特定类容器内
漫蛙2(台版)官方入口地址 漫蛙2(台版)正版漫画网页端
QQ邮箱正确登录入口_QQ邮箱官方网站使用地址
必由学官网入口 必由学教师登录入口
深入理解rpy2中的类型转换:优化Python对象到R矩阵的映射
快手官方唯一登录入口 谨防山寨钓鱼网站
C++如何实现异步操作_C++11使用std::future和std::async进行异步编程
格力空气能E5故障代码是什么情况_格力空气能E5代码解析与应对措施
淘宝支付提示失败如何解决 淘宝支付流程优化方法
优化LangChain文档加载与ChromaDB集成:解决多文档处理与分块问题
铁路12306的积分有效期是多久_铁路12306积分有效期说明
腾讯QQ邮箱登录入口_QQ邮箱官方网站使用地址
微信网页版官方入口直达 微信网页版网页版登录使用方法


2025-11-04
浏览次数:次
返回列表
extra_config=["MODEL.ROI_HEADS.SCORE_THRESH_TEST", 0.8],
# label_map=lp.models.PubLayNet.LABEL_MAP
# )
# 对于简单的应用,可以考虑基于规则或传统CV的布局方法
# 或者寻找其他轻量级的布局检测模型
# 如果您有其他布局检测模型,可以这样使用:
# layout = model.detect(image)
# print(layout)