图像文字识别(四):java调用tess4j识别图像文字

图像文字识别(四):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资源包目录如下:

图像文字识别(四):java调用tess4j识别图像文字

(2)新建一个java工程:

使用Build Path -> configure build path导入dist目录下的tess4j.jar 和 lib目录下的所有jar包,如下图:

图像文字识别(四):java调用tess4j识别图像文字

如果是maven工程则导入以下maven依赖。

 <dependency>
     <groupId>net.sourceforge.tess4j</groupId>
     <artifactId>tess4j</artifactId>
     <version>3.2.1</version>
 </dependency>

(3)把tessdata文件夹复制到项目的根目录下(与src目录同级),如下图:

如果tessdata目录没有配置到根目录下,就需要在代码中指定datePath。

图像文字识别(四):java调用tess4j识别图像文字


(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)图片素材与识别结果:

图像文字识别(四):java调用tess4j识别图像文字

图像文字识别(四):java调用tess4j识别图像文字

可以看到,tess4j在中文识别时,无论速度还是识别率还是较弱,需要针对场景进行训练,才能获得较好结果。



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100052.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java实现定时器的四种方式_java定时器实现文字内容交换

    java实现定时器的四种方式_java定时器实现文字内容交换前言:Java定时器目前主要有3种实现方式:JDK组件,SpringTask,Quartz框架。1.JDK组件(1)java.util.TimerTaskMyTimerTask.java:publicclassMyTimerTaskextendsTimerTask{@Overridepublicvoidrun(){System.out.println(“MyTimerTask,…

    2022年9月17日
    3
  • quartus ii 9.0安装激活成功教程教程_quartusii激活成功教程教程

    quartus ii 9.0安装激活成功教程教程_quartusii激活成功教程教程其实很多时候我们用web版就够了,不用激活成功教程,不要license,很方便, web版链接:https://pan.baidu.com/s/1OSvnko0b_TEEZvQ7EeQB6A 密码:g920 点击QuartusSetupWeb-13.1.0.162.exe进行安装,安装完成以后对modelsim进行配置,将vsim.exe的路径添加到tools-&gt;options-&gt;EDATo…

    2022年10月15日
    2
  • MATLAB柱状图画法(详细)

    首先先给一张柱状图,请注意,ABC三个对比的数据,是分别对应一个数组的每一列,然后贴代码figure(1)axes2=axes(‘position’,[0.1,0.1,0.86,0.8]);%这个是figure里面图的位置和大小,分别为离下边,左边的距离,还有图的高和宽bar(mse_lowhigh);set(gca,’XTickLabel’,{‘0.5′,’1’,’…

    2022年4月5日
    4.2K
  • 建立数据库,建立一个“学生”表student。[通俗易懂]

    建立数据库,建立一个“学生”表student。[通俗易懂]1.建立数据库,建立一个“学生”表student。2.设计思想:首先利用createdatabase语句建立一个数据库,再用createtable语句按要求建立基本表,再按照规则添加数据。3.实验代码及注释:创建数据库mysql>createdatabaseymz;QueryOK,1rowaffected(0.03sec)使用数据库mysql>us…

    2022年7月24日
    24
  • 【Nginx】什么是Nginx?为什么使用Nginx?

    【Nginx】什么是Nginx?为什么使用Nginx?一、前言为毛要用nginx服务器代理,不直接用tomcat7.0,还做多了一次接请求?这个是我想问的,公司的新项目是要用Nginx+tomcat7+jdk开发的,用户命名可以直接访问tomcat,为啥还要用Nginx?这货是个啥玩意?二、什么是Nginx?在传统的Web项目中,并发量小,用户使用的少。所以在低并发的情况下,用户可以直接访问tomcat服务器,然后tomcat服务器…

    2022年7月23日
    15
  • wireshark安装问题「建议收藏」

    [root@lc~]#tsharkRunningasuser”root”andgroup”root”.Thiscouldbedangerous.Capturingoneth0tshark:Unknownmessagefromdumpcap,trytoshowitasastring:/usr/sbin/dumpcap:sy…

    2022年4月15日
    126

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号