• 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.测试

     

      

    中文的准确率有待提高

    手写字体需要自己训练,官网没有提供
  • 相关阅读:
    Git
    Qcon2016上海站PPT
    TeamCity
    在cmd界面,怎么样退出Node.js运行环境
    python 2.x与python3.x的区别
    d3.max()与d3.min()
    d3.svg.line() 曲线构造器
    d3.js 之SVG:矢量化图形绘制
    moment.js 时间格式化库
    directive
  • 原文地址:https://www.cnblogs.com/c2g5201314/p/16672000.html
Copyright © 2020-2023  润新知