Java 使用 Tess4J 实现图像识别

Java 使用 Tess4J 实现图像识别最近需要用Java做一个图像识别的东西,查了一些资料,在此写一个基于Tess4J的教程,方便其他人参考和使用。其实做图像识别,也可以使用TESSERACT-OCR来实现,但是该方式需要下载软件,在电脑上安装环境,移植性不高,使用Tess4J只需要下载相关Jar包,导入项目,再把项目封装好就可以处处运行了。首先,下载Tess4J的相关资源(一个压缩包),官网:http://tess4j.source…

大家好,又见面了,我是你们的朋友全栈君。

最近需要用Java做一个图像识别的东西,查了一些资料,在此写一个基于Tess4J的教程,方便其他人参考和使用。

其实做图像识别,也可以使用TESSERACT-OCR来实现,但是该方式需要下载软件,在电脑上安装环境,移植性不高,使用Tess4J只需要下载相关Jar包,导入项目,再把项目封装好就可以处处运行了。

首先,下载Tess4J的相关资源(一个压缩包),官网:http://tess4j.sourceforge.net/codesample.html

解压,其中的目录结构如下:

Java 使用 Tess4J 实现图像识别

需要用到其中圈起来的三个文件夹中的东西。lib文件夹下放的是需要用到的Jar包,tessdata下放的是语言库,默认的有英语库,中文库需要另外下载,下载地址:https://github.com/tesseract-ocr/tessdata/blob/master/chi_sim.traineddata。

新建一个Java项目,将lib文件夹和tessdata文件夹复制到项目的根目录下,找到dist文件夹下的tess4j.jar(名字可能有版本号),将该文件也复制到项目根目录下的lib文件夹下。

项目的的目录如下:

Java 使用 Tess4J 实现图像识别

lib中的文件如下(tess4J.jar也在该目录下):

Java 使用 Tess4J 实现图像识别

再在eclipse中打开项目,在项目中导入lib文件夹中所有的jar包(Build path –> configure build path),导入后的结果如下:

Java 使用 Tess4J 实现图像识别

这样前期准备工作就完成了,下面就剩下代码了。Tess4J的代码比较简洁,如下:

Tess4JTest.java

package ocr;

import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import net.sourceforge.tess4j.util.LoadLibs;

import java.io.File;
import java.io.IOException;

/**
 * Tess4J测试类
 */
public class Tess4JTest {

    public static void main(String[] args){

    	String path = "D://Java//Tess4J";		//我的项目存放路径
    	
    	File file = new File(path + "//photo.jpg");
        ITesseract instance = new Tesseract();

        /**
         *  获取项目根路径,例如: D:\IDEAWorkSpace\tess4J
         */
        File directory = new File(path);
        String courseFile = null;
        try {
            courseFile = directory.getCanonicalPath();
        } catch (IOException e) {
            e.printStackTrace();
        }

        //设置训练库的位置
        instance.setDatapath(courseFile + "//tessdata");

        instance.setLanguage("eng");//chi_sim :简体中文, eng	根据需求选择语言库
        String result = null;
        try {
            long startTime = System.currentTimeMillis();
             result =  instance.doOCR(file);
            long endTime = System.currentTimeMillis();
            System.out.println("Time is:" + (endTime - startTime) + " 毫秒");
        } catch (TesseractException e) {
            e.printStackTrace();
        }
        
        System.out.println("result: ");
        System.out.println(result);
    }

}

这样就搞定了。

效果如下:

原图:

Java 使用 Tess4J 实现图像识别

读取结果:

Java 使用 Tess4J 实现图像识别

从结果来看准确率还有待提高,l 和 1分不清,0 和 O 也没有分清,汉字的准确率还要低一些,大家可以自行训练字体库优化。

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

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

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


相关推荐

  • charles导致mac无法上网_使用不同的MAC地址上网

    charles导致mac无法上网_使用不同的MAC地址上网前言charles关闭后,发现网页突然打开了,那大概率是设置了代理,但明明已经关闭了charles,这是由于mac网络偏好设置中,使用的是手动代理,将其改为自动即可解决方法1打开网络偏好设置,

    2022年7月31日
    105
  • arrays.sort排序_js数组排序方法sort

    arrays.sort排序_js数组排序方法sortArrays.sort默认是升序,如果我们需要降序排列数组?Arrays.sort(distances);——升序Arrays.sort(distances,Collections.reverseOrder());——降序再说说Collections集合类,用来排序集合的Collections.sort(list)——升序Collections.reverse(list…

    2022年8月12日
    9
  • idea集成svn使用教程_idea导入svn项目

    idea集成svn使用教程_idea导入svn项目1.查看svn仓库调出svn视图:连接svn服务器:连接后效果如下:补充:如果输入正确的连接地址后出现错误—系统找不到指定的文件请到设置中检查(File|Settings|VersionControl|Subversion)SVC客户端路径配置的对不对(选中bin目录下的svn.exe)?如果找不到svn.exe,看下图解释2.Idea集成svn如果不小心选错了其他选项,比如cvs,可以在settings中重新选择;…

    2022年10月18日
    4
  • Linux定时任务Crontab命令详解

    Linux定时任务Crontab命令详解

    2021年5月31日
    94
  • A*算法解决八数码问题

    1 问题描述1.1什么是八数码问题八数码游戏包括一个33的棋盘,棋盘上摆放着8个数字的棋子,留下一个空位。与空位相邻的棋子可以滑动到空位中。游戏的目的是要达到一个特定的目标状态。标注的形式化如下: 123456781.2问题的搜索形式描述

    2022年4月6日
    58
  • 矩阵求逆的_matlab计算矩阵的逆矩阵

    矩阵求逆的_matlab计算矩阵的逆矩阵首先输入矩阵,例如:octave:1>a=[3,4;2,16]a=  3  4  2 16然后,利用pinv函数求逆octave:2>pinv(a)ans=  0.400000 -0.100000 -0.050000 0.075000octave:3>pinv(a)*aans=  1.00000 -0.00000  0.00000 …

    2022年8月21日
    7

发表回复

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

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