如何使用Tesseract从Linux命令行执行OCR

时间:2020-01-09 10:39:08  来源:igfitidea点击:

我们可以使用Tesseract OCR引擎从Linux命令行上的图像中提取文本。它快速,准确,并且可以使用大约100种语言。继承人如何使用它。

光学字符识别

光学字符识别(OCR)是查看和查找图像中的单词,然后将其提取为可编辑文本的功能。对于人类而言,这项简单的任务对于计算机而言非常困难。至少可以说,早期的努力很笨拙。如果字体或者大小不符合OCR软件的喜好,计算机通常会感到困惑。

尽管如此,这一领域的开拓者仍然受到高度重视。如果我们丢失了文档的电子副本,但仍然有印刷版本,OCR可以重新创建一个可编辑的电子版本。即使结果不是100%准确,这仍然可以节省大量时间。

经过一些手动整理,我们可以将文件退回。人们宽容了它所犯的错误,因为他们了解OCR软件包所面临任务的复杂性。另外,这比重新键入整个文档更好。

自那时以来,情况已显着改善。惠普(Hewlett Packard)编写的Tesseract OCR应用程序于1980年代开始作为商业应用程序使用。它于2005年开源,现在得到了Google的支持。它具有多语言功能,被认为是最精确的OCR系统之一,我们可以免费使用它。

安装Tesseract OCR

要在Ubuntu上安装Tesseract OCR,请使用以下命令:

sudo apt-get install tesseract-ocr

在Fedora上,命令为:

sudo dnf install tesseract

在Manjaro上,我们需要输入:

sudo pacman -Syu tesseract

使用Tesseract OCR

将对Tesseract OCR提出一系列挑战。我们的第一个包含文字的图像是《通用数据保护条例》第63条摘要的摘录。让我们看看OCR是否可以读取此信息(并保持清醒状态)。

这是一个棘手的图像,因为每个句子都以微弱的上标数字开头,这在立法文件中很常见。

我们需要给tesseract命令一些信息,包括:

  • 我们要处理的图像文件的名称。

  • 它将创建的文本文件的名称,用于保存提取的文本。我们不必提供文件扩展名(它将始终是.txt)。如果已经存在同名文件,它将被覆盖。

  • 我们可以使用--dpi选项来告诉tesseract图像的每英寸点数(dpi)分辨率是多少。如果我们不提供dpi值,tesseract将尝试找出它。

我们的图像文件名为recital-63.png,其分辨率为150 dpi。将要从中创建一个文本文件,称为recital.txt。

我们的命令如下所示:

tesseract recital-63.png recital --dpi 150

结果非常好。唯一的问题是上标太微弱,无法正确阅读。高质量的图像对于获得良好的结果至关重要。

" tesseract"已将上标数字解释为引号()和度数符号(),但实际文本已被完美提取(图像的右侧必须修剪以适合此处)。

最后一个字符是一个十六进制值为0x0C的字节,表示回车。

下面是另一张图片,其中包含不同大小的文本,包括粗体和斜体。

该文件的名称为bold-italic.png。我们要创建一个名为bold.txt的文本文件,因此我们的命令是:

tesseract bold-italic.png bold --dpi 150

这个没有任何问题,并且文本被完美地提取了。

使用不同的语言

Tesseract OCR支持大约100种语言。要使用一种语言,我们必须首先安装它。在列表中找到要使用的语言时,请注意其缩写。我们将安装对威尔士语的支持。它的缩写是cym,是Cymru的缩写,表示威尔士语。

安装程序包称为tesseract-ocr-,最后用语言缩写标记。要在Ubuntu中安装威尔士语言文件,我们将使用:

sudo apt-get install tesseract-ocr-cym

带有文字的图像如下。这是威尔士国歌的第一节经文。

让我们看看Tesseract OCR是否可以应对挑战。我们将使用-l选项(语言)来让tesseract知道我们要使用的语言:

tesseract hen-wlad-fy-nhadau.png anthem -l cym --dpi 150

如下面的摘录文字所示,tesseract可以完美应对。达荷恩(Tawnract)OCR。

如果文档包含两种或者多种语言(例如,威尔士英语词典),则可以使用加号(+)来告诉tesseract添加另一种语言,例如:

tesseract image.png textfile -l eng+cym+fra

将Tesseract OCR与PDF一起使用

tesseract命令用于处理图像文件,但无法读取PDF。但是,如果需要从PDF中提取文本,则可以先使用另一个实用程序来生成一组图像。一张图像将代表PDF的一页。

我们所需的pdftppm实用程序应该已经安装在Linux计算机上。我们将用于示例的PDF是Alan Turing关于人工智能,计算机技术和智能的开创性论文的副本。

我们使用-png选项来指定我们要创建PNG文件。 PDF的文件名为turing.pdf。我们将图像文件称为turing-01.png,turing-02.png等:

pdftoppm -png turing.pdf turing

要使用单个命令在每个图像文件上运行tesseract,我们需要使用一个for循环。对于每个turing-nn.png文件,我们运行tesseract,并创建一个名为text- plus turing-nn的文本文件作为图像文件名的一部分:

for i in turing-??.png; do tesseract "$i" "text-$i" -l eng; done;

要将所有文本文件合并为一个,我们可以使用cat

cat text-turing* > complete.txt

那么,它是怎么做的呢?很好,如下所示。但是,首页看起来很有挑战性。它具有不同的文本样式和大小以及装饰。页面的右边缘还有一个垂直水印。

但是,输出接近原始输出。显然,格式丢失了,但是文本是正确的。

垂直水印在页面底部被记录为乱码。文本太小,无法被tesseract准确地阅读,但是找到并删除它很容易。最糟糕的结果是每行结尾处的字符混乱。

奇怪的是,第二页问答列表开头的单个字母已被忽略。 PDF中的部分如下所示。

如下所示,问题仍然存在,但是每行开头的问号和A丢失了。

图表也不会正确转录。让我们看看当尝试从Turing PDF中提取以下内容时发生的情况。

正如我们在下面的结果中看到的那样,已读取了字符,但是该图的格式丢失了。

同样,tesseract在下标的小尺寸方面苦苦挣扎,并且它们的渲染不正确。