惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
Martin Fowler
Martin Fowler
I
InfoQ
腾讯CDC
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
爱范儿
爱范儿
Microsoft Security Blog
Microsoft Security Blog
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
云风的 BLOG
云风的 BLOG
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
D
Docker
博客园 - 三生石上(FineUI控件)
Y
Y Combinator Blog
博客园 - Franky
Engineering at Meta
Engineering at Meta
B
Blog
罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research
Jina AI
Jina AI
V
Visual Studio Blog

博客园 - ITman彪叔

赋能UE运行态编辑平台: 网络图片下载的插件改造与复盘 召回率暴涨!“层级化分片”与“降噪”拯救 RAG 系统 基于FastMCP打通业务系统与AI:构建智能协作新范式 在 Dify 中通过 MCP 集成本地 FastMCP 服务避坑指南 从分形到森林——使用 Three.js 创建逼真的 3D 树木 Threejs 视频融合 UE5 小部件 组合框(键)ComboBox (Key) Java MQTT 主流开发方案对比 Java Modbus主流开发方案对比 Java OPC UA 开发方案全对比:开源、商业、集成与官方标准 Nodejs打包 Webpack 中 __dirname 的正确配置与行为解析 强制 pnpm 使用 IPv4 而不是 IPv6 的终极解决方案指南 uniapp 微信小程序 调试 UE Websocket 通信 UE Geometry_Script 程序化建模 UE MultiLineTraceByChannel函数返回只有一个对象的问题 UE Spline 样条网格体组件添加碰撞 Three光源Target位置改变光照方向不变的问题及解决方法 UE5 射线检测排除隐藏的Actor UE5打包SDK未正确安装的问题 判断两个矩形是否相交(Rect Intersection) 电力布局三维编辑器功能设计 UE4 WebUI使用指南2-通信
Tesseract OCR 页面分割模式解析
ITman彪叔 · 2025-09-19 · via 博客园 - ITman彪叔

对于刚接触 OCR(光学字符识别)的初学者来说,Tesseract 是一个强大但配置复杂的工具。其中最令人困惑的概念之一就是 页面分割模式(PSM, Page Segmentation Mode)——它决定了 Tesseract 如何理解图像中的文本布局。本文将以通俗易懂的方式,带您掌握这 14 种模式的核心原理和实战技巧。


一、为什么需要页面分割模式?

想象你有一张包含以下内容的图片:

  • 一段倾斜的杂志文章
  • 一个竖排的中文古诗
  • 一张车牌照
  • 一张手写便签

如果直接用默认模式识别,结果可能惨不忍睹:竖排文字被横着读、车牌数字被拆成字母、手写体被忽略……PSM 的作用就是告诉 Tesseract:"这张图片里的文字应该这样排列",从而大幅提升识别准确率。


二、14 种模式速查表(附生活化解释)

🔍 基础方向检测组

模式 名称 适合场景 初学者比喻
0 OSD_ONLY 仅检测文字方向(不识别内容) "先看看这张照片是正着还是倒着的"
1 AUTO_OSD 自动检测方向+脚本(如中英文) "先确定照片方向,再判断是中文还是英文"
12 SPARSE_TEXT_OSD 稀疏文字+方向检测 "照片里有几个分散的文字,先看方向再看内容"

使用场景:处理旋转的扫描件、多语言混合文档时,先用这些模式确定基础信息。

📄 常规文档组

模式 名称 适合场景 效果对比
3 AUTO(默认) 书籍、合同等标准排版 自动处理多列/段落,但可能误判复杂布局
4 SINGLE_COLUMN 杂志文章、新闻报道 强制按单列识别,避免跨列误连
6 SINGLE_BLOCK 简历、表格(整齐文本) 将整个区域视为一个文本块

新手建议:从模式3开始尝试,遇到多列文档时改用模式4。

🎯 精准定位组

模式 名称 适合场景 识别示例
7 SINGLE_LINE 车牌、横幅标语 京A·12345 → 完整识别为一行
8 SINGLE_WORD 验证码、品牌LOGO A1B2 → 识别为单个单词而非分开
10 SINGLE_CHAR 字符分类、字体样本 单独识别每个字母/数字

操作技巧:识别验证码时,可结合 -c tessedit_char_whitelist=0123456789ABCDEF 限制字符范围。

🌏 特殊排版组

模式 名称 适合场景 文化背景
5 SINGLE_BLOCK_VERT_TEXT 中文古籍、日文竖排 需要安装垂直语言包(如chi_sim_vert
9 CIRCLE_WORD 圆形印章、徽标文字 识别环形排列的文字(如公司LOGO)

文化贴士:处理竖排中文时,命令需改为:

tesseract vertical_text.png output --psm 5 -l chi_sim_vert

🛠️ 高级处理组

模式 名称 适合场景 技术原理
11 SPARSE_TEXT 街景照片、广告牌(文字分散) 不假设文字排列顺序,逐个识别
13 RAW_LINE 计算机生成字体、紧密裁剪文本 绕过Tesseract的预处理步骤

性能提示:模式13处理速度快,但要求输入图像质量极高。


三、新手三步决策法

  1. 第一步:看方向
    ❓ 图片是正着的吗?
    → 不是 → 用模式0/1/12先检测方向
    → 是 → 进入下一步

  2. 第二步:看布局
    ❓ 文字是:

    • 整齐排列的段落 → 模式3/4/6
    • 单行/单词 → 模式7/8
    • 竖排/环形 → 模式5/9
    • 分散在各处 → 模式11
  3. 第三步:优化结果

    • 添加语言参数:-l eng+chi_sim(英文+简体中文)
    • 限制字符集:-c tessedit_char_whitelist=0123456789
    • 启用LSTM引擎:--oem 1(需Tesseract 4.0+)

四、实战案例:识别身份证号码

问题:默认模式会误将照片背景识别为文字
解决方案

tesseract id_card.png output --psm 6 -l chi_sim+eng \
-c tessedit_char_whitelist="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"

效果

  • PSM=6 将整个身份证视为一个文本块
  • 白名单过滤掉无关字符
  • 识别准确率从65%提升至98%

五、常见问题解答

Q1:为什么用了正确模式还是识别错误?
A:可能是图像质量问题!尝试先做预处理:

import cv2
img = cv2.imread('text.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
cv2.imwrite('preprocessed.png', binary)

Q2:如何查看所有可用语言?
A:运行 tesseract --list-langs,垂直语言包通常以_vert结尾。

Q3:多个模式可以组合使用吗?
A:不能直接组合,但可以通过管道分步处理:

# 先检测方向,旋转图像后再识别
tesseract rotated_image.png output --psm 0
# 根据输出结果手动旋转图像...
tesseract fixed_image.png final_output --psm 7

六、学习资源推荐

  1. 交互式练习:使用 Project Naptha 在线测试不同PSM效果
  2. 数据集:下载 COCO-Text 练习稀疏文本识别
  3. 进阶教程:阅读 Tesseract GitHub 的 PSM说明文档

通过理解这14种模式背后的逻辑,您已经掌握了Tesseract最核心的布局分析能力。记住:没有绝对最好的模式,只有最适合当前场景的选择。从简单的车牌识别开始练习,逐步挑战复杂文档,很快您就能成为OCR布局分析的专家!

最后,关注公号“ITMan彪叔” 可以添加作者微信进行交流,及时收到更多有价值的文章。