zoukankan      html  css  js  c++  java
  • Java 验证码识别库 Tess4j 学习

    Java 验证码识别库 Tess4j 学习

    【在用javaJsoup做爬虫爬取数据时遇到了验证码识别的问题(基于maven),找了网上挺多的资料,发现Tess4j可以自动识别验证码,在这里简单记录下学习过程及遇到的一些问题。】

    步骤:

    1. tessreact项目里面的tessdata文件夹提取出来放在某个位置:https://github.com/tesseract-ocr/tesseract
    2. 需要在步骤一的tessdata文件中加入相关语言包训练文件),在这里下载:https://github.com/tesseract-ocr/tessdata 如果是简单的英文数字验证码,下载 eng.traineddata然后放到文件夹里即可,中文的是chi开头的traineddata
    3. 导入相关依赖,maven相关依赖如下:
    <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>3.8.1</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>net.java.dev.jna</groupId>
                <artifactId>jna</artifactId>
                <version>4.2.1</version>
            </dependency>
            <dependency>
                <groupId>net.sourceforge.tess4j</groupId>
                <artifactId>tess4j</artifactId>
                <version>4.1.1</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.sun.jna</groupId>
                        <artifactId>jna</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>

    4,编写相关代码(自测可正常运行):

    package yanZhengMaTest.pikachu;
    
    import java.io.File;
    
    import net.sourceforge.tess4j.Tesseract;
    import net.sourceforge.tess4j.TesseractException;
    
    public class Test {    
        public static void main(String[] args) {
            
            //验证码图片存储地址
            File imageFile = new File("C:\Users\pc\Desktop\1.gif");
            if(!imageFile.exists()){
                System.out.println("图片不存在");;
            }
            Tesseract tessreact = new Tesseract();
            tessreact.setDatapath("F:\Program Files (x86)\Tesseract-OCR\tessdata");
            
            String result;
            try {
                result = "测验结果:" + tessreact.doOCR(imageFile);
                System.out.println(result);
            } catch (TesseractException e) {
                e.printStackTrace();
            }
            
        }
    }

    出现异常及处理

    (本人因为开始的时候没用maven导入依赖,自己去下载了各种网上要的jar包去导入,遇到了一堆问题,最后卡在了Invalid memory access这个异常上,后来通过换成maven项目并解决了异常)

    A.Exception in thread "main" java.lang.Error: Invalid memory access:】

         如果出现类似于 Invalid memory access的异常

    (1). 首先你先确定JAVA代码中:

    tessreact.setDatapath("F:\Program Files (x86)\Tesseract-OCR\tessdata");

    这里的地址要填你步骤一下载的tessdata文件夹地址。

    (2). 如果地址无误,那可能是你tess4j依赖的版本太低,需重新导入依赖,在pom中修改即可。

    B.Exception in thread “main” java.lang.UnsupportedClassVersionError: net/sourceforge/tess4j/Tesseract:】

         发生该异常的原因是JDK版本低于1.7,使用1.7以上即可解决问题。

    C.【出现图片非法异常】:可能是你图片有问题,换张图片试试,下载的图片不要去修改它的后缀,否则也可能报错。

    痛的领悟

    不要直接用java项目自己去导入相关jar包,直接用maven项目去加入依赖包就好,否则可能会出现一堆莫名其妙的异常,个人觉得是因为maven项目依赖包导入时还会导入其他jar包,java项目则需要自己去补增一些jar包,在此建议用maven

    附:

    tess4j相关视频:http://tphangout.com/how-to-use-the-tesseract-api-to-perform-ocr-in-your-java-code/

    Tesseract-orc-setup下载地址(非必要)https://digi.bib.uni-mannheim.de/tesseract/

    Tesseract-orc-setup安装过程(非必要)https://jingyan.baidu.com/article/219f4bf788addfde442d38fe.html

    Tesseract-orc环境配置(非必要)https://www.cnblogs.com/jianqingwang/p/6978724.html

     可识别验证码示例:http://es.bnuz.edu.cn/checkcode.aspx?0.33556625493951997/

  • 相关阅读:
    Linux查看用于终止进程命令
    Linux查看当前正在运行的进程
    Windows 和 Linux 平台下的端口转发工具
    Windows 和 Linux 平台下的端口转发工具
    linux下最简单的端口转发工具
    linux下最简单的端口转发工具
    try与finally块中return的问题
    try与finally块中return的问题
    为啥还要写呢?——北漂18年序言
    JavaScript DOM对象和JQuery对象相互转换
  • 原文地址:https://www.cnblogs.com/zengbojia/p/9401047.html
Copyright © 2011-2022 走看看