jjc*_*son 15 opensource-projects ocr documents
我一直发现OCR 技术落后于开源系统。我也从Ocropus 项目开始就看过它。我尝试过我听说过的最好的可用于 Linux 的 OCR 引擎Tesseract,但发现它非常缺乏商业文档。还有其他更有前途的 OCR 实现吗?解读笔迹的更有希望的目标呢?在这个领域的 *nix 系统上有什么可能?
截至 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 image-0001
Run Code Online (Sandbox Code Playgroud)
文本默认打印到标准输出。
GOCR 文档没有包含关于 OCR 使用哪些模型/方法的太多细节。
Sane对一些自动文档进给 (ADF) 扫描仪有很好的支持,例如Avision和Fujitsu的扫描仪。
Sane 包含scanimage命令行程序,您可以使用它来构建脚本化扫描管道(例如,我的adf2pdf.py脚本)。