使用tesseract-ocr破解网站验证码
http://www.kellyrob99.com/blog/2010/03/14/breaking-weak-captcha-in-slightly-more-than-26-lines-of-groovy-code/
当然,看了之后才知道,原来是调用了三方库tesseract-ocr……
http://code.google.com/p/tesseract-ocr/
尽管如此,本着邓爷爷的“不管白猫黑猫,能抓住老鼠的就是好猫”的原则,趁着假期也开始了“文字识别”的初级研究
HP的tesseract最近被Google支持并开支持英文字母和数字,据说辨识程度是世界排名第三的;更难能可贵的是,提供多国语言包下载(包括中文,精度不咋的倒是真的……),并自带训练工具。
安装完并跑过自带例子之后,首先想到的应用自然是用于验证码分析
按照说明,送入tesseract的图片的质量直接影响识别的效果,因此,简单的预处理是不可或缺的
1.首先灰度化,灰度值=0.3R+0.59G+0.11B:
- for (int y = minY; y < height; y++) {
- for (int x = minX; x < width; x++) {
- int rgb = srcImg.getRGB(x, y);
- Color color = new Color(rgb); // 根据rgb的int值分别取得r,g,b颜色。
- int gray = (int) (0.3 * color.getRed() + 0.59
- * color.getGreen() + 0.11 * color.getBlue());
- Color newColor = new Color(gray, gray, gray);
- srcImg.setRGB(x, y, newColor.getRGB());
- }
- }
结果如图:
2.其次是灰度反转:
- for (int y = minY; y < height; y++) {
- for (int x = minX; x < width; x++) {
- int rgb = buffImg.getRGB(x, y);
- Color color = new Color(rgb); // 根据rgb的int值分别取得r,g,b颜色。
- Color newColor = new Color(255 - color.getRed(), 255 - color
- .getGreen(), 255 - color.getBlue());
- buffImg.setRGB(x, y, newColor.getRGB());
- }
- }
结果如图:
3.再次是二值化,取图片的平均灰度作为阈值,低于该值的全都为0,高于该值的全都为255:
- for (int y = minY; y < height; y++) {
- for (int x = minX; x < width; x++) {
- int rgb = buffImg.getRGB(x, y);
- Color color = new Color(rgb); // 根据rgb的int值分别取得r,g,b颜色。
- int value = 255 - color.getBlue();
- if (value > average) {
- Color newColor = new Color(0, 0, 0);
- buffImg.setRGB(x, y, newColor.getRGB());
- } else {
- Color newColor = new Color(255, 255, 255);
- buffImg.setRGB(x, y, newColor.getRGB());
- }
- }
- }
结果如图:
看看效果还凑合,就省却尺寸调整、中值滤波以及噪点去除等步骤了。
以上完成图片预处理工作;Tesseract没有开放api,纯命令行调用:
- List<String> cmd = new ArrayList<String>(); // 存放命令行参数的数组
- cmd.add(tessPath + "\\tesseract");
- cmd.add("");
- cmd.add(outputFile.getName()); // 输出文件位置
- cmd.add(LANG_OPTION); // 字符类别
- cmd.add("eng"); // 英文,找到tessdata里对应的字典文件。
- ProcessBuilder pb = new ProcessBuilder();
- pb.directory(imageFile.getParentFile());
- cmd.set(1, tempImage.getName()); // 把图片文件位置放在第一个位置
- pb.command(cmd); // 执行命令行
- pb.redirectErrorStream(true); // 通知进程生成器是否合并标准错误和标准输出,把进程错误保存起来。
- Process process = pb.start(); // 开始执行进程
- int w = process.waitFor(); // 当前进程停止,直到process停止执行,返回执行结果.
结果输出表示一切正常
当然,真正要用好tesseract-ocr,还需用到其强大地训练工具,就是后话了……
另外,关于文字识别,除去作为破解验证码的反制手段之外,我们是否也有相关的应用呢?
- 大小: 1.1 KB
- 大小: 1.3 KB
- 大小: 1.3 KB
- 大小: 1.4 KB
使用tesseract-ocr破解网站验证码的更多相关文章
- Keras入门(四)之利用CNN模型轻松破解网站验证码
项目简介 在之前的文章keras入门(三)搭建CNN模型破解网站验证码中,笔者介绍介绍了如何用Keras来搭建CNN模型来破解网站的验证码,其中验证码含有字母和数字. 让我们一起回顾一下那篇文 ...
- keras入门(三)搭建CNN模型破解网站验证码
项目介绍 在文章CNN大战验证码中,我们利用TensorFlow搭建了简单的CNN模型来破解某个网站的验证码.验证码如下: 在本文中,我们将会用Keras来搭建一个稍微复杂的CNN模型来破解以上的 ...
- tesseract ocr训练 pt验证码
识别率有问题A大概率识别为n,因此需要训练,这里讲一下 如何训练 参考 java代码里边直接使用tess4j,是对tesseract的封装,但是如果要训练,还是需要在进行安装tesseract-ocr ...
- 【转】TensorFlow练习20: 使用深度学习破解字符验证码
验证码是根据随机字符生成一幅图片,然后在图片中加入干扰象素,用户必须手动填入,防止有人利用机器人自动批量注册.灌水.发垃圾广告等等 . 验证码的作用是验证用户是真人还是机器人:设计理念是对人友好,对机 ...
- 文字识别还能这样用?通过Python做文字识别到破解图片验证码
前期准备 1. 安装包,直接在终端上输入pip指令即可: # 发送浏览器请求 pip3 install requests # 文字识别 pip3 install pytesseract # 图片处理 ...
- 用imagemagick和tesseract-ocr破解简单验证码
用imagemagick和tesseract-ocr破解简单验证码 Tesseract-ocr据说辨识程度是世界排名第三,可谓神器啊. 准备工作: 1.安装tesseract-ocr sudo apt ...
- Python脚本破解图形验证码(tesserocr和pytesseract)
在学习之前,我们先了解OCR.tesseract.tesserocr.pytesseract和opencv这几个跟图片处理有关的库. OCR(Optical Character Recognition ...
- Tesseract Ocr引擎
Tesseract Ocr引擎 1.Tesseract介绍 tesseract 是一个google支持的开源ocr项目,其项目地址:https://github.com/tesseract-ocr/t ...
- [转帖]web安全:通俗易懂,以实例讲述破解网站的原理及如何进行防护!如何让网站变得更安全。
web安全:通俗易懂,以实例讲述破解网站的原理及如何进行防护!如何让网站变得更安全. https://www.cnblogs.com/1996V/p/7458377.html 感谢原作者写的内容 安全 ...
随机推荐
- java指令备忘
javap 查看class文件用 指令码 助记符 说明 0x00 nop 什么都不做 0x01 aconst_null 将null推送至栈顶 0x02 iconst_m1 将int型-1推送至栈顶 ...
- exception PLS-00215: String length constraints must be in range (1 .. 32767)
exception PLS-00215: String length constraints must be in range (1 .. 32767) CreationTime--2018年8月 ...
- plsql 快捷键配置
plsql 快捷键配置 CreateTime--2018年4月23日17:41:45 Author:Marydon 功能快捷键 预设条目 中文解释 快捷键配置Edit/Undo 撤销 ctrl+z ...
- 〖Linux〗Ubuntu13.10 安装qt开发环境
sudo apt-get install qtcreator libqt4-dev libqt4-dbg libqt4-gui libqt4-sql qt4-dev-tools qt4-doc qt4 ...
- bash: fork: Resource temporarily unavailable
Last login: Wed Jul 26 09:19:11 2017 from ... -bash: fork: Resource temporarily unavailable -bash-3. ...
- rpcbind服务死活启动不了
在配置nfs的时候,想要实现nfs共享文件的权限共享,必须保证uid/gid一致,方可权限的传递! 错误提示 rpcbind dead but pid file exists 解决方案 service ...
- 微信小程序独家秘笈之抽奖大转盘
代码地址如下:http://www.demodashi.com/demo/14209.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...
- 用户研究Q&A(1)
近来,不少同事开始认同用户研究的价值,希望通过接触,理解和研究用户来获取提升产品的有效信息.这绝对是件好事,因为我一直抱持的理念是,研究并不是藏在实验室或者握在少部分人手中的稀罕货,更重要是一种理念和 ...
- POJ 3468 A Simple Problem with Integers 【树状数组】
题目链接:id=3468">http://poj.org/problem?id=3468 题目大意:给出一组数组v[i],有两种操作,一种给出两个数a,b.要求输出v[a]到v[b]之 ...
- Oracle PUP(PRODUCT_USER_PROFILE)配置和使用
近期在翻Oracle SQLPLUS官方文档,在讲SQLPLUS Security章节介绍了PUP这个机制.借此.我来使用下面: PUP(PRODUCT_USER_PROFILE)介绍 PRODU ...