摘要:[VB.NET] 使用Tesseract進行OCR-以點部落登入時的驗證碼為例
Tesseract是一款open source的OCR引擎,相關資料在網路上很容易就可以找到,在此就不贅述。
在這篇文章中將會以點部落登入時的驗證碼為例,簡述如何在WebBrowser中取得驗證碼並使用Tesseract進行OCR,再將結果填到網頁中,程式執行的流程如下:
- 瀏覽: http://www.dotblogs.com.tw/login.aspx
- 取得驗證碼圖片的網址
- 從網址取得驗證碼圖片
- 使用Tesseract進行OCR
- 將結果填到網頁中
其中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
文章內容僅提供技術分享,如有錯誤還請不吝指教。