一切福田,不離方寸,從心而覓,感無不通。

谁说Java不行,有了这个类库,你也能实现OCR识别!

OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程;

现在有很多软件都支持这个功能,比如钉钉就支持扫描图片后直接转成文字。

在OCR识别领域,有一个开源的项目——Tesseract,Tesseract是一個光学字符识别引擎。Tesseract是基于Apache许可证的自由软件,自2006 年起由Google赞助开发。2006年,Tesseract被认为是最精准的开源光学字符识别引擎之一。

但是,这个牛X的项目,现在有了Java包装的API了,那就是Tess4J (https://github.com/nguyenq/tess4j )

Tess4J是对Tesseract OCR API的Java封装。使Java能够通过调用Tess4J的API来使用Tesseract-OCR。支持的格式:TIFF,JPEG,GIF,PNG,BMP,JPEG,and PDF

准备工作

我们首先将Tess4J maven依赖项添加到我们的项目中

 

接下来,我们需要确保Tess4j所需的本机库可以从我们的应用程序访问。Tess4J的jar文件已经附带了本机库。但是,需要在加载之前先提取它们。我们可以使用Tess4J实用工具方法来编程完成此操作:

 

使用LoadLibs.extractTessResources方法,我们可以将jar文件中的资源提取到本地临时目录中,注意,参数(这里是win32-x86-64)取决于所使用的系统。通过查看Tess4J jar文件,您可以看到可用的选项。我们可以通过设置Java系统属性java.library.path来指示Java从临时目录加载本机库。

接下来,我们需要为Tesseract提供语言相关的数据文件。这些数据文件包含Tesseracts LSTM OCR引擎的训练模型,可以从GitHub(https://github.com/tesseract-ocr/tessdata )下载。

检测文本

现在我们准备在Java应用程序中使用Tesseract。下面的代码片段显示了一个最简单的示例:

 

首先,我们创建一个新的Tesseract实例。我们设定了我们想要识别的语言(这里是德语)。使用setOcrEngineMode(1),我们告诉Tesseract使用LSTM OCR引擎。

接下来,我们用setDatapath(..)将数据目录设置为包含下载的LSTM模型的目录(这里是resources/data)。

最后,我们从类路径加载一个示例图像,并使用doOCR(..)方法执行字符识别。结果我们得到一个包含检测到的字符的字符串。

例如,将德语维基百科OCR文章中的这张照片输入Tesseract可能会产生以下文本输出。

输出内容:

 

总结

Tesseract是一个流行的OCR开源项目。通过Tess4J,我们可以访问Java中的Tesseract API。加载本机库和下载Tesseracts LSTM数据需要进行一些设置。之后在Java中很容易执行OCR。如果您对已识别的文本不满意,那么最好看看Tesseract文档的“提高输出质量”部分(https://tesseract-ocr.github.io/tessdoc/ImproveQuality.html )。

推荐阅读
你亲手写的代码,正在出卖你

深夜,聊聊架构设计

深夜,分享一个Git小技巧

from:https://blog.csdn.net/singwhatiwanna/article/details/109152977