Java 验证码识别库 Tess4j 学习

【在用java的Jsoup做爬虫爬取数据时遇到了验证码识别的问题(基于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/

Java 验证码识别库 Tess4j 学习的更多相关文章

  1. JAVA验证码识别:基于jTessBoxEditorFX和Tesseract-OCR训练样本

    JAVA验证识别:基于jTessBoxEditorFX和Tesseract-OCR训练样本 工具准备: jTessBoxEditorFX下载:https://github.com/nguyenq/jT ...

  2. Java验证码识别解决方案

    建库,去重,切割,识别. package edu.fzu.ir.test; import java.awt.Color; import java.awt.image.BufferedImage; im ...

  3. Java 验证码识别之多线程打码兔

    验证码识别,爬虫永远的话题~ 用打码兔总体的体验就是单线程速度太慢~ import java.io.IOException; import java.net.MalformedURLException ...

  4. python 验证码识别库pytesseract的使用

    笔者环境 centos7 python3 pytesseract只是tesseract-ocr的一种实现接口.所以要先安装tesseract-ocr(大名鼎鼎的开源的OCR识别引擎). 依赖安装 yu ...

  5. java验证码识别

    首先参考了csdn大佬的文章,但是写的不全ImgUtils类没有给出代码,无法进行了 写不完整就是制造垃圾 不过这个大佬又说这个大佬的文章值得参考于是又查看这篇文章 有案例https://blog.c ...

  6. python中的验证码识别库PyTesser

    PyTesser PyTesser is an Optical Character Recognition module for Python. It takes as input an image ...

  7. python验证码识别

    关于利用python进行验证码识别的一些想法 用python加“验证码”为关键词在baidu里搜一下,可以找到很多关于验证码识别的文章.我大体看了一下,主要方法有几类:一类是通过对图片进行处 理,然后 ...

  8. Python - PIL-pytesseract-tesseract验证码识别

    N天前实现了简单的验证识别,这玩意以前都觉得是高大上的东西,一直没有去研究,这次花了点时间研究了一下,当然只是一些基础的东西,高深的我也不会,分享一下给大家吧. 关于python验证码识别库,网上主要 ...

  9. Python 验证码识别(别干坏事哦...)

    关于python验证码识别库,网上主要介绍的为pytesser及pytesseract,其实pytesser的安装有一点点麻烦,所以这里我不考虑,直接使用后一种库. python验证码识别库安装 要安 ...

随机推荐

  1. 13.56Mhz SI522兼容MFRC522的资料以及对比性能

    (13.56Mhz芯片) SI522是一颗专门替代MFRC522/FM17522,PIN对PIN 完全软硬件兼容.相对于MFRC522,SI522完全替换,不需要做任何更改,同时接受模式下功耗低10m ...

  2. Genymotion集成到Eclipse

    在Eclipse中使用Genymotion Google的ADT中自带的模拟器速度太慢,可以使用Genymotion代替.关于Genymotion的安装方法,可以直接访问官网,需要注册账号,因为创建模 ...

  3. UVA - 1197 (简单并查集计数)

    Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recognized ...

  4. vlc源码分析(五) 流媒体的音视频同步

    vlc播放流媒体时实现音视频同步,简单来说就是发送方发送的RTP包带有时间戳,接收方根据此时间戳不断校正本地时钟,播放音视频时根据本地时钟进行同步播放.首先了解两个概念:stream clock和sy ...

  5. 404 Note Found 队-需求报告

    目录 组队后的团队项目的整体计划安排 项目logo及思维导图 项目logo 思维导图 产品思维导图 产品思维导图-引导 产品思维导图-后端数据处理.存储 产品思维导图-短信识别 产品思维导图-智能分析 ...

  6. System.Reflection 获取描述

    我们需要获取类,属性,方法的描述.这个跟获取枚举的描述一样,需要我们通过反射来做.这还需要我们的利用System.ComponentModel:Description  的属性来完成. 新建一个类:使 ...

  7. ASP.NET Core MVC中的IActionFilter.OnActionExecuted方法执行时,Controller中Action返回的对象是否已经输出到Http Response中

    我们在ASP.NET Core MVC项目中有如下HomeController: using Microsoft.AspNetCore.Mvc; namespace AspNetCoreActionF ...

  8. python 基础 切片 迭代 列表生成式

    对list 进行切片 如列表 L = ['Adam', 'Lisa', 'Bart', 'Paul'] L[0:3] ['Adam', 'Lisa', 'Bart'] L[0:3]表示,从索引0开始取 ...

  9. Spring retry实践

    在开发中,重试是一个经常使用的手段.比如MQ发送消息失败,会采取重试手段,比如工程中使用RPC请求外部服务,可能因为网络波动出现超时而采取重试手段......可以看见重试操作是非常常见的一种处理问题, ...

  10. php合成图片 文字

    代码: public function mergePic(){ $ground = '/Public/merge/beijing.png'; $img = [ 'url'=>'/Public/m ...