用imagemagick和tesseract-ocr破解簡單驗證碼
0
Tesseract是Ray Smith于1985到1995年間在惠普布里斯托實驗室開發的一個OCR引擎,曾經在1995 UNLV精確度測試中名列前茅。但1996年后基本停止了開發。2006年,Google邀請Smith加盟,重啟該項目。目前項目的許可證是Apache 2.0。
下載工具:imagemagick + tesseract-ocr
先試一個簡單的:
該項目目前支持Windows、Linux和Mac OS等主流平臺。但作為一個引擎,它只提供核心功能,沒有界面。
有興趣參加該項目的同學,可以加入:http://groups.google.com/group/tesseract-dev/,或者與Smith聯系。
下載工具:imagemagick + tesseract-ocr
Tesseract-ocr據說辨識程度是世界排名第三,可謂神器啊。
準備工作:
1.安裝tesseract-ocr
sudo apt-get install tesseract2.安裝imagemagick
sudo apt-get install imagemagick3.安裝rmagick
sudo apt-get remove --purge librmagick-ruby-doc librmagick-ruby1.8 sudo apt-get install libmagick9-dev ruby1.8-dev sudo gem install rmagick

先試一個簡單的:
require 'rubygems' require 'rtesseract' img = RTesseract.new("tmp/test.jpg") img.to_s.sub(/\s+$/, "") # => "3R8Z"
很成功,但這個太簡單了。一般破解復雜點的驗證碼處理步驟是先用imagemagick灰度化,灰度反轉,提高對比度,二值化等。然后再用ocr去識別。ocr識別黑白圖片效果比較好些。
這個的驗證碼:
img = MiniMagick::Image.new("tmp/people.jpg") img.colorspace("GRAY")#灰度化 image = RTesseract.new(img.path) image.to_s.sub(/\s+$/, "") # => "254369"這個還是簡單,再復雜一點的,這個驗證碼:

有黑色邊框,有背景色,文字稍微扭曲。
img = MiniMagick::Image.new("tmp/4399.jpg") img.crop("#{img[:width] - 2}x#{img[:height] - 2}+1+1") #去掉邊框(上下左右各1像素) img.colorspace("GRAY") #灰度化 img.monochrome #二值化 image = RTesseract.new(img.path) #ocr識別 image.to_s.sub(/\s+$/, "") #=> "5692"
像上面這樣簡單的識別率幾乎能達到80%以上,扭曲太嚴重的識別率就很低了。有輕微噪點的就得自己寫去噪算法了。。
還有一些驗證碼看起來很變態但是是紙老虎。像當當的。刷新了幾次發現結果在1-20之間,選中一個數暴力破解每次也有1/20正確的概率。
還有139的:。答案就12種1-4A-Da-d。而且不區分大小寫。選中一個字母每次有1/6的概率命中。
轉自:http://hooopo.iteye.com/blog/993538