这是一个关于 Tesseract 4 的常见问题解答集,其中包含答案或指向答案的指针。另请参阅 常见错误及其解决方案。
对于适用于 Tesseract 2.0x、3.0x 和 4.00.00alpha 的旧版 FAQ,请参阅 FAQ 旧版。***
Tesseract 4.0.0
如何获取 Tesseract?
有关详细信息,请参阅 Tesseract Wiki 主页。
Tesseract 提供哪些语言模型?
有关 Tesseract 4.0.0 支持的 语言 和 脚本 列表,请参阅 Tesseract 手册页。
有关 Tesseract 4.0.0 提供的三种不同类型语言模型的信息,请参阅 Tesseract Wiki 数据文件 页面。
用户贡献的语言模型从 数据文件贡献 中链接。
Tesseract 的语言模型(traineddata 文件)安装在哪里?
这些文件应该安装在 /usr/share/tesseract-ocr/4.00/tessdata
(在 Ubuntu 上)。
如果出现错误消息 saying eng.traineddata not found,请尝试设置 TESSDATA_PREFIX=/usr/share/tesseract-ocr/4.00/tessdata
,一切都会好起来。
Tesseract 可以生成哪些输出格式?
- txt
- hocr
- tsv
- 仅包含文本层的 PDF
Tesseract 的标准输出是一个纯文本文件(UTF-8 编码,以 ’ 作为 换行符)和 ‘FF 作为每页后的换页符。
将 configfile 选项设置为 pdf
时,tesseract 将生成包含图像和隐藏的可搜索文本层的可搜索 PDF 页面。
将 configfile 选项设置为 hocr
时,tesseract 将生成符合 hOCR 规范 的 XHTML 输出(如果操作系统使用 UTF-8 以外的编码来表示文件名,则输入图像名称必须为 ASCII - 有关一些详细信息,请参阅 问题 809)。
将 configfile 选项设置为 tsv
时,tesseract 将生成 制表符分隔值 文件。
tesseract -c textonly_pdf=1
将生成一个纯文本 PDF,可以将其与仅包含图像的 PDF 合并。有关相关讨论和用于合并 PDF 的实用程序,请参阅 问题 660。
Tesseract 4.0.0 在 txt 输出中使用哪些页面分隔符?
默认情况下,每个页面都将以 FF 字符结尾,用于文本输出。
将 page_separator
设置为 LF 字符将恢复旧的行为,即在每页末尾添加一个空行。
将 page_separator
设置为空字符串将省略页面分隔符。
在较新的 Tesseract(2017 年 9 月之后)中,include_page_breaks
配置变量已被删除。默认情况下,现在使用换页符来分隔页面。使用 -c page_separator="[PAGE SEPARATOR]"
使用不同的分隔符,使用 -c page_separator=''
完全禁用页面分隔符。
运行 Tesseract
如何从命令行运行 Tesseract 4.0.0?
有关如何从命令行运行 Tesseract 的信息,请参阅 Tesseract Wiki 命令行使用 页面。
tesseract --help
将提供已安装版本的最新帮助信息。
如何在一次运行中处理多个图像?
准备一个包含每个图像路径的文本文件
path/to/1.png
path/to/2.png
path/to/3.tiff
保存它,然后将它的名称作为输入文件传递给 Tesseract。
tesseract savedlist output
如何 OCR 多页 tiff 的单页?
将 tessedit_page_number
配置变量作为命令的一部分使用(例如,tesseract myscan.png out -c tessedit_page_number=0
)。
如何使用 Tesseract 将流式图像 OCR 到 PDF?
假设您有一个很棒但速度很慢的多页扫描设备。在扫描过程中进行 OCR 会很不错。在这个示例中,扫描程序在生成图像文件名时将其发送到 Tesseract。Tesseract 将可搜索的 PDF 流式传输到标准输出。
scanimage --batch --batch-print | tesseract -c stream_filelist=true - - pdf > output.pdf
如何将错误消息发送到 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,您可以使用配置 quiet
。例如
tesseract phototest.tif phototest quiet
警告:这两种选项都会导致您无法看到错误消息(如果有)。
如何使用 API 使用 Tesseract 4.0.0?
有关使用 API 的示例程序,请参阅 Tesseract Wiki API 示例 页面。
当同一个 TessBaseAPI 对象用于解码多个图像时,tesseract 的结果不一致。
尝试通过将配置变量 classify_enable_learning
设置为 0
来禁用自适应分类器,或者使用 ClearAdaptiveClassifier()
方法清除自适应数据。
另请参阅 tesseract 论坛 上的讨论。
如何提高 OCR 结果?
您应该注意,在很多情况下,为了获得更好的 OCR 结果,您需要 提高 您提供给 Tesseract 的输入图像的质量。
我可以提高 OCR 速度吗?
如果您运行的是 Tesseract 4,则可以使用“fast”整数模型。
Tesseract 4 在处理页面时还会使用多达四个 CPU 线程,因此它比 Tesseract 3 处理单个页面更快。
如果您的计算机只有两个 CPU 内核,则运行四个线程会大大降低速度,最好使用单个线程,或者最多使用两个线程!使用单个线程消除了多线程的计算开销,也是通过为每个 CPU 内核运行一个 Tesseract 进程来处理大量图像的最佳解决方案。
使用环境变量 OMP_THREAD_LIMIT
设置最大线程数。
要禁用多线程,请使用 OMP_THREAD_LIMIT=1
。
更新 2019-10-06:最近的 tesseract 代码允许使用选项 -c tessedit_do_invert=0
,这会带来额外的速度提升。
如何尝试下一个版本?
定期稳定的版本会发布到下载页面。在版本发布之间,特别是就在新版本发布之前,最新代码可从 git 获得。您可以在这里找到源代码:https://github.com/tesseract-ocr/tesseract.git,您可以在其中通过命令行或通过链接到使用各种客户端程序和插件的方法来签出它。
如何比较不同版本的 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 包装器脚本,它将负责使用正确的共享库(无需安装……)。
训练
如何训练 Tesseract LSTM 引擎?
Tesseract 可以被训练来识别其他语言或微调现有的语言模型。有关训练 LSTM 引擎的信息,请参阅 Tesseract Wiki 训练 Tesseract 4.00 页面。
请注意,tesstrain.sh
和 tesstrain.py
只支持使用使用 UTF-8 训练文本和 Unicode 字体渲染文本的合成图像进行训练。从扫描图像和转录进行训练可以通过 tesstrain makefile 进行。
如何生成可搜索的 PDF 输出?
从 Tesseract 3.03 版本开始,可搜索的 PDF 输出是标准功能。使用 pdf
配置文件,如下所示
tesseract phototest.tif phototest pdf
可搜索的 PDF 似乎只包含空格或单词字母之间的空格。
PDF 本身可能没有问题,但其隐藏的可搜索文本层可能不被您的 PDF 阅读器识别。例如,Mac OS X 中的 Preview.app 就以存在此类问题而闻名,它可能只“看到”空格而看不到文本。尝试使用 Adobe Acrobat Reader 代替。
如何将原始图像文件和检测到的文本集成到 PDF 中?
使用配置变量 -c textonly_pdf=1
并合并您的仅包含图像的 PDF 和仅包含文本的 PDF。
有关详细信息,请参阅 https://github.com/tesseract-ocr/tesseract/issues/660#issuecomment-274213632。
其他
我可以将 Tesseract 用于手写识别吗?
可以,但效果不会很好,因为 Tesseract 是为印刷文本设计的。寻找专注于手写识别的项目。
我可以将 tesseract 用于条形码识别吗?
不。Tesseract 用于文本识别。
文档在哪里?
您正在查看它。如果事情不清楚,请在 Tesseract Google Group 上搜索或在那里向我们提问。如果您想帮助我们编写更多内容,请这样做,并将其发布到该组!
我的问题不在这里!
尝试搜索论坛:http://groups.google.com/group/tesseract-ocr 以及 GitHub 上的已打开和已关闭的问题:https://github.com/tesseract-ocr/tesseract/issues,因为即使这里没有列出,您的问题也可能以前出现过。
如果您有一个 FAQ、Wiki 页面和问题没有解答的问题,请在将问题发布到那里之前,先在 用户邮件列表/论坛 中搜索。
如果您认为您在 Tesseract 中发现了错误,请搜索现有的 问题。如果您找到一个类似的现有问题,请将其添加到其中,否则创建一个 新问题。
在您在 GitHub 上报告问题或在论坛中提问之前,请阅读 贡献 指南。***