使用tesseract-ocr破解网站验证码
生活随笔
收集整理的這篇文章主要介紹了
使用tesseract-ocr破解网站验证码
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
首先我得承認,關(guān)注tesseract-ocr, 是沖著下面這篇文章的噱頭去的,26行g(shù)roovy代碼破解網(wǎng)站驗證碼?
http://www.kellyrob99.com/blog/2010/03/14/breaking-weak-captcha-in-slightly-more-than-26-lines-of-groovy-code/?
當然,看了之后才知道,原來是調(diào)用了三方庫tesseract-ocr……?
http://code.google.com/p/tesseract-ocr/?
盡管如此,本著鄧爺爺?shù)摹安还馨棕埡谪?#xff0c;能抓住老鼠的就是好貓”的原則,趁著假期也開始了“文字識別”的初級研究?
HP的tesseract最近被Google支持并開支持英文字母和數(shù)字,據(jù)說辨識程度是世界排名第三的;更難能可貴的是,提供多國語言包下載(包括中文,精度不咋的倒是真的……),并自帶訓練工具。?
安裝完并跑過自帶例子之后,首先想到的應用自然是用于驗證碼分析?
?
按照說明,送入tesseract的圖片的質(zhì)量直接影響識別的效果,因此,簡單的預處理是不可或缺的?
1.首先灰度化,灰度值=0.3R+0.59G+0.11B:?
Java代碼????? 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);?//?根據(jù)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());?? ????}?? }??
結(jié)果如圖:?
?
2.其次是灰度反轉(zhuǎn):?
Java代碼??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);?//?根據(jù)rgb的int值分別取得r,g,b顏色。?? ????????Color?newColor?=?new?Color(255?-?color.getRed(),?255?-?color?? ????????????.getGreen(),?255?-?color.getBlue());?? ????????buffImg.setRGB(x,?y,?newColor.getRGB());?? ????}?? }??
結(jié)果如圖:?
?
3.再次是二值化,取圖片的平均灰度作為閾值,低于該值的全都為0,高于該值的全都為255:?
Java代碼??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);?//?根據(jù)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());?? ????????}?? ????}?? }??
結(jié)果如圖:?
?
看看效果還湊合,就省卻尺寸調(diào)整、中值濾波以及噪點去除等步驟了。?
以上完成圖片預處理工作;Tesseract沒有開放api,純命令行調(diào)用:?
Java代碼??List<String>?cmd?=?new?ArrayList<String>();?//?存放命令行參數(shù)的數(shù)組?? 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);?//?執(zhí)行命令行?? pb.redirectErrorStream(true);?//?通知進程生成器是否合并標準錯誤和標準輸出,把進程錯誤保存起來。?? Process?process?=?pb.start();?//?開始執(zhí)行進程?? ?? int?w?=?process.waitFor();?//?當前進程停止,直到process停止執(zhí)行,返回執(zhí)行結(jié)果.??
結(jié)果輸出表示一切正常?
當然,真正要用好tesseract-ocr,還需用到其強大地訓練工具,就是后話了……?
另外,關(guān)于文字識別,除去作為破解驗證碼的反制手段之外,我們是否也有相關(guān)的應用呢??
http://www.kellyrob99.com/blog/2010/03/14/breaking-weak-captcha-in-slightly-more-than-26-lines-of-groovy-code/?
當然,看了之后才知道,原來是調(diào)用了三方庫tesseract-ocr……?
http://code.google.com/p/tesseract-ocr/?
盡管如此,本著鄧爺爺?shù)摹安还馨棕埡谪?#xff0c;能抓住老鼠的就是好貓”的原則,趁著假期也開始了“文字識別”的初級研究?
HP的tesseract最近被Google支持并開支持英文字母和數(shù)字,據(jù)說辨識程度是世界排名第三的;更難能可貴的是,提供多國語言包下載(包括中文,精度不咋的倒是真的……),并自帶訓練工具。?
安裝完并跑過自帶例子之后,首先想到的應用自然是用于驗證碼分析?
?
按照說明,送入tesseract的圖片的質(zhì)量直接影響識別的效果,因此,簡單的預處理是不可或缺的?
1.首先灰度化,灰度值=0.3R+0.59G+0.11B:?
Java代碼??
結(jié)果如圖:?
?
2.其次是灰度反轉(zhuǎn):?
Java代碼??
結(jié)果如圖:?
?
3.再次是二值化,取圖片的平均灰度作為閾值,低于該值的全都為0,高于該值的全都為255:?
Java代碼??
結(jié)果如圖:?
?
看看效果還湊合,就省卻尺寸調(diào)整、中值濾波以及噪點去除等步驟了。?
以上完成圖片預處理工作;Tesseract沒有開放api,純命令行調(diào)用:?
Java代碼??
結(jié)果輸出表示一切正常?
當然,真正要用好tesseract-ocr,還需用到其強大地訓練工具,就是后話了……?
另外,關(guān)于文字識別,除去作為破解驗證碼的反制手段之外,我們是否也有相關(guān)的應用呢??
- 大小: 1.1 KB
- 大小: 1.3 KB
- 大小: 1.3 KB
- 大小: 1.4 KB
總結(jié)
以上是生活随笔為你收集整理的使用tesseract-ocr破解网站验证码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言字符串压缩显示
- 下一篇: Oracle FGA审计记录的清理步骤