tesseract破解验证码,java代码源码
2018-02-09 09:57
831 查看
对于最简单的无干扰背景的验证码,使用tesseract-ocr可以识别,但是带有干扰像素点的验证码,tesseract-ocr识别不出来,可以用机器学习尝试破解,然而短时间可以尝试以下更简单的方法,以下方法,前提是主机上已经安装过tesseract并且配置过环境变量如下
之后可以自己写bat脚本测试一下是否可行,详细用法请自行百度:1.简单的无干扰数字验证码(此时背景为纯白色,无色素点干扰):可以识别
2.带有背景色素点的验证码(并且数字和背景颜色相近,机器很难识别):识别不出来
将彩色图片灰度化处理,变为黑白两色,如下:
此时再调用tesseract-ocr解析所有的验证码,结果如下D6865764855899744149D7464592535518912-52870408944459628951887发现解析成功率已经很高了之后修改指令参数来限制验证码的类型为数字,解析的类型为数字,这样就不会吧0解析为D,还有‘-’这样的多余符号应该是杂点造成的,可以用字符串操作去除掉,所以解析率也有90%以上了。
java代码
自己可以去别的地方下载tesseract和相应语言包,验证码素材可以自己找
推荐一个简单的网站获取验证码http://claim.chinalife-p.com.cn/claimCarFlow/index.jsp
代码中的图片素材我已经上传到百度网盘,可以自行下载https://pan.baidu.com/s/1eSS8McE 密码:i5v3,目录结构如下,src放原始文件,parse中放解析后的黑白图片,text中存放解析后验证码字符串,自己可以采集验证码放到src中:
如果还有问题,可以联系本人QQ:1464393873,注意备注信息哦
之后可以自己写bat脚本测试一下是否可行,详细用法请自行百度:1.简单的无干扰数字验证码(此时背景为纯白色,无色素点干扰):可以识别
2.带有背景色素点的验证码(并且数字和背景颜色相近,机器很难识别):识别不出来
将彩色图片灰度化处理,变为黑白两色,如下:
此时再调用tesseract-ocr解析所有的验证码,结果如下D6865764855899744149D7464592535518912-52870408944459628951887发现解析成功率已经很高了之后修改指令参数来限制验证码的类型为数字,解析的类型为数字,这样就不会吧0解析为D,还有‘-’这样的多余符号应该是杂点造成的,可以用字符串操作去除掉,所以解析率也有90%以上了。
java代码
package com.fsc.captcha; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.color.ColorSpace; import java.awt.image.BufferedImage; import java.awt.image.ColorConvertOp; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import javax.imageio.ImageIO; public class CaptchaParse { /** * @param imagePath 要解析的图片路径(灰度化以后) * @param resultPath 解析后的文本文件路径 * @return */ public static String parse(String imagePath,String resultPath){ try { String language = "-l eng"; Runtime runtime = Runtime.getRuntime(); String command = "tesseract" + " " + imagePath + " " + resultPath.substring(0,resultPath.indexOf(".")) +" "+ language; Process ps = runtime.exec(command); ps.waitFor(); String code = GetFile.getCode(resultPath.substring(0,resultPath.indexOf("."))+".txt"); System.out.println(code); return code; } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } return ""; } public static String parse(String imagePath){ return parse(imagePath,imagePath.substring(0,imagePath.indexOf("."))); } /** * @param image * @param imgFilePath * @function 将彩色图片灰度处理 * @return */ public static void getCaptcha(String image, String imgFilePath) { File file = new File(image); BufferedImage bi = null; try { bi = ImageIO.read(file); bi = grayImage(bi); ImageIO.write(bi, image.substring(image.indexOf(".")+1), new FileOutputStream(imgFilePath)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * @param srcImg * @function 用于将彩色图片灰度处理,返回黑白图片 * @return */ public static BufferedImage grayImage(final BufferedImage srcImg) { int iw = srcImg.getWidth(); int ih = srcImg.getHeight(); Graphics2D srcG = srcImg.createGraphics(); RenderingHints rhs = srcG.getRenderingHints(); ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY); ColorConvertOp theOp = new ColorConvertOp(cs, rhs); BufferedImage dstImg = new BufferedImage(iw, ih,BufferedImage.TYPE_INT_RGB); theOp.filter(srcImg, dstImg); return dstImg; } public static void main(String[] args) { File file = new File("D:\\captcha\\src"); String[] list = file.list(); for(int i=0;i<list.length;i++){ getCaptcha("D:\\captcha\\src\\"+list[i],"D:\\captcha\\parse\\"+list[i].replaceAll(" ", "")); parse("D:\\captcha\\parse\\"+list[i].replaceAll(" ", ""),"D:\\captcha\\text\\"+list[i].replaceAll(" ", "")); } } }
自己可以去别的地方下载tesseract和相应语言包,验证码素材可以自己找
推荐一个简单的网站获取验证码http://claim.chinalife-p.com.cn/claimCarFlow/index.jsp
代码中的图片素材我已经上传到百度网盘,可以自行下载https://pan.baidu.com/s/1eSS8McE 密码:i5v3,目录结构如下,src放原始文件,parse中放解析后的黑白图片,text中存放解析后验证码字符串,自己可以采集验证码放到src中:
如果还有问题,可以联系本人QQ:1464393873,注意备注信息哦
相关文章推荐
- selenium+java破解极验滑动验证码的示例代码
- 利用Velocity自动生成自定义代码_java版_源码下载
- JAVA验证码工具实例代码
- 千千静听 窗口自动粘合,java 代码实现 源码分析
- phoengap源码解析——插件机制,java和js代码互调用详解
- java图片开源框架tesseract调用OCR实现图片文件识别代码下载
- 利用Velocity自动生成自定义代码_java版_源码下载
- 基于JAVA的万年历API调用代码实例源码
- java向文件中追加内容与读写文件内容源码实例代码
- tesseract-ocr破解 验证码
- java验证码代码(转)
- java生成图片验证码实例代码
- 反编译APK 得到JAVA代码和资源文件源码
- Java OCR tesseract 图像智能字符识别技术 Java代码实现
- java登录验证码实现代码
- 自己写的一个代码自动生成工具_java版_源码下载
- 圣思源Java视频36节练习源码分享(自己的190+行代码对比老师的39行代码)
- java验证码生成代码
- java随机动态生成汉字验证码图片的实例代码分享
- 【面向对象课程项目:纸牌】Java实例学习(三):对自己代码的修正与加壳(仍然要对比源码)