[VB.NET] 使用Tesseract進行OCR-以點部落登入時的驗證碼為例

摘要:[VB.NET] 使用Tesseract進行OCR-以點部落登入時的驗證碼為例

Tesseract是一款open source的OCR引擎,相關資料在網路上很容易就可以找到,在此就不贅述。

在這篇文章中將會以點部落登入時的驗證碼為例,簡述如何在WebBrowser中取得驗證碼並使用Tesseract進行OCR,再將結果填到網頁中,程式執行的流程如下:

  1. 瀏覽: http://www.dotblogs.com.tw/login.aspx
  2. 取得驗證碼圖片的網址
  3. 從網址取得驗證碼圖片
  4. 使用Tesseract進行OCR
  5. 將結果填到網頁中

其中OCR的程式碼如下:

Function TesseractOCR(img As Bitmap) As String
    Try
        Dim ocr As New tessnet2.Tesseract
        ocr.SetVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
        ocr.Init(".\tessdata", "eng", False)
        Dim result As List(Of tessnet2.Word) = ocr.DoOCR(img, Rectangle.Empty)
        Dim str As String = ""
        For i As Integer = 0 To result.Count - 1
            str &= result(i).Text
        Next
        Return str
    Catch ex As Exception
        Throw ex
    End Try
    Return String.Empty
End Function

以及從網址取得圖片的程式碼:

Function GetImageFromURL(url As String) As Image
    Try
        Dim request As Net.WebRequest = Net.WebRequest.Create(url)
        Dim response As Net.WebResponse = request.GetResponse()
        Dim stream As IO.Stream = response.GetResponseStream()
        Dim img As New Bitmap(stream)
        Return img
    Catch ex As Exception
        Throw ex
    End Try
    Return Nothing
End Function

執行結果如圖所示,按下Refresh可以讓網頁重新整理

 

原本嘗試在OCR之前對圖片二值化,但是發現效果並沒有比較好,也懶得針對此例的驗證碼圖片進行其他處理,所以就直接用原圖來OCR,準確率大約30%~40%左右。

專案資料夾內有tessnet2_32.dll跟tessnet2_64.dll,但是只有將tessnet2_64.dll加入參考(因為我的作業系統是64位元的),假如您使用32位元的系統,請自行將tessnet2_32.dll加入參考並移除tessnet2_64,否則會出現下圖的錯誤。


專案下載(VB 2010): [VB.NET] 使用Tesseract進行OCR.rar

參考網址: 
http://www.pixel-technology.com/freeware/tessnet2/
http://stackoverflow.com/questions/4071025/load-an-image-from-a-url-into-a-picturebox

文章內容僅提供技術分享,如有錯誤還請不吝指教。