如何使用 tesseract 对文档中的多个列进行 OCR

Posted

技术标签:

【中文标题】如何使用 tesseract 对文档中的多个列进行 OCR【英文标题】:How to OCR multiple column in a document using tesseract 【发布时间】:2015-10-17 12:27:50 【问题描述】:

我正在使用 tesseract 进行 OCR 僧伽罗语项目。我的目标是 ocr,多列,包括文档中的文本。并以正确的格式输出文件。有什么方法可以使用 tesseract 识别文档中的列吗?

【问题讨论】:

【参考方案1】:

将 tesseract 设置为处理多列文档非常容易,尽管我在网上找到的关于多列页面的信息或讨论非常少。基本思想是将页面分割方法设置为“自动页面分割”(默认)和“方向和脚本检测”(OSD,不是默认设置)。

这就像将 psm 设置为 1 一样简单,这会告诉 tesseract “使用 OSD 自动进行页面分割”。虽然 OSD = 识别多列文档可能并不明显,但实际上这是结果之一。另一个好处是脚本检测有助于 tesseract 避免尝试对照片等非文本块进行 OCR。

更多页面分割方法见:https://github.com/tesseract-ocr/tesseract/wiki/ImproveQuality

这里是调整页面分割方法的命令行语法示例

tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile...]

有关语法的更多信息,请参阅:https://github.com/tesseract-ocr/tesseract/wiki

【讨论】:

【参考方案2】:

当我们扫描图片时,您可以尝试使用以下解决方案来识别列。

TessBaseAPI baseApi = new TessBaseAPI();
 baseApi.setDebug(true);
 baseApi.init(DATA_PATH, lang); //DATA_PATH - Where Image stored and lang - en(english)
 baseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_SINGLE_COLUMN);//This line will help us to do segment for captured image - Hope you looking for this line
 baseApi.setImage(bitmap);

 //Recognized Text after capturing image then process it.
 String recognizedText = baseApi.getUTF8Text();

如果您不期待此解决方案,请尝试使用 PageSegMode,希望它可以解决您的问题。

【讨论】:

以上是关于如何使用 tesseract 对文档中的多个列进行 OCR的主要内容,如果未能解决你的问题,请参考以下文章

使用 Tesseract 进行页面布局分析?

如何使用linq对数据表中的多个列进行分组? [复制]

如何对 WebGrid 中的多个列进行排序?

如何在 tesseract 中保留文档结构

如何根据日期对SQL Server中的多个列进行排序

使用Tesseract OCR引擎和层次聚集聚类(HAC)对多列数据进行OCR