Java使用Tesseract-OCR进行图像中文文字识别

java | 2019-09-19 14:28:32

1.Tesseract和Tess4J介绍

  Tesseract支持Unicode(UTF-8),可以“开箱即用”地识别100多种语言。Tesseract支持各种输出格式:纯文本、HOCR(HTML)、PDF、TSV、仅不可见文本PDF。Tesseract-OCR支持中文识别,并且开源和提供全套的训练工具,是快速低成本开发的首选。

  Tess4J则是Tesseract在Java的本地动态库的API(该库提供光学字符识别(OCR)支持:TIFF、JPEG、GIF、PNG和BMP图像格式,多页tiff图像,PDF文档格式)。tess4j是在apache许可证v2.0下发布和分发的,也可以从maven中央存储库获得。如果使用Tess4J只需要下载相关Jar包,导入库,再把项目封装好就可以处处运行了,可移植性比较好。Tess4J在英文和数字识别中性能比较好,但是在中文识别中,无论速度还是识别率还是较弱,因此需要针对场景进行训练,才能获得较好结果。

 

2.下载识别中文字体库

https://github.com/tesseract-ocr/tessdata/blob/master/chi_sim.traineddata

3.新建maven项目

把字体库文件放入resources目录下

4.maven配置

        
            net.sourceforge.tess4j
            tess4j
            4.4.0
        

5.java代码
 

package net.itxw;

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

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

/**
 * @Author: houyong
 * @Date: 2019/9/19
 */
public class Tess4JTest {
    public static void main(String[] args) {
        System.out.println(ocrCn("D:\\itxwnet.png"));
    }
    
    public static String ocrCn(String path){
        String result="";
        try {
            //记录开始时间
            double start = System.currentTimeMillis();

            //初始化Tesseract
            Tesseract tesseract = new Tesseract();
            tesseract.setLanguage("chi_sim");

            //获取tessdata下的字体库文件
            File tessDataFolder = LoadLibs.extractTessResources("tessdata");

            //设置语言包
            tesseract.setDatapath(tessDataFolder.getAbsolutePath());

            //读取图片文件
            File file = new File(path);
            BufferedImage textImage = ImageIO.read(file);

            //识别图片文字
            result=tesseract.doOCR(textImage);

            //计算耗时
            double end = System.currentTimeMillis();
            System.out.println("耗时"+(end-start)/1000+" s");

            textImage.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TesseractException e) {
            e.printStackTrace();
        }
        return result;
    }
}

 

6.测试识别图片文字

将要识别的图片:

执行结果:

 

这个速度和准确率还是差点意思了。1.6秒,错了2个字。

git代码地址:https://github.com/itxwnet/TesseractChinese

登录后即可回复 登录 | 注册
    
关注编程学问公众号