跳到内容。

此页面存档了截至 2018 年 5 月 1 日与 Tesseract 2.0x、3.0x 和 4.00.00alpha 相关的 常见问题解答 页面。

主要 常见问题解答 页面将包含与 Tesseract 4.0.0 及更高版本相关的信息。


常见问题

常见问题解答和答案的集合,或指向它们的指针。如果您有一个在下面没有找到答案的问题,请将其发布到 论坛

目录

规则和建议

如果您认为在 Tesseract 中发现了一个错误,请创建一个问题。问题应在 用户邮件列表 中提出。

您**必须**在 GitHub 中报告问题或在论坛中提问之前阅读 贡献 指南。

如何提高 OCR 速度?

如果您正在处理多个图像,可以使用 GNU Parallel 并行运行 tesseract。例如,而不是

find . -maxdepth 1 -name "*.tif" -print0 | while IFS= read -r -d '' n; do
    tesseract "$n" "$n" -l eng hocr
    hocr2pdf -i "$n" -n -o "$n.pdf" < "$n.html"
done

您可以运行

parallel "tesseract {} {} -l eng hocr; hocr2pdf -i {} -n -o {}.pdf < {}.html" ::: *.tif

请注意,此示例有点过时。让 Tesseract 并行生成单页 PDF 文件,然后使用 QPDF 或类似工具在最后将它们拼接在一起,您将获得更好的结果。如果您正在运行 Tesseract 4,可以使用“快速”模型。

Tesseract 4 在处理页面时还会使用多达四个 CPU 线程,因此它将比 Tesseract 3 处理单个页面更快。如果您的计算机只有两个 CPU 内核,则运行四个线程会显著降低速度,最好使用单个线程或最多两个线程!使用单个线程消除了多线程的计算开销,也是通过为每个 CPU 内核运行一个 Tesseract 进程来处理大量图像的最佳解决方案。使用环境变量 OMP_THREAD_LIMIT 设置最大线程数。要禁用多线程,请使用 OMP_THREAD_LIMIT=1

Windows:tesseract 启动后立即自动关闭

Tesseract 是一个命令行程序,因此您需要从 命令行 运行它。如果您需要一个具有图形界面的程序,第三方 页面上提供了一些程序。

Tesseract 可以产生哪些输出格式?

Tesseract 可以生成纯文本、PDF 和 HTML 输出。Tesseract 的标准输出是一个纯文本文件(utf-8 编码,以 ‘\n’ 作为 行尾标记)。

使用配置文件 ‘hocr’,tesseract 将生成符合 hOCR 规范 的 XHTML 输出(如果操作系统使用非 utf-8 编码来命名文件,则输入图像名称必须为 ASCII - 有关详细信息,请参见 问题 809)。

使用配置文件 ‘pdf’,tesseract 将生成可搜索的 PDF,其中包含带有隐藏的可搜索文本层的页面图像。

如何解释 hOCR 基线输出?

eurotext.tif 第一行中的 hOCR 输出包含以下信息

<span class='ocr_line' id='line_1_1' title="bbox 105 66 823 113; baseline 0.015 -18; …

bbox 是图像坐标系中该行的边界框(蓝色)。基线上的两个数字是描述基线的线性方程的斜率(第一个数字)和常数项(第二个数字),该线性方程相对于边界框的左下角(红色)。基线在 -18 处穿过 y 轴,其斜角为 arctan(0.015) = 0.86°。一般来说,基线由 n 阶多项式描述,其系数为 pn … p0,其中 n = 1 表示线性(即直线)线(请参见 hOCR 规范)。 hOCR 基线

libtesseract.so.3:无法打开共享对象文件

在 ‘sudo make install’ 之后运行 ‘sudo ldconfig’。参见 问题 621

Tesseract 不起作用

请确保只安装了一个版本的 tesseract,例如,如果在同一台计算机上安装了 tesseract 3.01 和 3.02,则据报道会出现问题(在共享构建的情况下)。例如,请参见 问题 793

如何卸载 Tesseract

tesseract-ocr 目录中,运行

sudo make uninstall

如果您安装了训练工具,也请运行

sudo make training-uninstall

如何比较 Tesseract 的不同版本

如果您想拥有多个版本的 tesseract(例如,您想比较 OCR 结果),我建议您从源代码(例如,在 /usr/src 中)编译它们,而不是安装它们。如果您想测试特定版本,可以这样运行它

/usr/src/tesseract-3.03/api/tesseract eurotext.tif eurotext
/usr/src/tesseract-ocr.3.02/api/tesseract eurotext.tif eurotext

/usr/src/tesseract-3.03/api/tesseract 是 shell 包装器脚本,它将负责使用正确的共享库(无需安装…)。

pixReadStream 中的错误

如果您看到此错误,则您的 leptonica 安装存在问题 - 例如,缺少对您的图像格式的支持。通常这意味着在 leptonica 构建期间未正确安装相关的图像库,或者 leptonica 中存在一些配置问题。

请检查问题 340391443

无法打开 eng.unicharset?

您没有安装语言训练数据。阅读 自述文件

leptonica 库缺失

如果您在运行 ./configure 时收到此错误消息,并且您的 leptonica 头文件位于 /usr/local/include(例如,您将 leptonica 安装到了 /usr/local),则运行

LIBLEPT_HEADERSDIR=/usr/local/include ./configure

CPPFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib" ./configure

无法读取压缩的 TIFF 文件

我收到此错误消息

read_tif_image:Error:Illegal image format:Compression

Windows(Visual C++):可以使用以下方法在 VC++6 或 VC++Express 中添加 Libtiff 支持

转到 libtiff 的 Windows 下载页面 并按照以下步骤操作

Download and run the setup program.
Add the paths for include and library files in tools/options/directories
Add HAVE_LIBTIFF to the preprocessor definitions.
Add libtiff.lib to the list of libraries.
Rebuild.
Put libtiff3.dll be in your path somewhere.
This is done by control panel/system/advanced/environment variables and adding c:/program files/gnuwin32/bin to PATH.
Keep your fingers crossed...

非 Windows(以及 Cygwin):安装 **libtiff-dev**。操作步骤因操作系统而异,但在许多操作系统上,类似

sudo apt-get install libtiff-dev

或类似的东西应该可以解决问题,在运行 configure **之前** 执行此操作。

彩色图像没有输出

有几个关于彩色图像出现空白或垃圾输出的错误报告,无论是否有 libtiff。以下是最新信息(上次更新时间为 2008 年 9 月 23 日)

没有 libtiff,Tesseract 只能读取未压缩的 tiff 文件。即使那样,它也不能正确读取 32 位 tiff 文件。将在 2.04 中修复。(这意味着它将使用 libtiff 正确处理大多数图像深度(除了 16 位)。)

使用 libtiff,Tesseract 可以读取压缩的 tiff 文件,但无法处理 **任何** 颜色:24 或 32 位。它只能读取 1 位二进制图像或 8 位灰度图像。(没有颜色映射!)在 2.04 中修复。

API(TessBaseAPI)应该可以处理 1、8、24 或 32 位图像。

它支持多页 TIFF 文件吗?

是的,对于 2.03 及更高版本,只要您安装了 libtiff。请参见上面的压缩 TIFF。

为什么 viewer/svutil.cpp 无法编译?

此文件是可移植性问题的主要原因,因为它是一个在外部进程中运行的查看器的接口。如果您可以在您的系统上编译它,请报告一个问题,记录您需要更改的内容,但请仅针对当前版本执行此操作。如果您无法编译它,可以在您的编译器中定义 GRAPHICS_DISABLED(用于所有源代码),它将注释掉所有难以编译的代码并禁用查看器功能,大多数人反正也不会使用它。

在类 Unix 系统上,configure 脚本可以像这样被指示禁用图形

configure --disable-graphics

Ubuntu 14.04 的训练工具在哪里?

由于疏忽,训练工具没有随 Ubuntu 14.04 一起提供。要么等待下一个 Ubuntu 版本,要么使用这些命令。

sudo apt-get build-dep tesseract-ocr
sudo apt-get install devscripts
dget http://http.debian.net/debian/pool/main/t/tesseract/tesseract_3.03.03-1.dsc
tar xvzf tesseract_3.03.03.orig.tar.gz
cd tesseract-3.03
zcat ../tesseract_3.03.03-1.diff.gz | patch -p1
debuild -us -uc
cd ..
sudo dpkg -i *.deb

如何编辑训练中使用的 Box 文件?

有很多程序可以帮助您完成此操作,请参见 附件页面

Utf8 缓冲区过大,大小=xx(训练期间错误)

每个可识别单元(字符/音素/字形)的 utf-8 表示形式有一个 30 字节的上限。它无法轻易增加。检查您的框文件是否有异常长的字符串。

如何只识别数字?

Tesseract 3

使用 digits 配置文件,像这样

tesseract imagename outputbase digits

Tesseract 2.03

使用

TessBaseAPI::SetVariable("tessedit_char_whitelist", "0123456789");

在调用 Init 函数之前,或将其放在名为 tessdata/configs/digits 的文本文件中

tessedit_char_whitelist 0123456789

然后您的命令行变为

tesseract image.tif outputbase nobatch digits

警告:在 2.03/2.04 版本(但在 3.00 及更高版本中则没有),您**必须**将 nobatch 放在 digits 之前。

如何在不从头开始训练的情况下,仅向我最喜欢的语言添加一个字符或一个字体?

无法仅添加一个字符或字体。您需要从头开始训练。请参见训练 Tesseract 文档。

如何生成可搜索的 PDF 输出?

可搜索的 PDF 输出是 Tesseract 3.03 版本的标准功能。使用 pdf 配置文件,像这样

tesseract phototest.tif phototest pdf

可搜索的 PDF 似乎只包含空格或单词字母之间的空格

PDF 本身可能没有问题,但其隐藏的可搜索文本层可能不被您的 PDF 阅读器理解。例如,Mac OS X 中的 Preview.app 众所周知存在此类问题,并且可能只“看到”空格而不是文本。尝试使用 Adobe Acrobat Reader 而不是它。

如何进行流式传输

假设您有一台出色的但速度很慢的多页扫描设备。在扫描过程中进行 OCR 将是一件好事。在此示例中,扫描程序在生成图像文件名时将其发送到 Tesseract。Tesseract 将可搜索的 PDF 流式传输到 stdout。您需要 Tesseract v3.04 或更高版本才能使用此功能。

scanimage --batch --batch-print | tesseract -c stream_filelist=true - - pdf > output.pdf

是否有最小/最大文本大小?(它无法读取屏幕文本!)

对于合理的准确度,存在最小文本大小。您必须考虑分辨率和字号。低于 10pt x 300dpi 的准确度会下降,低于 8pt x 300dpi 的准确度会迅速下降。一个快速检查是计算字符的 x 高度的像素数。(x 高度是小写字母 x 的高度。)在 10pt x 300dpi 下,x 高度通常约为 20 像素,尽管这会因字体而异。低于 10 像素的 x 高度,准确结果的可能性很小,低于 8 像素左右,大多数文本将被“去除噪声”。

使用 LSTM,似乎也存在一个大约 30px 的最大 x 高度。超过此值,Tesseract 不会生成准确的结果。传统引擎似乎不太容易受到此问题的影响(参见 https://groups.google.com/forum/#!msg/tesseract-ocr/Wdh_JJwnw94/24JHDYQbBQAJ)。

为什么输出为空或质量很差?

阅读 改进质量 文档。

如何生成语言数据文件?

阅读 训练 Tesseract 文档。

如何解压缩或更改现有的语言数据文件?

使用 combine_tessdata 命令。有关其用法的详细信息,请参见 combine_tessdata 手册页

如何提供我自己的字典?

Tesseract 3

要添加一个额外的词表,请创建一个 .user-words 文件,如 tesseract(1) 中所述。

如果您想替换整个字典,您需要解压缩 .traineddata 文件,创建一个新的 word-dawg 文件,然后将这些文件重新打包回 .traineddata 文件中。有关详细信息,请参见 训练 Tesseract

Tesseract 2

简单:用您自己的词表替换 tessdata/eng.user-words,使用相同的格式 - UTF8 文本,每行一个词。

更难,但对大型字典来说更好:使用 wordlist2dawg 用从您自己的词表中创建的词表替换 tessdata/eng.word-dawg。有关详细信息,请参见 训练 Tesseract 文档。

wordlist2dawg 不起作用!

2.03 wordlist2dawg 存在内存问题。如果您没有超过 1GB 的内存,那么您的系统会停止运行,并且运行速度非常慢。将 training/wordlist2dawg.cpp 第 39-40 行的 max_num_edges 和 reserved_edges 减少 10 倍,然后重新构建。

如果您成功创建了一个新的 dawg,但它无法加载,并出现以下错误

Error: trying to read a DAWG '%s' that contains %d edges while the maximum is %d.

然后尝试更改 dawg.h 中的 MAX_NUM_EDGES_IN_SQUISHED_DAWG_FILE 值。

如何提高字典的信任度/强度?

对于 tesseract-ocr < 3.01,尝试将 dict/permute.cpp 中的 NON_WERD 和 GARBAGE_STRING 提高到 3 甚至 5。

对于 tesseract-ocr >= 3.01,尝试在配置文件中增加变量 language_model_penalty_non_freq_dict_word 和 language_model_penalty_non_dict_word。默认情况下,它们分别为 0.1 和 0.15。

对于 tesseract-ocr 2.0x:如果您要识别的文本字体与您的训练数据有很大差异,并且您不介意速度变慢,您也可以尝试将 classify/intmatcher.cpp 中的 ClassPrunerThreshold 从 229 降至约 200。这些措施都应该提高字典的力量,以从非单词中解析单词。

当然,任何提高字典力量的变化也会提高幻觉字典词的能力。如果这是一个问题,请将短语排除在您的字典之外,并且不要添加大量很少使用的单词,如果它们增加了与更频繁的单词的歧义数量。

要反其道而行之并关闭字典,您可以使用 combine_tessdata 从 traineddata 文件中删除相应的 dawg(s),或者将相应的 load_type_dawg 参数设置为 false,但这必须使用配置文件和接受 configs 参数的 Init 版本完成。它不能通过 SetVariable 完成,因为参数控制着初始化。type 可以是 punc、system、number、bigram、freq 或 unambig 中的一种。

什么是配置,我如何拥有更多配置?

Config 在 tesseract 中是一个重载词。一个意思是用于调试或修改其行为的 控制参数 文件,例如 tessdata/configs/segdemo。

另一个意思是用于训练和分类器。

一个 Config 表示来自不同字体的字符的(潜在的)不同形状。MAX_NUM_CONFIGS 限制适用于命令行上包含任何一个字符样本的不同文件数量,因为每个文件都假定代表不同的字体。目前(2.03)限制为 32 个 Config。如果您并非所有文件都包含所有字符,那么您可以在 mftraining 命令行上使用超过 32 个文件。

其他解决问题的方法

如果文件包含非常相似的样本,那么您可以将它们连接在一起以创建一个单一文件,以减少文件的总数。如果两个文件中的字符看起来非常不同,则不要这样做。

增加 MAX_NUM_CONFIGS(在 intproto.h 中)。后果自负。您将使使用不同 MAX_NUM_CONFIGS 值生成的 inttemp 文件变得不可读。我们正在努力克服 3.0 版的这一弱点。尽管在 2.04 版中不会出现。此外,分类速度会更慢,并且会使用更多内存。

当同一个 TessBaseAPI 对象用于解码多个图像时,tesseract 的结果不一致

尝试使用 ClearAdaptiveClassifier() 清除自适应数据,或者使用 config 变量关闭自适应分类器

classify_enable_learning 0
classify_enable_adaptive_matcher 0

另请参阅 tesseract 论坛 上的讨论

变音符号 在字形上方和下方被忽略/导致垃圾输出

尝试将 textord_min_linesize 的默认值(1.25)增加到更高的值。一些用户报告说使用 2.5 的值取得了不错的效果。

文档在哪里?

您正在看着它。如果事情不清楚,请在 Tesseract 谷歌群组 上搜索或向我们提问。如果您想帮助我们编写更多内容,请这样做,并将其发布到群组!

我怎样才能尝试下一个版本?

定期稳定版本会发布到下载页面。在发布之间,特别是在新版本发布之前,最新的代码可从 git 获取。您可以在此处找到源代码:https://github.com/tesseract-ocr/tesseract.git,您可以在其中通过命令行或通过链接到关于如何使用各种客户端程序和插件的说明来检出源代码。

actual_tessdata_num_entries_<= TESSDATA_NUM_ENTRIES:Error:Assert failed:in file ..\ccutil\tessdatamanager.cpp, line 55_

如果您在运行 tesseract 时遇到错误,请检查您是否使用了正确的 traineddata 版本(例如 3.00 与 3.01)。您不能将 3.01 traineddata 用于 tesseract 3.00。

last_char == ‘\n’:Error:Assert failed:in file ..\ccutil\tessdatamanager.cpp, line 95

如果您在运行 combine_tessdata 时遇到错误

这表明您的 lang.unicharambigs 文件末尾缺少空行。

错误:非法最小或最大规格

如果数字格式(Linux 上的“区域设置”或 Windows 中的“区域和语言选项”)与英文格式不同,则可能会发生这种情况。解决方法是在调用 tesseract 之前将您的区域设置(在代码中)的 LC_NUMERIC 设置为“C”。在某些情况下,您需要包含 locale.h

#include <locale.h>
setlocale (LC_NUMERIC, "C");

另一个选择是调整您的用户区域设置/区域设置。

另请参阅问题 250228 中的信息

错误:inttemp 中有 X 个类,而 unicharset 包含 Y 个字符。

(其中 Y != X)有两种可能性:X ~= Y,通常 X < Y:通常由训练过程失败引起。查找来自 tr 文件生成过程的 FATALITY 消息。看起来训练过程未能拾取某些字符的样本,并且它们没有进入 inttemp 文件(在 mftraining 中),因为 tr 文件中没有条目。applybox 存在一些严重问题,这使得这对很多人来说是一个问题。字符样本需要间隔开。

X 是一个随机数(非常大的 + 或 -),Y 是一个介于 100 到几千之间的正常数字,具体取决于语言:inttemp 文件损坏,或者(如果您尚未自行训练)您的硬件具有不自动检测的奇特字节序体系结构。大端或小端 32 位和 64 位 应该可以工作,但混合字节序(0x12345678 -> 0x56 0x78 0x12 0x13 或类似)将无法工作。获取一个合理的硬件体系结构,或者自己重新训练。然后您的 inttemp 将与硬件匹配。

错误:unicharset 的大小大于 MAX_NUM_CLASSES

只需为您的构建增加 MAX_NUM_CLASSES(在 dict/matchdefs.h 中)。请参阅问题 670743

如何让错误消息转到 tesseract.log 而不是 stderr?

要恢复将写入 tesseract.log 而不是写入控制台窗口的旧行为,您需要一个包含此内容的文本文件

debug_file tesseract.log

将文件命名为“logfile”并将其放在 tessdata/configs/ 中。然后将 logfile 添加到命令行的末尾。

如何抑制 tesseract 信息行?

请参阅 问题 579。在 Linux 上,您可以将 stderr 和 stdout 输出重定向到 /dev/null。例如

tesseract phototest.tif phototest 1>/dev/null 2>&1

使用 tesseract 3.02,您可以使用 config “quiet”。例如

tesseract phototest.tif phototest quiet

警告:这两个选项都会导致您在出现错误时看不到错误消息。

如何获取每个单词的坐标和置信度?

有两个选项。如果您不想编程,您可以使用 Tesseract 的 hOCR 输出格式(阅读 Tesseract 手册页 以获取详细信息)。如果您熟悉编程,请使用 Tesseract API.

置信度是如何计算的?

我可以将 Tesseract 用于手写识别吗?

您可以,但效果不佳,因为 Tesseract 是为印刷文本设计的。请改用 Lipi Toolkit 项目。

我可以将 tesseract 用于条形码识别吗?

不。Tesseract 用于文本识别。

Tesseract 旧版本的问题

(来自问题跟踪器的信息,状态:在此处寻求帮助。)

如何将 Tesseract 引擎移植到 vb6 项目中?

请参阅 问题 42 中的建议。

tessdll.dll 的 Delphi 包装器

请查看 附加组件文档 或参阅 问题 88 中的注释。

不完整的 OCR 结果

请参阅 问题 44 中的建议。

error LNK2001: unresolved external symbol “public: static char cdecl TessBaseAPI::TesseractRect(unsigned char const,int,int,int,int,int,int)” (?TesseractRect@TessBaseAPI@@SAPADPBEHHHHHH@Z)

如果您使用的是 2.04 版和 VC++ 6,请在包含 baseapi.h 之前添加一个 #define TESSDLL_IMPORTS。(请参阅 问题 297

训练时出现 box 重叠无 blob 或 blob 在多行中的错误

如果您遇到此错误,请尝试使用 pagesegmenation 值 5 或 6。例如

tesseract input_image output -psm 6 batch.nochop makebox

或者请查看 问题 471 中的其他建议

训练失败,显示错误消息“mf.cpp:78: FEATURE_SET_STRUCT* ExtractMicros…”

请参阅 问题 488 中关于如何改进输入图像的建议。

错误消息:样本 0 上的字体 ID = -1/0,类 ID = 1/105

这意味着字体名称不在 font_properties 中,或者 font_properties 不符合 要求

我的问题不在此!

尝试搜索论坛:http://groups.google.com/group/tesseract-ocr,因为您的问题可能以前就出现过,即使它未在此处列出。