• 用imagemagick和tesseract-ocr破解簡單驗證碼

    0
    Chrome Ruby C/C++ 圖像識別 Go 18254 次瀏覽
      Tesseract是Ray Smith于1985到1995年間在惠普布里斯托實驗室開發的一個OCR引擎,曾經在1995 UNLV精確度測試中名列前茅。但1996年后基本停止了開發。2006年,Google邀請Smith加盟,重啟該項目。目前項目的許可證是Apache 2.0。

      該項目目前支持Windows、Linux和Mac OS等主流平臺。但作為一個引擎,它只提供核心功能,沒有界面。


      有興趣參加該項目的同學,可以加入:http://groups.google.com/group/tesseract-dev/,或者與Smith聯系。


    下載工具:imagemagick + tesseract-ocr

     

    Tesseract-ocr據說辨識程度是世界排名第三,可謂神器啊。

    準備工作:

    1.安裝tesseract-ocr

    sudo apt-get install tesseract
    2.安裝imagemagick
    sudo apt-get install imagemagick
    3.安裝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
    b4235ae9-bc2e-3d6c-8f28-af953d214667.jpg
    先試一個簡單的:
    require 'rubygems'
    require 'rtesseract'
    img = RTesseract.new("tmp/test.jpg")
    img.to_s.sub(/\s+$/, "") # => "3R8Z" 

    很成功,但這個太簡單了。一般破解復雜點的驗證碼處理步驟是先用imagemagick灰度化,灰度反轉,提高對比度,二值化等。然后再用ocr去識別。ocr識別黑白圖片效果比較好些。

    這個的驗證碼:q1.jpg

    img = MiniMagick::Image.new("tmp/people.jpg") 
    img.colorspace("GRAY")#灰度化
    image = RTesseract.new(img.path)
    image.to_s.sub(/\s+$/, "") # => "254369" 
    這個還是簡單,再復雜一點的,這個驗證碼:b81f5445-edbc-3cb2-8e6a-31ceb99a93a2.jpg

    有黑色邊框,有背景色,文字稍微扭曲。

    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%以上,扭曲太嚴重的識別率就很低了。有輕微噪點的就得自己寫去噪算法了。。

     

    還有一些驗證碼看起來很變態但是是紙老虎。像當當的w1.jpg。刷新了幾次發現結果在1-20之間,選中一個數暴力破解每次也有1/20正確的概率。

    還有139的:w2.jpg。答案就12種1-4A-Da-d。而且不區分大小寫。選中一個字母每次有1/6的概率命中。

    轉自:http://hooopo.iteye.com/blog/993538

    相似問題

    相關經驗

    相關資訊

    相關文檔

  • sesese色