使用Tess4J的Java中的OCR

光学字符识别( OCR )是将包含文本的图像转换为机器编码的文本。 一个流行的工具是开源项目Tesseract 。 Tesseract可以从命令行用作独立应用程序。 另外,它可以使用其C ++ API集成到应用程序中。 对于其他编程语言,可以使用各种包装器API 。 在本文中,我们将使用Java包装器Tess4J

入门

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

 < dependency >

    < groupId >net.sourceforge.tess4j</ groupId >

    < artifactId >tess4j</ artifactId >

    < version >4.5.2</ version >
 </ dependency >

接下来,我们需要确保Tess4j所需的本机库可从我们的应用程序访问。 Tess4J jar文件附带了本地库。 但是,需要先提取它们,然后才能加载它们。 我们可以使用Tess4J实用程序以编程方式执行此操作:

 File tmpFolder = LoadLibs.extractTessResources( "win32-x86-64" );
 System.setProperty( "java.library.path" , tmpFolder.getPath());

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

提供库的其他选项可能是在系统上安装Tesseract。 如果您不想更改java.library.path属性,也可以使用System.load(..)手动加载库。

接下来,我们需要向Tesseract提供语言相关的数据文件。 这些数据文件包含针对Tesseracts LSTM OCR引擎的经过训练的模型,可以从GitHub下载。 例如,要检测德语文本,我们必须下载deu.traineddata ( deu是德国的ISO 3166-1-alpha-3国家/地区代码)。 我们将一个或多个下载的数据文件放置在resources / data目录中。

检测文字

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

 Tesseract tesseract = new Tesseract();
 tesseract.setLanguage( "deu" );
 tesseract.setOcrEngineMode( 1 );
 Path dataDirectory = Paths.get(ClassLoader.getSystemResource( "data" ).toURI());
 tesseract.setDatapath(dataDirectory.toString());
 BufferedImage image = ImageIO.read(Main. class .getResourceAsStream( "/ocrexample.jpg" ));
 String result = tesseract.doOCR(image);
 System.out.println(result);

首先,我们创建一个新的Tesseract实例。 我们设置了我们要识别的语言(此处为德语)。 通过setOcrEngineMode(1),我们告诉Tesseract使用LSTM OCR引擎。

接下来,将带有setDatapath(..)的数据目录设置为包含我们下载的LSTM模型的目录(此处为resources / data )。

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

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

文字输出:

 Grundsätzliches [Quelltext bearbeiten]
 Texterkennung ist deshalb notwendig, weil optische Eingabegeräte (Scanner oder Digitalkameras, aber
 auch Faxempfänger) als Ergebnis ausschließlich Rastergrafiken liefern können. dh in Zeiten und Spaten
 angeordnete Punkte unterschiedlicher Färbung (Pixel). Texterkennung bezeichnet dabei die Aufgabe, die so
 dargestellten Buchstaben als solche zu erkennen, dh. zu identifizieren und ihnen den Zahlenwert
 zuzuordnen, der ihnen nach üblicher Textcodierung zukommt (ASCII, Unicode). Automatische Texterkennung
 und OCR werden im deutschen Sprachraum oft als Synonym verwendet In technischer Hinsicht bezieht sich
 OCR jedoch nur auf den Teilbereich der Muster vergleiche von separierten Bildteilen als Kandidaten zur
 ( Erkennung von Einzelzeichen. Diesem OCR—Prozess geht eine globale Strukturerkennung voraus, in der
 zuerst Textblöcke von graphischen Elementen unterschieden, die Zeilenstrukturen erkannt und schließlich
 | Einzeizeichen separiert werden. Bei der Entscheidung, welches Zeichen vorliegt, kann über weitere
 \ . Algorithmen ein sprachlicher Kontext berücksichtigt werden

概要

Tesseract是OCR受欢迎的开源项目。 借助Tess4J,我们可以使用Java访问Tesseract API。 加载本地库和下载Tesseracts LSTM数据需要一些设置。 之后,在Java中执行OCR相当容易。 如果您对可识别的文本不满意,则最好查看Tesseract文档的“ 提高输出质量”部分。

您可以在GitHub找到所示示例的源代码。

翻译自: https://www.javacodegeeks.com/2020/08/ocr-in-java-with-tess4j.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值