Tesseract - java 实现ocr的具体步骤 -win10系统

1.目标

实现免费的ocr 

2.吐槽

目前网络上太多小白了,都不知道去官网下载的么,百度上大量充斥着付费下载,我真是服了,本来打算偷懒,问了下付费下载需要多少钱,

根据指引,加了QQ,竟然需要我付费10块钱,真实大大的人才!!!

作为开源精神的开发者,这不能忍,花了点时间写下这篇文档,只愿有更多志同道合的同学可以开源学习感兴趣的领域

3.安装Tesseract 

官网地址

https://digi.bib.uni-mannheim.de/

官网里的资源下载库路径

https://digi.bib.uni-mannheim.de/tesseract/

目前我用的版本是 tesseract-ocr-w64-setup-v5.0.0.20190623.exe
直接下载该版本的路径

https://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-w64-setup-v5.0.0.20190623.exe

下载后,是个exe安装文件,傻瓜式一键安装,需要设置下安装路径,尽可能不要使用默认位置

 

在安装文件夹里会生成大量文件

 

 那么这个文件夹就是根目录,

将根目录的路径设置在系统的环境变量的path里 ,这一步很重要,否则java无法调用

 

 

 

 cmd打开指令框,输入

Tesseract -v

出现版本信息表示安装成功

 

 4.添加训练数据

在这个 tessdata 文件夹里,添加需要的训练数据,默认只有eng的,即英文和数字 的 训练数据  ,如果需要识别中文 ,需要去git仓库下载

仓库地址有几个,都差不多,但是以后有可能被删除

https://gitcode.net/mirrors/tesseract-ocr/tessdata/-/tree/master
https://github.com/tesseract-ocr/tessdata_best
https://github.com/tesseract-ocr/tessdata

找到  chi_sim.traineddata  这个文件下载

 

 

 将这个包放入   tessdata 文件夹里  即可

注意,这个包是官方开源的中文训练数据,准确率不高,大概70%左右,需要对不同的场景重新训练数据集,生成自己的traineddata文件后扔入tessdata文件夹里使用,训练自己的数据集再下一篇随笔讲解

5.java 使用

maven引入依赖包

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

使用的写法很简单,指定图片路径即可

  public static String readStr(File file, String path) throws TesseractException {
        if (null == file) file = new File(path);
        Tesseract instance = new Tesseract();
     //设置 tessdata 文件夹 的本地路径 instance.setDatapath(
"E:\\plug\\tesseract-ocr\\setup\\tessdata");
     //设置需要使用的训练集,不设置则默认为eng instance.setLanguage(
"chi_sim"); return instance.doOCR(file); }

我简单封装的工具类

import lombok.Data;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;

import java.io.File;

@Data
public class OCRUtil {

    /**
     * ocr读取文字
     */
    public static String readStr(File file) throws TesseractException {
        return readStr(file, null);
    }

    public static String readStr(String path) throws TesseractException {
        return readStr(null, path);
    }

    public static String readStr(File file, String path) throws TesseractException {
        if (null == file) file = new File(path);
        Tesseract instance = new Tesseract();
        instance.setDatapath("E:\\plug\\tesseract-ocr\\setup\\tessdata");
        instance.setLanguage("chi_sim");
        return instance.doOCR(file);
    }

    public static void main(String[] args) throws TesseractException {
//        System.out.println(OCRUtil.readStr("C:\\Users\\cenxi\\Downloads\\m2\\m2.png"));
//        System.out.println(OCRUtil.readStr("C:\\Users\\cenxi\\Downloads\\meid.jpg"));
        System.out.println(OCRUtil.readStr("C:\\Users\\cenxi\\Downloads\\orc1.jpg"));
//        System.out.println(OCRUtil.readStr("C:\\Users\\cenxi\\Downloads\\orc1.png"));
    }
}
View Code

6.测试

 

 

 

 

 

 

 

 

  

中文的准确率有待提高

 

手写字体需要自己训练,官网没有提供

 

posted @ 2022-09-09 10:43  岑惜  阅读(2589)  评论(0编辑  收藏  举报