图像文字识别(四):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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Google Earth Engine简介

    Google Earth Engine简介GoogleEarthEngine(GEE)是Google提供的对大量全球尺度地球科学资料(尤其是卫星数据)进行在线可视化计算分析处理的平台,未来地球科学的大杀器啊。链接:https://earthengine.google.com/。注意上Google要费点劲。  关于GEE的入门学习可以参考以下链接(该部分转自无形的风的博客,3ks):GoogleEart

    2022年9月19日
    0
  • 域渗透之NTLM Relay

    域渗透之NTLMRelay基础知识LLMNR概述链路本地多播名称解析(LLMNR)是一个基于协议的域名系统(DNS)数据包的格式,使得双方的IPv4和IPv6的主机来执行名称解析为同一本地链路

    2021年12月13日
    69
  • java标记符_java标识符的书写规则

    java标记符_java标识符的书写规则标识符就是给java中的类,方法,变量起名字的符号。规则:1.可以由字母,数字,下划线,美元符号组成,但是不能包含@,%,空格等其它特殊字符,不能以数字开头。2.不能是java的关键字,比如static,import,float,int,abstract还有好多这里就不一一例举了,需要的可以自己百度。3.对大小写是敏感的,比如一些包名和类名以及变量名我们虽然大小写不会报错,但是我们需要尽可能的规范…

    2022年7月8日
    15
  • C#的封装_封装元器件

    C#的封装_封装元器件封装:即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。封装的作用:封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性,使不同类之间的相互影响减少到最低限度,进而增强数据的安全性和简化程序的编写工作封装的优点:1.良好的封装能够减少

    2022年9月9日
    0
  • python中 列表(List)转换为字符串(Str)的方法

    python中 列表(List)转换为字符串(Str)的方法1、List列表转为Str字符串List中存的是字符串的时候,一般是通过.join()函数去转换:例:dataList=[‘1′,’2′,’3′,’4’]str1=“,”+join(dataList)print(dataList)…

    2022年6月2日
    43
  • 2020微信小程序反编译教程(小程序反编译源码能用吗)

    文章主要实现:废话不多说下面就直接来流程了!第1步:先安装node.js点击下载第2步:再下载wxappUnpacker反编译包点击下载包第3步:保证以上都安装后电脑命令窗口:CMD运行第2步目录运行加载node依赖:命令窗口复制以下黄色命令:npminstalluglify-es–savenpminstall…

    2022年4月16日
    366

发表回复

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

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