图像文字识别(四):java调用tess4j识别图像文字
Tesseract-OCR支持中文识别,并且开源和提供全套的训练工具,是快速低成本开发的首选。前面记录过在java中调用tesseract-orc,该方法的原理是通过在java中调用cmd命令行,来执行tesseract,但是该方式需要下载软件,在电脑上安装环境,移植性不高。
而Tess4J则是Tesseract在Java PC上的应用。如果使用Tess4J只需要下载相关Jar包,导入项目,再把项目封装好就可以处处运行了,可移植性比较好。Tess4J在英文和数字识别中性能比较好,但是在中文识别中,无论速度还是识别率还是较弱,因此需要针对场景进行训练,才能获得较好结果。
这篇博客简单记录一下在java中通过调用tess4j的方式识别图片的文字内容。
步骤:
(1)下载tess4j源码包:https://sourceforge.net/projects/tess4j/
tessdata下默认为英语库,中文库下载地址:https://github.com/tesseract-ocr/tessdata/blob/master/chi_sim.traineddata
其他库的下载地址:https://github.com/tesseract-ocr/tessdata
下载完的tess4j资源包目录如下:
(2)新建一个java工程:
使用Build Path -> configure build path导入dist目录下的tess4j.jar 和 lib目录下的所有jar包,如下图:
如果是maven工程则导入以下maven依赖。
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>3.2.1</version>
</dependency>
(3)把tessdata文件夹复制到项目的根目录下(与src目录同级),如下图:
如果tessdata目录没有配置到根目录下,就需要在代码中指定datePath。
(4)编写测试类:
import java.io.File;
import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
/**
* 类说明 : tess4j测试类
*/
public class OCRDemo {
public static void main(String[] args) throws TesseractException {
ITesseract instance = new Tesseract();
//如果未将tessdata放在根目录下需要指定绝对路径
//instance.setDatapath("the absolute path of tessdata");
//如果需要识别英文之外的语种,需要指定识别语种,并且需要将对应的语言包放进项目中
instance.setLanguage("chi_sim");
// 指定识别图片
File imgDir = new File("C://Users//1_20180208150251_x4hzz//1.png");
long startTime = System.currentTimeMillis();
String ocrResult = instance.doOCR(imgDir);
// 输出识别结果
System.out.println("OCR Result: \n" + ocrResult + "\n 耗时:" + (System.currentTimeMillis() - startTime) + "ms");
}
}
(5)图片素材与识别结果:
可以看到,tess4j在中文识别时,无论速度还是识别率还是较弱,需要针对场景进行训练,才能获得较好结果。
相关文章
- Java反射机制详解(3) -java的反射和代理实现IOC模式 模拟spring
- java基础—Hashtable,HashMap,TreeMap的区别
- Java: mysql-connector-java
- Java项目(前端vue后台java微服务)在线考试系统(java+vue+springboot+mysql+maven)
- Mac M1芯片本 Java环境(intelliJ Idea+JDK)安装及git识别bad CPU type in executable:xxx等兼容问题解决
- java的Enum 使用以及转换
- 【Java】整理关于java的String类,equals函数和比较操作符的区别
- Java工具类-基于SnowFlake的短地址生成器
- zabbix监控java进程内存使用情况
- Java类加载器ClassLoader总结
- java.lang.OutOfMemoryError: Java heap space
- Java学习-084-java.sql.SQLException: Zero date value prohibited 问题解决
- Java学习-077-多线程10:线程资源同步问题实例演示
- 【华为OD机试真题 java、python】垃圾短信识别、垃圾信息拦截【2022 Q4 100分】
- Java_cookie 和session 的区别详解
- 浅析Java对集合进行操作时报java.util.ConcurrentModificationException并发修改异常问题:产生原因、单线程/多线程环境解决、CopyOnWriteArrayList线程安全的ArrayList、fail-fast快速失败机制防止多线程修改集合造成并发问题
- 图像文字识别(二):java调用tesseract 识别图片文字
- 『Java练习生的自我修养』java-se进阶¹ • 初识多线程
- Java空指针异常解决java.lang.NullPointerException解决心得
- 实操代码研究各种Java技术-java.toutiao.im
- Eclipse迅速执行:Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
- Java EE的十三个技术规范
- How to Analyze Java Thread Dumps--reference
- Java-面向对象基础与类的识别
- Java 注解
- 多种方式解决Java控制台报错 java.util.LinkedHashMap cannot be cast to.....
- Java 合并两个有序的链表