首先需要下载orc软件,这里使用tesseract-orc软件好了
下载地址:点击下载
下载好了,就安装。
我们可以测试一下,在命令行输入tesseract 会出现以下情况

如果没有出现以下情况,需要手动的配置环境变量,方法如下:将安装目录添加到path中。

由于有的验证码有干扰点和颜色差,这里提供源码,将图片进行处理。

ClearImageHelper.java

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;import javax.imageio.ImageIO;public class ClearImageHelper {public static void main(String[] args) throws IOException {cleanImage(new File("1.jpg"), "2.jpg");}// sfile是带处理的图像// destDir是处理后保存的路径public static void cleanImage(File sfile, String destDir) throws IOException {File destF = new File(destDir);if (!destF.exists()) {destF.mkdirs();}BufferedImage bufferedImage = ImageIO.read(sfile);int h = bufferedImage.getHeight();int w = bufferedImage.getWidth();// 灰度化int[][] gray = new int[w][h];for (int x = 0; x < w; x++) {for (int y = 0; y < h; y++) {int argb = bufferedImage.getRGB(x, y);// 图像加亮int r = (int) (((argb >> 16) & 0xFF) * 1.1 + 30);int g = (int) (((argb >> 8) & 0xFF) * 1.1 + 30);int b = (int) (((argb >> 0) & 0xFF) * 1.1 + 30);if (r >= 255) {r = 255;}if (g >= 255) {g = 255;}if (b >= 255) {b = 255;}gray[x][y] = (int) Math.pow((Math.pow(r, 2.2) * 0.2973 + Math.pow(g, 2.2) * 0.6274 + Math.pow(b, 2.2) * 0.0753), 1 / 2.2);}}// 二值化int threshold = ostu(gray, w, h);BufferedImage binaryBufferedImage = new BufferedImage(w, h, BufferedImage.TYPE_BYTE_BINARY);for (int x = 0; x < w; x++) {for (int y = 0; y < h; y++) {if (gray[x][y] > threshold) {gray[x][y] |= 0x00FFFF;} else {gray[x][y] &= 0xFF0000;}binaryBufferedImage.setRGB(x, y, gray[x][y]);}}// 去除噪点for (int y = 0; y < h; y++) {for (int x = 0; x < w; x++) {int sum = 0;if (isBlack(binaryBufferedImage.getRGB(x, y))) {sum = totalBlack(binaryBufferedImage, x, y);}// 如果非空白点的总数小于1,则认为是噪点,去除该噪点if (sum <= 1) {binaryBufferedImage.setRGB(x, y, 0xffffff);}}}ImageIO.write(binaryBufferedImage, "jpg", new File(destDir));}// 得到该点周围的非空白点public static int totalBlack(BufferedImage binaryBufferedImage, int x, int y) {int sum = 0;for (int i = x - 1; i <= x + 1; i++) {if (i < 0 || i >= binaryBufferedImage.getWidth()) {continue;}for (int j = y - 1; j <= y + 1; j++) {if (j < 0 || j >= binaryBufferedImage.getHeight()) {continue;}try {if (isBlack(binaryBufferedImage.getRGB(i, j))) {sum++;}} catch (Exception e) {continue;}}}return sum;}public static boolean isBlack(int colorInt) {Color color = new Color(colorInt);if (color.getRed() + color.getGreen() + color.getBlue() <= 300) {return true;}return false;}public static boolean isWhite(int colorInt) {Color color = new Color(colorInt);if (color.getRed() + color.getGreen() + color.getBlue() > 300) {return true;}return false;}public static int isBlackOrWhite(int colorInt) {if (getColorBright(colorInt) < 30 || getColorBright(colorInt) > 730) {return 1;}return 0;}public static int getColorBright(int colorInt) {Color color = new Color(colorInt);return color.getRed() + color.getGreen() + color.getBlue();}public static int ostu(int[][] gray, int w, int h) {int[] histData = new int[w * h];// Calculate histogramfor (int x = 0; x < w; x++) {for (int y = 0; y < h; y++) {int red = 0xFF & gray[x][y];histData[red]++;}}// Total number of pixelsint total = w * h;float sum = 0;for (int t = 0; t < 256; t++)sum += t * histData[t];float sumB = 0;int wB = 0;int wF = 0;float varMax = 0;int threshold = 0;for (int t = 0; t < 256; t++) {wB += histData[t]; // Weight Backgroundif (wB == 0)continue;wF = total - wB; // Weight Foregroundif (wF == 0)break;sumB += (float) (t * histData[t]);float mB = sumB / wB; // Mean Backgroundfloat mF = (sum - sumB) / wF; // Mean Foreground// Calculate Between Class Variancefloat varBetween = (float) wB * (float) wF * (mB - mF) * (mB - mF);// Check if new maximum foundif (varBetween > varMax) {varMax = varBetween;threshold = t;}}return threshold;}
}

该算法有待改进,只能处理一部分验证码。运行以上代码后,将会生成2.jpg即修改过后的验证码图片。
我们接下来对2.jpg进行识别。

         Runtime runtime = Runtime.getRuntime();runtime.exec("cmd /c tesseract 2.jpg 1");Thread.sleep(2000);BufferedReader bufferedReader = new BufferedReader(new FileReader("1.txt"));String validate = bufferedReader.readLine();bufferedReader.close();

这样字符串validate就是验证码的文字了。
原理就是Java代理模拟cmd命令,执行了tesseract 2.jpg 1 命令。
tesseract识别2.jpg,并将图片内容输出到1.txt文件中。再将1.txt文件读取到代码中。

Java整合ORC识别验证码相关推荐

  1. java识别验证码_Java使用test4j识别验证码

    Java使用test4j识别验证码 test4j的集成 此处使用了拷入test4j的项目文件集成到自己的项目中去. 1.去test4j官网下载test4j的zip文件(我下载的是3.4.8的版本); ...

  2. 谷歌了java集成开发_Spring整合Kaptcha谷歌验证码工具的开发步骤

    开发步骤: 1.加入依赖 com.google.code.kaptcha kaptcha 2.3 国内镜像无法下载该依赖,需要手动通过jar包在本地仓库安装一个依赖. 安装命令: mvn instal ...

  3. Java识别验证码和图像处理

    阅读本文可能会解决的问题: ① Java识别验证码 ② Tess4J的使用和OCR识别 ③ JavaCV的使用二值化和灰度测试 ④ Java裁剪和缩放图片 ⑤ 如何生成数字&字母验证码 ⑥ . ...

  4. 关于java+selenium识别验证码的问题

    ---------## (关于java+selenium识别验证码的问题) hahahahahahahahahahahahahaha~The first time you write a blog, ...

  5. 验证码识别 java 深度学习_使用深度学习识别验证码注解

    前言 在抓取一些网站的时候难免会遇到一些验证码.想起去年接触过一段时间的验证码识别技术,所以把之前使用的开源的cnn识别再拿出来做个注解.加深理解,也方便以后的使用.希望能对大家有所帮助! 正文 网上 ...

  6. ssh,ssm整合redis存储验证码

    ssh整合redis存储验证码 SSM整合redis存储验证码 思路 **获取验证码部分:** **登录部分** 细节 详细代码 前端 后端 SSH 思路: 测试redis是否连接成功 详细代码 后端 ...

  7. 如何通过 Serverless 轻松识别验证码?

    作者 | 江昱 来源 | Serverless 公众号 前言 Serverless 概念自被提出就倍受关注,尤其是近些年来 Serverless 焕发出了前所未有的活力,各领域的工程师都在试图将 Se ...

  8. python 基于机器学习识别验证码

    1.背景     验证码自动识别在模拟登陆上使用的较为广泛,一直有耳闻好多人在使用机器学习来识别验证码,最近因为刚好接触这方面的知识,所以特定研究了一番.发现网上已有很多基于machine learn ...

  9. python 识别图形验证码_Python图片验证码降噪处理实例!此乃识别验证码神技!...

    图片验证码算是网络数据采集上的一道拦路虎,虽然有诸多公开的ORC接口.云打码平台,一旦大规模应用起来,还是内部写程序进行识别处理比较好. 而自己写代码进行识别的话,又有很多种方案,比如最近火热的神经网 ...

  10. Shell脚本模拟用户行为刷App积分,学习娱乐之用,再加图像数字识别验证码登录

    获取接口信息 逆向apk,可能加密了 Fiddler 4抓包 其他 App或网站的积分规则 网站登录行为中,如果添加验证码的话,很麻烦,这里先跳过. 效果图 为减少用户账号的异常特征,收藏.订阅.评论 ...

最新文章

  1. ASP.NET页面生命周期与应用程序生命周期
  2. 南岸焊接机器人厂_严选原料,机器人焊接,探秘能达到奔驰标准的亿利生产线...
  3. matlab icol,Matlab 图像处理相关函数命令大全
  4. 将您的SQL Server工作负载迁移到PostgreSQL –第2部分
  5. Can not find the tag library descriptor for “http://java.sun.com/jsp/jstl/core“
  6. Ubuntu12.04增加屏幕分辨率选项
  7. 最小Linux系统中如何实现开机自动运行程序(进程)
  8. python拟合曲线_使用python通过点拟合曲线
  9. C# 调用腾讯云的短信发送服务API
  10. ubuntu批量压缩文件夹
  11. Android攻城狮 progressBarprogressDialog
  12. kindle_Kindle颂歌
  13. linux中 #chmod –R 777 * 是什么意思
  14. 【实验室集训大作业】JDBC实现宠物商店
  15. Linux 内核观测技术 eBPF 中文入门指南
  16. chrome插件打包成**.crx文件
  17. 半波整流、全波整流电路#集成运算放大器
  18. set | map | multiset | multimap 快速上手
  19. 如何建设一个视频网站
  20. inshot怎么转gif_inshot怎么用 教你照片视频制作技巧

热门文章

  1. 《开源安全运维平台--OSSIM最佳实践》节日期间当当自营店 五折 优惠活动开始啦!...
  2. layer.open(常用)
  3. 吸引人的软文标题究竟有哪些
  4. 51nod2384 事后诸葛亮
  5. 三国志战略版:魏国新黑科技,程昱春华满宠
  6. 用html做一个漂亮的网站,个人网页,css
  7. python3 print和format函数
  8. 了解CompletableFuture
  9. XP的定时关机命令?
  10. 黑盒测试用例编写八大方法