谁说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依赖项添加到我们的项目中

<dependency>

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

    <artifactId>tess4j</artifactId>

    <version>4.5.3</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从临时目录加载本机库。

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

检测文本

现在我们准备在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. d. h. 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文档的“提高输出质量”部分(https://tesseract-ocr.github.io/tessdoc/ImproveQuality.html )。

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

深夜,聊聊架构设计

深夜,分享一个Git小技巧

编程·思维·职场
欢迎扫码关注

### 回答1: Java 有很多知名的框架和类库,以下是其中一些比较常用的: 1. Spring Framework:一个开源的应用程序框架,用于Java平台的企业级应用程序开发。 2. Hibernate:一个流行的对象关系映射(ORM)框架,用于将Java应用程序中的对象映射到关系型数据库中的表。 3. Struts:一个基于MVC模式的Web应用程序框架,用于开发Java Web应用程序。 4. Log4j:一个用于记录日志的Java类库,支持多种日志级别和日志输出格式。 5. Apache Commons:一个由Apache提供的常用的Java类库集合,包括字符串操作、IO操作、集合操作等常用功能。 6. Gson:一个用于将Java对象序列化为JSON格式的类库,也支持将JSON反序列化为Java对象。 7. JUnit:一个流行的Java单元测试框架,用于编写和运行测试用例。 8. Apache Maven:一个开源的项目管理和构建工具,用于自动化构建、测试和部署Java应用程序。 ### 回答2: Java有很多知名的框架类库,以下是其中一些: 1. Spring框架:是最为广泛使用的Java开发框架之一,提供了全面的企业级应用开发解决方案,包括依赖注入、面向切面编程、容器管理、事务管理等功能。 2. Hibernate框架:是一个持久层框架,用于简化Java应用程序的数据库操作。它通过对象关系映射(ORM)提供了面向对象的数据访问接口,并支持多种数据库。 3. Spring Boot框架:是Spring框架的扩展,使得开发者能够更快速地构建基于Spring的应用程序。它提供了自动化配置和约定优于配置的原则,使得开发者可以在几分钟内搭建起一个可运行的Spring应用。 4. MyBatis框架:是一款优秀的持久层框架,将SQL语句与Java对象之间的映射工作简化。它提供了灵活的SQL编写方式,可以灵活地控制SQL语句的执行,适用于各种复杂的数据库操作需求。 5. Apache Struts框架:是一个用于构建基于Java的Web应用程序的开源框架。它采用了MVC(模型-视图-控制器)架构模式,提供了可重用的组件和处理器,使得开发者能够更快速地搭建Web应用程序。 6. Apache Kafka:是一个分布式流数据平台,用于高效地处理大规模、实时的数据流。它支持高吞吐量、低延迟的消息传递,并能够处理多个消费者和生产者之间的数据传输。 除了以上的框架之外,还有许多其他知名的Java框架类库,如Apache Tomcat、Spring MVC、Junit、Log4j等,每个框架都有各自的特点和优势,开发者可以根据自己的需求选择适合的框架来进行开发。 ### 回答3: Java是一种常用的编程语言,有许多知名的框架和类库可以帮助开发人员更高效地构建应用程序。以下是一些著名的Java框架和类库: 1. Spring框架:Spring是Java最流行的企业级应用程序开发框架之一。它提供了一个轻量级的容器,用来管理Java对象的创建、配置和管理。Spring还包含许多模块,如Spring MVC用于构建Web应用程序,Spring Data用于数据库访问,以及Spring Security用于身份验证和授权等。 2. Hibernate框架:Hibernate是一个Java持久化框架,用于将Java对象映射到关系数据库。它简化了数据库操作,通过自动生成SQL语句和执行数据库事务,使开发人员能够更轻松地与数据库交互。 3. Apache Struts框架:Struts是一个用于构建基于MVC(Model-View-Controller)模式的Web应用程序的框架。它提供了一套标准的Action、Form和View组件,通过配置文件将它们与请求映射起来。Struts使开发人员能够更好地组织和管理Web应用程序的代码。 4. Apache Tomcat服务器:Tomcat是一个开源的Java Servlet容器,用于运行Java Web应用程序。它提供了一个Web服务器环境,能够处理HTTP请求和响应,并支持Java Servlet和JavaServer Pages(JSP)等Java技术。 5. Apache Maven构建工具:Maven是一个Java项目管理和构建工具,用于自动化构建、依赖管理、测试和部署Java应用程序。它使用基于XML的配置文件来定义项目结构和构建过程,使开发人员能够更方便地管理项目的生命周期。 6. Apache Log4j日志框架:Log4j是一个Java日志框架,用于记录应用程序的运行日志。它提供了灵活的配置选项,可以将日志输出到不同的目标(如控制台、文件、数据库),并支持不同级别的日志记录。 这只是一小部分Java框架和类库的例子,Java生态系统中还有许多其他知名的框架和类库,用于不同的开发目的和场景。开发人员可以根据自己的需求选择合适的框架和类库来提高开发效率和应用程序性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值