概述
Fess 使用 Apache Tika 从文档中提取文本。 Tika 的 Tesseract OCR 解析器已包含在 Fess 中。启用后,可以识别图像和扫描版 PDF 中的文字,并将其作为搜索对象。
满足以下两个条件时,将执行 OCR。
运行 Fess 爬虫进程的主机上已安装
tesseract命令Fess 中已启用 OCR
OCR 默认处于禁用状态。 如果未安装 tesseract,Fess 会跳过 OCR,不会报错。
OCR 的对象
启用 OCR 后,以下内容将成为对象。
图像文件(PNG、JPEG、TIFF、GIF、BMP 等)
由 Tika 处理的文档中嵌入的图像(Office 文件等)
文本层为空的 PDF(扫描版 PDF)
扫描版 PDF 的处理
Fess 通常使用 PDFBox 从 PDF 中提取文本。 启用 OCR 且 PDFBox 完全无法从 PDF 中获取文本时,Fess 会通过 Tika 重新提取该 PDF。 此时 Tika 会将页面转换为图像并执行 OCR。
Note
已包含文本的 PDF 不会成为 OCR 的对象。 只有部分页面是扫描图像的 PDF(混合 PDF)不在对象范围内。
安装 Tesseract
在运行 Fess 的主机上安装 Tesseract。 要识别日文文字,还需要日文的训练数据(traineddata)。
Debian / Ubuntu:
RHEL / Rocky Linux / AlmaLinux(请先启用 EPEL):
可以通过以下命令确认已安装的语言:
启用 OCR
在 fess_config.properties 中设置以下属性。
ZIP 版:
app/WEB-INF/classes/fess_config.propertiesRPM/DEB 版:
/etc/fess/fess_config.properties
| 属性 | 默认值 | 说明 |
|---|---|---|
crawler.document.ocr.enabled | false | 设置为 true 即启用 OCR。 |
crawler.document.ocr.language | eng | Tesseract 的语言。多个语言用 + 连接(例如 jpn+eng)。必须已安装对应的 traineddata。 |
crawler.document.ocr.timeout | 120 | Tesseract 单次运行(一张图像或 PDF 的一页)的超时时间,单位为秒。 |
这些设置也可以作为 JVM 系统属性指定。 例如在 FESS_JAVA_OPTS 中按如下方式指定。这在 Docker 环境中很方便。
Note
更改设置后,请重启 Fess。
在 Docker 中使用
要在 Docker 环境中使用 OCR,请在 Fess 镜像中添加 Tesseract。 使用 docker-fess 的 compose/tesseract/Dockerfile 构建添加了 Tesseract 的镜像。
compose/tesseract/Dockerfile 示例:
在 compose/compose.yaml 中,将 image: 行替换为 build: ./tesseract,并启用 FESS_JAVA_OPTS 行。 用法与 build: ./playwright 相同。
更改后,重新构建镜像并启动容器:
Note
如果使用 -noble 或 -al2023 等非 Alpine 的基础镜像,请使用该发行版的包管理器代替 apk 来添加 Tesseract。
详情请参阅 使用 Docker 安装(详细)。
按爬取配置进行设置
在爬取配置的“配置参数”中指定 config.tika.tesseract.config,可以仅针对该爬取配置覆盖 OCR 设置。
tesseract.properties 是类路径上的资源名称,不是文件系统路径。 请将文件放在 Fess 的配置目录中,该目录包含在爬虫的类路径中。
ZIP 版:
app/WEB-INF/classes/RPM/DEB 版:
/etc/fess/
在 tesseract.properties 中编写 Tika 的 TesseractOCRConfig 属性。 能够可靠生效的只有 language 和 timeoutSeconds 等简单的键。
对于该爬取配置,此设置优先于上述全局设置。
运维注意事项
OCR 会给 CPU 带来很高的负载,并使爬取的处理时间大幅增加。请考虑减少爬虫的线程数,或仅在需要 OCR 的爬取配置中启用等,以控制负载。
在 Web 爬取配置中,新建时的默认设置会将图像 URL(jpg、png、gif 等)从爬取对象中排除。要爬取网站上的图像,请从“从爬取对象中排除的URL”中删除这些项。文件爬取会将图像也作为爬取对象。
爬虫的大小限制同样适用。关于按文件类型设置的索引大小上限(默认值 10MB),请参阅 爬虫配置:Web、文件服务器与数据库爬取。
OCR 的精度取决于扫描图像的质量。手写文字通常难以被识别。
启用 OCR 之前已编入索引的文件不会自动进行 OCR。启用增量爬取( 常规 中的“检查上次修改时间”)时,修改时间未变化的文件在重新爬取时不会被再次获取。要对这些文件应用 OCR,请临时禁用“检查上次修改时间”后爬取一次,或者先从索引中删除这些文档后重新爬取。
升级注意事项
15.8 及更早版本中自带的 tika.xml 排除了 org.apache.tika.parser.ocr.TesseractOCRParser。 从 15.9 起,自带的 tika.xml 不再排除该解析器。
如果您一直在使用自定义的 tika.xml,请删除以下行。
如果保留此行,即使指定了 crawler.document.ocr.enabled=true,OCR 仍然保持禁用。
tika.xml 的位置如下。
ZIP 版:
app/WEB-INF/conf/tika.xmlRPM/DEB 版:
/etc/fess/tika.xml
确认运行
将放有扫描图像(包含文字的图像)的文件夹设为文件爬取的对象。
执行爬取。
使用图像中包含的单词进行搜索,确认该图像显示在搜索结果中。
如果搜索结果中没有显示,请确认以下几点。
tesseract --list-langs中显示所使用的语言crawler.document.ocr.enabled为truetika.xml中没有残留对TesseractOCRParser的排除爬取时的
fess-crawler.log中输出了OCR is enabled(如果输出Tesseract OCR is not available警告,则表示 Fess 无法使用 Tesseract)