Java OCR

17 Mar 2025 | 6 分钟阅读

什么是 Tesseract OCR?

Tesseract OCR 是由 HP 实验室于 1985 年开发、2005 年推出的光学字符识别引擎。自 2006 年以来,一直由 Google 开发。Tesseract 支持 Unicode (UTF-8),可以“开箱即用”识别 100 多种语言,因此可用于创建不同语言的扫描软件。Tesseract 的最新版本是 Tesseract 4。它增加了一个新的基于 OCR 的神经网络 (LSTM) 引擎,专注于行识别,但也支持通过识别字符模式工作的 Tesseract OCR 传统引擎。

随着人工智能和机器学习的飞速发展,我们现在需要严格的图像处理。它使我们能够在 Java 中执行此类处理。

OCR 如何工作?

Tesseract OCR 可在 Windows、Mac 和 OS 等所有主要操作系统上下载。要了解 OCR 的工作原理,请按顺序考虑以下步骤:

  1. 预处理图像数据,例如:转换为灰度、平滑、去歪斜、过滤。
  2. 检测线条、单词和字母。
  3. 根据一套合格的数据集生成候选字符的排名列表。(此处使用 setDataPath() 方法设置训练器数据路径)
  4. 发送视觉字符的过程,根据上一步的置信度以及语言数据选择最佳字符。语言数据包括字典、语法规则等。

如何使用 Tesseract OCR?

要在 Java 中使用 Tesseract OCR,请按照以下步骤操作:

  1. 下载 Tess4J API。
  2. 从下载的文件中解压文件。
  3. 打开任何 IDE 并创建一个新项目。
  4. 将 jar 文件链接到您的项目。
  5. 请通过此路径“..\Tess4J-3.4.8-src\Tess4J\dist”进行操作。

jar 文件已成功链接到项目,因此 Tesseract 引擎已准备好使用。

对清晰的图像执行 OCR

现在我们已经链接了 jar 文件,我们可以开始编码部分了。以下代码读取图像文件并执行 OCR,并在控制台上显示文本。

OCR.java

输入

image.jpg

Java OCR

输出

Sometimes, this simply isn't possible. Sometimes, we wish to automate a task of rewriting text from an image with our own hands.

使用 OCR 读取不清晰的图像

请注意,上面选择的图像分辨率非常高,字体一致,但这在大多数情况下不会发生。在大多数情况下,我们会得到一个不清晰或可能失真的图像,从而导致失真的输出。为了解决这个问题,我们需要对图像执行一些称为图像处理的步骤。

Tesseract 在文本与背景的分割非常清晰时效果最佳。事实上,确保良好的分离可能非常具有挑战性。如果图像具有不清晰或失真的背景,则可能无法获得 Tesseract 的高质量输出,原因有很多。在这种情况下,我们需要知道图像应该如何处理。

在这里,我们将创建一个小型智能模型,该模型将扫描图像的 RGB 内容,将其转换为灰度,并再次创建缩放效果。

下面的示例是根据 RGB 内容对图像进行灰度处理的示例代码。

ReadingImage.java

输入

Java OCR

输出

Time taken to search elements keep increasing as the number of elements were increased.

优点

OCR 的优点如下:

  1. 它提高了办公室工作的效率。
  2. 能够快速搜索内容非常有用,尤其是在办公室环境中,您需要处理大量扫描或大量文档输入。
  3. OCR 速度快,可确保文档内容保持不变,从而节省时间。
  4. 工作流程得到提高,因为员工不再花费时间进行体力劳动,可以更快、更有效地工作。

缺点

OCR 的缺点如下:

  1. OCR 仅限于语言识别。
  2. 创建不同语言的数据并实现它们需要大量的努力。
  3. 还需要在图像处理方面做更多工作,因为这是 OCR 性能最重要的部分。
  4. 在执行如此大量的工作后,没有 OCR 可以提供 100% 的准确性,即使在 OCR 之后,我们仍然需要在邻近的机器学习方法中确定一个未知字符或亲自修复它。