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

         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 依赖

 1  <dependencies>
 2
 3       <dependency>
 4         <groupId>net.java.dev.jna</groupId>
 5         <artifactId>jna</artifactId>
 6         <version>4.2.1</version>
 7     </dependency>
 8
 9       <dependency>
10         <groupId>net.sourceforge.tess4j</groupId>
11         <artifactId>tess4j</artifactId>
12         <version>2.0.1</version>
13         <exclusions>
14             <exclusion>
15                 <groupId>com.sun.jna</groupId>
16                 <artifactId>jna</artifactId>
17             </exclusion>
18         </exclusions>
19     </dependency>
20
21   </dependencies>

3,测试代码

 1 package com.sinosoft.ocr;
 2
 3 import java.awt.image.BufferedImage;
 4 import java.io.File;
 5 import java.io.FileInputStream;
 6 import java.io.IOException;
 7 import java.io.InputStream;
 8
 9 import javax.imageio.ImageIO;
10
11 import net.sourceforge.tess4j.ITesseract;
12 import net.sourceforge.tess4j.Tesseract;
13 import net.sourceforge.tess4j.TesseractException;
14 import net.sourceforge.tess4j.util.ImageHelper;
15
16 public class OcrTest {
17
18      public static void main(String[] args) {
19             File imageFile = new File("E:\\valimg\\fx\\fx.tif");
20             ITesseract instance = new Tesseract();  // JNA Interface Mapping
21
22             try {
23                 //读取一个文件夹下的所有图片并验证
24                 /*    String[] filelist = imageFile.list();
25                 for (int i = 0; i < filelist.length; i++) {
26                         File readfile = new File("E:\\valimg" + "\\" + filelist[i]);
27                         if (!readfile.isDirectory()) {
28                                 System.out.println("path=" + readfile.getPath());
29                                 System.out.println("absolutepath="
30                                                 + readfile.getAbsolutePath());
31                                 System.out.println("name=" + readfile.getName());
32
33                                 String result = instance.doOCR(readfile);
34                                 //String result = instance.doOCR(change(readfile));
35                                 System.err.println(readfile.getName() +" result:"+  result);
36                      }
37                 }*/
38                  instance.setLanguage("chi_sim"); //加载语言包
39                  String result = instance.doOCR(imageFile);
40
41                  System.err.println(imageFile.getName() +" result:"+  result);
42
43             } catch (TesseractException e) {
44                 System.err.println(e.getMessage());
45             }
46      }
47
48      public static BufferedImage change(File file){
49
50             // 读取图片字节数组
51              BufferedImage textImage = null;
52             try {
53                  InputStream in = new FileInputStream(file);
54                  BufferedImage image = ImageIO.read(in);
55                  textImage = ImageHelper.convertImageToGrayscale(ImageHelper.getSubImage(image, 0, 0, image.getWidth(), image.getHeight()));  //对图片进行处理
56                  textImage = ImageHelper.getScaledInstance(image, image.getWidth() * 5, image.getHeight() * 5);  //将图片扩大5倍
57
58             } catch (IOException e) {
59                 e.printStackTrace();
60             }
61
62             return textImage;
63      }
64 }

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

转载于:https://www.cnblogs.com/cmyxn/p/6993422.html

ocr智能图文识别 tess4j 图文,验证码识别相关推荐

  1. 图文识别(一):验证码识别---中、英文、数字混合的单行文字识别等

    最近有位大神分享了一个验证码库,试用一下发现非常实用,特做个分享记录. Github地址:GitHub - sml2h3/ddddocr: 带带弟弟 通用验证码识别OCR pypi版 Pip地址:dd ...

  2. java tess4j mave_Java 验证码识别库 Tess4j 学习

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

  3. C#.NET验证码智能识别学习笔记---01C#.NET验证码识别介绍

    技术qq交流群:JavaDream:251572072  教程下载,在线交流:it.yunsit.cn 1.大家知道用asp.net做网站的话,验证码是存在于服务器端的session中的,服务器是知道 ...

  4. python验证码识别库_Python验证码识别

    注意:若使用云服务器 (Windows Server版) 遇到闪退,请按照步骤:我的电脑--属性--管理--添加角色和功能--勾选桌面体验,点击安装,安装之后重启即可. 2020/06/01编外: 想 ...

  5. 点选识别DLL/滑块识别DLL/通用验证码识别DLL/图标点选/本地识别DLL

    背景 验证码识别一直都是一个重要的话题,近日有一些公司询问 本地DLL验证码识别定制的事,可以联系QQ:[167231471]定制本地离线DLL验证码识别.另外给大家普及一下通用验证码识别和滑块缺口检 ...

  6. python调用百度识别文字接口_python调用百度通用文字识别接口进行验证码识别

    官方文档入口 https://cloud.baidu.com/doc/OCR/OCR-Python-SDK.html#.E7.AE.80.E4.BB.8B 安装 pip3 install baidu- ...

  7. python 中文识别 不用tesseract_Python——验证码识别 Pillow + tesseract-ocr

    简介 图片验证码识别的可以分为几个步骤,一般用 Pillow 库或 OpenCV 来实现,这几个过程是: 灰度处理&二值化 降噪 字符分割 标准化 识别 灰度化:在RGB模型中,如果R=G=B ...

  8. 中文验证码识别 java_opencv Tesseract 验证码识别 文字识别

    环境搭建 安装Tesseract 下载64位 安装时可以选择语言包一路next 加入path环境变量后,查看是否成功,pycharm需要重新启动,否则找不到 C:\Program Files (x86 ...

  9. 滑块识别,滑块验证码识别平台,验证码识别

    背景 验证码识别一直都是一个重要的话题,近日有一些公司询问  定制本地离线DLL验证码识别.另外给大家普及一下通用验证码识别和滑块缺口检测的解决方案[滑块]返回坐标:点击进入,如果调用量比较大,建议购 ...

最新文章

  1. windows 下mysql的安装于使用(启动、关闭)
  2. 几乎死循环的存储过程
  3. Linux磁盘管理----分区格式化挂载fdisk、mkfs、mount
  4. mysql对数据库的备份和还原
  5. 编程之美-数组分割方法整理
  6. Java IO: FileInputStream
  7. 查询oracle 数据库中回滚段中一个时间点被修改的表数据并还原表中原来数据
  8. c#生成token访问的接口_python测试开发django60.token登录(TokenAuthentication)
  9. BMap:JavaScript API
  10. 2021-08-02 修改表
  11. HDU5926 Mr. Frog’s Game
  12. 大学物理复习笔记:机械振动基础
  13. ug打开服务器文件保存不了,UG编程时突然提示保存不了,你该怎么办,看这里...
  14. 移动硬盘驱动器读到,但不显示盘符
  15. 低代码局中局:是IT革命还是高级外包? | 甲子光年
  16. python shutil删除_python删除文件
  17. 2022年车险攻略:1分钟告诉你什么是车险怎么买?
  18. Android 实现应用桌面角标
  19. python爬取桌面壁纸(初学者),一看就会
  20. 多地力推企业上云,大力发展工业互联网|中机智库

热门文章

  1. 【Live555】live555源码详解(七):GenericMediaServer、RTSPServer、RTSPClient
  2. jsp mysql 图片路径,请教JSP中怎么向MySql中存入和取出图片
  3. esxi 6.x 密码复杂度要求_还在为账号密码多而烦恼?
  4. ios超级签名_ios超级签名何以固若金汤?原因在这里
  5. nginx+lua实现上传文件到OSS
  6. 选课微信小程序开发 java
  7. python二分法求解_Python使用二分法求平方根的简单示例
  8. 微信小程序WebSocket实现聊天对话功能完整源码
  9. 【iOS】中间透明的引导蒙层
  10. iOS基础问答面试题连载-附答案