Linux 系统上的 OCR

jjc*_*son 15 opensource-projects ocr documents

我一直发现OCR 技术落后于开源系统。我也从Ocropus 项目开始就看过它。我尝试过我听说过的最好的可用于 Linux 的 OCR 引擎Tesseract,但发现它非常缺乏商业文档。还有其他更有前途的 OCR 实现吗?解读笔迹的更有希望的目标呢?在这个领域的 *nix 系统上有什么可能?

max*_*zig 8

正方体

截至 2020 年,可用的最佳开源 OCR 软件是Tesseract 4及其新的LSTM 神经网络 OCR 模型。它的 OCR 性能比之前版本 3 中使用的 OCR 模型要好得多。

示例(output.pdf为扫描的德国文档生成带有文本层的 PDF 文件):

$ echo page-*.png > input.list
$ tesseract --oem 1 -l deu input.list output pdf
Run Code Online (Sandbox Code Playgroud)

(--oem 1启用 LSTM 引擎)

将识别的文本打印到标准输出:

$ tesseract --oem 1 -l deu page page-0001.png stdout
Run Code Online (Sandbox Code Playgroud)

列出已安装的语言:

$ tesseract --list-langs
Run Code Online (Sandbox Code Playgroud)

以可下载的训练数据集的形式提供对相当多语言/脚本的支持,例如,甚至还有一个用于 Fraktur 的数据集。

通过新的 LSTM 模型,Tesseract 从OCRopus研究项目中获得了一些灵感。

即使在高质量的输入图像上,Tesseract 版本 3 的性能也相对较差,即经常错误地检测灰尘像素中的单个字符(在任何文本上下文之外),并且很容易在众所周知的单词中引入单个字符错误。

楔形文字

楔形文字OCR 性能并没有那么差,但它没有得到积极维护(2011 年的最新版本,1.1 版)并且很容易崩溃并有一些其他问题:

  • 分段错误与各种封装和发布
  • 它的布局算法被简单地破坏了,即在单列文档中,段落通常随机排列
  • 它不会在未知选项上出错

您可以像这样禁用布局算法:

$ cuneiform --singlecolumn -l ger -f text -o foo.txt image-0001
Run Code Online (Sandbox Code Playgroud)

(-l指定源文档的语言)

奥克拉德

Ocrad示例调用:

$ ocrad -F utf8 image-0001
Run Code Online (Sandbox Code Playgroud)

文本默认打印到标准输出。

在商业文件中,它漏掉了一个带下划线的词,而楔形文字/tesseract/gocr 则没有。

Ocrad 手册包含有关所用算法的部分,例如:

5) 检测字符并将它们按行分组。
6)识别字符(非常特别;每个字符一种算法)。
7) 纠正一些歧义(将 l.OOO 转换为 1.000 等)。

GOCR

GOCR示例调用:

$ gocr image-0001
Run Code Online (Sandbox Code Playgroud)

文本默认打印到标准输出。

GOCR 文档没有包含关于 OCR 使用哪些模型/方法的太多细节。

硬件

Sane对一些自动文档进给 (ADF) 扫描仪有很好的支持,例如Avision和Fujitsu的扫描仪。

Sane 包含scanimage命令行程序,您可以使用它来构建脚本化扫描管道(例如,我的adf2pdf.py脚本)。