最近写爬虫采集数据,遇到网站登录需要验证码校验,想了想有两种解决办法

         1,利用htmlunit,将验证码输入到swing中,并弹出一个输入框,手动输入验证码,这种实现方式,如果网站需要登录一次可以使用,如果每个5分钟就让你重新登录,校验验证码,那这法指定很麻烦,我总不能一直在这看着,每五分钟手动输入一次吧

         2,为了避免上一个法子的弊端,就想到有没有可以自动识别验证码,让程序自己验证而不需要人工手动输入,然后从网上找到了解决方案,ocr  -  tesseract,但是网上的博客什么的都是一样的,把别人的博客copy过来,也不管代码到底能不能正常运行,因此写了这篇文章,希望可以帮助正卡在tesseract这的盆友(说的大义凛然)

对tess4j的使用总结

1,tess4j 封装了 tesseract-ocr 的操作

      可以用很简洁的几行代码就实现原本tesseract-ocr 复杂的实现逻辑

      如果你也想了解tesseract-ocr是怎么实现验证码识别的请移步我的另一篇文章

2,网上有很多说发布jar或war包之后需要自己加载dll,这是错误的

  不需要再自己加载dll,tess4j已经自己封装了加载dll的操作

3,使用tess4j需要先安装 tesseract-ocr-setup-3.02.02

4,如果抛Invalid memory access 无效的内存访问异常,导致这个异常的原因是tessdata语言包的位置没有找到

5,下面就是我使用tess4j的一个使用demo

目录结构

tessdata 语言包放在了和src同级的目录

maven 依赖

  <dependencies>

       <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>2.0.1</version>
<exclusions>
<exclusion>
<groupId>com.sun.jna</groupId>
<artifactId>jna</artifactId>
</exclusion>
</exclusions>
</dependency> </dependencies>

3,测试代码

 package com.sinosoft.ocr;

 import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream; import javax.imageio.ImageIO; import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import net.sourceforge.tess4j.util.ImageHelper; public class OcrTest { public static void main(String[] args) {
File imageFile = new File("E:\\valimg\\fx\\fx.tif");
ITesseract instance = new Tesseract(); // JNA Interface Mapping try {
//读取一个文件夹下的所有图片并验证
/* String[] filelist = imageFile.list();
for (int i = 0; i < filelist.length; i++) {
File readfile = new File("E:\\valimg" + "\\" + filelist[i]);
if (!readfile.isDirectory()) {
System.out.println("path=" + readfile.getPath());
System.out.println("absolutepath="
+ readfile.getAbsolutePath());
System.out.println("name=" + readfile.getName()); String result = instance.doOCR(readfile);
//String result = instance.doOCR(change(readfile));
System.err.println(readfile.getName() +" result:"+ result);
}
}*/
instance.setLanguage("chi_sim"); //加载语言包
String result = instance.doOCR(imageFile); System.err.println(imageFile.getName() +" result:"+ result); } catch (TesseractException e) {
System.err.println(e.getMessage());
}
} public static BufferedImage change(File file){ // 读取图片字节数组
BufferedImage textImage = null;
try {
InputStream in = new FileInputStream(file);
BufferedImage image = ImageIO.read(in);
textImage = ImageHelper.convertImageToGrayscale(ImageHelper.getSubImage(image, , , image.getWidth(), image.getHeight())); //对图片进行处理
textImage = ImageHelper.getScaledInstance(image, image.getWidth() * , image.getHeight() * ); //将图片扩大5倍 } catch (IOException e) {
e.printStackTrace();
} return textImage;
}
}

如果是web项目,需要指定  instance.setDatapath("E:\\ocr\\tesseract");  //tessdata 的目录为E:\\ocr\tesseract\tessdata,如果不指定也会抛Invalid memory access 异常

ocr智能图文识别 tess4j 图文,验证码识别 分享及所遇到的问题的更多相关文章

  1. ocr智能图文识别 tess4j 图文,验证码识别

    最近写爬虫采集数据,遇到网站登录需要验证码校验,想了想有两种解决办法 1,利用htmlunit,将验证码输入到swing中,并弹出一个输入框,手动输入验证码,这种实现方式,如果网站需要登录一次可以使用 ...

  2. captcha-killer burp验证码识别插件体验

    0x01 使用背景 在渗透测试和src挖洞碰到验证码不可绕过时,就会需要对存在验证码的登录表单进行爆破,以前一直使用PKav HTTP Fuzzer和伏羲验证码识别来爆破,但是两者都有缺点PKav H ...

  3. 【Selenium-WebDriver实战篇】selenium之使用Tess4J进行验证码图片识别内容

    ==================================================================================================== ...

  4. 零OCR基础6行代码实现C#验证码识别

    这两天因为工作需要,要到某个网站采集信息,一是要模拟登陆,二是要破解验证码,本想用第三方付费打码,但是想想网上免费的代码也挺多的,于是乎准备从网上撸点代码下来,谁知道,撸了好多个都不行,本人以前也没接 ...

  5. OCR智能识别身份信息

    本人研究了两款OCR智能识别的API,下面做详解! 第一款是百度云的OCR识别,填写配置信息,每天有五百次免费的识别次数,适合中小型客户流量可以使用.API文档:http://ai.baidu.com ...

  6. Java 验证码识别库 Tess4j 学习

    Java 验证码识别库 Tess4j 学习 [在用java的Jsoup做爬虫爬取数据时遇到了验证码识别的问题(基于maven),找了网上挺多的资料,发现Tess4j可以自动识别验证码,在这里简单记录下 ...

  7. Java使用Java OCR API进行验证码识别

    Maven坐标: <!-- https://mvnrepository.com/artifact/com.asprise.ocr/java-ocr-api --> <dependen ...

  8. 月薪20K软件测试自动化岗必问面试题:验证码识别与处理

    本文乃Happy老师的得意门生来自java全栈自动化测试4期的小核桃所作.正所谓严师出高徒,笔下有黄金~~让我们一起来征服面试官吧~~ 在做自动化测试的时候,经常会遇到需要输入验证码的地方,有些可以让 ...

  9. windows下简单验证码识别——完美验证码识别系统

    此文已由作者徐迪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 讲到验证码识别,大家第一个可能想到tesseract.诚然,对于OCR而言,tesseract确实很强大,自带 ...

随机推荐

  1. java 集合框架(TreeSet操作,自动对数据进行排序,重写CompareTo方法)

    /*TreeSet * treeSet存入数据后自动调用元素的compareTo(Object obj) 方法,自动对数据进行排序 * 所以输出的数据是经过排序的数据 * 注:compareTo方法返 ...

  2. 尚学堂Java第一课

    今天是北京尚学堂郑州分校开课的第一天,小班面授教学. 我很兴奋,是一个小白对IT大神渴求传道授业解惑的兴奋. 杨老师还是一贯耐心详细的手敲了第一堂课的完整大纲,必须给杨老师赞赞赞!!! 从幽默的制定班 ...

  3. DirectFB学习笔记四

    本篇目的,实现按钮的点击事件捕获,也就是鼠标点击,如果点击在方框范围内,则响应,在方框外,则忽略. 由于鼠标移动和点击都会产生事件,因此,我们可以在鼠标移动的时候记录坐标,在点击时比较坐标是否在方框范 ...

  4. Google Firebase Unity接入的坑

    就说跑demo碰到的坑吧 https://firebase.google.com/docs/unity/setup 这是Firebase Unity的setup指南 大概写写步骤: 1. Fireba ...

  5. 04(2) 基于上下文相关的GMM-HMM声学模型2之参数共享

    1.三音素建模存在的问题 问题一:很多三音素在训练数据中没有出现(尤其跨词三音素) 问题二:在训练数据中出现过的三音素有相当一部分出现的频次较少 因此,三音素模型训练时存在较严重的数据不足问题 2.参 ...

  6. poj2566尺取变形

    Signals of most probably extra-terrestrial origin have been received and digitalized by The Aeronaut ...

  7. ST-2

    1.第一个程序没有覆盖到下表为0的数.第二个程序找到的是x中第一个等于0的数的下标. 2.对于第一个程序:x = [2,3,5], y = 3 对于第二个程序:X = [2,0,6] 3.对于两个程序 ...

  8. URL Scheme与openURL

    URL Schemes URL Schemes是苹果给出的用来跳转到系统应用或者跳转到别人的应用的一种机制.同时还可以在应用之间传数据. 设置一个URL Schemes:选中App工程->Inf ...

  9. [大数据]-Elasticsearch5.3.1+Kibana5.3.1从单机到分布式的安装与使用<1>

    一.Elasticsearch,Kibana简介: Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎.无论在开源还是专有领域, Lucene可以被认为是迄今为止最先 ...

  10. Python基本语法--语句

    # -*- coding: utf-8 -*- #条件语句 ''' if 判断条件: 执行语句…… else: 执行语句…… ''' flag = False name = 'python' if n ...