多列排版的文档、截图在OCR识别场景中非常常见,传统的逐行识别逻辑很容易把左右两列的文本拼接成无意义的内容,导致识别结果完全不可用。Tesseract.js的页面分段模式可以自动分析图像的布局结构,区分不同的文本列、段落和区块,按照正确的阅读顺序输出识别内容,是解决这类问题的核心方案。

多列图像识别混乱的常见原因
很多开发者在使用Tesseract.js默认配置处理多列图像时,会遇到以下问题:
- 左右两列的文本被识别成连续的单行内容,阅读顺序完全错误
- 同一列的段落被拆分到不同位置,上下文逻辑断裂
- 页眉、页脚、侧边栏的内容和正文混在一起,无法区分
这些问题的核心原因是默认识别模式没有开启布局分析,Tesseract.js会按照图像从上到下、从左到右的顺序逐行识别,完全忽略列和区块的划分。
页面分段模式的工作原理
Tesseract.js的页面分段模式(Page Segmentation Mode,简称PSM)是一组预定义的布局分析策略,通过不同的参数值适配不同的图像排版场景。对于多列图像,我们需要选择支持多列布局分析的参数,让引擎先识别图像中的文本区块结构,再逐个区块提取内容。
常用的PSM参数中,适配多列场景的主要有两个:
| PSM参数值 | 含义 | 适用场景 |
|---|---|---|
| 3 | 全自动页面分段,自动检测列、段落、区块 | 排版规则的多列文档、扫描件 |
| 4 | 假设单列可变大小文本,自动分段 | 列间距不统一的多列图像 |
| 6 | 假设统一的文本块,自动识别块内结构 | 列结构清晰但内容密集的多列图像 |
具体实现步骤
1. 基础环境准备
首先需要在项目中引入Tesseract.js,这里使用npm安装的方式:
// 安装依赖 npm install tesseract.js // 引入模块 import Tesseract from 'tesseract.js';
2. 配置页面分段模式识别多列图像
在调用recognize方法时,通过options参数设置psm值,同时可以搭配语言参数提升识别准确率:
// 多列图像识别示例
async function recognizeMultiColumnImage(imagePath) {
try {
const result = await Tesseract.recognize(
imagePath, // 图像路径,支持本地路径、base64、URL
'chi_sim+eng', // 识别语言,中文简体+英文
{
// 设置页面分段模式为3,全自动布局分析
tessedit_pageseg_mode: 3,
// 可选:设置识别超时时间,避免大图像卡死
timeout: 30000
}
);
// 输出识别结果
console.log('识别结果:', result.data.text);
return result.data.text;
} catch (error) {
console.error('识别失败:', error);
}
}
// 调用函数,传入多列图像路径
recognizeMultiColumnImage('./multi-column-doc.png');
3. 复杂场景的参数调整
如果图像中的列结构不规则,或者默认PSM 3的效果不理想,可以尝试调整参数:
- 如果列之间有明显的分隔线,可以尝试PSM 4,适配可变大小的文本列
- 如果图像中有大量图片、表格混排,可以先通过预处理裁剪出纯文本区域,再使用PSM 6识别
- 如果识别结果仍有顺序错误,可以开启
preserve_interword_spaces参数保留词间距,辅助后续排序
// 复杂多列场景的配置示例
const result = await Tesseract.recognize(
imagePath,
'chi_sim+eng',
{
tessedit_pageseg_mode: 4, // 适配不规则多列
preserve_interword_spaces: 1, // 保留词间距
// 可选:设置白名单,提升特定内容的识别准确率
tessedit_char_whitelist: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ中文'
}
);
效果验证与优化建议
完成配置后,可以对比开启页面分段模式前后的识别结果:
未开启分段模式的结果:左列第一段内容右列第一段内容左列第二段内容右列第二段内容
开启PSM 3后的结果:左列第一段内容 左列第二段内容 右列第一段内容 右列第二段内容
如果识别结果仍有小范围错乱,可以结合以下优化方式:
- 对图像做二值化、去噪预处理,提升文本清晰度
- 裁剪掉图像边缘的无用区域,减少布局分析的干扰
- 根据实际列数,手动指定
psm参数,避免自动分析出错
通过合理设置页面分段模式,Tesseract.js可以很好地适配多列图像的识别需求,解决文本混淆的问题,满足大部分日常OCR场景的使用要求。
Tesseract.js多列图像文本识别页面分段模式文本混淆优化修改时间:2026-07-07 03:57:25