日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用tesseract-ocr破解网站验证码

發(fā)布時間:2023/12/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用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ù)說辨識程度是世界排名第三的;更難能可貴的是,提供多國語言包下載(包括中文,精度不咋的倒是真的……),并自帶訓練工具。?

安裝完并跑過自帶例子之后,首先想到的應(yīng)用自然是用于驗證碼分析?

?

按照說明,送入tesseract的圖片的質(zhì)量直接影響識別的效果,因此,簡單的預(yù)處理是不可或缺的?

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)整、中值濾波以及噪點去除等步驟了。?

    以上完成圖片預(yù)處理工作;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里對應(yīng)的字典文件。??
  • 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)的應(yīng)用呢??

    • 大小: 1.1 KB
    • 大小: 1.3 KB
    • 大小: 1.3 KB
    • 大小: 1.4 KB

    總結(jié)

    以上是生活随笔為你收集整理的使用tesseract-ocr破解网站验证码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。